diff --git a/README.md b/README.md index 62c461be1..d24864585 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The SDK consists of: - [Spot API protocol definition](protos/bosdyn/api/README.md). This reference guide covers the details of the protocol applications used to communicate to Spot. Application developers who wish to use a language other than Python can implement clients that speak the protocol. - [Spot SDK Repository](https://github.com/boston-dynamics/spot-sdk). The GitHub repo where all of the Spot SDK code is hosted. -This is version 4.0.3 of the SDK. Please review the [Release Notes](docs/release_notes.md) to see what has changed. +This is version 4.1.0 of the SDK. Please review the [Release Notes](docs/release_notes.md) to see what has changed. ## Contents diff --git a/VERSION b/VERSION index c4e41f945..ee74734aa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.0.3 +4.1.0 diff --git a/choreography_protos/setup.py b/choreography_protos/setup.py index 1819d9e09..b5ed94da0 100644 --- a/choreography_protos/setup.py +++ b/choreography_protos/setup.py @@ -4,12 +4,13 @@ # is subject to the terms and conditions of the Boston Dynamics Software # Development Kit License (20191101-BDSDK-SL). -import setuptools.command.build_py import distutils.cmd import os +import sys + import pkg_resources import setuptools -import sys +import setuptools.command.build_py try: SDK_VERSION = os.environ['BOSDYN_SDK_VERSION'] @@ -17,6 +18,7 @@ print('Do not run setup.py directly - use wheels.py to build API wheels') raise + class BuildPy(setuptools.command.build_py.build_py, object): """Grabs and overwrites the package directory.""" @@ -56,9 +58,10 @@ def run(self): except ImportError: # Try to grab pathlib2, which should have been grabbed as part of install dependencies. import pathlib2 as pathlib - from grpc_tools import protoc import os + from grpc_tools import protoc + def make_init(directory, do_pkg_extension=False): pkg = pathlib.Path(directory) init_file = pkg.joinpath('__init__.py') @@ -74,11 +77,12 @@ def make_init(directory, do_pkg_extension=False): output_dir = self.build_base make_init(os.path.join(root, output_dir, 'bosdyn'), do_pkg_extension=True) protos_root = os.path.join(root, 'bosdyn') - api_protos_dir =os.path.join(os.path.dirname(root), 'protos') + api_protos_dir = os.path.join(os.path.dirname(root), 'protos') for cwd, dirs, files in os.walk(protos_root): cwd_relative_to_root = cwd[len(root) + 1:] for d in dirs: - make_init(os.path.join(root, output_dir, cwd_relative_to_root, d), do_pkg_extension=True) + make_init(os.path.join(root, output_dir, cwd_relative_to_root, d), + do_pkg_extension=True) for f in files: if not f.endswith('.proto'): @@ -88,7 +92,7 @@ def make_init(directory, do_pkg_extension=False): args = ('garbage', file_relative_to_root, "--python_out=" + output_dir, "--grpc_python_out=" + output_dir, "-I.", "-I" + pkg_resources.resource_filename('grpc_tools', '_proto'), - "-I"+api_protos_dir) + "-I" + api_protos_dir) if self.verbose: print('Building {}'.format(f)) protoc.main(args) @@ -105,6 +109,7 @@ def add_pathlib_version(requirements_list): return requirements_list + ['pathlib2'] return requirements_list + setuptools.setup( name="bosdyn-choreography-protos", version=SDK_VERSION, @@ -125,7 +130,7 @@ def add_pathlib_version(requirements_list): package_dir={}, setup_requires=add_pathlib_version(['grpcio-tools', 'wheel']), classifiers=[ - "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", diff --git a/docs/concepts/README.md b/docs/concepts/README.md index 17d3605e9..103d5cf73 100644 --- a/docs/concepts/README.md +++ b/docs/concepts/README.md @@ -26,14 +26,15 @@ Finally, payloads allow for expansion of services beyond those provided by Spot ## Orbit API -Orbit collects, organizes, and stores data from every mission and teleoperation session executed by a Spot fleet - this information is open to Orbit customers through a programmatic web API called the [Orbit API](about_orbit.md). +Orbit collects, organizes, and stores data from every mission and teleoperation session executed by a Spot fleet - this information is open to Orbit customers through a programmatic web API called the [Orbit API](orbit/orbit_api.md). Similar to the Spot API, client applications can be written in many languages and run on most devices that can establish a network connection to Orbit. ## Contents - [About Spot](about_spot.md) -- [About Orbit (formerly Scout)](about_orbit.md) +- [About Orbit (formerly Scout)](orbit/about_orbit.md) +- [Orbit API](orbit/orbit_api.md) - [Networking](networking.md) - [Base services](base_services.md) - [Geometry and Frames](geometry_and_frames.md) diff --git a/docs/concepts/about_spot.md b/docs/concepts/about_spot.md index 2da23dbfe..242d0ccf2 100644 --- a/docs/concepts/about_spot.md +++ b/docs/concepts/about_spot.md @@ -8,48 +8,35 @@ Development Kit License (20191101-BDSDK-SL). # About Spot - ![Spot anatomy](spotanatomy.png) - - ## Cameras Spot has 5 pairs of stereo cameras that provide black and white images and video. - ## Hips and joints -Spot has 2 actuators in each hip, and one actuator in each knee. The hip joints are referred to as HX and HY for each plane of rotation. This creates the following degrees of freedom and limits on each axis: - - - -* 12 DOFs, 3 per leg -* Hip Joint X-axis (HX): +/- 45 degrees from vertical (45 degrees of internal and external rotation from vertical) -* Hip Joint Y-axis (HY): +/- 91 degrees with 50 degree bias from vertical (flexion/extension) -* Knee: +/- 14-160 degrees from straight (flexion/extension range from 14 to 160 degrees) +Spot has 2 actuators in each hip, and one actuator in each knee. The hip joints are referred to as HX and HY for each plane of rotation. This creates the following degrees of freedom and limits on each axis: +- 12 DOFs, 3 per leg +- Hip Joint X-axis (HX): +/- 45 degrees from vertical (45 degrees of internal and external rotation from vertical) +- Hip Joint Y-axis (HY): +/- 91 degrees with 50 degree bias from vertical (flexion/extension) +- Knee: +/- 14-160 degrees from straight (flexion/extension range from 14 to 160 degrees) ![Spot side view](sideview.png) - ![Spot front view](frontview.png) - Legs are referred to as front or hind and left or right. For example, the front left leg is FL, or the hind left leg is HL. A complete joint reference for one leg looks like this: - - -* fl.hx refers to the front left hip X -* fl.hy refers to the front left hip Y -* fl.kn refers to the front left knee - +- fl.hx refers to the front left hip X +- fl.hy refers to the front left hip Y +- fl.kn refers to the front left knee ![Spot geometry](spotframes.png) The [robot state protobuf message](../../protos/bosdyn/api/robot_state.proto) in the Spot SDK describes data about the robot, including information about joints and legs. The following snippet shows the data returned about the robot state using the [`get_robot_state` example](../../python/examples/get_robot_state/README.md) for hip X joint on the front left leg: - ... joint_states { name: "fl.hx" @@ -68,65 +55,63 @@ The [robot state protobuf message](../../protos/bosdyn/api/robot_state.proto) in } ... - ## Robot specifications ### Dimensions -| Specification | Value | -| ------------- | ------ | -| Robot type | Spot Gamma | -| Length | 1100 mm (43.3 in) | -| Width | 500 mm (19.7 in) | -| Height (standing) | 840 mm (33.1 in) | -| Height | (sitting) 191 mm (7.5 in) | -Net weight | 32.5 kg (71.7 lbs) | -Degrees of freedom | 12 | -Maximum speed | 1.6 m/s | +| Specification | Value | +| ------------------ | ------------------------- | +| Robot type | Spot Gamma | +| Length | 1100 mm (43.3 in) | +| Width | 500 mm (19.7 in) | +| Height (standing) | 840 mm (33.1 in) | +| Height | (sitting) 191 mm (7.5 in) | +| Net weight | 32.5 kg (71.7 lbs) | +| Degrees of freedom | 12 | +| Maximum speed | 1.6 m/s | ### Environment -| Specification | Value | -| ------------- | ------ | -| Ingress protection | IP54 | -| Operating temperature | -20C to 45C | -| Slopes | +/- 30 degrees | -| Stairways | Stair dimensions that meet US building code standards, typically with 7 in. rise for 10-11 in. run | -| Max step height | 300 mm (11.8 in) | -| Lighting | Above 2 lux | +| Specification | Value | +| --------------------- | -------------------------------------------------------------------------------------------------- | +| Ingress protection | IP54 | +| Operating temperature | -20C to 45C | +| Slopes | +/- 30 degrees | +| Stairways | Stair dimensions that meet US building code standards, typically with 7 in. rise for 10-11 in. run | +| Max step height | 300 mm (11.8 in) | +| Lighting | Above 2 lux | ## Power -| Specification | Value | -| ------------- | ------ | -| Battery capacity | 605 Wh | -| Max battery voltage | 58.8V | -| Typical runtime | 90 minutes | -| Standby time | 180 minutes | -| Charger power | 400W | -| Max charge current | 7A | -| Time to charge | 120 minutes | - +| Specification | Value | +| ------------------- | ----------- | +| Battery capacity | 605 Wh | +| Max battery voltage | 58.8V | +| Typical runtime | 90 minutes | +| Standby time | 180 minutes | +| Charger power | 400W | +| Max charge current | 7A | +| Time to charge | 120 minutes | ## Payload -| Specification | Value | -| ------------- | ------ | -| Max weight | 14 kg (30.9 lbs) | -| Max power per port | 150W | -| Payload ports | 2 | +| Specification | Value | +| ------------------ | ---------------- | +| Max weight | 14 kg (30.9 lbs) | +| Max power per port | 150W | +| Payload ports | 2 | ## Sensing -| Specification | Value | -| ------------- | ------ | -| Camera type | Projected stereo | -| Field of view | 360 degrees | -| Operating range | 4 m (13 ft) | +| Specification | Value | +| --------------- | ---------------- | +| Camera type | Projected stereo | +| Field of view | 360 degrees | +| Operating range | 4 m (13 ft) | ## Connectivity -| Specification | Value | -| ------------- | ------ | -| Wifi | 802.11 | -| Ethernet | 1000Base-T | +| Specification | Value | +| ------------- | ---------- | +| Wifi | 802.11 | +| Ethernet | 1000Base-T | diff --git a/docs/concepts/arm/README.md b/docs/concepts/arm/README.md index a1f9fb70d..846b6d18d 100644 --- a/docs/concepts/arm/README.md +++ b/docs/concepts/arm/README.md @@ -8,10 +8,10 @@ Development Kit License (20191101-BDSDK-SL). # Spot Arm and Gripper -Arm and gripper commands are included as of the 2.3.0 release of the SDK. Direct control of the arm and gripper have been added to the synchronized command message, allowing operators to request any combination of mobility, arm, and gripper commands. We have also added new services to support manipulation, door opening, and surface contact. See the below sections for more details. +Arm and gripper commands are included as of the 2.3.0 release of the SDK. Direct control of the arm and gripper have been added to the synchronized command message, allowing operators to request any combination of mobility, arm, and gripper commands. We have also added new services to support manipulation, door opening, and surface contact. See the below sections for more details. ## Contents -* [Arm and Gripper Specification](arm_specification.md) -* [Concepts](arm_concepts.md) -* [Services](arm_services.md) \ No newline at end of file +- [Arm and Gripper Specification](arm_specification.md) +- [Concepts](arm_concepts.md) +- [Services](arm_services.md) diff --git a/docs/concepts/arm/arm_concepts.md b/docs/concepts/arm/arm_concepts.md index ef2d66fb4..c265cc315 100644 --- a/docs/concepts/arm/arm_concepts.md +++ b/docs/concepts/arm/arm_concepts.md @@ -9,7 +9,9 @@ Development Kit License (20191101-BDSDK-SL). # Arm Concepts ## SynchronizedCommand -Arm and gripper commands have been incorporated into the SynchronizedCommand message. This top level request allows you to specify any combination of mobility, arm, and gripper command. By packing the individual commands into a single message, we guarantee that all commands arrive to the robot at the same time. For robots without arms, any arm_command or gripper_command will be ignored. + +Arm and gripper commands have been incorporated into the SynchronizedCommand message. This top level request allows you to specify any combination of mobility, arm, and gripper command. By packing the individual commands into a single message, we guarantee that all commands arrive to the robot at the same time. For robots without arms, any arm_command or gripper_command will be ignored. + ```protobuf message SynchronizedCommand { message Request { @@ -19,19 +21,22 @@ message SynchronizedCommand { } } ``` + The ArmCommand message supports the following commands: -* [Cartesian Moves](#cartesian-moves) Control the end-effector in Cartesian space. - * Specify mixed position and wrench trajectories for the end effector -* [Joint Moves](#joint-moves) Control the joint angles of the arm. -* [Predefined Poses](#predefined-poses) Move the arm to some predefined configurations -* [Arm Velocity](#arm-velocity) Velocity control of the end-effector. -* [Gaze](#gaze) Point the end-effector at a point in the world -* [Drag](#drag) Drag an object held in the gripper -* [Stop](#stop) Stop and hold the arm in place + +- [Cartesian Moves](#cartesian-moves) Control the end-effector in Cartesian space. + - Specify mixed position and wrench trajectories for the end effector +- [Joint Moves](#joint-moves) Control the joint angles of the arm. +- [Predefined Poses](#predefined-poses) Move the arm to some predefined configurations +- [Arm Velocity](#arm-velocity) Velocity control of the end-effector. +- [Gaze](#gaze) Point the end-effector at a point in the world +- [Drag](#drag) Drag an object held in the gripper +- [Stop](#stop) Stop and hold the arm in place ### Requests -If you send a `SynchronizedCommand` with only a subset of the messages filled out, only those commands will be overwritten. For example, consider the following pseudo-code: +If you send a `SynchronizedCommand` with only a subset of the messages filled out, only those commands will be overwritten. For example, consider the following pseudo-code: + ```protobuf Time t = 0 message SynchronizedCommand { @@ -55,14 +60,15 @@ After the robot receives the second request at time `t = 2`, it will continue ex Similarly, if you sent a partially filled out `SynchronizedCommand` after sending a `FullBodyCommand`, the empty `SynchronizedCommand` requests will be auto filled with `safe_stop` requests. ### Feedback -With the introduction of `ArmCommand` and `GripperCommand` requests inside of the `SynchronizedCommand`, we have also modified feedback to return three messages, one feedback message for each request respectively. - +With the introduction of `ArmCommand` and `GripperCommand` requests inside of the `SynchronizedCommand`, we have also modified feedback to return three messages, one feedback message for each request respectively. ## ArmCommand Requests + There are 7 different commands listed below that fall under the ArmCommand banner. The arm has 6 joints (+ a gripper), and can be controlled by specifying the joint angles directly, or by specifying a desired position and orientation (called a pose) where the hand should be. Joint angles are specified in radians, and Cartesian poses are specified with a 3D position in meters, and orientation is expressed with unit quaternions. ### Cartesian Moves + When specifying a pose for the hand to move to, the user is able to specify 2 frames, and then a transform between those 2 frames. This fully defines the position and orientation the robot will move its hand to. The first frame is the "root" frame, which is the frame that the hand moves with respect to. Common choices for this frame are the "odom", "vision" and "flat_body" frames. The second frame is a "tool" frame. If trying to grasp something or just move the arm around, this can often be left unset, and this will default to the [hand frame](#hand-frame). However, if a pointing device or sensor is attached to the end effector of the arm, setting the tool frame to be a transform to the point of interest can allow the user to directly move the sensor to a desired pose. @@ -77,67 +83,88 @@ root_tform_task: {position: {x: 0 y: 0 z: 0} rotation: {w: 1 x: 0 y: 0 z: 0}} Note that users can also send sequences of poses with times, specify max velocity and acceleration, and add other options as well. See arm_command.proto for more details -The Cartesian move request also allows you to specify a force/torque trajectory for the tool. For each axis in the task frame, you select if an axis is set to position mode (input read desired from SE3Trajectory) or to force (input read from WrenchTrajectory). This supports hybrid control of the arm where users can specify, for example, Z to be in force control with X and Y in position control. +The Cartesian move request also allows you to specify a force/torque trajectory for the tool. For each axis in the task frame, you select if an axis is set to position mode (input read desired from SE3Trajectory) or to force (input read from WrenchTrajectory). This supports hybrid control of the arm where users can specify, for example, Z to be in force control with X and Y in position control. See the following examples for requesting ArmCartesianCommands: [**Arm and Mobility Command**](../../../python/examples/arm_and_mobility_command/README.md) [**Arm Force Control**](../../../python/examples/arm_force_control/README.md) [**Simple**](../../../python/examples/arm_simple/README.md) [**Trajectory**](../../../python/examples/arm_trajectory/README.md) + ### Joint Moves + Users can specify a set of joint angles they want the arm to move to. Users can optionally set a maximum velocity and acceleration that each joint is allowed to travel at, and/or specify full trajectories with times that they want the robot to reach those joint angles. Joint moves can be especially useful when moving the arm to hard-to-reach places, or trying to make the arm wave through a set of predefined poses. -See the [**Joint Move**](../../../python/examples/arm_joint_move/README.md) example for requesting ArmJointMoveCommands. +See the [**Joint Move**](../../../python/examples/arm_joint_move/README.md) example for requesting ArmJointMoveCommands. + ### Predefined Poses + Users can command the arm to move to the following poses: Stow (arm tucked away, ready to walk) Carry (useful for carrying an object somewhere) Ready (arm out in front, ready to manipulate) -The predefined stow pose will refuse to stow if the arm is holding something. You can still issue joint move commands to a stow configuration if desired, but be aware that no collision avoidance system exists. Contact between the item and the world or the item and the robot may occur during arm motion. +The predefined stow pose will refuse to stow if the arm is holding something. You can still issue joint move commands to a stow configuration if desired, but be aware that no collision avoidance system exists. Contact between the item and the world or the item and the robot may occur during arm motion. -See the [**Stow/Unstow**](../../../python/examples/arm_stow_unstow/README.md) example for requesting NamedArmPositions. +See the [**Stow/Unstow**](../../../python/examples/arm_stow_unstow/README.md) example for requesting NamedArmPositions. + +### Arm Velocity -### Arm Velocity When controlling the arm with a joystick, because of latency, it can often be better to send velocity commands rather than position commands. Users can specify the velocity in a cylindrical frame around the body, or with their own specified frame. Both linear and angular velocity can be specified. + ### Gaze -Sometimes it is useful to have the arm continuously look at something while moving between positions. The user can specify both a position / trajectory of the target and a desired trajectory of the camera. If a different camera is attached to the end effector, `wrist_tform_tool` can be used to specify the x-axis of the camera, which is the direction we look at. Note that some of the desired trajectory's orientation will be ignored, since we will constrain the x-axis of the camera to look at the target at all times. -See the [**Gaze**](../../../python/examples/arm_gaze/README.md) example for requesting GazeCommands: +Sometimes it is useful to have the arm continuously look at something while moving between positions. The user can specify both a position / trajectory of the target and a desired trajectory of the camera. If a different camera is attached to the end effector, `wrist_tform_tool` can be used to specify the x-axis of the camera, which is the direction we look at. Note that some of the desired trajectory's orientation will be ignored, since we will constrain the x-axis of the camera to look at the target at all times. + +See the [**Gaze**](../../../python/examples/arm_gaze/README.md) example for requesting GazeCommands: + ### Stop + When something is going wrong, sending this command will bring the arm to a stop. It will also apply minimal forces to the world. For example, if the arm is in the middle of opening a heavy door and a stop command is sent, the arm will comply and let the door close. + ### Drag + Once the gripper is holding something, calling this command will put the arm into a compliant state that will let the robot pull a heavy object around. Drag will generally try to keep the object in front of the body for maximum pulling force. By sending the appropriate locomotion commands to move the body in a backwards direction, the robot can move heavy things around in the world. + ## Mobility Request + ### FollowArmCommand -The robot's base will move in response to the hand's position, allowing the arm to reach beyond its current workspace. If the hand is requested to move forward, then the base will begin walking forward. Our chalk drawing example takes advantage of this capability, where the task is the execution of a drawing with the hand, but the entire robot is recruited to accomplish the task. + +The robot's base will move in response to the hand's position, allowing the arm to reach beyond its current workspace. If the hand is requested to move forward, then the base will begin walking forward. Our chalk drawing example takes advantage of this capability, where the task is the execution of a drawing with the hand, but the entire robot is recruited to accomplish the task. See the following examples for requesting FollowArmCommands: [**GCode**](../../../python/examples/arm_gcode/README.md) [**Arm With Body Follow**](../../../python/examples/arm_with_body_follow/README.md) + ## Hand frame + The hand frame is used by many of the ArmCommand requests available in the API. The hand frame has its origin slightly in front of the gripper's palm plate and is aligned with the parent link's (wrist) orientation. The position of the hand frame's origin relative to the parent wrist frame is: x = 0.19557 m y = 0 m -z = 0 m +z = 0 m The rotation between the hand frame and the wrist is the identity matrix. When specifying trajectories using default values, the target position of the trajectory is the origin of this hand frame. Hand Frame drawing -## Collision avoidance -The Arm has no proximity awareness of its own, so maintaining safe distance is essential. If obstacles or people are in the path of operation, the Arm has no collision avoidance capability to prevent contact. Safe Arm operation depends on the Operator and/or safety observers maintaining situational awareness and halting operations if the Arm is at risk of contacting objects or people. +## Collision avoidance + +The Arm has no proximity awareness of its own, so maintaining safe distance is essential. If obstacles or people are in the path of operation, the Arm has no collision avoidance capability to prevent contact. Safe Arm operation depends on the Operator and/or safety observers maintaining situational awareness and halting operations if the Arm is at risk of contacting objects or people. **WARNING**: The robot Arm does not have any obstacle avoidance capability. -Even if the robot's onboard cameras can see an obstacle, the Arm cannot avoid it without the Operator's intervention. In tight spaces, it is possible for the gripper head to inadvertently collide with something in the world. When operating around sensitive, fragile, or other objects that should not be contacted, extra care should be taken to avoid collisions with the Arm. +Even if the robot's onboard cameras can see an obstacle, the Arm cannot avoid it without the Operator's intervention. In tight spaces, it is possible for the gripper head to inadvertently collide with something in the world. When operating around sensitive, fragile, or other objects that should not be contacted, extra care should be taken to avoid collisions with the Arm. + +Note: The Arm does have the ability to avoid colliding with itself, the robot's body, and any properly configured payloads attached to the body. -Note: The Arm does have the ability to avoid colliding with itself, the robot's body, and any properly configured payloads attached to the body. ## Body force limiter + In order to prevent large forces from being applied to the body when the Arm collides with something in the world, Arm torques are automatically limited to protect the body from being disturbed. + ## Safety notes -* Arm torque limitations will not prevent damage to the environment and should NOT be used as a safety feature. These limitations are designed to reduce the likelihood that the robot will fall over if the Arm collides with some obstacle. -* If the robot walks into an object with the Arm outstretched that object can be damaged. -* If attempting to lift and carry an object, the force limiter may prevent the arm from lifting the object if it is too heavy. The force limiter can be disabled in the Arm menu. - * Care should be taken when disabling the force limiter. If the Arm contacts something in the world, it may apply high forces to the world and the robot body. This can potentially cause damage to the environment and/or the robot or the Arm, and make the robot inoperable. \ No newline at end of file + +- Arm torque limitations will not prevent damage to the environment and should NOT be used as a safety feature. These limitations are designed to reduce the likelihood that the robot will fall over if the Arm collides with some obstacle. +- If the robot walks into an object with the Arm outstretched that object can be damaged. +- If attempting to lift and carry an object, the force limiter may prevent the arm from lifting the object if it is too heavy. The force limiter can be disabled in the Arm menu. + - Care should be taken when disabling the force limiter. If the Arm contacts something in the world, it may apply high forces to the world and the robot body. This can potentially cause damage to the environment and/or the robot or the Arm, and make the robot inoperable. diff --git a/docs/concepts/arm/arm_services.md b/docs/concepts/arm/arm_services.md index d0f0cd708..060bce531 100644 --- a/docs/concepts/arm/arm_services.md +++ b/docs/concepts/arm/arm_services.md @@ -9,13 +9,15 @@ Development Kit License (20191101-BDSDK-SL). # Arm Services ## Manipulation Service -This API provides high-level control for walking to and picking up items in the world. The service walks the robot up to the object, not on top of it. The idea being that you want to interact or manipulate the object. For specifying grasps, there are parameters available for -* Specifying the depth of the grasp - * Item pressed tightly against the palm of the gripper or squeezed with just the tip of the finger. -* Constraints about the orientation of the grasp - * "Only grasp from this direction" or "only do top down grasp" -* How much the robot is allowed to move the grasp -* Which camera source produced the image (for correcting calibration errors) + +This API provides high-level control for walking to and picking up items in the world. The service walks the robot up to the object, not on top of it. The idea being that you want to interact or manipulate the object. For specifying grasps, there are parameters available for + +- Specifying the depth of the grasp + - Item pressed tightly against the palm of the gripper or squeezed with just the tip of the finger. +- Constraints about the orientation of the grasp + - "Only grasp from this direction" or "only do top down grasp" +- How much the robot is allowed to move the grasp +- Which camera source produced the image (for correcting calibration errors) See the following examples for using this service: @@ -26,7 +28,8 @@ Commands the robot to walk towards an object in preparation to grasp it. The exa Shows how to autonomously grasp an object based on the object's image coordinates in pixel space. It opens an image view and lets a user select an object by clicking on the image. ## ArmSurfaceContact Service -Control the end-effector while pushing on a surface. This mode is useful for drawing, wiping, and other similar behaviors where high accuracy position moves are required while pushing down with some force. This service is similar to the `ArmCartesianCommand` message available in the `RobotCommand` service, but is specialized for this type of task and has higher position accuracy. + +Control the end-effector while pushing on a surface. This mode is useful for drawing, wiping, and other similar behaviors where high accuracy position moves are required while pushing down with some force. This service is similar to the `ArmCartesianCommand` message available in the `RobotCommand` service, but is specialized for this type of task and has higher position accuracy. See the following examples for using this service: @@ -37,10 +40,12 @@ Requests an end effector trajectory move while applying some force to the ground A [GCODE](https://en.wikipedia.org/wiki/G-code) interpreter that can be used to draw with sidewalk chalk. ## Door Service -The door service is a framework for opening doors. We support three command types: -* **AutoGrasp**: This message requires users to specify a location to search for a door handle along with and some door parameters. Spot autonomously grabs the handle, opens the door, and walks through. -* **Warmstart**: In Warmstart, the assumption is the robot is already grasping the door handle. The robot will skip the grasp stage of auto, and immediately begin opening the door and then traverses through the doorway. -* **AutoPush**: Used for doors that can be opened via a push without requiring a grasp. This includes pushbars, crashbars, and doors without a latching mechanism. The robot will point the hand down and push the door open with its wrist based on a push point supplied over the API. + +The door service is a framework for opening doors. We support three command types: + +- **AutoGrasp**: This message requires users to specify a location to search for a door handle along with and some door parameters. Spot autonomously grabs the handle, opens the door, and walks through. +- **Warmstart**: In Warmstart, the assumption is the robot is already grasping the door handle. The robot will skip the grasp stage of auto, and immediately begin opening the door and then traverses through the doorway. +- **AutoPush**: Used for doors that can be opened via a push without requiring a grasp. This includes pushbars, crashbars, and doors without a latching mechanism. The robot will point the hand down and push the door open with its wrist based on a push point supplied over the API. See the following example for using this service: @@ -49,10 +54,10 @@ This examples uses both the `ManipulationAPIService` and the `DoorService` to ha ## Inverse Kinematics Service -The inverse kinmatics (IK) service allows users to request robot configurations that satisfy a given set of stance, tool, and task specifications: +The inverse kinematics (IK) service allows users to request robot configurations that satisfy a given set of stance, tool, and task specifications: - **Stance Specifications** - - **Fixed Stance**: A valid solution must place the feet at the specfied positions, or at their current positions if unspecified. + - **Fixed Stance**: A valid solution must place the feet at the specified positions, or at their current positions if unspecified. - **On Ground Plane Stance**: A valid solution must place the feet on the specified ground plane, or on the robots current estimated ground plane if unspecified. - **Tool Specifications** - **Wrist-Mounted Tool**: The tool frame is fixed at a specified pose relative to the final arm link. If that pose is unspecified, the tool frame defaults to the [hand frame](./arm_concepts.md#hand-frame). @@ -66,9 +71,10 @@ The service responds with a robot configuration that meets those specifications The IK service does not cause the robot to take any actions, but the information it returns can be used to populate [robot commands](../robot_services.md#robot-command). See the following [examples](../../../python/examples/inverse_kinematics/README.md) for more on how to use the service. ### Frames + Along with the [usual frames](../geometry_and_frames.md#frames-in-the-spot-robot-world), the IK service API refers to several additional frames: + - **root frame**: The frame relative to which the problem is defined. Must be either "odom" or "vision". - **scene frame**: An optional frame at a user-specified pose relative to the root frame. Body and foot related quantities, as well as the task frame are expressed relative to this frame. Identity by default. - **task frame**: An optional frame at a user-specified pose relative to the scene fame. Task specifications are expressed relative to this frame. Identity by default. - **ground frame**: An optional frame at a user-specified pose relative to the scene frame. For an on-ground-plane stance, the feet must lie on the XY-plane of this frame. Defaults to the robot's current estimated ground plane. - diff --git a/docs/concepts/arm/arm_specification.md b/docs/concepts/arm/arm_specification.md index 2f9aa7942..5a8aa3016 100644 --- a/docs/concepts/arm/arm_specification.md +++ b/docs/concepts/arm/arm_specification.md @@ -9,6 +9,7 @@ Development Kit License (20191101-BDSDK-SL). # Arm and gripper specifications ## Joint ranges of motion and link lengths + ![](images/arm-diagrams-03.png) ![](images/arm-diagrams-02.png) @@ -16,34 +17,39 @@ Development Kit License (20191101-BDSDK-SL). Link lengths are in mm. ## Arm specifications -- **Degrees of freedom**: 6 + gripper -- **Length at full extension**: 984 mm -- **Max. reach height on robot**: 1800 mm -- **Mass/weight, including gripper**: 8 kg -- **Max. endpoint speed**: 10 m/s -- **Lift capacity\***: Up to 11 kg -- **Continuous lift capacity at 0.5 m extension\***: 5 kg -- **Drag capacity\* (on carpet)**: Up to 25 kg -- **Operating temp**: -20 C to 45 C -- **Ingress protection**:  Water and dust resistant - -\* At 22 C.  + +- **Degrees of freedom**: 6 + gripper +- **Length at full extension**: 984 mm +- **Max. reach height on robot**: 1800 mm +- **Mass/weight, including gripper**: 8 kg +- **Max. endpoint speed**: 10 m/s +- **Lift capacity\***: Up to 11 kg +- **Continuous lift capacity at 0.5 m extension\***: 5 kg +- **Drag capacity\* (on carpet)**: Up to 25 kg +- **Operating temp**: -20 C to 45 C +- **Ingress protection**:  Water and dust resistant + +\* At 22 C. ## Gripper specifications -- **Depth**: 90 mm -- **Peak clamp force (at tip of opening)**: 130 N -- **Integrated sensors**: ToF, IMU, 4K RGB -- **Accessory port**: Gigabit Ethernet, 50W power, camera sync (PPS) -- **Max Camera FOV**: RGB: 60.2° x 46.4°; Depth: 55.9° x 44° + +- **Depth**: 90 mm +- **Peak clamp force (at tip of opening)**: 130 N +- **Integrated sensors**: ToF, IMU, 4K RGB +- **Accessory port**: Gigabit Ethernet, 50W power, camera sync (PPS) +- **Max Camera FOV**: RGB: 60.2° x 46.4°; Depth: 55.9° x 44° ## How big an object can the gripper grasp -The robot Arm is capable of holding any object it can fit the gripper jaws around. In general, this means that objects a person can pick up are also manageable by the robot. - + +The robot Arm is capable of holding any object it can fit the gripper jaws around. In general, this means that objects a person can pick up are also manageable by the robot. + ## Gripper safety -Continue to observe the recommended safety distance of 3 meters from the robot. Do not touch the Arm or gripper (or the robot) while the robot is active. - + +Continue to observe the recommended safety distance of 3 meters from the robot. Do not touch the Arm or gripper (or the robot) while the robot is active. + ## Pinch points -The gripper has a small clearance that offers some possibility to avoid complete pinching. However, pinching is always possible when grasping/holding objects. Limit human interaction with the gripper when in use. - -* Never introduce hands or fingers between an object to be grasped or being grasped and the gripper jaws. Keep hands away. -* Never attempt to open the gripper while the robot is powered on. Never try to interfere with grasping and carrying. Stay away from an active robot. + +The gripper has a small clearance that offers some possibility to avoid complete pinching. However, pinching is always possible when grasping/holding objects. Limit human interaction with the gripper when in use. + +- Never introduce hands or fingers between an object to be grasped or being grasped and the gripper jaws. Keep hands away. +- Never attempt to open the gripper while the robot is powered on. Never try to interfere with grasping and carrying. Stay away from an active robot. diff --git a/docs/concepts/autonomy/README.md b/docs/concepts/autonomy/README.md index c4c7360a1..ed953b640 100644 --- a/docs/concepts/autonomy/README.md +++ b/docs/concepts/autonomy/README.md @@ -16,21 +16,21 @@ The Autowalk feature is an implementation of the autonomous navigation API. Howe ## Contents -* [Autonomy Technical Summary](graphnav_tech_summary.md) -* [Autonomous navigation code examples](autonomous_navigation_code_examples.md) -* [Components of autonomous navigation](components_of_autonomous_navigation.md) -* [Docking](docking.md) -* [Typical autonomous navigation use case](typical_autonomous_navigation_use_case.md) -* [Autonomous navigation services](autonomous_navigation_services.md) -* [GraphNav service](graphnav_service.md) -* [GraphNav map structure](graphnav_map_structure.md) -* [GraphNav area callbacks](graphnav_area_callbacks.md) -* [Initialization](initialization.md) -* [Localization](localization.md) -* [GraphNav and robot locomotion](graphnav_and_robot_locomotion.md) -* [Missions service](missions_service.md) -* [Autowalk service](autowalk_service.md) -* [Network compute bridge](../network_compute_bridge.md) -* [AutoReturn service](auto_return.md) -* [Directed Exploration](directed_exploration.md) -* [GPS](gps.md) \ No newline at end of file +- [Autonomy Technical Summary](graphnav_tech_summary.md) +- [Autonomous navigation code examples](autonomous_navigation_code_examples.md) +- [Components of autonomous navigation](components_of_autonomous_navigation.md) +- [Docking](docking.md) +- [Typical autonomous navigation use case](typical_autonomous_navigation_use_case.md) +- [Autonomous navigation services](autonomous_navigation_services.md) +- [GraphNav service](graphnav_service.md) +- [GraphNav map structure](graphnav_map_structure.md) +- [GraphNav area callbacks](graphnav_area_callbacks.md) +- [Initialization](initialization.md) +- [Localization](localization.md) +- [GraphNav and robot locomotion](graphnav_and_robot_locomotion.md) +- [Missions service](missions_service.md) +- [Autowalk service](autowalk_service.md) +- [Network compute bridge](../network_compute_bridge.md) +- [AutoReturn service](auto_return.md) +- [Directed Exploration](directed_exploration.md) +- [GPS](gps.md) diff --git a/docs/concepts/autonomy/auto_return.md b/docs/concepts/autonomy/auto_return.md index 93493c286..7e53203d9 100644 --- a/docs/concepts/autonomy/auto_return.md +++ b/docs/concepts/autonomy/auto_return.md @@ -9,12 +9,15 @@ Development Kit License (20191101-BDSDK-SL). # AutoReturn Service ## What is AutoReturn? + AutoReturn is a service that will walk Spot back along a recently traversed path. It can be configured to happen automatically when Spot stops receiving commands from a user. ## Why would I want to use AutoReturn? + If you are piloting Spot through an area inaccessible to people and suddenly lose the communication link to Spot, the standard behavior is for Spot to sit down and power off. It may be valuable to instead tell Spot to automatically come back along the path it walked, hopefully putting Spot back into communication range. ## Why would I NOT want to use AutoReturn? + Depending on the environment Spot is in when AutoReturn activates, Spot may make things worse by trying to autonomously navigate. It’s very likely that AutoReturn will activate when there is poor or no communication to Spot, leaving it walking around unsupervised. It's also important to note the following: @@ -23,6 +26,7 @@ It's also important to note the following: - **AutoReturn will behave better in certain environments than others.** For example, if Spot becomes trapped while executing AutoReturn, Spot will continue to try and return, possibly until the battery drops below the operation threshold, at which point Spot will sit down and power off. If the environment around Spot changes and blocks Spot's previous path, Spot may end up in a worse location than before. ## How do I use AutoReturn? + AutoReturn must be explicitly enabled, and will only work for the user that is driving Spot when AutoReturn is enabled. For example, if user A enables AutoReturn and then user B takes control of Spot, AutoReturn will not automatically run. If user B wants to enable AutoReturn, they must do it themselves. ### Configuring AutoReturn @@ -50,12 +54,15 @@ but will only walk Spot up to or before the boundary in this example, omitting t Tablet users will find AutoReturn settings under the “Comms” section of the main menu. ## What happens when AutoReturn finishes? + It depends on whether communication to a user has been restored. If Spot does not hear from a user by the time AutoReturn finishes, Spot’s normal comms loss behavior will begin. ## Using AutoReturn Safely + **AutoReturn can potentially cause the robot to operate autonomously for unexpected distances. This can be dangerous for anyone nearby.** Tips for safe use of AutoReturn: + - Set the max displacement as low as possible to minimize the potential for the robot to venture any further than necessary. - Keep the E-stop Service timeout as low as possible to limit the amount of time the robot is moving without Operator control. This setting can be found under "Autowalk Replay Supervision" in the tablet, alongside the AutoReturn settings. diff --git a/docs/concepts/autonomy/autonomous_navigation_code_examples.md b/docs/concepts/autonomy/autonomous_navigation_code_examples.md index 609715047..4c63ba842 100644 --- a/docs/concepts/autonomy/autonomous_navigation_code_examples.md +++ b/docs/concepts/autonomy/autonomous_navigation_code_examples.md @@ -12,16 +12,16 @@ GraphNav provides place-based localization and locomotion services. Developers c The Spot SDK includes [python code examples](../../../python/examples/README.md) to help you get started with autonomous navigation. Refer to the following examples to learn about exercising the GraphNav API. -| Code example | Description | -| ------------ | --------------------------------------------- | -| [recording_command_line](../../../python/examples/graph_nav_command_line/README.md) | Demonstrates graphnav recording service requests to record, create, and download a map from the robot. | -| [graph_nav_command_line](../../../python/examples/graph_nav_command_line/README.md) | Demonstrates how to use GraphNav requests to: | -| [remote_mission_service](../../../python/examples/remote_mission_service/README.md) | Demonstrates how to implement a RemoteMissionService and run it. This is how we support triggering off-robot code as part of Autowalk. | -| [view_map](../../../python/examples/graph_nav_view_map/README.md) | An example program for opening, parsing, and viewing a GraphNav map. This example can be used with GraphNav maps generated using Autowalk or using the GraphNav APIs. | -| [area_callbacks](../../../python/examples/area_callback/README.md) | An example program for writing [Area Callbacks](graphnav_area_callbacks.md) which can extend the capabilities of GraphNav by triggering callbacks to user code when entering, crossing, and leaving a region of the map. | - +| Code example | Description | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [recording_command_line](../../../python/examples/graph_nav_command_line/README.md) | Demonstrates GraphNav recording service requests to record, create, and download a map from the robot. | +| [graph_nav_command_line](../../../python/examples/graph_nav_command_line/README.md) | Demonstrates how to use GraphNav requests to: | +| [remote_mission_service](../../../python/examples/remote_mission_service/README.md) | Demonstrates how to implement a RemoteMissionService and run it. This is how we support triggering off-robot code as part of Autowalk. | +| [view_map](../../../python/examples/graph_nav_view_map/README.md) | An example program for opening, parsing, and viewing a GraphNav map. This example can be used with GraphNav maps generated using Autowalk or using the GraphNav APIs. | +| [area_callbacks](../../../python/examples/area_callback/README.md) | An example program for writing [Area Callbacks](graphnav_area_callbacks.md) which can extend the capabilities of GraphNav by triggering callbacks to user code when entering, crossing, and leaving a region of the map. | + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/autonomous_navigation_services.md b/docs/concepts/autonomy/autonomous_navigation_services.md index 8b06fa7f7..94e7148e2 100644 --- a/docs/concepts/autonomy/autonomous_navigation_services.md +++ b/docs/concepts/autonomy/autonomous_navigation_services.md @@ -14,25 +14,23 @@ Review [the extensive catalog of code examples](../../../python/examples/README. The autonomous navigation and related services include: +- GraphNavService +- GraphNavRecordingService +- MissionService +- RemoteMissionService -* GraphNavService -* GraphNavRecordingService -* MissionService -* RemoteMissionService - - - Refer to the [Python API Reference](../../../protos/bosdyn/api/README.md) for details about the APIs available for each service. - +Refer to the [Python API Reference](../../../protos/bosdyn/api/README.md) for details about the APIs available for each service. - [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" - [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" - [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" - [typical]: typical_autonomous_navigation_use_case.md "Typical autonomous navigation use cases" - [autonomous-services]: autonomous_navigation_services.md "Autonomous navigation services" - [service]: graphnav_service.md "GraphNav service" - [map-structure]: graphnav_map_structure.md "GraphNav map structure" - [initialization]: initialization.md "Initialization" - [localization]: localization.md "Localization" - [locomotion]: graphnav_and_robot_locomotion.md "GraphNav and robot locomotion" - [missions]: missions_service.md "Missions service" + +[autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" +[code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" +[components]: components_of_autonomous_navigation.md "Components of autonomous navigation" +[typical]: typical_autonomous_navigation_use_case.md "Typical autonomous navigation use cases" +[autonomous-services]: autonomous_navigation_services.md "Autonomous navigation services" +[service]: graphnav_service.md "GraphNav service" +[map-structure]: graphnav_map_structure.md "GraphNav map structure" +[initialization]: initialization.md "Initialization" +[localization]: localization.md "Localization" +[locomotion]: graphnav_and_robot_locomotion.md "GraphNav and robot locomotion" +[missions]: missions_service.md "Missions service" diff --git a/docs/concepts/autonomy/autowalk_service.md b/docs/concepts/autonomy/autowalk_service.md index cde206465..717c70ec1 100644 --- a/docs/concepts/autonomy/autowalk_service.md +++ b/docs/concepts/autonomy/autowalk_service.md @@ -12,69 +12,81 @@ The autowalk service is a way for API clients to specify high level autonomous b ## Terminology -| Term | Description | -| ----- | -----------| -| [Mission](../../../protos/bosdyn/api/mission/nodes.proto#node) | A `bosdyn.api.mission.Node` proto that fully defines a behavior tree. The structure is infinitely recursive. -| [Mission Service](../../../protos/bosdyn/api/mission/mission_service.proto#missionservice) | A GRPC service that sits on top of the API and can compile & run a mission. -| Program | Some high level robot behavior that can either be expressed as a mission, a python script, or some other medium. -| [Autowalk](../../../protos/bosdyn/api/autowalk/walks.proto#walk) | A `bosdyn.api.autowalk.Walk` proto that fully defines a program with structure sequence { go here, do this, go there, do that, etc }. -| [Autowalk Service](../../../protos/bosdyn/api/autowalk/autowalk_service.proto#autowalkservice) | A GRPC service that translates an autowalk into a mission. +| Term | Description | +| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [Mission](../../../protos/bosdyn/api/mission/nodes.proto#node) | A `bosdyn.api.mission.Node` proto that fully defines a behavior tree. The structure is infinitely recursive. | +| [Mission Service](../../../protos/bosdyn/api/mission/mission_service.proto#missionservice) | A GRPC service that sits on top of the API and can compile & run a mission. | +| Program | Some high level robot behavior that can either be expressed as a mission, a python script, or some other medium. | +| [Autowalk](../../../protos/bosdyn/api/autowalk/walks.proto#walk) | A `bosdyn.api.autowalk.Walk` proto that fully defines a program with structure sequence { go here, do this, go there, do that, etc }. | +| [Autowalk Service](../../../protos/bosdyn/api/autowalk/autowalk_service.proto#autowalkservice) | A GRPC service that translates an autowalk into a mission. | ## How Autowalks Differs From Missions -The mission service and missions sit on top of the API. There is nothing you can do with the mission service that you can’t do with a python script. The reasons to write a program using missions instead of a python script are: + +The mission service and missions sit on top of the API. There is nothing you can do with the mission service that you can’t do with a python script. The reasons to write a program using missions instead of a python script are: + 1. The program needs to be resilient to comms loss. - * Missions are run on robot and can be run with an ~infinite end time. Clients still have to send a single PlayMission request at the start but once they do, they do not have to communicate with the robot ever again. - * A client running a python script needs constant communication with the robot in order to advance to different stages of the script. -1. To deal with as few RPC calls as possible. RPCs can fail in many ways, and writing a program that does the right thing for every different failure mode is difficult. Also, the API requires sending many RPCs to do something and wait for it to finish. + - Missions are run on robot and can be run with an ~infinite end time. Clients still have to send a single PlayMission request at the start but once they do, they do not have to communicate with the robot ever again. + - A client running a python script needs constant communication with the robot in order to advance to different stages of the script. +1. To deal with as few RPC calls as possible. RPCs can fail in many ways, and writing a program that does the right thing for every different failure mode is difficult. Also, the API requires sending many RPCs to do something and wait for it to finish. 1. The python script has grown too complex to successfully develop on and debug. - * Writing and debugging boilerplate state tracking logic can be time-consuming. The behavior trees offered by the mission service might be easier to use. + - Writing and debugging boilerplate state tracking logic can be time-consuming. The behavior trees offered by the mission service might be easier to use. 1. To seamlessly move a program from client to client. - * Because missions are defined using protobufs, they are language agnostic. The proto defining a mission can be interpreted by any client. + - Because missions are defined using protobufs, they are language agnostic. The proto defining a mission can be interpreted by any client. -The missions that the tablet generates as part of the autowalk application handle many different failure modes using the mission service's behavior tree structure. Because of that, the corresponding behavior trees are very deep (42 layers) and very wide (1000’s of nodes). However, at their core they are very simple: go to location A, perform action 1, go to location B, perform action 2, etc. Given the complex behavior tree, suppose you would like to remove location B and action 2 from the mission. Finding the nodes that correspond to location B and action 2 would be a difficult and tedious task. Therein lies the problem. Backing out a high level understanding of what a behavior tree does is hard. This is not a new problem. Anyone familiar with programming knows that assembly code is harder to read than the C code that generated the assembly code, and that the C code is harder to read than the MATLAB code that generated the C code, even though they all express the same identical thing. Autowalk is the formalized layer above missions, and like missions it is defined using protobufs. The language layer looks like: +The missions that the tablet generates as part of the autowalk application handle many different failure modes using the mission service's behavior tree structure. Because of that, the corresponding behavior trees are very deep (42 layers) and very wide (1000’s of nodes). However, at their core they are very simple: go to location A, perform action 1, go to location B, perform action 2, etc. Given the complex behavior tree, suppose you would like to remove location B and action 2 from the mission. Finding the nodes that correspond to location B and action 2 would be a difficult and tedious task. Therein lies the problem. Backing out a high level understanding of what a behavior tree does is hard. This is not a new problem. Anyone familiar with programming knows that assembly code is harder to read than the C code that generated the assembly code, and that the C code is harder to read than the MATLAB code that generated the C code, even though they all express the same identical thing. Autowalk is the formalized layer above missions, and like missions it is defined using protobufs. The language layer looks like: ![Autowalk language layer][autowalklanguage] -In its basic form, the autowalk format forces programs into the “go here, do this” pattern, which is a flexibility loss compared to missions. However, the benefit is having an easy to edit structure. Autowalk and the autowalk serivce provide some methods to break “go here, do this” pattern and obtain more flexibility similar to missions. These methods will be described in a later section. +In its basic form, the autowalk format forces programs into the “go here, do this” pattern, which is a flexibility loss compared to missions. However, the benefit is having an easy to edit structure. Autowalk and the autowalk service provide some methods to break “go here, do this” pattern and obtain more flexibility similar to missions. These methods will be described in a later section. ## Autowalk Format -The walk proto defines the autowalk's “go here, do this” format. It is a linear series of actions and their associated locations. These actions and locations are encapsulated in a list of [elements][element]. To edit the autowalk, elements can be reordered, modified, removed, and/or added to the list. See the [Edit Autowalk Python SDK example][editautowalk] for further details. + +The Walk proto defines the autowalk's “go here, do this” format. It is a linear series of actions and their associated locations. These actions and locations are encapsulated in a list of [elements][element]. To edit the autowalk, elements can be reordered, modified, removed, and/or added to the list. See the [Edit Autowalk Python SDK example][editautowalk] for further details. ### Components of an Element -| Term | Description | -| ----- | -----------| -| [Action](../../../protos/bosdyn/api/autowalk/walks.proto#action) | What the robot should do at a location. -| [Action Wrapper](../../../protos/bosdyn/api/autowalk/walks.proto#actionwrapper) | What the robot should do before and during an action. -| [Action Failure Behavior](../../../protos/bosdyn/api/autowalk/walks.proto#failurebehavior) | What the robot should do if the action fails. -| [Target](../../../protos/bosdyn/api/pautowalk/walks.proto#target) | Where the robot should go. Targets are speicified within the context of a graph nav map. -| [Target Failure Behavior](../../../protos/bosdyn/api/autowalk/walks.proto#failurebehavior) | What the robot should do if it fails to reach the target. -| [Battery Monitor](../../../protos/bosdyn/api/autowalk/walks.proto#batterymonitor) | The battery thresholds at which the robot should pause/resume mission execution. +| Term | Description | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| [Action](../../../protos/bosdyn/api/autowalk/walks.proto#action) | What the robot should do at a location. | +| [Action Wrapper](../../../protos/bosdyn/api/autowalk/walks.proto#actionwrapper) | What the robot should do before and during an action. | +| [Action Failure Behavior](../../../protos/bosdyn/api/autowalk/walks.proto#failurebehavior) | What the robot should do if the action fails. | +| [Target](../../../protos/bosdyn/api/pautowalk/walks.proto#target) | Where the robot should go. Targets are specified within the context of a graph nav map. | +| [Target Failure Behavior](../../../protos/bosdyn/api/autowalk/walks.proto#failurebehavior) | What the robot should do if it fails to reach the target. | +| [Battery Monitor](../../../protos/bosdyn/api/autowalk/walks.proto#batterymonitor) | The battery thresholds at which the robot should pause/resume mission execution. | + +### Docking in Autowalk Missions + +As of the Spot 4.1 release, autowalk supports multiple docks. The Walk proto contains a repeated [Dock](../../../protos/bosdyn/api/autowalk/walks.proto#dock) field that specifies which dock(s) the robot is allowed to use during mission execution. The Dock proto contains two booleans, `disable_recharge` and `disable_end`. If `disable_recharge` is false, the robot is allowed to use the dock to recharge or as part of the return to dock and try again later failure behavior. If `disable_end` is false, the robot is allowed to end the mission on the dock. The robot is allowed to start the mission on any dock specified in the Walk proto. When the robot needs to dock during a mission, the robot will attempt to dock at the nearest allowed dock. The robot does not know the occupancy state of docks in the mission. It is the client's responsibility to ensure robots do not compete for docks. ## Autowalk Service RPCs + The autowalk service provides [RPCs][autowalkserivce] for clients to convert an autowalk to a mission. -| RPC | Description | -| ----- | -----------| -| CompileAutowalk | Convert an autowalk to a mission. -| LoadAutowalk | Convert an autowalk to a mission and load the mission to a robot. +| RPC | Description | +| --------------- | ----------------------------------------------------------------- | +| CompileAutowalk | Convert an autowalk to a mission. | +| LoadAutowalk | Convert an autowalk to a mission and load the mission to a robot. | After the conversion process, the mission service is responsible for loading the mission, playing the mission, and querying the mission status. Remember that targets in an autowalk are defined within the context of a graph nav map. This means that the associated graph nav map must be uploaded to the robot for the mission to play correctly. ### Node Identifiers - Since the mission service is responsible for everything after conversion, the autowalk service returns several [`bosdyn.api.autowalk.NodeIdentifier` protos][nodeidentifier] in the RPC responses. Each node identifier contains two pieces of information, a `node_id` integer (equivalent to [`bosdyn.api.mission.NodeInfo.id`][nodeinfo]) that is set by the mission service when loading a mission and a `user_data_id` string (equivalent to [`bosdyn.api.mission.NodeInfo.UserData.id`][userdata]) that is set by the autowalk service when compiling a walk. These node identifiers give the client insights about the behavior tree generated by the autowalk service. This can be useful when playing the mission. When playing the mission, the client may want to know what parts of the mission are complete, are incomplete, or are currently executing. Using the `node_id` field in each node identifier, the client can make sense of the mission service's `GetState` RPC [response][getstateresponse]. Please note that when using the `CompileAutowalk` RPC, the `node_id` field in the node identifiers will not be populated because the node ids are set by the mission service when loading the mission to the robot. In this case, the client must use the `user_data_id` field in the node identifiers to determine the node ids set by the mission service after the mission is loaded to the robot. To see how node identifiers can be used to query the status of a mission, see the [Query Autowalk Status C++ SDK example][queryautowalkstatus]. + +Since the mission service is responsible for everything after conversion, the autowalk service returns several [`bosdyn.api.autowalk.NodeIdentifier` protos][nodeidentifier] in the RPC responses. Each node identifier contains two pieces of information, a `node_id` integer (equivalent to [`bosdyn.api.mission.NodeInfo.id`][nodeinfo]) that is set by the mission service when loading a mission and a `user_data_id` string (equivalent to [`bosdyn.api.mission.NodeInfo.UserData.id`][userdata]) that is set by the autowalk service when compiling a walk. These node identifiers give the client insights about the behavior tree generated by the autowalk service. This can be useful when playing the mission. When playing the mission, the client may want to know what parts of the mission are complete, are incomplete, or are currently executing. Using the `node_id` field in each node identifier, the client can make sense of the mission service's `GetState` RPC [response][getstateresponse]. Please note that when using the `CompileAutowalk` RPC, the `node_id` field in the node identifiers will not be populated because the node ids are set by the mission service when loading the mission to the robot. In this case, the client must use the `user_data_id` field in the node identifiers to determine the node ids set by the mission service after the mission is loaded to the robot. To see how node identifiers can be used to query the status of a mission, see the [Query Autowalk Status C++ SDK example][queryautowalkstatus]. ### Debugging Autowalk Service RPC Failures -Aside from standard gRPC errors, there are user errors that can cause the autowalk service RPCs to fail. If a walk proto is malformed, the autowalk to mission compilation will fail. The RPC responses contain a map field called `failed_elements`. Inspect the errors strings within each [`FailedElement` proto][failedelement] in the map to determine why the compilation failed. The `FailedElement` message also contains warnings. Warnings can be resolved by the compiler, but can potentially result in unexpected behavior. Compile time walk modifications are reported back to the client in the warnings field. The `LoadAutowalk` RPC can fail during mission validation. To debug validation errors, inspect the `lease_use_results` and `failed_nodes` fields in the [server response][loadautowalkresponse]. + +Aside from standard gRPC errors, there are user errors that can cause the autowalk service RPCs to fail. If a Walk proto is malformed, the autowalk to mission compilation will fail. The RPC responses contain a map field called `failed_elements`. Inspect the errors strings within each [`FailedElement` proto][failedelement] in the map to determine why the compilation failed. The `FailedElement` message also contains warnings. Warnings can be resolved by the compiler, but can potentially result in unexpected behavior. Compile time walk modifications are reported back to the client in the warnings field. The `LoadAutowalk` RPC can fail during mission validation. To debug validation errors, inspect the `lease_use_results` and `failed_nodes` fields in the [server response][loadautowalkresponse]. ## Breaking the "Go Here, Do This" Structure + As previously mentioned, missions offer more flexibility than autowalks because autowalks are largely confined to the "go here, do this" format. Consider the following example. Spot measures the temperature of an asset. If the temperature is above a certain threshold, Spot should record the temperature of all nearby assets and alert the operator. If the temperature is below the threshold, Spot should continue to the next target. This conditional behavior does not conform to the "go here, do this" autowalk format. However, there are still ways to achieve this behavior using autowalks and the autowalk service: + 1. Inject a behavior tree into an autowalk action - * The [`bosdyn.api.autowalk.Action` proto][action] allows the user to specify a [`bosdyn.api.mission.Node` proto][node] as the action. This node can implement a behavior tree that achieves the desired conditional behavior. - * The downside to this method is that editors may not support editing mission parameters of the embedded behavior tree. + - The [`bosdyn.api.autowalk.Action` proto][action] allows the user to specify a [`bosdyn.api.mission.Node` proto][node] as the action. This node can implement a behavior tree that achieves the desired conditional behavior. + - The downside to this method is that editors may not support editing mission parameters of the embedded behavior tree. 1. Compile and combine multiple autowalks - * The `CompileAutowalk` RPC returns the root node of the resulting behavior tree. This node can be injected into other behavior trees. By compiling and combining multiple autowalks, the desired conditional behavior can be achieved. - * Editors may not support editing the combined behavior tree, however the original autowalks can be edited, recompiled, and recombined. + - The `CompileAutowalk` RPC returns the root node of the resulting behavior tree. This node can be injected into other behavior trees. By compiling and combining multiple autowalks, the desired conditional behavior can be achieved. + - Editors may not support editing the combined behavior tree, however the original autowalks can be edited, recompiled, and recombined.
@@ -91,4 +103,4 @@ As previously mentioned, missions offer more flexibility than autowalks because [failedelement]: ../../../protos/bosdyn/api/autowalk/autowalk.proto#failedelement "Failed Element Proto" [node]: ../../../protos/bosdyn/api/mission/nodes.proto#node "Node Proto" [action]: ../../../protos/bosdyn/api/autowalk/walks.proto#action "Action Proto" -[loadautowalkresponse]: ../../../protos/bosdyn/api/autowalk/autowalk.proto#loadautowalkresponse "Load Autowalk Response Proto" \ No newline at end of file +[loadautowalkresponse]: ../../../protos/bosdyn/api/autowalk/autowalk.proto#loadautowalkresponse "Load Autowalk Response Proto" diff --git a/docs/concepts/autonomy/components_of_autonomous_navigation.md b/docs/concepts/autonomy/components_of_autonomous_navigation.md index 54c3e96e5..44e2714e1 100644 --- a/docs/concepts/autonomy/components_of_autonomous_navigation.md +++ b/docs/concepts/autonomy/components_of_autonomous_navigation.md @@ -10,15 +10,13 @@ Development Kit License (20191101-BDSDK-SL). To get started with autonomous navigation, you'll need a grasp of the following concepts: - -* [Maps](#maps) -* [Waypoints](#waypoints) -* [Edges](#edges) -* [Localization](#localization) -* [Initialization](#initialization) -* [Missions](#missions) -* [(Advanced) Area Callbacks](#area_callbacks) - +- [Maps](#maps) +- [Waypoints](#waypoints) +- [Edges](#edges) +- [Localization](#localization) +- [Initialization](#initialization) +- [Missions](#missions) +- [(Advanced) Area Callbacks](#area_callbacks)

Maps

@@ -50,12 +48,12 @@ See [Missions service][missions] for details.

Advanced – Area Callbacks

-Edges can be annotated with Area Callback regions, which specify that GraphNav should call out to a particular callback service in order to safely enter, cross, and exit that region. These services allow users to integrate new capabilities into GraphNav, such as checking whether it is safe to cross a crosswalk, opening doors, or flashing lights or playing sounds in a particular area. +Edges can be annotated with Area Callback regions, which specify that GraphNav should call out to a particular callback service in order to safely enter, cross, and exit that region. These services allow users to integrate new capabilities into GraphNav, such as checking whether it is safe to cross a crosswalk, opening doors, or flashing lights or playing sounds in a particular area. See [Area Callbacks][area-callbacks] for more information. - + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/directed_exploration.md b/docs/concepts/autonomy/directed_exploration.md index b41b933b1..ba896396f 100644 --- a/docs/concepts/autonomy/directed_exploration.md +++ b/docs/concepts/autonomy/directed_exploration.md @@ -10,13 +10,13 @@ Development Kit License (20191101-BDSDK-SL). ## What is Directed Exploration? -Directed Exploration is a feature that enables Spot to navigate robustly when the environment has changed. When Spot's path is blocked by an unexpected obstacle, Directed Exploration allows Spot to use its sensors to find a clear path to a nearby waypoint, even if that waypoint is not connected to Spot's current waypoint in the GraphNav map. This enables Spot to deal with environments where new obstacles may have been added, old obstacles may have been moved, and doors may have been opened or closed. +Directed Exploration is a feature that enables Spot to navigate robustly when the environment has changed. When Spot's path is blocked by an unexpected obstacle, Directed Exploration allows Spot to use its sensors to find a clear path to a nearby waypoint, even if that waypoint is not connected to Spot's current waypoint in the GraphNav map. This enables Spot to deal with environments where new obstacles may have been added, old obstacles may have been moved, and doors may have been opened or closed. -For example, suppose you record the Autowalk mission shown below, where Spot visits the waypoints 1 through 6 in order. When you record the mission, door A is open and door B is closed. +For example, suppose you record the Autowalk mission shown below, where Spot visits the waypoints 1 through 6 in order. When you record the mission, door A is open and door B is closed. ![Initial recorded path](./images/directed_exploration_1.png "Initial recorded path") -Now, imagine someone closes door A and opens door B. Without Directed Exploration, Spot would get stuck at closed door A when it tried to replay the mission. +Now, imagine someone closes door A and opens door B. Without Directed Exploration, Spot would get stuck at closed door A when it tried to replay the mission. ![Changed environment](./images/directed_exploration_2.png "Changed environment") @@ -28,15 +28,15 @@ After reaching waypoint 5, Spot will navigate to the final destination at waypoi ## When is Directed Exploration invoked? -Directed Exploration is invoked as a last resort when all other attempts to find a path to the destination have failed. Other strategies include attempting to plan a different route through the edges in the GraphNav map and attempting to follow alternate waypoints that are created next to the waypoints on the map. +Directed Exploration is invoked as a last resort when all other attempts to find a path to the destination have failed. Other strategies include attempting to plan a different route through the edges in the GraphNav map and attempting to follow alternate waypoints that are created next to the waypoints on the map. -Directed Exploration can succeed in some situations where these other strategies fail, because Directed Exploration frees Spot from the constraint of navigating along edges stored in the GraphNav map. Directed Exploration allows Spot to use its sensors to determine whether it can reach nearby waypoints, even if those waypoints aren't connected to its current location in the GraphNav map. +Directed Exploration can succeed in some situations where these other strategies fail, because Directed Exploration frees Spot from the constraint of navigating along edges stored in the GraphNav map. Directed Exploration allows Spot to use its sensors to determine whether it can reach nearby waypoints, even if those waypoints aren't connected to its current location in the GraphNav map. ## How to enable/disable Directed Exploration Directed Exploration is enabled by default. -To disable Directed Exploration when replaying an Autowalk mission from the tablet, uncheck the box marked "Drive around large obstacles" on the mission upload screen. This will disable both Directed Exploration and alternate waypoints, but it will still allow replanning alternate routes through the GraphNav map. +To disable Directed Exploration when replaying an Autowalk mission from the tablet, uncheck the box marked "Drive around large obstacles" on the mission upload screen. This will disable both Directed Exploration and alternate waypoints, but it will still allow replanning alternate routes through the GraphNav map. To disable Directed Exploration for a NavigateTo or NavigateRoute command issued through the SDK, set the disable_directed_exploration field of the corresponding TravelParams proto to true. diff --git a/docs/concepts/autonomy/docking.md b/docs/concepts/autonomy/docking.md index def155e37..24783ef92 100644 --- a/docs/concepts/autonomy/docking.md +++ b/docs/concepts/autonomy/docking.md @@ -24,36 +24,42 @@ The docking service provides an interface to control Spot and use a Spot Dock. There are four RPCs to the docking service. -| RPC | Description | -| ---- | ----------- | -| DockingCommand | Dock and Undock the robot | -| DockingCommandFeedback | Get feedback on running DockingCommands | -| GetDockingConfig | Get the robots docking configuration | -| GetDockingState | Get the current docking status of the robot | +| RPC | Description | +| ---------------------- | ------------------------------------------- | +| DockingCommand | Dock and Undock the robot | +| DockingCommandFeedback | Get feedback on running DockingCommands | +| GetDockingConfig | Get the robots docking configuration | +| GetDockingState | Get the current docking status of the robot | ## Typical Usage + ### Docking the Robot + To dock the robot it should be powered on and standing near the dock so that the robot can detect it. + 1. Issue a `DockingCommand`, with an end time long enough to complete the docking sequence (30 seconds is a recommended value). You will be provided a docking command ID in return. 2. Poll the robot with `DockingCommandFeedback` with the provided docking command ID to check on the status on the execution. It should report `STATUS_IN_PROGRESS` while executing then `STATUS_DOCKED` when finished. 3. Docking the robot automatically powers it off at the end. -You do not need to issue multiple `DockingComand` RPCs unless you explicitly want to issue a new docking command. +You do not need to issue multiple `DockingCommand` RPCs unless you explicitly want to issue a new docking command. ### Undocking the Robot + To undock the robot it should be sitting on the dock with the area in front of the dock unobstructed. + 1. Power on the robot however you like, this is not the responsibility of the docking service for safety reasons. 2. Issue a `DockingCommand` with an end time, but this time set the `prep_pose_behavior=PREP_POSE_UNDOCK`. A `docking_station_id` is not required to undock. -2. The robot will stand up, and walk in front of the dock. -3. Poll the robot with `DockingCommandFeedback` with the provided docking command ID to check on the status on the execution. It should report `STATUS_IN_PROGRESS` while executing then `STATUS_AT_PREP_POSE` once undocking has finished. -4. The robot will remain standing waiting for its next command. +3. The robot will stand up, and walk in front of the dock. +4. Poll the robot with `DockingCommandFeedback` with the provided docking command ID to check on the status on the execution. It should report `STATUS_IN_PROGRESS` while executing then `STATUS_AT_PREP_POSE` once undocking has finished. +5. The robot will remain standing waiting for its next command. If the area in front of the robot isn't clear it's possible to manually undock the robot by simply powering it on, standing, and driving, just like you would if the robot wasn't docked. Under normal circumstances it's recommended to use the automatic undocking behavior. ### Docking Config + Issuing a `GetDockingConfig` command will return a list of dock IDs and their dock type. This can help determine what the robot will detect as a dock, and which type of dock. ### Docking State + Issuing a `GetDockingState` command will return the docked status of the robot independent of any `DockingCommand`. It will indicate if the robot is already docked, currently docking, or not docked. If the robot is docked extra information about the dock ID, and charge status is provided. - diff --git a/docs/concepts/autonomy/gps.md b/docs/concepts/autonomy/gps.md index 3a0ef7d4d..5b6d25cd5 100644 --- a/docs/concepts/autonomy/gps.md +++ b/docs/concepts/autonomy/gps.md @@ -6,58 +6,59 @@ is subject to the terms and conditions of the Boston Dynamics Software Development Kit License (20191101-BDSDK-SL). --> -# GPS on Spot +# GPS on Spot + Starting in software version 4.0, the Spot SDK now supports integration with Global Positioning Systems (GPS) and Global Navigation Satellite Systems (GNSS) hardware. Spot can be localized to Earth-centered reference frames and can autonomously navigate and localize on Graph Nav maps that have been -recorded with these systems. - +recorded with these systems. + ## Hardware Integration -### GPS Receiver Overview - -GPS devices compute their position with respect to the Earth using constellations of satellites. Their computed fixes are typically reported through a standard message protocol specified by the Nation Marine Electronics Association known as [NMEA-0183](https://www.nmea.org/nmea-0183.html). GGA messages include information about the computed position of the receiver, such as latitude, longitude, and altitude. GST messages include information about the quality of the computed position fix, such as the standard deviation in meters of the latitude, longitude, and altitude measurements. In addition to computing the position of the receiver, GPS receivers also compute an accurate time measurement. The time measurement is captured in the ZDA message. - -Most consumer-grade GPS receivers can compute their location with a few meters of accuracy. This accuracy can be improved using a system of base stations and relay satellites. One system, known as Satellite Based Augmentation System (SBAS) uses ground stations at known locations to compute positioning errors and relay them to receivers using a network of relay satellites. In the United States, this system is also known as Wide Area Augmentation System (WAAS). To achieve centimeter level accuracy, a system known as Real Time Kinematics (RTK) can be used. This system uses a local base station to report corrections directly to the receiver. For use in robot navigation, it is recommended to use a receiver that supports one or more correction services to maximize the accuracy of the measurements and the performance of the system as a whole. - -### Attaching GPS Receivers to Spot - -GPS receivers make NMEA-0183 messages available through different interfaces. Examples of receiver interfaces include USB, Ethernet, Wi-Fi, and Bluetooth. Spot is not able to consume this data directly from the sensor. Instead, Spot has an interface for accepting GPS data from attached payloads through its API. This means that in addition to a GPS receiver payload, a user must also attach a payload capable of translating from the GPS receiver interface to the Spot API. For information about designing and attaching payloads for Spot, refer to the documentation [here](../../payload/README.md). The figure shown below depicts a system with three GPS receivers communicating with Spot through the GPS API. - +### GPS Receiver Overview + +GPS devices compute their position with respect to the Earth using constellations of satellites. Their computed fixes are typically reported through a standard message protocol specified by the Nation Marine Electronics Association known as [NMEA-0183](https://www.nmea.org/nmea-0183.html). GGA messages include information about the computed position of the receiver, such as latitude, longitude, and altitude. GST messages include information about the quality of the computed position fix, such as the standard deviation in meters of the latitude, longitude, and altitude measurements. In addition to computing the position of the receiver, GPS receivers also compute an accurate time measurement. The time measurement is captured in the ZDA message. + +Most consumer-grade GPS receivers can compute their location with a few meters of accuracy. This accuracy can be improved using a system of base stations and relay satellites. One system, known as Satellite Based Augmentation System (SBAS) uses ground stations at known locations to compute positioning errors and relay them to receivers using a network of relay satellites. In the United States, this system is also known as Wide Area Augmentation System (WAAS). To achieve centimeter level accuracy, a system known as Real Time Kinematics (RTK) can be used. This system uses a local base station to report corrections directly to the receiver. For use in robot navigation, it is recommended to use a receiver that supports one or more correction services to maximize the accuracy of the measurements and the performance of the system as a whole. + +### Attaching GPS Receivers to Spot + +GPS receivers make NMEA-0183 messages available through different interfaces. Examples of receiver interfaces include USB, Ethernet, Wi-Fi, and Bluetooth. Spot is not able to consume this data directly from the sensor. Instead, Spot has an interface for accepting GPS data from attached payloads through its API. This means that in addition to a GPS receiver payload, a user must also attach a payload capable of translating from the GPS receiver interface to the Spot API. For information about designing and attaching payloads for Spot, refer to the documentation [here](../../payload/README.md). The figure shown below depicts a system with three GPS receivers communicating with Spot through the GPS API. + Boston Dynamics provides an example of such a system involving the [Trimble SPS986](https://www.sitechnorcal.com/products/site-positioning-systems/antennas-and-base-stations/trimble-sps986-gnss-smart-antenna). The CORE I/O and associated extension also supports GPS devices using USB and UDP connections. ![](images/gps_diagram.png) _Figure 1: Spot GPS System Diagram_ - -### Writing Custom GPS Services - + +### Writing Custom GPS Services + The GPS Listener example provided by Boston Dynamics translates NMEA-0183 messages to the Spot API. If this is not suitable for a use case, it is possible to interface with the Spot API directly to provide GPS data. To do this, a new service should be developed. For information on how to do this, please refer to the documentation [here](../developing_api_services.md). This service will need to send NewGpsDataRequest messages to Spot's Aggregator service. This request must contain information about the position of the receiver in either [Geographic Coordinate System](https://en.wikipedia.org/wiki/Geographic_coordinate_system) (GCS: latitude, longitude, and altitude) or in [Earth Centered Earth Fixed](https://en.wikipedia.org/wiki/Earth-centered,_Earth-fixed_coordinate_system) (ECEF) coordinates. Additionally, the timestamp of the fix in robot time and the quantity of satellites used to calculate the fix must be provided. If available, other information such as horizontal and vertical accuracy, yaw, heading, the GPS timestamp, and information about individual satellites used for the fix can be included. GPS data points must also include an SE3Pose specifying the location of the receiver with respect to Spot's body. For additional information, please refer to the [API documentation](../../../protos/bosdyn/api/README.md). ## Background -### Common Reference Frames - +### Common Reference Frames + See [the geometry and frames document](../../concepts/geometry_and_frames.md) for more information on common robot reference frames and their definitions. ![](./images/gps_frames.png) _Figure 2. Relevant GPS Frames_ -GPS data are used in Spot's SDK through the following reference frames: - - * **Robot Body - "body"** (see frames doc)is a frame at the geometric center of the robot's body. - * **Odometry - "odom"** (see frames doc) is an inertial frame that estimates the fixed location in the world (relative to where the robot is booted up) using the kinematics of the robot. - * **Payload -** is the frame of the robot's payload computer, usually defined using the payload registration service. - * **GPS Antenna - "gps"** this is the frame of the GPS receiver antenna, and is the frame that the GPS unit should be reporting positional measurements in. The orientation convention for this frame should be the same as with the robot body; that is, the x-axis should point "forward", and the z axis should point "up". The GPS antenna payload is defined in the GPS service itself. - * **[Earth-Centered-Earth-Fixed ](https://en.wikipedia.org/wiki/Earth-centered,_Earth-fixed_coordinate_system)** **\- "ecef"** is a standard frame defined based on the center of the Earth. Some parts of the SDK refer to the GPS antenna or robot body's relative position and/or orientation with respect to this frame. - * **[Latitude/Longitude/Height](https://en.wikipedia.org/wiki/Latitude) \- "llh"** refers to angular measurements on the Earth's surface and an altitude measurement. Some parts of the SDK refer to the GPS antenna or robot body's position using this convention. - * **Seed Frame - "seed"** is a fixed metric frame in which a Graph Nav map has been represented (see [Graph Nav Map Structure](./graphnav_map_structure.md)). Graph Nav maps may contain a transformation between seed frame and the ECEF frame. - * **Waypoint Frame - "waypoint"** defines the frame of a graph nav waypoint. Usually this is the frame of the robot body at the time that the waypoint was recorded. Waypoints may contain transformations to the ECEF frame. +GPS data are used in Spot's SDK through the following reference frames: + +- **Robot Body - "body"** (see frames doc)is a frame at the geometric center of the robot's body. +- **Odometry - "odom"** (see frames doc) is an inertial frame that estimates the fixed location in the world (relative to where the robot is booted up) using the kinematics of the robot. +- **Payload -** is the frame of the robot's payload computer, usually defined using the payload registration service. +- **GPS Antenna - "gps"** this is the frame of the GPS receiver antenna, and is the frame that the GPS unit should be reporting positional measurements in. The orientation convention for this frame should be the same as with the robot body; that is, the x-axis should point "forward", and the z axis should point "up". The GPS antenna payload is defined in the GPS service itself. +- **[Earth-Centered-Earth-Fixed ](https://en.wikipedia.org/wiki/Earth-centered,_Earth-fixed_coordinate_system)** **\- "ecef"** is a standard frame defined based on the center of the Earth. Some parts of the SDK refer to the GPS antenna or robot body's relative position and/or orientation with respect to this frame. +- **[Latitude/Longitude/Height](https://en.wikipedia.org/wiki/Latitude) \- "llh"** refers to angular measurements on the Earth's surface and an altitude measurement. Some parts of the SDK refer to the GPS antenna or robot body's position using this convention. +- **Seed Frame - "seed"** is a fixed metric frame in which a Graph Nav map has been represented (see [Graph Nav Map Structure](./graphnav_map_structure.md)). Graph Nav maps may contain a transformation between seed frame and the ECEF frame. +- **Waypoint Frame - "waypoint"** defines the frame of a graph nav waypoint. Usually this is the frame of the robot body at the time that the waypoint was recorded. Waypoints may contain transformations to the ECEF frame. ## Software Integration -### Registration to Odometry - +### Registration to Odometry + As Spot moves, it measures the movement of its body with respect to the ground. This position measurement is known as odometry and is measured with respect to a coordinate frame known as odom. Importantly, this measurement has @@ -67,165 +68,164 @@ orientation. In order to extract orientation information, the GPS data is transformed into a Cartesian coordinate system tangent to the surface of the Earth. A trajectory of odometry and GPS measurements is synchronized in time and recorded. As Spot moves through its environment, this trajectory is used -to find a registration _odom_T_gps_ between the odom frame and the GPS frame -tangent to the Earth. +to find a registration _odom_T_gps_ between the odom frame and the GPS frame +tangent to the Earth. ![](images/gps_registration.png) -_Figure 3: Correlation and registration of GPS and Odometry trajectories._ - +_Figure 3: Correlation and registration of GPS and Odometry trajectories._ + The currently computed registration can be queried using the Spot API. The -Registration service supports the _GetLocation_ RPC which returns a -_GetLocationResponse_ . - - -GetLocationResponse::Status | Explanation ------------------------------------------------------|---- -`STATUS_UNKNOWN` | No registration could be computed -`STATUS_OK` | A (possibly invalid) registration was computed -`STATUS_NEEDS_DEVICE` | No GPS device is available to compute a registration +Registration service supports the _GetLocation_ RPC which returns a +_GetLocationResponse_ . + +| GetLocationResponse::Status | Explanation | +| --------------------------- | ---------------------------------------------------- | +| `STATUS_UNKNOWN` | No registration could be computed | +| `STATUS_OK` | A (possibly invalid) registration was computed | +| `STATUS_NEEDS_DEVICE` | No GPS device is available to compute a registration | If the Registration status is STATUS_OK, a Registration object will be -available for inspection. - - -Registration::Status | Explanation ---- | --- -`STATUS_UNKNOWN` | No registration could be computed -`STATUS_OK` | A registration was computed -`STATUS_NEED_DATA` | No usable GPS data was available -`STATUS_NEED_MORE_DATA` | Spot has not moved far enough -`STATUS_STALE` | No usable data has been received recently enough to compute a registration - - - -### Registration to Graph Nav Maps - +available for inspection. + +| Registration::Status | Explanation | +| ----------------------- | -------------------------------------------------------------------------- | +| `STATUS_UNKNOWN` | No registration could be computed | +| `STATUS_OK` | A registration was computed | +| `STATUS_NEED_DATA` | No usable GPS data was available | +| `STATUS_NEED_MORE_DATA` | Spot has not moved far enough | +| `STATUS_STALE` | No usable data has been received recently enough to compute a registration | + +### Registration to Graph Nav Maps + While recording a Graph Nav map (see [here](../../../python/examples/graph_nav_command_line/README.md)), whenever a GPS device is attached to the robot and a registration to odometry is found, the registration is stored in the Graph Nav Map inside individual -waypoint snapshots. - +waypoint snapshots. + This is referred to as "raw GPS data" in examples (see -[here](../../../python/examples/graph_nav_view_gps/README.md)). Note +[here](../../../python/examples/graph_nav_view_gps/README.md)). Note that the raw data stored in waypoint snapshots represents the registration to the odometry frame at the time the waypoint snapshot was recorded, and may be inaccurate or missing entirely in areas where there were no satellites -reachable from the GPS. - -```python +reachable from the GPS. + +```python # World objects stored within waypoint snapshots may contain raw GPS data and -a registration to the odometry frame. - for world_object in snapshot.objects: - if world_object.HasField('gps_properties'): - # This is a "latitude longitude height" message. - llh = world_object.gps_properties.registration.robot_body_location - -``` - +a registration to the odometry frame. + for world_object in snapshot.objects: + if world_object.HasField('gps_properties'): + # This is a "latitude longitude height" message. + llh = world_object.gps_properties.registration.robot_body_location + +``` + Graph Nav maps can also be registered to the ECEF frame using anchoring optimization (see [here](../../../python/examples/graph_nav_anchoring_optimization/README.md)). This process takes all of the raw GPS data in the map along with the odometry data, fiducials, loop closures and other measurements to find an optimized -registration between the seed frame and the ECEF frame. +registration between the seed frame and the ECEF frame. ![](images/gps_map.png) _Figure 4: an example of the raw (blue) and annotated (red) GPS data displayed on OpenStreetMaps. The raw data may have noise, missing data, or systematic -errors that anchoring optimization attempts to correct._ - +errors that anchoring optimization attempts to correct._ + Registrations to the ECEF frame obtained via this method are available in -waypoint annotations: -```python -# The optimized GPS data is stored in each waypoint's annotations. -ecef_tform_waypoint = waypoint.annotations.gps_settings.ecef_tform_waypoint -``` - +waypoint annotations: + +```python +# The optimized GPS data is stored in each waypoint's annotations. +ecef_tform_waypoint = waypoint.annotations.gps_settings.ecef_tform_waypoint +``` + Note that after anchoring optimization, all of the waypoints stored in the graph will have an associated ecef_tform_waypoint transform. For waypoints without raw GPS data in them, this value corresponds to the anchoring optimizer's best guess at where these waypoints are given the data from -waypoints that do have raw gps data in them. - +waypoints that do have raw gps data in them. + If you are unsatisfied with the results of anchoring optimization, or want to modify the gps coordinates of any waypoint, you may directly set the values inside waypoint annotations, and these will be used by the robot for -navigation and localization. - -### Navigating using Graph Nav and GPS - +navigation and localization. + +### Navigating using Graph Nav and GPS + When the robot is navigating on a Graph Nav map, it will use data from GPS -whenever: - - 1. There exists a GPS-enabled payload and GPS service running currently on the robot. - 2. The map has either raw GPS data in waypoint snapshots, or GPS data in waypoint annotations. - 1. When both exist, Graph Nav will use the data in waypoint annotations. - +whenever: + +1. There exists a GPS-enabled payload and GPS service running currently on the robot. +2. The map has either raw GPS data in waypoint snapshots, or GPS data in waypoint annotations. +3. When both exist, Graph Nav will use the data in waypoint annotations. + Graph Nav automatically uses or ignores GPS data depending on the context. For example, in areas where GPS signal is lost (too few satellites, high error, etc.) Graph Nav will simply continue navigating using realsense data, LIDAR point clouds, fiducials, and odometry. When GPS signal is reacquired, Graph -Nav will attempt to use the data without interruption. - +Nav will attempt to use the data without interruption. + If GPS data is expected, but not present on the robot (due to misconfigured or broken payload hardware, for example), Graph Nav navigation will fail with a -STATUS_IMPAIRED return code. - -#### RPCs - +STATUS_IMPAIRED return code. + +#### RPCs + The following RPCs are relevant for using and understanding GPS use in Graph -Nav: - - * **graph_nav.GetLocalizationState -** this RPC returns information about the robot's GPS-centric localization when "request_gps_state" is set to "true" in the request. - * This returns a message of type GPSLocalization, which contains an estimate of the robot's body in ECEF frame and LLH frame, and diagnostic information about the current GPS state and whatever GPS state happens to be in the map. - - **GPSLocalization::State** | **Explanation** - ----|---- - `STATE_OK` | Using GPS. - `STATE_BAD_FRAMES` | Error getting frames (ko, etc.) - `STATE_NO_GPS_OBJECTS ` | No GPS available. - `STATE_REGISTRATION_NOT_OK` | GPS registration isn't ready. - `STATE_NO_GPS_STATES` | No GPS state measurements. - `STATE_NOT_ENOUGH_SATELLITES` | Too few satellites to localize. - `STATE_NO_ECEF_FRAME` | GPS registration is missing a frame. - `STATE_HIGH_ERROR` | The GPS data exists, but is high error. - `STATE_STALE ` | The GPS data exists, and we have not used it yet, but it is too old to use. - `STATE_INTERNAL_ERROR ` | Internal error (e.g. missing waypoints). - -* **graph_nav.NavigateToAnchor** \- this RPC allows Graph Nav to navigate to either a point in the "seed" frame, the ECEF frame, or the LLH frame. To navigate to a latitude and longitude, or to an ECEF coordinate, use GPSNavigationParams as the goal field. - * When navigating to a GPS coordinate, Graph Nav will use its best guess of where each waypoint is in the ECEF frame to find the closest waypoint to the goal. Graph Nav will then navigate to that waypoint, and then walk the robot in a straight line toward the goal. - * If the GPS command fails, NavigateToAnchor will return `INVALID_GPS_COMMAND``. Here are possible reasons the GPS command might be invalid: - - **GPSStatus** |**Explanation** - ----|---- - `GPS_STATUS_OK` | The GPS command was valid and can be executed. - `GPS_STATUS_NO_COORDS_IN_MAP` |The GPS command could not be completed because the map does not have GPScoordinates, neither in waypoint annotations nor in the waypoint snapshot data. Please record the map using a GPS-enabled robot, or annotate the waypoints with custom GPS coordinates. - `GPS_STATUS_TOO_FAR_FROM_MAP` | The GPS command could not be completed because the coordinates passed in weretoo far from any mapped GPS data. - - - - > Note that LLH coordinates given to this request require sufficient precision (in the sub-meter range) for the robot to navigate successfully to them. The order of magnitude of precision required is about $1 \times 10^{-6}$ degrees. If this isn't satisfied, GPS_STATUS_TOO_FAR_FROM_MAP is likely to be returned. - -* **map_processing.ProcessAnchoring -** this RPC may be used to find an optimized pose of every waypoint in the ECEF frame. Set "measurement_params.use_gps" to true and set "apply_gps_result_to_waypoint_on_server" to true as well to set the waypoint transforms in ECEF frame. - * After processing the anchoring, re-download the map using the graph_nav.DownloadGraph RPC to see the changes. - -## Tablet +Nav: + +- **graph_nav.GetLocalizationState -** this RPC returns information about the robot's GPS-centric localization when "request_gps_state" is set to "true" in the request. + + - This returns a message of type GPSLocalization, which contains an estimate of the robot's body in ECEF frame and LLH frame, and diagnostic information about the current GPS state and whatever GPS state happens to be in the map. + + | **GPSLocalization::State** | **Explanation** | + | ----------------------------- | --------------------------------------------------------------------------- | + | `STATE_OK` | Using GPS. | + | `STATE_BAD_FRAMES` | Error getting frames (ko, etc.) | + | `STATE_NO_GPS_OBJECTS ` | No GPS available. | + | `STATE_REGISTRATION_NOT_OK` | GPS registration isn't ready. | + | `STATE_NO_GPS_STATES` | No GPS state measurements. | + | `STATE_NOT_ENOUGH_SATELLITES` | Too few satellites to localize. | + | `STATE_NO_ECEF_FRAME` | GPS registration is missing a frame. | + | `STATE_HIGH_ERROR` | The GPS data exists, but is high error. | + | `STATE_STALE ` | The GPS data exists, and we have not used it yet, but it is too old to use. | + | `STATE_INTERNAL_ERROR ` | Internal error (e.g. missing waypoints). | + +- **graph_nav.NavigateToAnchor** \- this RPC allows Graph Nav to navigate to either a point in the "seed" frame, the ECEF frame, or the LLH frame. To navigate to a latitude and longitude, or to an ECEF coordinate, use GPSNavigationParams as the goal field. + + - When navigating to a GPS coordinate, Graph Nav will use its best guess of where each waypoint is in the ECEF frame to find the closest waypoint to the goal. Graph Nav will then navigate to that waypoint, and then walk the robot in a straight line toward the goal. + - If the GPS command fails, NavigateToAnchor will return `INVALID_GPS_COMMAND``. Here are possible reasons the GPS command might be invalid: + + | **GPSStatus** | **Explanation** | + | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `GPS_STATUS_OK` | The GPS command was valid and can be executed. | + | `GPS_STATUS_NO_COORDS_IN_MAP` | The GPS command could not be completed because the map does not have GPScoordinates, neither in waypoint annotations nor in the waypoint snapshot data. Please record the map using a GPS-enabled robot, or annotate the waypoints with custom GPS coordinates. | + | `GPS_STATUS_TOO_FAR_FROM_MAP` | The GPS command could not be completed because the coordinates passed in were too far from any mapped GPS data. | + + > Note that LLH coordinates given to this request require sufficient precision (in the sub-meter range) for the robot to navigate successfully to them. The order of magnitude of precision required is about $1 \times 10^{-6}$ degrees. If this isn't satisfied, GPS_STATUS_TOO_FAR_FROM_MAP is likely to be returned. + +- **map_processing.ProcessAnchoring -** this RPC may be used to find an optimized pose of every waypoint in the ECEF frame. Set "measurement_params.use_gps" to true and set "apply_gps_result_to_waypoint_on_server" to true as well to set the waypoint transforms in ECEF frame. + - After processing the anchoring, re-download the map using the graph_nav.DownloadGraph RPC to see the changes. + +## Tablet ### GPS Status Display + When recording a Graph Nav map, or localizing to a loaded Graph Nav map, the status of the GPS system is displayed at the top of the screen after the Earth (🌎) icon: ![](images/tablet_gps_icons.png) These icons communicate status of the "Live" data (that is, data arriving at the present moment from the GPS service), and the "Map" data (that is, the status of GPS data in the currently recorded map). The meaning of the icons is shown below: -Icon | Name | Explanation ----|---|--- -. | *nothing* | Neither the live nor the map data reports that a GPS service exists. -❌ | *x mark* | The GPS service is not working, misconfigured, or does not exist. -**?** | *question mark* | A GPS service exists, but the data are not being used (either because it is high error, or there are too few satellites). -✔️ | *check mark* | A GPS service exists, and the data are being used. +| Icon | Name | Explanation | +| ----- | --------------- | ------------------------------------------------------------------------------------------------------------------------- | +| . | _nothing_ | Neither the live nor the map data reports that a GPS service exists. | +| ❌ | _x mark_ | The GPS service is not working, misconfigured, or does not exist. | +| **?** | _question mark_ | A GPS service exists, but the data are not being used (either because it is high error, or there are too few satellites). | +| ✔️ | _check mark_ | A GPS service exists, and the data are being used. | + +For example, in the image shown the icons: -For example, in the image shown the icons: > 🌎 Live: **?** Map: ✔️ mean that the current GPS data exists but is high error or has too few satellites, and that the map data exists and is of high quality. When this happens, the robot is navigating using its cameras, LIDAR point cloud, fiducials, etc. but is not using GPS data. @@ -234,4 +234,4 @@ mean that the current GPS data exists but is high error or has too few satellite To record an Autowalk Mission with GPS, simply record an Autowalk mission as you normally would, and keep an eye on the GPS status icons shown above. If live GPS data ever appears, it will be recorded into the map that Autowalk uses, and later the robot will be able to navigate using GPS while running that mission. -Missions without GPS can also be *extended* using a robot that has a GPS service, and the inferred GPS coordinates of the rest of the map will be automatically inferred via anchoring optimization on mission download from the tablet. \ No newline at end of file +Missions without GPS can also be _extended_ using a robot that has a GPS service, and the inferred GPS coordinates of the rest of the map will be automatically inferred via anchoring optimization on mission download from the tablet. diff --git a/docs/concepts/autonomy/graphnav_and_robot_locomotion.md b/docs/concepts/autonomy/graphnav_and_robot_locomotion.md index 7df064244..80a4cb4aa 100644 --- a/docs/concepts/autonomy/graphnav_and_robot_locomotion.md +++ b/docs/concepts/autonomy/graphnav_and_robot_locomotion.md @@ -10,9 +10,9 @@ Development Kit License (20191101-BDSDK-SL). The GraphNav service provides three RPCs for navigating to different locations on the prior map: -* NavigateTo -* NavigateRoute -* NavigateToAnchor +- NavigateTo +- NavigateRoute +- NavigateToAnchor These RPCs let the client specify maximum speed as well as the size of the goal region at the final waypoint. @@ -20,50 +20,46 @@ These RPCs let the client specify maximum speed as well as the size of the goal The `NavigateTo` RPC is the simplest way to command a robot to go to a destination on the map once the robot is localized. GraphNav will decide which route to take, currently the one with the fewest number of edges. - ## NavigateRoute The `NavigateRoute` RPC allows the client to directly specify the path of the robot. This lets the client command the robot to take a longer path as needed. Routes are specified as a list of waypoints and edges. For example, you could make a path that doubles back on itself, allowing the robot to go to a distant waypoint and then back to the start. Clients that maintain contact with the robot are encouraged to continuously resend the command with a deadline in the near future. This results in the robot stopping quickly if the client stops checking in. Clients that disconnect from an autonomous robot should set a longer deadline and rely on an alternate mechanism to maintain safety. - ## NavigateToAnchor The `NavigateToAnchor` RPC allows the client to command the robot go to an approximate `x, y, z` position relative to the seed frame. This position can also be specified in a global coordinate system (like GPS coordinates, for example). - ## Status and feedback API clients should periodically query for navigation status during map replay using the `NavigationFeedback` RPC. -* Unless an error is returned, `NavigationFeedbackResponse` is returned with status `STATUS_FOLLOWING_ROUTE` and the remaining list of waypoints and edges in the route. -* On successful completion, the navigation status changes to `STATUS_REACHED_GOAL` when the robot reaches the end of the commanded route, matching both the position and yaw of the final waypoint. +- Unless an error is returned, `NavigationFeedbackResponse` is returned with status `STATUS_FOLLOWING_ROUTE` and the remaining list of waypoints and edges in the route. +- On successful completion, the navigation status changes to `STATUS_REACHED_GOAL` when the robot reaches the end of the commanded route, matching both the position and yaw of the final waypoint. Clients requiring high precision should check localization with `GetLocalizationState` RPC even after reaching the goal, as the robot will be close but not exactly on the goal. - ## Autonomous navigation errors The following error types can interrupt an autonomous route: -| Error code | Description | -| ---------- | ----------- | -| STATUS_NO_ROUTE | Indicates the client changed something that invalidated the route. | -| STATUS_NO_LOCALIZATION | The robot is not localized to the map. | -| STATUS_NOT_LOCALIZED_TO_ROUTE | Localized and not lost but not on the commanded route. | -| STATUS_COMMAND_OVERRIDDEN | A new GraphNav command has overridden the command that the user is asking for feedback about. | -| STATUS_LOST | Lost means the robot is no longer confident in its localization, and must be re-localized. | -| STATUS_STUCK | Stuck means that the robot is still localized but is having trouble reaching the destination (usually because of an obstacle in the way). | -| STATUS_ROBOT_FROZEN
STATUS_ROBOT_FAULTED | Indicates the robot fell or has a hardware problem. | -| STATUS_CONSTRAINT_FAULT | Indicates the route is over-constrained. Choose a different route. | -| STATUS_LEASE_ERROR | Indicates the lease given to GraphNav is no longer valid. | -| STATUS_COMMAND_TIMED_OUT | Indicates a comms problem or the timeout deadline was reached. | -| STATUS_ROBOT_IMPAIRED | Indicates a crtical perception fault, behavior fault, or LIDAR not working. | -| STATUS_AREA_CALLBACK_ERROR | Indicates an error occurred with an Area Callback. | - +| Error code | Description | +| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_NO_ROUTE | Indicates the client changed something that invalidated the route. | +| STATUS_NO_LOCALIZATION | The robot is not localized to the map. | +| STATUS_NOT_LOCALIZED_TO_ROUTE | Localized and not lost but not on the commanded route. | +| STATUS_COMMAND_OVERRIDDEN | A new GraphNav command has overridden the command that the user is asking for feedback about. | +| STATUS_LOST | Lost means the robot is no longer confident in its localization, and must be re-localized. | +| STATUS_STUCK | Stuck means that the robot is still localized but is having trouble reaching the destination (usually because of an obstacle in the way). | +| STATUS_ROBOT_FROZEN
STATUS_ROBOT_FAULTED | Indicates the robot fell or has a hardware problem. | +| STATUS_CONSTRAINT_FAULT | Indicates the route is over-constrained. Choose a different route. | +| STATUS_LEASE_ERROR | Indicates the lease given to GraphNav is no longer valid. | +| STATUS_COMMAND_TIMED_OUT | Indicates a comms problem or the timeout deadline was reached. | +| STATUS_ROBOT_IMPAIRED | Indicates a critical perception fault, behavior fault, or LIDAR not working. | +| STATUS_AREA_CALLBACK_ERROR | Indicates an error occurred with an Area Callback. | + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/graphnav_area_callbacks.md b/docs/concepts/autonomy/graphnav_area_callbacks.md index 7789f19eb..f9b9771af 100644 --- a/docs/concepts/autonomy/graphnav_area_callbacks.md +++ b/docs/concepts/autonomy/graphnav_area_callbacks.md @@ -10,7 +10,7 @@ Development Kit License (20191101-BDSDK-SL). ## Introduction -Imagine we want Spot to check for forklifts before deciding to cross the road. If this is part of a mission, we could add a [remote mission callback service](../../../python/examples/remote_mission_service/README.md) that makes the robot to look left and right before crossing the road, where the robot's vision is connected to an ML model that checks for the forklift on the road. However, this approach will only execute the callback when it is at that point in the mission. In cases where the robot reroutes across the crosswalk due to a blockage elsewhere, or the robot decides to return to a dock across the crosswalk when its battery is low, or if the map is used for navigation outside of that mission, the robot will _not_ execute that callback, but will instead walk directly out into the crosswalk, regardless of whether it is safe to do so. +Imagine we want Spot to check for forklifts before deciding to cross the road. If this is part of a mission, we could add a [remote mission callback service](../../../python/examples/remote_mission_service/README.md) that makes the robot to look left and right before crossing the road, where the robot's vision is connected to an ML model that checks for the forklift on the road. However, this approach will only execute the callback when it is at that point in the mission. In cases where the robot reroutes across the crosswalk due to a blockage elsewhere, or the robot decides to return to a dock across the crosswalk when its battery is low, or if the map is used for navigation outside of that mission, the robot will _not_ execute that callback, but will instead walk directly out into the crosswalk, regardless of whether it is safe to do so. We sometimes want the robot _to execute a sequence of actions anytime the robot is at the certain location in the map_. That is where we can use **Area Callbacks**. An Area Callback allows the user to associate certain areas with specified actions, such as safety checks at the crosswalks, opening doors, and signaling the environment using the lights and sounds. @@ -18,7 +18,7 @@ We sometimes want the robot _to execute a sequence of actions anytime the robot ![Area Callback Figure](./images/area_callback_figure.png) -GraphNav maps are composed of edges and waypoints. These edges are annotated with information that is necessary for the successful navigation of the robot. In addition to information such as detected stairs and different friction coefficient settings for slippery surfaces, annotations can include **Area Callback Regions** so that robot can complete assigned actions every time it visits these edges. These regions specify which **Area Callback Service** should be called to handle this region. +GraphNav maps are composed of edges and waypoints. These edges are annotated with information that is necessary for the successful navigation of the robot. In addition to information such as detected stairs and different friction coefficient settings for slippery surfaces, annotations can include **Area Callback Regions** so that robot can complete assigned actions every time it visits these edges. These regions specify which **Area Callback Service** should be called to handle this region. We may want the robot to do different things for each of the following cases: @@ -26,14 +26,15 @@ We may want the robot to do different things for each of the following cases: - the robot is _crossing_ the Area Callback region - the robot gets to the _end_ of the Area Callback region -The Area Callback service that is called can specify a _policy_ as to what should GraphNav should do at the start and end of the region. Options include continuing on, stopping and waiting for the callback to allow it to continue, or delegating control to the callback to perform an action with the robot. +The Area Callback service that is called can specify a _policy_ as to what should GraphNav should do at the start and end of the region. Options include continuing on, stopping and waiting for the callback to allow it to continue, or delegating control to the callback to perform an action with the robot. ## Area Callback Policies -Policies specify what should happen at the beginning and end of an Area Callback region. Setting the policy for the start of a region after it has already passed will have no effect. - - **Stop.** Navigation will pause at the target position indefinitely until the policy is changed. - - **Control.** When the target position is reached, control will be transferred to the Area Callback service. The service will retain control until the service changes its policy. - - **Continue On.** Navigation may continue past the target position. If this policy is set before the position is reached, the robot will continue past without stopping. Setting this policy at the start of a region will continue to update the callback service throughout the region. In contrast, reporting that the callback is complete will stop updating a callback altogether. +Policies specify what should happen at the beginning and end of an Area Callback region. Setting the policy for the start of a region after it has already passed will have no effect. + +- **Stop.** Navigation will pause at the target position indefinitely until the policy is changed. +- **Control.** When the target position is reached, control will be transferred to the Area Callback service. The service will retain control until the service changes its policy. +- **Continue On.** Navigation may continue past the target position. If this policy is set before the position is reached, the robot will continue past without stopping. Setting this policy at the start of a region will continue to update the callback service throughout the region. In contrast, reporting that the callback is complete will stop updating a callback altogether. ### Example: Crosswalk SpotCAM Light @@ -42,16 +43,16 @@ Policies specify what should happen at the beginning and end of an Area Callback - the robot gets to the _start_ of the callback (Area Callback region) - the robot _waits and checks_ its surrounding for the forklift (ML example included as pseudocode), during which it flashes the lights of the SpotCAM slowly. - once the robot confirms that the crosswalk is clear of forklifts, it starts _crossing_ the region, during which it flashes the lights quickly and brighter. -- the robot reaches the _end_ to turn off the spotcam light and proceed to complete the rest of the mission +- the robot reaches the _end_ to turn off the SpotCAM light and proceed to complete the rest of the mission -For this example, the callback will set a policy to tell the robot to **stop** at the start of the region. After the callback verified that it is safe to cross, it would change the policy to **continue on** past the start and **continue on** past the end. +For this example, the callback will set a policy to tell the robot to **stop** at the start of the region. After the callback verified that it is safe to cross, it would change the policy to **continue on** past the start and **continue on** past the end. The callback will still continue to be updated by graph nav for the duration of the region traversal, so that it can continue flashing the lights throughout the region. Code implementing this callback can be found in the [python example](../../../python/examples/area_callback/README.md). ## The Life Cycle of an Area Callback -An Area Callback is a gRPC service implementing the `AreaCallbackService` definition. It responds to RPC calls to describe itself, and to execute actions during navigation. +An Area Callback is a gRPC service implementing the `AreaCallbackService` definition. It responds to RPC calls to describe itself, and to execute actions during navigation. ### Startup @@ -68,81 +69,89 @@ When recording a map, the tablet shows Area Callbacks similarly to other actions ### Execution When reaching an Area Callback region, GraphNav will begin calling out to the callback service. + 1. **BeginCallback**: This call lets the callback know that the region is beginning, and includes the region id and the route through the region. -2. **UpdateCallback**: This call will include the stage of traversal through the region, and the response to this call sets the current policy for the callback. This RPC is repeated regularly for the entire traversal of the region, and the callback can update its policy appropriately as things change. -3. **BeginControl**: This call transfers control of the robot to the callback with a Lease. The callback remains in control until it either changes its policy (via `UpdateCallback`) to no longer request control, or it receives a LeaseUseResult through its lease usage that indicates that some other system is now in control of the robot. -4. **EndCallback**: Called either when leaving the region, or when the response to `UpdateCallback` indicates that the callback is complete. `UpdateCallback` will no longer be called. `EndCallback` may also be called early if GraphNav is interrupted and is no longer executing the route. +2. **UpdateCallback**: This call will include the stage of traversal through the region, and the response to this call sets the current policy for the callback. This RPC is repeated regularly for the entire traversal of the region, and the callback can update its policy appropriately as things change. +3. **BeginControl**: This call transfers control of the robot to the callback with a Lease. The callback remains in control until it either changes its policy (via `UpdateCallback`) to no longer request control, or it receives a LeaseUseResult through its lease usage that indicates that some other system is now in control of the robot. +4. **EndCallback**: Called either when leaving the region, or when the response to `UpdateCallback` indicates that the callback is complete. `UpdateCallback` will no longer be called. `EndCallback` may also be called early if GraphNav is interrupted and is no longer executing the route. ### Service Shutdown -If shutting down an Area Callback service, the service should unregister itself from the directory. This will be handled automatically when using the python `DirectoryRegistrationKeepAlive` helper. +If shutting down an Area Callback service, the service should unregister itself from the directory. This will be handled automatically when using the python `DirectoryRegistrationKeepAlive` helper. ## Creating an Area Callback -Implementing an Area Callback is accomplished through writing and registering an `AreaCallbackService`. The recommended way to write this service is to inherit from the python helper class `AreaCallbackRegionHandlerBase` and implement the `begin()`, `run()`, and `end()` methods, and then use that class with the `AreaCallbackServiceServicer` and `GrpcServiceRunner` to run the service. [Python examples](../../../python/examples/area_callback/README.md) are available. +Implementing an Area Callback is accomplished through writing and registering an `AreaCallbackService`. The recommended way to write this service is to inherit from the python helper class `AreaCallbackRegionHandlerBase` and implement the `begin()`, `run()`, and `end()` methods, and then use that class with the `AreaCallbackServiceServicer` and `GrpcServiceRunner` to run the service. [Python examples](../../../python/examples/area_callback/README.md) are available. -When using the `AreaCallbackServiceServicer`, The normal usage is to pass in the newly implemented `AreaCallbackRegionHandlerBase` subclass as the `area_callback_builder_fn`. -This function is called fresh for each region that the callback is used to cross. As a result, a new instance of the class will be created for each region. If your use case requires sharing data across regions, you can define a function with the correct interface that will create your subclass with the correct shared data. Note that the `AreaCallbackRegionHandlerBase` class expects to be recreated fresh for each region, and so it is not recommended to use an `area_callback_builder_fn` that always returns the _same_ instance. +When using the `AreaCallbackServiceServicer`, The normal usage is to pass in the newly implemented `AreaCallbackRegionHandlerBase` subclass as the `area_callback_builder_fn`. +This function is called fresh for each region that the callback is used to cross. As a result, a new instance of the class will be created for each region. If your use case requires sharing data across regions, you can define a function with the correct interface that will create your subclass with the correct shared data. Note that the `AreaCallbackRegionHandlerBase` class expects to be recreated fresh for each region, and so it is not recommended to use an `area_callback_builder_fn` that always returns the _same_ instance. ### Configuring behavior for a callback -The behavior of GraphNav during an Area Callback can be modified by setting various fields in the `AreaCallbackInformation` message that GraphNav will query for. It is best practice to set all the available configuration options, even if the default behavior is the desired behavior. +The behavior of GraphNav during an Area Callback can be modified by setting various fields in the `AreaCallbackInformation` message that GraphNav will query for. It is best practice to set all the available configuration options, even if the default behavior is the desired behavior. #### Expected Blockages -Certain callback regions may be expected to appear blocked to GraphNav (such as a callback that opens a door). In those cases, GraphNav should not pre-emptively consider them blocked until the callback has had a chance to run. This is specified by setting the `blockage` field to `BLOCKAGE_SKIP` or `BLOCKAGE_CHECK`. +Certain callback regions may be expected to appear blocked to GraphNav (such as a callback that opens a door). In those cases, GraphNav should not pre-emptively consider them blocked until the callback has had a chance to run. This is specified by setting the `blockage` field to `BLOCKAGE_SKIP` or `BLOCKAGE_CHECK`. #### Impairment Check -GraphNav regularly monitors robot state and will set an error state if the robot becomes impaired in such a way that GraphNav can no longer function. However, interrupting a callback in the middle of controlling the robot can cause problems, particularly if the callback itself is not affected by the particular failure that affects GraphNav. +GraphNav regularly monitors robot state and will set an error state if the robot becomes impaired in such a way that GraphNav can no longer function. However, interrupting a callback in the middle of controlling the robot can cause problems, particularly if the callback itself is not affected by the particular failure that affects GraphNav. To control whether GraphNav will check for impairment errors when the callback is in control, set the `impairment_check` field to `IMPAIRMENT_SKIP` or `IMPAIRMENT_CHECK`. #### Entity Waiting -GraphNav will stop and wait for nearby entities during normal operation, but that behavior may be incorrect for a particular callback, either because the robot should continue past detected entities in this region, or because spurious entity detections are expected in the callback region. This behavior can be controlled by setting the `entity_waiting` field. + +GraphNav will stop and wait for nearby entities during normal operation, but that behavior may be incorrect for a particular callback, either because the robot should continue past detected entities in this region, or because spurious entity detections are expected in the callback region. This behavior can be controlled by setting the `entity_waiting` field. #### Stop Configuration -Various options can be set in the `StopConfiguration` message to control how the robot will stop at the start or end of a callback region. Certain callbacks may have particular requirements about what direction the robot should face, or how tightly the robot needs to match the recorded start of the region. + +Various options can be set in the `StopConfiguration` message to control how the robot will stop at the start or end of a callback region. Certain callbacks may have particular requirements about what direction the robot should face, or how tightly the robot needs to match the recorded start of the region. ### How to write a callback's `run()` -The majority of work for an `AreaCallbackRegionHandlerBase` subclass will be done in the `run()` method. This function is expected to run for the entire time that the robot is crossing the region. If the function returns early, that will signal to GraphNav that the callback is complete and no longer needs to be updated. Helper methods on the base class are provided to allow `run()` to block until a particular event it needs to react to. - - - `block_until_arrived_at_start()` - - `block_until_arrived_at_end()` - - `block_until_control()` - - `safe_sleep()` -These methods will return when their particular condition is met. If the navigation is aborted, they will raise an exception of a subclass of `bosdyn.client.area_callback_region_handler_base.HandlerError`. These exceptions do not need to be caught, and can be used to exit from `run()`. If you _do_ catch these exceptions for performing cleanup work, be sure to re-raise them after cleaning up, rather than continuing on in the `run()` method. It is expected that `run()` will complete quickly once navigation has stopped. If your use-case requires more time for cleanup operations you should create a thread to do that work and still return from `run()` quickly. Note that `safe_sleep()` works very similar to python's `time.sleep()` except that it will raise one of the above exceptions if the navigation through the region aborts during the sleep. +The majority of work for an `AreaCallbackRegionHandlerBase` subclass will be done in the `run()` method. This function is expected to run for the entire time that the robot is crossing the region. If the function returns early, that will signal to GraphNav that the callback is complete and no longer needs to be updated. Helper methods on the base class are provided to allow `run()` to block until a particular event it needs to react to. + +- `block_until_arrived_at_start()` +- `block_until_arrived_at_end()` +- `block_until_control()` +- `safe_sleep()` - In addition to these blocking methods, implementations can directly call `check()` which will immediately raise a `HandlerError` if the callback should abort. Also, the `stage()` and `has_control()` helpers can be used to check this information about current stage and control state in a non-blocking manner. `stage()` will return the [`bosdyn.api.UpdateCallbackRequest.Stage`](../../../protos/bosdyn/api/graph_nav/area_callback.proto#updatecallbackrequest-stage) enum describing the stage of crossing the region. +These methods will return when their particular condition is met. If the navigation is aborted, they will raise an exception of a subclass of `bosdyn.client.area_callback_region_handler_base.HandlerError`. These exceptions do not need to be caught, and can be used to exit from `run()`. If you _do_ catch these exceptions for performing cleanup work, be sure to re-raise them after cleaning up, rather than continuing on in the `run()` method. It is expected that `run()` will complete quickly once navigation has stopped. If your use-case requires more time for cleanup operations you should create a thread to do that work and still return from `run()` quickly. Note that `safe_sleep()` works very similar to python's `time.sleep()` except that it will raise one of the above exceptions if the navigation through the region aborts during the sleep. + +In addition to these blocking methods, implementations can directly call `check()` which will immediately raise a `HandlerError` if the callback should abort. Also, the `stage()` and `has_control()` helpers can be used to check this information about current stage and control state in a non-blocking manner. `stage()` will return the [`bosdyn.api.UpdateCallbackRequest.Stage`](../../../protos/bosdyn/api/graph_nav/area_callback.proto#updatecallbackrequest-stage) enum describing the stage of crossing the region. Aside from the task-specific work that the callback does, its other responsibility is to communicate a two-part _policy_ to GraphNav as to what actions GraphNav should perform at the start and end of the region. The recommended way to set and update this policy is to use the helper methods: - - `stop_at_start()` - - `control_at_start()` - - `continue_past_start()` - - `stop_at_end()` - - `control_at_end()` - - `continue_past_end()` +- `stop_at_start()` +- `control_at_start()` +- `continue_past_start()` +- `stop_at_end()` +- `control_at_end()` +- `continue_past_end()` The policy can be initially set in the constructor of the handler, and updated in `run()`. The correct way to continue on after using `stop_at_*` or `control_at_*` is to use `continue_past_*` once the reason for stopping or controlling the robot is complete. In the [area_callback_crosswalk](../../../python/examples/area_callback/README.md) example, the initial policy is set in the constructor to + ```python self.stop_at_start() self.continue_past_end() -``` +``` + To tell GraphNav that the robot should stop at the start of the region, but after it is past the start, it does not need to stop at the end of the region. Inside `run()`, after the callback has verified that it is safe to cross, the callback modifies the policy via its helper method: + ```python self.continue_past_start() ``` + After this call, the policy for the callback will be updated to specify that GraphNav does not need to stop at the start, and it also continues the second part of the policy that it does not need to stop at the end of the region. -Returning from the `run()` method will signal to GraphNav that the callback is complete, and no longer needs to be updated. GraphNav will continue on past the start and end of the region if it has not already. +Returning from the `run()` method will signal to GraphNav that the callback is complete, and no longer needs to be updated. GraphNav will continue on past the start and end of the region if it has not already. ### Controlling the Robot -Control can be given to the robot to perform an action at the start or end of the region. The common use case for this are to position the robot precisely and perform an action before giving control back to graph nav to cross the region, or to manage the traversal of the entire region itself. Control is acquired by setting the policy to **control**, and waiting for GraphNav to delegate control. After GraphNav delegates control, the `Robot` object for the callback will have its lease wallet updated and commands can be sent. +Control can be given to the robot to perform an action at the start or end of the region. The common use case for this are to position the robot precisely and perform an action before giving control back to graph nav to cross the region, or to manage the traversal of the entire region itself. Control is acquired by setting the policy to **control**, and waiting for GraphNav to delegate control. After GraphNav delegates control, the `Robot` object for the callback will have its lease wallet updated and commands can be sent. ```python self.control_at_start() # Set region policy @@ -153,7 +162,7 @@ Control can be given to the robot to perform an action at the start or end of th #### Updating the localization -If the area callback is traversing the region itself, when it reaches the end of the region it should update the localization of the robot within the map before returning control. The GraphNav considers the callback to still be "at" the start of the region (`STAGE_AT_START`) until either it drives the robot past the start, or the callback explicitly updates the localization. If the callback drives the robot and tells GraphNav to continue on without updating the localization, then GraphNav will attempt to navigate from the start of the region. +If the area callback is traversing the region itself, when it reaches the end of the region it should update the localization of the robot within the map before returning control. The GraphNav considers the callback to still be "at" the start of the region (`STAGE_AT_START`) until either it drives the robot past the start, or the callback explicitly updates the localization. If the callback drives the robot and tells GraphNav to continue on without updating the localization, then GraphNav will attempt to navigate from the start of the region. ```python # Commands here driving the robot to the end of the region. @@ -165,26 +174,35 @@ If the area callback is traversing the region itself, when it reaches the end of ``` ### Reporting Errors -If an unrecoverable error occurs, the `run()` method should raise an exception. This will get translated into a response to GraphNav that the callback has failed. There are a few special errors that can re-raised with special meaning. - - **LeaseError** - This will be raised when the callback has control if some other system takes over control of the robot. This will generally be raised by robot command RPCs sent by the callback service, and it is recommended to not catch the error, but to instead let raise out of `run()`. If a callback needs to catch it to perform some cleanup, it should re-raise it. - - **PathBlocked** - This error should be raised if the callback determines that the region is blocked, and GraphNav should attempt to re-route around it. This should only be raised at the start of the region. If the callback service has been in control of the robot, it should attempt to return to the start of the region before raising this error, or GraphNav may not be able to successfully resume navigation. It should not be raised if the localization has already been updated to the end of the region. - - **HandlerError** - This error will be raised from helper functions if the area callback has already been aborted or exited, and `run()` should exit. Handlers should only catch this exception if there is some cleanup to perform before exiting `run()`. + +If an unrecoverable error occurs, the `run()` method should raise an exception. This will get translated into a response to GraphNav that the callback has failed. There are a few special errors that can re-raised with special meaning. + +- **LeaseError** - This will be raised when the callback has control if some other system takes over control of the robot. This will generally be raised by robot command RPCs sent by the callback service, and it is recommended to not catch the error, but to instead let it raise out of `run()`. If a callback needs to catch it to perform some cleanup, it should re-raise it after that cleanup is performed. +- **PathBlocked** - This error should be raised if the callback determines that the region is blocked, and GraphNav should attempt to re-route around it. This should only be raised at the start of the region. If the callback service has been in control of the robot, it should attempt to return to the start of the region before raising this error, or GraphNav may not be able to successfully resume navigation. It should not be raised if the localization has already been updated to the end of the region. +- **HandlerError** - This error will be raised from helper functions if the area callback has already been aborted or exited, and `run()` should exit. Handlers should only catch this exception if there is some cleanup to perform before exiting `run()`. ### Handling Re-routing + If the robot is blocked by an obstacle while crossing an area callback, GraphNav may decide to re-plan through the map, and take a different route to the goal. -When this happens, the Area Callback is not restarted, but an additional RPC will be made to the callback informing it of the new route. -Most callbacks can ignore that RPC, but callbacks that want to react to it can override the `route_changed()` method. Be aware `route_changed()` method will be called from a different thread than the thread that is running the `run()` method. The return type for `route_changed()` currently only has a single option which lets the callback request that `run()` be restarted if it had previously finished. Note that if it restarts, it will already be past the start of the region, so `block_until_arrived_at_start()` will immediately return `False`. +There are two possibilities of what can happen when this occurs: +1. The Area Callback is not restarted, but an additional RPC will be made to the callback informing it of the new route. This occurs when GraphNav reroutes during a navigation command. -## Testing an Area Callback +Most callbacks can ignore that RPC, but callbacks that want to react to it can override the `route_changed()` method. Be aware `route_changed()` method will be called from a different thread than the thread that is running the `run()` method. The return type for `route_changed()` currently only has a single option which lets the callback request that `run()` be restarted if it had previously finished. Note that if it restarts, it will already be past the start of the region, so `block_until_arrived_at_start()` will immediately return `False`. +2. The Area Callback is restarted. This occurs when GraphNav is stopped and then re-run with a new command (such as to ask the operator what to do, or because a mission was explicitly paused). + +When the BeginCallback RPC is called in the restarting case, the RegionInformation will have the `starting_inside_region` field set to `True`. The callback can use this information to skip some of its initial steps if applicable. As an example, if the "spot-crosswalk" callback is starting from inside the crosswalk, it will not try to check that the crosswalk is clear, but will instead immediately start to exit the crosswalk. + +## Testing an Area Callback ### Test runner script -Once a callback is written, it can be tested using the [area_callback_test_runner](../../../python/examples/area_callback/README.md#running-the-example-without-graph-nav-recording) script. This script will call the callback directly, without involving GraphNav. Because GraphNav is not running the callback, certain features may not be available. For example, route and region information will not be filled out in the BeginCallbackRequest, and requesting localization data from GraphNav may not provide meaningful responses. But for many types of Area Callbacks, this test script provides a simple way to make sure that they are operating as expected and to debug failures. +Once a callback is written, it can be tested using the [area_callback_test_runner](../../../python/examples/area_callback/README.md#running-the-example-without-graph-nav-recording) script. This script will call the callback directly, without involving GraphNav. Because GraphNav is not running the callback, certain features may not be available. For example, route and region information will not be filled out in the BeginCallbackRequest, and requesting localization data from GraphNav may not provide meaningful responses. But for many types of Area Callbacks, this test script provides a simple way to make sure that they are operating as expected and to debug failures. Example usage: + ```sh > python3 examples/area_callback/area_callback_test_runner.py --service my-service-name $ROBOT_IP ``` @@ -193,8 +211,8 @@ For detailed instructions of using this runner with an example callback, see the ### Test within GraphNav -To test within GraphNav, you will need to record a map that has an Area Callback region which uses your callback service. For recording a map with Spot's tablet, follow the [Autowalk recording instructions](https://support.bostondynamics.com/s/article/Getting-Started-with-Autowalk#Recording). Adding an Area Callback to a map during recording is similar to adding an Autowalk action. After selecting your callback's name from the list, follow the on-screen prompts to define the start and end of a region. +To test within GraphNav, you will need to record a map that has an Area Callback region which uses your callback service. For recording a map with Spot's tablet, follow the [Autowalk recording instructions](https://support.bostondynamics.com/s/article/Getting-Started-with-Autowalk#Recording). Adding an Area Callback to a map during recording is similar to adding an Autowalk action. After selecting your callback's name from the list, follow the on-screen prompts to define the start and end of a region. Note that if you pass through the same area again (for example, returning across the same crosswalk on the way back) you will need to add the Area Callback region to the return path during recording as well. -For detailed instructions of recording a map with an example callback, see the [area callback example](../../../python/examples/area_callback/README.md). \ No newline at end of file +For detailed instructions of recording a map with an example callback, see the [area callback example](../../../python/examples/area_callback/README.md). diff --git a/docs/concepts/autonomy/graphnav_service.md b/docs/concepts/autonomy/graphnav_service.md index 44071a309..8326a7caf 100644 --- a/docs/concepts/autonomy/graphnav_service.md +++ b/docs/concepts/autonomy/graphnav_service.md @@ -14,7 +14,6 @@ Maps are recorded using the GraphNavRecording service or by operating the robot Maps contain waypoints and edges. Together, these are known as graphs. The recorded map is used by the robot to follow a sequence of waypoints and edges. During playback, the robot compares its real-time sensor data with sensor data stored during the recording process. This helps the robot determine its location or pose during playback so it can make adjustments. - ## Navigation The GraphNav service is used to navigate between waypoints that are connected by edges in a recorded map. In general, the service tries to stay as close as possible to the recorded routes. The robot has the ability to adapt its route if obstacles are encountered along the way, unless the deviation takes the robot too far away from the recorded route, in which case the robot declares itself stuck. @@ -23,54 +22,48 @@ This place-based navigation scheme allows the robot to traverse building scale m Implementing the GraphNav service APIs requires four phases: - - 1. Record a map, which can be done by an operator using the Autowalk feature on the controller tablet, by writing a client application that uses the GraphNavRecordingService RPC to record a map, or by using the [`recording_command_line` example](../../../python/examples/graph_nav_command_line/README.md). 2. Upload the recorded map to the robot. 3. Initialize the robot's location to the map. 4. Command the robot to navigate to another waypoint in the map. - ## GraphNavService RPCs -| RPC | Description | -| ---- | ----------- | -| SetLocalization | Trigger a manual localization. Typically done to provide the initial localization. -| NavigateRoute | Tell GraphNav to navigate/traverse a given route. -| NavigateTo | Tell GraphNav to navigate to a waypoint along a route it chooses. -| NavigateToAnchor | Tell GraphNav to navigate to a goal with respect to the current anchoring. -| NavigationFeedback | Get feedback on the active navigation command. -| GetLocalizationState | Get the localization status, pose, and optionally, current sensor data. -| ClearGraph | Clears the graph structure. Also the localization. -| DownloadGraph | Download the full list of waypoint IDs, graph topology and other small info. -| UploadGraph | Upload the full list of waypoint IDs, graph topology and other small info. -| UploadWaypointSnapshot | Uploads sensor data taken at a particular waypoint. Uses a streaming RPC because of the amount of data in the snapshot. -| UploadEdgeSnapshot | Uploads large edge snapshot as a stream for a particular edge. -| DownloadWaypointSnapshot | Download waypoint data from the server. -| DownloadEdgeSnapshot | Download edge data from the server. -| ValidateGraph | Verify that the graph is still valid and all required external services are still available. - - +| RPC | Description | +| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| SetLocalization | Trigger a manual localization. Typically done to provide the initial localization. | +| NavigateRoute | Tell GraphNav to navigate/traverse a given route. | +| NavigateTo | Tell GraphNav to navigate to a waypoint along a route it chooses. | +| NavigateToAnchor | Tell GraphNav to navigate to a goal with respect to the current anchoring. | +| NavigationFeedback | Get feedback on the active navigation command. | +| GetLocalizationState | Get the localization status, pose, and optionally, current sensor data. | +| ClearGraph | Clears the graph structure. Also the localization. | +| DownloadGraph | Download the full list of waypoint IDs, graph topology and other small info. | +| UploadGraph | Upload the full list of waypoint IDs, graph topology and other small info. | +| UploadWaypointSnapshot | Uploads sensor data taken at a particular waypoint. Uses a streaming RPC because of the amount of data in the snapshot. | +| UploadEdgeSnapshot | Uploads large edge snapshot as a stream for a particular edge. | +| DownloadWaypointSnapshot | Download waypoint data from the server. | +| DownloadEdgeSnapshot | Download edge data from the server. | +| ValidateGraph | Verify that the graph is still valid and all required external services are still available. | ## GraphNavRecordingService RPCs Map recording is provided by the GraphNavRecordingService RPC. -| RPC | Description | -| ---- | ----------- | -| StartRecording | Begin recording a chain of waypoints. -| SetRecordingEnvironment | Define persistent annotations for edges and waypoints. -| GetRecordStatus | Get feedback on the state of the recording service. -| CreateWaypoint | Create a waypoint at the current location. -| CreateEdge | Create an edge between two waypoints. -| StopRecording | Pause the recording service. -| GetRecordStatus| Tells the client the internal state of the record service, and the structure of the map that has been recorded so far. - +| RPC | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| StartRecording | Begin recording a chain of waypoints. | +| SetRecordingEnvironment | Define persistent annotations for edges and waypoints. | +| GetRecordStatus | Get feedback on the state of the recording service. | +| CreateWaypoint | Create a waypoint at the current location. | +| CreateEdge | Create an edge between two waypoints. | +| StopRecording | Pause the recording service. | +| GetRecordStatus | Tells the client the internal state of the record service, and the structure of the map that has been recorded so far. | Once StartRecording is called, the recording service starts creating waypoints, edges, and associated snapshots. - + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/graphnav_tech_summary.md b/docs/concepts/autonomy/graphnav_tech_summary.md index 47f20fec8..b92aad6f1 100644 --- a/docs/concepts/autonomy/graphnav_tech_summary.md +++ b/docs/concepts/autonomy/graphnav_tech_summary.md @@ -10,17 +10,14 @@ Development Kit License (20191101-BDSDK-SL). This summary provides information about the technical implementation and use of the Spot Autonomy SDK to create autonomous behaviors. Boston Dynamics customers are using GraphNav for data gathering and inspection in a variety of industrial and commercial contexts. Localization, maps, graphs and other concepts are explained in the context of autonomy in commercial robotics. - ## About GraphNav Spot features a mapping, localization, and autonomous traverse system collectively known as GraphNav. This capability is being used today by Boston Dynamics customers in the construction, oil and gas, and utilities industries for data gathering and controls monitoring applications. GraphNav consists of a service that runs on the robot, and an API that developers use to exercise GraphNav capabilities. Robot operators can use a feature called Autowalk in the tablet app that is provided with the robot, which builds upon GraphNav and the mission service to quickly record and replay traversals of an environment while performing useful actions along the way. - ## Key concepts - ![waypoints and edges](images/tech_summary1.png) For Spot, the world is represented as a locally consistent graph of waypoints and edges. @@ -39,10 +36,8 @@ Edges in the map represent how the robot moves between waypoints. They contain b The robot navigates by moving from waypoint to waypoint across edges and is constrained to stay within a corridor defined by each edge. - ![isometric top view](images/tech_summary2.png) - Graph edges are created in a locally consistent manner. However, there is no "global frame" of the map as a whole. If there are multiple paths through the graph from one waypoint to another, accumulating the transforms along the different paths may lead to different resulting transforms between the two waypoints. ## Mapping the environment @@ -51,11 +46,9 @@ The robot must be manually driven in order to map and record the environment. Th Recorded maps do not persist across reboots. To be saved, maps need to be downloaded from Spot. For example, Autowalk downloads the recorded map to the tablet. Recorded maps can be uploaded to and used by other robots. Note: Robot-side caching makes subsequent uploads fast in the common case. - ## Initialization and localization -After uploading a new map, the robot must have its localization explicitly set. One way to set the localization is by providing a transform to a specific waypoint. Another way is to trigger an initialization after positioning the robot near a fiducial that was stored in the prior map during the recording process. - +After uploading a new map, the robot must have its localization explicitly set. One way to set the localization is by providing a transform to a specific waypoint. Another way is to trigger an initialization after positioning the robot near a fiducial that was stored in the prior map during the recording process. ![fiducials](images/tech_summary3.png) @@ -69,14 +62,12 @@ The robot may become lost while navigating a recorded map. Recovery from this co Lost events depend largely on the environment in which the robot is operating. When the scene has few features or has changed significantly, the localization process produces inaccurate results. Operators can update the map by recording new waypoints with new data and removing old ones. - ## Notes on Using Localization Data The Spot robot's approach to localization differs from other common localization approaches. -For Spot, the world is represented as a graph of waypoints and edges, and the robot's localization is a pose relative to one of those waypoints. There is no position within a "global" map frame. To determine the robot's position relative to another waypoint, follow the edges along a path from the robot's localization waypoint to the desired waypoint, accumulating the transforms along the way. +For Spot, the world is represented as a graph of waypoints and edges, and the robot's localization is a pose relative to one of those waypoints. There is no position within a "global" map frame. To determine the robot's position relative to another waypoint, follow the edges along a path from the robot's localization waypoint to the desired waypoint, accumulating the transforms along the way. The robot will switch its localization from one waypoint to another as the robot navigates through a map, but it does not update the map while it does so. The map is fixed at record time and used from then on as a navigational aid. The robot's localization estimate is regularly updated from the latest available data. This estimate is computed to produce the best available position estimate, without trying to achieve smooth position or velocity estimates. If your application needs a smooth position estimate or velocity, the best source is the robot-state service and relying on the estimates of the body position and velocity in the "odom" frame. - diff --git a/docs/concepts/autonomy/initialization.md b/docs/concepts/autonomy/initialization.md index 286005e0f..55c95ef05 100644 --- a/docs/concepts/autonomy/initialization.md +++ b/docs/concepts/autonomy/initialization.md @@ -10,27 +10,21 @@ Development Kit License (20191101-BDSDK-SL). When a map is initially loaded, GraphNav is unaware of the robot’s location relative to it. The GraphNav service provides a set of basic primitives to initialize the robot’s location to the map. Each one requires various levels of help from the user. - -* Using fiducials to initialize the robot’s localization -* Using local geometry and texture around the robot to initialize the robot’s location - +- Using fiducials to initialize the robot’s localization +- Using local geometry and texture around the robot to initialize the robot’s location ## Initializing with fiducials This is the easiest method of initializing the robot's pose to the map. In the Spot SDK, the different types of fiducial initialization are represented with the `FiducialInit` enum: - -* `FIDUCIAL_INIT_NEAREST`: Localize to the nearest fiducial in any waypoint. -* `FIDUCIAL_INIT_NEAREST_AT_TARGET` Localize to nearest fiducial at the target waypoint. -* `FIDUCIAL_INIT_SPECIFIC`: Localize to the given fiducial at the target waypoint. - +- `FIDUCIAL_INIT_NEAREST`: Localize to the nearest fiducial in any waypoint. +- `FIDUCIAL_INIT_NEAREST_AT_TARGET` Localize to nearest fiducial at the target waypoint. +- `FIDUCIAL_INIT_SPECIFIC`: Localize to the given fiducial at the target waypoint. Fiducials are required for initialization in certain cases: - -* At the beginning of every mission (Autowalk only) -* In "feature desert" areas where there is not enough information for Spot’s sensors to determine its location in the environment, fiducials might help prevent the robot getting lost - +- At the beginning of every mission (Autowalk only) +- In "feature desert" areas where there is not enough information for Spot’s sensors to determine its location in the environment, fiducials might help prevent the robot getting lost ## About fiducials @@ -38,10 +32,9 @@ Fiducials are specially designed images similar to QR codes that Spot uses to ma Spot recognizes AprilTag fiducials that meet the following requirements: - -* Fiducials that are part of the AprilTag Tag36h11 set -* Image size: 146mm square -* Printed on white non-glossy US-letter size sheets +- Fiducials that are part of the AprilTag Tag36h11 set +- Image size: 146mm square +- Printed on white non-glossy US-letter size sheets Spot is configured to treat fiducials as 146mm squares and computes the distance based on that size. If a fiducial is printed at another size, Spot will infer the wrong position. @@ -49,36 +42,31 @@ Boston Dynamics provides a small sample of correctly sized AprilTag fiducials th Background information about AprilTags can be found at the University of Michigan April Robotics Lab [website](https://april.eecs.umich.edu/software/apriltag). - ## Placing fiducials When placing fiducials, be sure to: - -* Place one at the mission’s starting location. -* Tape fiducials flat against a vertical wall, as securely as possible. If fiducials move after recording, the mission may no longer replay. -* Place them low on the wall. The top of the fiducial image should be at human knee height, 45-60cm (18-24") above the ground. -* Place them in a permanent location where they will persist for as long as you plan to replay the mission. -* Place them in areas which are feature deserts, for example a span of over 3m of featureless white wall. +- Place one at the mission’s starting location. +- Tape fiducials flat against a vertical wall, as securely as possible. If fiducials move after recording, the mission may no longer replay. +- Place them low on the wall. The top of the fiducial image should be at human knee height, 45-60cm (18-24") above the ground. +- Place them in a permanent location where they will persist for as long as you plan to replay the mission. +- Place them in areas which are feature deserts, for example a span of over 3m of featureless white wall. When placing fiducials, avoid the following: - -* Repeating the same fiducial multiple times in a single mission. Each fiducial in a mission must be unique, however the same fiducial can be used in multiple missions. -* Placing fiducials in areas with inconsistent lighting. Shadowed or unevenly lit fiducials can have unreliable detections. -* Placing fiducials so that they are backlit by a bright background, such as on a window. -* Placing fiducials where they will be blocked, damaged, moved, or removed. +- Repeating the same fiducial multiple times in a single mission. Each fiducial in a mission must be unique, however the same fiducial can be used in multiple missions. +- Placing fiducials in areas with inconsistent lighting. Shadowed or unevenly lit fiducials can have unreliable detections. +- Placing fiducials so that they are backlit by a bright background, such as on a window. +- Placing fiducials where they will be blocked, damaged, moved, or removed. Note that areas with intersecting walls, corners, furniture, equipment, and other visually distinguishing features do not typically require a fiducial (unless the mission starts in that location). Using a LIDAR payload for navigation will reduce the number of fiducials required. - ## Initializing with search If fiducials are not available, the client program can use other methods of initialization through the `SetLocalization` RPC (available in the [`graph_nav.proto`](../../../protos/bosdyn/api/graph_nav/graph_nav.proto)). The client can provide an initial guess for the complete localization in the `initial_guess` field which describes the robot’s pose relative to a known waypoint and which waypoint to initialize to. Details on the algorithm that is run when an initial guess is provided are described in the next section. If the initial guess for the localization is unknown, then GraphNav can perform a brute force search. The parameters of that search are set in the `SetLocalization` RPC via `max_distance` and `max_yaw` fields. Depending on the size of these parameters, the `SetLocalization` RPC can take a long time to complete. - ## Initializing with local geometry and texture Spot can run a proprietary initialization algorithm that compares local geometry and texture from where the robot is now, to similar data collected at record time. In the API, we call this a _Scan Match_. This technique is best suited in areas with unique features (e.g. corners, doorways); it will work poorly in areas with non-unique features or no features (e.g. bland hallways, big open spaces). @@ -89,8 +77,8 @@ The client must provide a reasonable guess as to where the robot is relative to This is accomplished by leaving `max_distance` and `max_yaw` unset in the `SetLocalization` and by specifying `FIDUCIAL_INIT_NO_FIDUCIAL` for the `FiducialInit` enum. - + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/localization.md b/docs/concepts/autonomy/localization.md index 4313d00d5..957b4ba28 100644 --- a/docs/concepts/autonomy/localization.md +++ b/docs/concepts/autonomy/localization.md @@ -12,7 +12,6 @@ Once the robot’s location has been initialized in GraphNav, clients can use th A map's waypoints are combined with the cumulative point cloud data captured at each waypoint. It's important to understand that this point cloud data does not result in global consistency. - ## Localization update interval GraphNav updates localization at least twice a second. Internally, GraphNav uses the localization estimate to decide whether or not to switch the localization frame to a different waypoint on the map. @@ -21,16 +20,14 @@ Localization is computed by combining prior information from the map, the robot Situations that can have a negative effect on localization: - -* The robot is far enough away from the recorded map that it cannot see any features recorded in the map for a long period of time -* The robot slips and falls or is carried to a new location while unpowered -* The environment has changed dramatically since the map was recorded -* The environment has few features -* The environment is too dark +- The robot is far enough away from the recorded map that it cannot see any features recorded in the map for a long period of time +- The robot slips and falls or is carried to a new location while unpowered +- The environment has changed dramatically since the map was recorded +- The environment has few features +- The environment is too dark A robot equipped with a LIDAR payload can operate in darker environments than a robot without such a payload. - ## Feature Deserts GraphNav depends on features in the environment to localize. Where features are lacking, localization is more difficult or impossible. @@ -39,7 +36,6 @@ For example, every position on a snow-covered field looks the same — there isn GraphNav will not attempt to localize in feature deserts. Instead, it will rely on odometry to allow the robot to cross small feature deserts. - ## Lost robots The GraphNav service maintains an internal assessment of whether or not it believes the robot is lost or stuck. When lost, the service will refuse to navigate autonomously. @@ -48,14 +44,12 @@ This determination is correlated with the amount of change in the environment wh When site changes cause the localization status to be `STATUS_LOST`, a new map of the site should be recorded. - ## Stuck robots The GraphNav service uses a system of constraints to keep the robot relatively close to the recorded route (roughly within a 3m corridor). If a large object is placed in the robot’s path, the robot may not be able to get around it. If the robot takes longer than expected to get to its next destination, GraphNav will declare the robot stuck. This does NOT stop the robot, which will keep trying to return to the route. However, the API client may wish to intervene or prompt the operator. - ## Stairs and other edge constraints When recording a map that includes stairs, annotations will be added to the relevant edges in the map. The system will orient the robot to face up the stairs (both when ascending and descending) and reduce the maximum speed. Typically this results in the robot turning in place at the top of a stairwell and carefully descending. @@ -65,9 +59,10 @@ Edges may also be annotated with related constraints to maintain direction. For The robot must have enough space to turn around in between up- and down- stairs, otherwise the robot will report a navigation status of `STATUS_CONSTRAINT_FAULT`. ## GraphNav Origin + The localization object includes an additional field `seed_tform_body` since the 2.1.0 release. This field returns the pose of the robot body with respect to the starting fiducial frame as an SE3Pose, which can be considered the "origin" or "seed" of the GraphNav map. -Please reference this [document](https://support.bostondynamics.com/s/article/Site-inspection-with-teleoperation) for how to initialize and define a custom origin using the Tablet App outside of Autowalk since the 2.1.0 release. +Please reference this [document](https://support.bostondynamics.com/s/article/Site-inspection-with-teleoperation) for how to initialize and define a custom origin using the Tablet App outside of Autowalk since the 2.1.0 release. An example of how to access this field with the Spot API is available below. Please remember to initialize the GraphNav map first or the SE3Pose will be not be populated. @@ -81,6 +76,7 @@ def get_graphnav_origin(self): ``` + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/autonomy/missions_service.md b/docs/concepts/autonomy/missions_service.md index 24db3e2dd..1c357978b 100644 --- a/docs/concepts/autonomy/missions_service.md +++ b/docs/concepts/autonomy/missions_service.md @@ -48,25 +48,26 @@ Structural nodes control the order in which nodes are visited in mission executi Action nodes take some action, such as making the robot do something or triggering a payload to do something. -| Node | Description | -| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Condition | Express a binary comparison operation that returns true if the condition is true and false otherwise. | -| BosdynRobotState | Query robot service names, host, child nodes, battery, comms, E-Stop, kinematic and other robot system states. | -| BosdynRobotCommand | Issue a command to a robot to stop, freeze, self right, sit, stand, power off safely, go to a destination, or walk with some velocity. | -| BosdynPowerRequest | Power the robot on or off. | -| BosdynNavigateTo | Autonomously move the robot. Includes parameters for controlling properties, such as speed. | -| BosdynGraphNavState | Request the mission service to save graph nav state to the blackboard, where it can be accessed by a Condition node. | -| RemoteGrpc | Customize the behavior of missions. Example: trigger a remote sensor payload to take a reading during an autonomous mission. | -| Sleep | Sleep for a specified number of seconds. | -| Prompt | Prompt a supervisor with a question, such as "Is it safe to cross the street?" The supervisor can be a robot operator responding to a UI prompt or an automated process running anywhere that can communicate with the robot. | -| PTZ | Aim the Spot CAM PTZ at a specified pan, tilt, and zoom. Optionally, automatically adjust aim to offset differences in Spot positioning and orientation between playbacks. | -| SpotCamStoreMedia | Issue a request to write images to the Spot CAM USB stick. Note that an installed Spot CAM payload is required and the USB stick must be inserted before booting the robot. | -| Dock | Issue a command to dock the robot at the specified station. | -| DefineBlackboard | Specify a blackboard variable for this node's children to use. | -| SetBlackboard | Write to a blackboard variable. The variable must have already been defined. | -| ConstantResult | Always return one of the standard status codes (SUCCESS, RUNNING, or FAILURE). | -| ExecuteChoreography | Perform an uploaded choreography sequence with a specificed name. | -| MissionUploadChoreography | Upload a specified group of choreography sequences and animated moves. | +| Node | Description | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Condition | Express a binary comparison operation that returns true if the condition is true and false otherwise. | +| BosdynRobotState | Query robot service names, host, child nodes, battery, comms, E-Stop, kinematic and other robot system states. | +| BosdynRobotCommand | Issue a command to a robot to stop, freeze, self right, sit, stand, power off safely, go to a destination, or walk with some velocity. | +| BosdynPowerRequest | Power the robot on or off. | +| BosdynNavigateTo | Autonomously move the robot. Includes parameters for controlling properties, such as speed. | +| BosdynGraphNavState | Request the mission service to save graph nav state to the blackboard, where it can be accessed by a Condition node. | +| RemoteGrpc | Customize the behavior of missions. Example: trigger a remote sensor payload to take a reading during an autonomous mission. | +| Sleep | Sleep for a specified number of seconds. | +| Prompt | Prompt a supervisor with a question, such as "Is it safe to cross the street?" The supervisor can be a robot operator responding to a UI prompt or an automated process running anywhere that can communicate with the robot. | +| PTZ | Aim the Spot CAM PTZ at a specified pan, tilt, and zoom. Optionally, automatically adjust aim to offset differences in Spot positioning and orientation between playbacks. | +| SpotCamStoreMedia | Issue a request to write images to the Spot CAM USB stick. Note that an installed Spot CAM payload is required and the USB stick must be inserted before booting the robot. | +| Dock | Issue a command to dock the robot at the specified station. | +| DefineBlackboard | Specify a blackboard variable for this node's children to use. | +| SetBlackboard | Write to a blackboard variable. The variable must have already been defined. | +| ConstantResult | Always return one of the standard status codes (SUCCESS, RUNNING, or FAILURE). | +| ExecuteChoreography | Perform an uploaded choreography sequence with a specified name. | +| MissionUploadChoreography | Upload a specified group of choreography sequences and animated moves. | +| BosdynQueryStoredCaptures | Issue a QueryStoredCapturesRequest with a given QueryParameters message and write the response to a specified blackboard variable. Additional blackboard variables for action and group names can optionally be specified to be added to QueryParameters and used for the request. | ## Creating a behavior tree diff --git a/docs/concepts/autonomy/typical_autonomous_navigation_use_case.md b/docs/concepts/autonomy/typical_autonomous_navigation_use_case.md index 448560da1..50d01b438 100644 --- a/docs/concepts/autonomy/typical_autonomous_navigation_use_case.md +++ b/docs/concepts/autonomy/typical_autonomous_navigation_use_case.md @@ -10,8 +10,6 @@ Development Kit License (20191101-BDSDK-SL). A typical use case for the autonomous navigation API: - - 1. A client application, the command line, or the controller tablet is used to operate the robot and record a map and any actions taken during the recording process. 2. During recording the client navigates the intended route, assigning actions such as API callbacks to waypoints along the way. 3. At the end of the route, recording is stopped and the recorded map and all of the associated actions and data are saved. @@ -19,8 +17,8 @@ A typical use case for the autonomous navigation API: 5. When the mission is concluded, the client app captures, processes, or stores data that was collected during the mission. 6. Log files and other data may be downloaded for analysis. - + [autonomous-top]: Readme.md "Spot SDK: Autonomy, GraphNav, and Missions" [code-examples]: autonomous_navigation_code_examples.md "Autonomous navigation code examples" [components]: components_of_autonomous_navigation.md "Components of autonomous navigation" diff --git a/docs/concepts/bddf.md b/docs/concepts/bddf.md index 277ab1720..7ff7d1f28 100644 --- a/docs/concepts/bddf.md +++ b/docs/concepts/bddf.md @@ -10,62 +10,61 @@ Development Kit License (20191101-BDSDK-SL). ## Motivation -Data stored on Spot robots is downloaded in the BDDF format. BDDF is a file format created by Boston Dynamics for storing timestamped data, along with metadata. It supports both binary blobs and POD ("plain old data") such as integers or floating point numbers. +Data stored on Spot robots is downloaded in the BDDF format. BDDF is a file format created by Boston Dynamics for storing timestamped data, along with metadata. It supports both binary blobs and POD ("plain old data") such as integers or floating point numbers. BDDF was created to satisfy the following set of requirements: -* **Safe and cheap to write**. This format is used internally on the robot as well as externally. Thus, it was designed for minimal, predictable disk and CPU usage while saving data to disk. Additionally, it is designed so that all data that is written into the file is recoverable (e.g., for when software dies or computer power is cut while the file is being written). -* **No additional processing required.** BDDF is meant to be usable by user tools without processing into other formats. Thus, it contains an index so that arbitrary data may be accessed efficiently. The index: - * Can be used to determine the kinds and time spans of data contained in the file. - * Supports efficiently extracting data by kind and time span. -* **Secure**. Little or no parsing logic. Reading a BDDF requires only handling simple framing, and parsing a few protobuf messages. -* **General**. BDDF can store data with any encoding. -* **Streamable.** Data is streamed from the robot in this format based on queries, so it is designed such that the format can be written without seeking backwards in the stream. This is why the index and checksums are at the end of the file. +- **Safe and cheap to write**. This format is used internally on the robot as well as externally. Thus, it was designed for minimal, predictable disk and CPU usage while saving data to disk. Additionally, it is designed so that all data that is written into the file is recoverable (e.g., for when software dies or computer power is cut while the file is being written). +- **No additional processing required.** BDDF is meant to be usable by user tools without processing into other formats. Thus, it contains an index so that arbitrary data may be accessed efficiently. The index: + - Can be used to determine the kinds and time spans of data contained in the file. + - Supports efficiently extracting data by kind and time span. +- **Secure**. Little or no parsing logic. Reading a BDDF requires only handling simple framing, and parsing a few protobuf messages. +- **General**. BDDF can store data with any encoding. +- **Streamable.** Data is streamed from the robot in this format based on queries, so it is designed such that the format can be written without seeking backwards in the stream. This is why the index and checksums are at the end of the file. ## Organization -The structure of the file is a sequence of "blocks" with simple framing. Some blocks store descriptive information about the file and its contents, and some blocks store data. +The structure of the file is a sequence of "blocks" with simple framing. Some blocks store descriptive information about the file and its contents, and some blocks store data. BDDF can store both binary "blobs" and "plain old data" (POD) values such as integers or floating point numbers. -Stored data is organized into "data series". A data series: -* Is either of message type or POD type. -* Consists of a sequence of timestamped data blocks. -* Has a series description explaining the content of the data blocks. -* Has a series identifier to "name" the data series within the file. -* Has a set of index-names for a list of index-values (int64) attached to each data block in the series. +Stored data is organized into "data series". A data series: -Within a data file, a data series is addressed with a series-index. Within a data series, a data block is addressed by an integer index-in-series. At the end of the BDDF file, a file index lists all the data series and locations of the series indexes in the file. +- Is either of message type or POD type. +- Consists of a sequence of timestamped data blocks. +- Has a series description explaining the content of the data blocks. +- Has a series identifier to "name" the data series within the file. +- Has a set of index-names for a list of index-values (int64) attached to each data block in the series. +Within a data file, a data series is addressed with a series-index. Within a data series, a data block is addressed by an integer index-in-series. At the end of the BDDF file, a file index lists all the data series and locations of the series indexes in the file. ## Identifying data series -Depending on the broad class of content which may be stored in a data series, the series might be described in different ways. For this reason, instead of requiring a unique string name to identify a series, we use a slightly more flexible identifier: a unique mapping of {key -> value}. +Depending on the broad class of content which may be stored in a data series, the series might be described in different ways. For this reason, instead of requiring a unique string name to identify a series, we use a slightly more flexible identifier: a unique mapping of {key -> value}. -A BDDF SeriesIdentifier has a `series_type`, which describes the kind of series, and a `spec` which is a mapping of {key -> value} further identifying the series. The `series_type` implies the set of keys which should be used in the `spec`. +A BDDF SeriesIdentifier has a `series_type`, which describes the kind of series, and a `spec` which is a mapping of {key -> value} further identifying the series. The `series_type` implies the set of keys which should be used in the `spec`. For example: -* A series containing GRPC robot-id request messages might thus be specified as: `series_type="bosdyn:grpc:requests"` and +- A series containing GRPC robot-id request messages might thus be specified as: `series_type="bosdyn:grpc:requests"` and `spec={"bosdyn:grpc:service": "robot_id", "bosdyn:message-type": "bosdyn.api.RobotIdRequest"}`. -* A series containing OperatorComment messages might be specified as `series_type="bosdyn:message-channel"` with `spec={"bosdyn:channel": "bosdyn.api.OperatorComment"}` - -Because BDDF SeriesIdentifier is a structure, the BDDF format provides a method to hash this structure to make it easier to index. The hash is the first 64 bits of `SHA1(S K1 V1 K2 V2 ...)` where `S` is series identifier text, `K1` and `V1` are the key and value of the first key and value of the `spec`, `K2` and `V2` are the second key and value of the spec, etc... Here, all strings are encoded as utf-8, and keys are sorted least-to-greatest using this encoding. +- A series containing OperatorComment messages might be specified as `series_type="bosdyn:message-channel"` with `spec={"bosdyn:channel": "bosdyn.api.OperatorComment"}` +Because BDDF SeriesIdentifier is a structure, the BDDF format provides a method to hash this structure to make it easier to index. The hash is the first 64 bits of `SHA1(S K1 V1 K2 V2 ...)` where `S` is series identifier text, `K1` and `V1` are the key and value of the first key and value of the `spec`, `K2` and `V2` are the second key and value of the spec, etc... Here, all strings are encoded as utf-8, and keys are sorted least-to-greatest using this encoding. ## Data series annotations -Annotations, in the form of a set of string key -> value mappings, should be used to express further information about a data series. The format of annotation keys should be {project-or-organization}:{annotation-name}. For example, 'bosdyn:channel-name', 'bosdyn:protobuf-type'. Annotation keys without a ':' or starting with ':' are reserved. The only current key in the reserved namespace is `units`: e.g., `{'units': 'm/s2'}`. +Annotations, in the form of a set of string key -> value mappings, should be used to express further information about a data series. The format of annotation keys should be {project-or-organization}:{annotation-name}. For example, 'bosdyn:channel-name', 'bosdyn:protobuf-type'. Annotation keys without a ':' or starting with ':' are reserved. The only current key in the reserved namespace is `units`: e.g., `{'units': 'm/s2'}`. Units should be specified using the [Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html). - ## File structure There are three basic kinds of blocks in the file: -* **DescriptorBlocks**. These describe either the file as a whole, a data series or a file index. -* **DataDescriptors**. These describe a following block of data, including its timestamp and which series it belongs to. -* **Data**. These are blocks of raw binary message data. + +- **DescriptorBlocks**. These describe either the file as a whole, a data series or a file index. +- **DataDescriptors**. These describe a following block of data, including its timestamp and which series it belongs to. +- **Data**. These are blocks of raw binary message data. All binary values are little-endian. @@ -77,9 +76,11 @@ All binary values are little-endian. ::= 4 bytes: "FDDB" ::= 160-bits: SHA1 digest of all data up until this point in the file/stream. ``` + ``` ::= | "" ``` + ``` ::= ::= @@ -103,18 +104,18 @@ All binary values are little-endian. `block-types` 0x02 through 0xFF are reserved. - ``` ::= 1 bit: 0 ::= 1 bit: 1 ``` + ``` ::= 63-bit unsigned int ::= 32-bit unsigned int ``` -The first `` in the file should be a `DescriptorBlock` containing a `FileFormatDescriptor`. This specifies the file format version (currently 1.0.0) and a list of `{key -> value}` (`string -> string`) which for a robot log could be used to specify from which robot the log came from, the release running, etc.... The format of annotation keys should be {project-or-organization}:{annotation-name}. For example, `bosdyn:robot-serial-number`. +The first `` in the file should be a `DescriptorBlock` containing a `FileFormatDescriptor`. This specifies the file format version (currently 1.0.0) and a list of `{key -> value}` (`string -> string`) which for a robot log could be used to specify from which robot the log came from, the release running, etc.... The format of annotation keys should be {project-or-organization}:{annotation-name}. For example, `bosdyn:robot-serial-number`. -The final `` in the file should be a `DescriptorBlock` containing a `FileIndex`. This structure lists the `SeriesIdentifier` for each series of messages and a list of `(timestamp_nsec, file_offset)` pairs for each message in the series. If `` is zero, this means that the file does not have an index block. +The final `` in the file should be a `DescriptorBlock` containing a `FileIndex`. This structure lists the `SeriesIdentifier` for each series of messages and a list of `(timestamp_nsec, file_offset)` pairs for each message in the series. If `` is zero, this means that the file does not have an index block. -The index helps make it easier to find data in the file. The offset at the end of the file shows where start of the index block is. So you can seek 20 bytes from the end of the file, read the index offset, seek to the index block and read it, and then you have a map to the rest of the data in the file. The index offset is at the end of the file to allow the file to be written purely as a stream. You thus never need to seek to the beginning to insert the offset. +The index helps make it easier to find data in the file. The offset at the end of the file shows where start of the index block is. So you can seek 20 bytes from the end of the file, read the index offset, seek to the index block and read it, and then you have a map to the rest of the data in the file. The index offset is at the end of the file to allow the file to be written purely as a stream. You thus never need to seek to the beginning to insert the offset. diff --git a/docs/concepts/choreography/README.md b/docs/concepts/choreography/README.md index 43442e5da..17d26518a 100644 --- a/docs/concepts/choreography/README.md +++ b/docs/concepts/choreography/README.md @@ -11,21 +11,22 @@ Development Kit License (20191101-BDSDK-SL). Develop advanced choreographed routines for Spot. The choreography service requires a special-permissions license, as well as Python and Spot SDK. The Choreography SDK consists of: - * The Choreography related API protocol definitions, found [here](../../../protos/bosdyn/api/README), defines choreography moves and parameters. - * The Choreography [python client](../../../python/bosdyn-choreography-client/src/bosdyn/choreography/client/README) communicates with Spot to upload and execute sequences on the robot. - * The Choreographer Application is used to author choreography sequences, synchronize music, and execute routines on the robot. The application, as well as additional documentation, can be downloaded from the [Support Center](https://support.bostondynamics.com) and used with a robot that has a choreography license. + +- The Choreography related API protocol definitions, found [here](../../../protos/bosdyn/api/README), defines choreography moves and parameters. +- The Choreography [python client](../../../python/bosdyn-choreography-client/src/bosdyn/choreography/client/README) communicates with Spot to upload and execute sequences on the robot. +- The Choreographer Application is used to author choreography sequences, synchronize music, and execute routines on the robot. The application, as well as additional documentation, can be downloaded from the [Support Center](https://support.bostondynamics.com) and used with a robot that has a choreography license. This [documentation](choreography_service.md) provides an overview of the Choreography API and Client and a description of the different choreography terms. The [Move Reference Guide](move_reference.md) provides descriptions of each choreography move and its associated parameters, as well as GIF depictions of each move. ## Contents -* [Choreography Service](choreography_service.md) -* [Move Reference Guide](move_reference.md) -* [CustomGait Reference](custom_gait.md) -* [Choreographer Setup](choreographer_setup.md) -* [Choreographer Overview](choreographer.md) -* [Robot Connections in Choreographer](robot_controls_in_choreographer.md) -* [Animations in Choreography](animations_in_choreographer.md) -* [Animation File Format](animation_file_specification.md) -* [Tablet Choreography Mode](choreography_in_tablet.md) -* [Choreography Actions in Autowalk](choreography_in_autowalk.md) +- [Choreography Service](choreography_service.md) +- [Move Reference Guide](move_reference.md) +- [CustomGait Reference](custom_gait.md) +- [Choreographer Setup](choreographer_setup.md) +- [Choreographer Overview](choreographer.md) +- [Robot Connections in Choreographer](robot_controls_in_choreographer.md) +- [Animations in Choreography](animations_in_choreographer.md) +- [Animation File Format](animation_file_specification.md) +- [Tablet Choreography Mode](choreography_in_tablet.md) +- [Choreography Actions in Autowalk](choreography_in_autowalk.md) diff --git a/docs/concepts/choreography/animations_in_choreographer.md b/docs/concepts/choreography/animations_in_choreographer.md index 2904b2867..23b30821d 100644 --- a/docs/concepts/choreography/animations_in_choreographer.md +++ b/docs/concepts/choreography/animations_in_choreographer.md @@ -6,7 +6,6 @@ is subject to the terms and conditions of the Boston Dynamics Software Development Kit License (20191101-BDSDK-SL). --> - # Animations in Choreography The Choreography service is a framework for producing scripted motion through a list of customizable, predetermined moves. The sequences can be customized through the track layering system, the parameters associated with each move, and the adjustable beats per minute of the sequences. @@ -23,7 +22,6 @@ For the intro sequence of the video [Spot’s On It](https://www.youtube.com/wat src="https://www.youtube.com/embed/7atZfX85nd4"> - ## Text files for representing animations The base representation for the animation is a human-readable text file. While an animated dance move can be created through 3D animation tools like Autodesk Maya, moves can also be hand-written and edited. @@ -50,7 +48,7 @@ The `animation_file_to_proto.py` python script file in the `bosdyn-choreography- ## Automatic animation uploading in Choreographer -When Choreographer connects to a robot, it begins uploading all animations automatically to every connected robot. This includes connecting to a robot at startup from command line arguments and connecting to a robot at run time through the connection interface. Once an animation is uploaded, it is stored on the robot until it is rebooted. +When Choreographer connects to a robot, it begins uploading all animations automatically to every connected robot. This includes connecting to a robot at startup from command line arguments and connecting to a robot at run time through the connection interface. Once an animation is uploaded, it is stored on the robot until it is rebooted. A dialog indicates the status of all animations being uploaded (example below). If an animation fails to upload, check the terminal where the Choreographer executable is running. It should contain an error message describing why the animation is invalid. @@ -60,9 +58,9 @@ A dialog indicates the status of all animations being uploaded (example below). To aid in creating animated moves without 3D animation software, we provide choreography logs. These logs can be recorded through the Choreography service at any time, including: -* While driving the robot with the tablet -* Moving the robot arm manually (while it is powered off) -* Running an existing choreography sequence. +- While driving the robot with the tablet +- Moving the robot arm manually (while it is powered off) +- Running an existing choreography sequence. A choreography log contains high-rate timestamped key frames with the robot's joint state, foot contacts, and body pose relative to the animation frame (defined by the robot's foot state when the choreography log started). These key frames can be used directly for the animation file's key frames. diff --git a/docs/concepts/choreography/choreographer.md b/docs/concepts/choreography/choreographer.md index 7df02f64f..f867b9580 100644 --- a/docs/concepts/choreography/choreographer.md +++ b/docs/concepts/choreography/choreographer.md @@ -18,7 +18,18 @@ To run the program, double-click the executable. Choreographer is supported only ## Choreography safety -When testing your choreography sequence on a robot, always keep in mind basic safety procedures. Make sure there is plenty of space around your Spot and ensure that neither you nor anyone else approaches the dancing Spot. Never approach your Spot unless its motors have been powered off. If working with multiple robots, it is recommended to also keep them far from each other when possible. +CAUTION: Choreography moves can induce unpredictable or unstable motions in Spot, which may increase the risk of falls, collisions, and other hazards. Observe the following safety precautions: + +- Before using choreography, ensure there is at least 3 meters of clearance around Spot in all directions. +- Stay at least 3 meters away from Spot when motors are active. Power off motors before approaching Spot. +- Ensure that all bystanders who are in or may enter the area where choreography is performed are adequately warned and stay at least 3 meters away from Spot at all times. + +WARNING: A small percentage of people may experience epileptic seizures or blackouts when exposed to certain light patterns or flashing lights. Choreography moves that include Spot’s status lights or A/V warning system lights could trigger epileptic symptoms or seizures, even in people with no history of photosensitive epilepsy. Observe the following safety precautions: + +- When designing choreography routines that include Spot’s status lights or A/V warning system lights, avoid patterns and frequencies known to increase the risk of epileptic symptoms. +- Before using choreography, ensure that all bystanders are adequately warned of any risk of exposure to light patterns and flashing lights from Spot. + +WARNING: At higher volumes, prolonged exposure to the noise produced by the buzzer can be harmful. Refer to _Spot Instructions for Use_ available at [Spot Product Safety](https://support.bostondynamics.com/s/spot/product-safety) ### Beginner and advanced modes @@ -38,8 +49,8 @@ It is highly recommended that Choreographer users start in Beginner mode until t The Choreographer interface consists of the following important key sections/buttons: -1. **Moves List** - Listd of predefined stock moves and animation moves sorted by general category such as "Body" or "Transition." -1. **Dance Timeline** - The main user interface area of Choreographer. The timeline shows a representation of your dance over time. Each move is a different block. Blocks can be edited to set or change move parameters. Blovks can be relocated on the timeline by clicking and dragging or copied and pasted to a new location on the timeline. They can be stretched or shrunk if the move parameters allow it. +1. **Moves List** - List of predefined stock moves and animation moves sorted by general category such as "Body" or "Transition." +1. **Dance Timeline** - The main user interface area of Choreographer. The timeline shows a representation of your dance over time. Each move is a different block. Blocks can be edited to set or change move parameters. Blocks can be relocated on the timeline by clicking and dragging or copied and pasted to a new location on the timeline. They can be stretched or shrunk if the move parameters allow it. 1. **Dance Tabs** - Multiple choreography sequences can be opened at once and will appear as different tabs above the timeline. 1. **Move Name** - When you select a move in the Moves List its name and description will appear here. 1. **Robot Preview** - A preview of the robot’s body and arm during your selected move. Note that this section only appears for select moves that directly position the body of the robot or moves that control the arm. @@ -57,37 +68,37 @@ The Choreographer interface consists of the following important key sections/but Choreographer has several tracks, each describing some aspect of Spot's behavior. -* The Legs, Body, Arm, and Gripper tracks describe the physical motion of the robot. -* The Lights track describes the behavior of the lights near Spot's front cameras. -* The Annotations track modifies the behavior of the other tracks. -* The Music track shows the audio to be played by the Choreographer application itself (not played by the robot). +- The Legs, Body, Arm, and Gripper tracks describe the physical motion of the robot. +- The Lights track describes the behavior of the lights near Spot's front cameras. +- The Annotations track modifies the behavior of the other tracks. +- The Music track shows the audio to be played by the Choreographer application itself (not played by the robot). -All dance moves control one or more tracks. Moves that control any of the same tracks cannot run simultaneously. Moves that use different tracks can be run simultaneously. This modular approach to defining behavior helps make it easy to produce a wide variety of behaviors from a manageable number of component moves. +All dance moves control one or more tracks. Moves that control any of the same tracks cannot run simultaneously. Moves that use different tracks can be run simultaneously. This modular approach to defining behavior helps make it easy to produce a wide variety of behaviors from a manageable number of component moves. ## Slices, beats, BPM, and measures -Choreographer divides time into slices represented by the thin dashed vertical lines in the timeline. All moves take an integer number of slices. For convenience, we consider 4 slices a beat and adjust the pace of the dance by setting the BPM (Beats Per Minute) in the **Music Controls** bar. Beats are delineated by the medium-thickness vertical lines on the timeline. Every 4th beat is numbered and marked with a thick vertical line. +Choreographer divides time into slices represented by the thin dashed vertical lines in the timeline. All moves take an integer number of slices. For convenience, we consider 4 slices a beat and adjust the pace of the dance by setting the BPM (Beats Per Minute) in the **Music Controls** bar. Beats are delineated by the medium-thickness vertical lines on the timeline. Every 4th beat is numbered and marked with a thick vertical line. -For a song with a 4/4 time signature, a slice corresponds to a 16th-note, a beat to a quarter note, and the thicker lines to a measure or whole note. For songs that are not 4/4, the thicker lines can be ignored. +For a song with a 4/4 time signature, a slice corresponds to a 16th-note, a beat to a quarter note, and the thicker lines to a measure or whole note. For songs that are not 4/4, the thicker lines can be ignored. -Some moves take a fixed number of slices. Other moves take a fixed amount of time so the number of slices will depend on the BPM. Some moves are adjustable, but of those some have maximum or minimum durations. For example, this "Running Man" move has been extended from the default number of slices. It controls the legs track for the first 16 slices (4 beats; 1 measure) of this sequence: +Some moves take a fixed number of slices. Other moves take a fixed amount of time so the number of slices will depend on the BPM. Some moves are adjustable, but of those some have maximum or minimum durations. For example, this "Running Man" move has been extended from the default number of slices. It controls the legs track for the first 16 slices (4 beats; 1 measure) of this sequence: ![Slice Diagram](images/running_man.png) ## Dance timeline -The dance timeline portrays the choreography sequence on a grid. The rows of the grid represent the various Tracks or aspects of the behavior (see Tracks section above). Time is represented from left to right with the columns representing individual slices (see Slices, Beats, BPM, and Measures section above). +The dance timeline portrays the choreography sequence on a grid. The rows of the grid represent the various Tracks or aspects of the behavior (see Tracks section above). Time is represented from left to right with the columns representing individual slices (see Slices, Beats, BPM, and Measures section above). -A dance sequence consists of any number of dance moves. Each move will be represented on the timeline by a rectangle. The left and right edges of the rectangle give the start and stop time of the move, so the width represents the duration. The vertical extent of the rectangle shows which tracks the move controls. +A dance sequence consists of any number of dance moves. Each move will be represented on the timeline by a rectangle. The left and right edges of the rectangle give the start and stop time of the move, so the width represents the duration. The vertical extent of the rectangle shows which tracks the move controls. -Moves that are stacked vertically occur simultaneously, each controlling a different aspect of the behavior to produce some combination. Moves that are arrayed horizontally occur in sequence, one after the other. +Moves that are stacked vertically occur simultaneously, each controlling a different aspect of the behavior to produce some combination. Moves that are arrayed horizontally occur in sequence, one after the other. ## Adding moves There are different methods for adding moves to the timeline. -* You can single click the move in the Moves List. This opens the move name, description, and parameters in the **Move Configuration** tab, but does not add it to the timeline. -* Use the up and down arrow keys to navigate between different moves in the Moves List once one is selected. While you have a move selected in the Moves List, you can adjust its parameters in the **Move Parameters** section. +- You can single click the move in the Moves List. This opens the move name, description, and parameters in the **Move Configuration** tab, but does not add it to the timeline. +- Use the up and down arrow keys to navigate between different moves in the Moves List once one is selected. While you have a move selected in the Moves List, you can adjust its parameters in the **Move Parameters** section. Once the parameters are adjusted to the desired values, the move can be added to the dance timeline by any of the following methods: @@ -139,9 +150,9 @@ After loading a dance, you must manually set the BPM (Beats Per Minute) of your ## Red slider -The red slider defines where within the sequence Spot should begin execution. It also indicates when the audio begins playing. The red slider defaults to the beginning but can be moved to start from the middle. This can be useful for testing just a portion of a long sequence. +The red slider defines where within the sequence Spot should begin execution. It also indicates when the audio begins playing. The red slider defaults to the beginning but can be moved to start from the middle. This can be useful for testing just a portion of a long sequence. -Any moves that start before the slider will be skipped even if they are scheduled to complete after the slider. The line drawn at the center of the slider shows the location of the slider on the timeline, as shown in the image below. The slider can be moved by clicking on the colored boxes and dragging it to the desired location. +Any moves that start before the slider will be skipped even if they are scheduled to complete after the slider. The line drawn at the center of the slider shows the location of the slider on the timeline, as shown in the image below. The slider can be moved by clicking on the colored boxes and dragging it to the desired location. ![Slider](images/red_slider.png) @@ -163,69 +174,67 @@ To stop a choreography routine (or stop the music from playing if no robot is co To save a Choreographer routine, press Ctrl+S or go select Save from the File menu. Your routine will be saved in protobuf text format, which you can then open and easily read with your own scripts. To load a Choreographer file press Ctrl+L or select Load Choreography from the File menu. -To append an existing choreography sequence to the end of your current dance, select Append Choreography from the File menu, or press Ctrl+E. Choreographer automatically adds all of the move blocks from the saved file to the end of your current routine. This is particularly useful if you want to construct a choreography sequence from smaller premade sequences. - +To append an existing choreography sequence to the end of your current dance, select Append Choreography from the File menu, or press Ctrl+E. Choreographer automatically adds all of the move blocks from the saved file to the end of your current routine. This is particularly useful if you want to construct a choreography sequence from smaller pre-made sequences. ## Keyboard controls -Choreographer has specific hotkey mappings available for common editing actions. Access the table of available hotkeys by selecting Hotkeys Documentation from the Help menu. - +Choreographer has specific hotkey mappings available for common editing actions. Access the table of available hotkeys by selecting Hotkeys Documentation from the Help menu. ### Sequence editing -Key | Function -----|----- -i | Enter insert mode -Esc | Exit insert mode -p | Play music -Shift + Click | Select multiple moves, adding each one to the selected group when clicked. -Left/Right Arrow Keys | Nudge a move (or group of selected moves) left/right by one slice in the timeline. Cannot cross other moves with nudging; this can only be done when dragging a move (or group). -Shift + Left/Right Arrow Keys | Expand a move on the left/right side by one slice if possible. This only works when a single move is selected (and not a group of moves). -Ctrl + Left/Right Arrow Keys | Shrink a move on the left/right side by one slice if possible. This only works when a single move is selected (and not a group of moves). -Ctrl+C | Copy the move (or group of selected moves). -Ctrl+V | Paste the copied move (or group of selected moves). +| Key | Function | +| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| i | Enter insert mode | +| Esc | Exit insert mode | +| p | Play music | +| Shift + Click | Select multiple moves, adding each one to the selected group when clicked. | +| Left/Right Arrow Keys | Nudge a move (or group of selected moves) left/right by one slice in the timeline. Cannot cross other moves with nudging; this can only be done when dragging a move (or group). | +| Shift + Left/Right Arrow Keys | Expand a move on the left/right side by one slice if possible. This only works when a single move is selected (and not a group of moves). | +| Ctrl + Left/Right Arrow Keys | Shrink a move on the left/right side by one slice if possible. This only works when a single move is selected (and not a group of moves). | +| Ctrl+C | Copy the move (or group of selected moves). | +| Ctrl+V | Paste the copied move (or group of selected moves). | ### Robot control -Key | Function -----|----- -Space | Stop the robot (and music, if playing) -k | Power on the robot. -l | Power off the robot. -y | Stand the robot up. -x | Start the choreography. -[ | Sit the robot down. -] | Self-right the robot. -v | Enable WASD driving. -b | Enable joystick mode. +| Key | Function | +| ----- | -------------------------------------- | +| Space | Stop the robot (and music, if playing) | +| k | Power on the robot. | +| l | Power off the robot. | +| y | Stand the robot up. | +| x | Start the choreography. | +| [ | Sit the robot down. | +| ] | Self-right the robot. | +| v | Enable WASD driving. | +| b | Enable joystick mode. | ### WASD driving mode -Key | Function -----|----- -w | Walk forward -a | Sidestep left -s | Walk backward -d | Sidestep right -q | Turn left -e | Turn right +| Key | Function | +| --- | -------------- | +| w | Walk forward | +| a | Sidestep left | +| s | Walk backward | +| d | Sidestep right | +| q | Turn left | +| e | Turn right | ## Command-line arguments Command line options for starting Choreographer from the command line: -Argument | Description -----|----- --h, --help | Print this information to the console. ---hostname HOSTNAME | Hostname or IIP address of robot(s) to initially connect to ---username USERNAME | User name(s) of the account(s) to get credentials for when initially connecting to one or more robots. ---password PASSWORD | Pasword for the account(s) when initially connecting to one or more robots. ---restricted | Load Choreographer in Beginner (Restricted) mode (also available through the Help menu) ---delay DELAY | Delay time in seconds after pressing the Start Choreography button before starting the sequence. Defaults to 3 seconds. ---not-vebose | Prevent printing error messages to the console. ---obs-padding DISTANCE | Sets the obstacle avoidance padding in meters. Note: Obstacle avoidance is not available during most dance moves. ---estop-timeout TIME | Sets the duration of the E-Stop timeout in seconds for how long between losing communication with the robot and when the robot sits down and powers off. Defaults to 9 seconds. - -Command line hostname, username, and password arguments can be especially convenient when repeatedly connecting to the same large set of robots. The following example connects to three different robots using three different sets of login credentials. - -```./choreographer --hostname hn1 --username un1 --password pw1 --hostname hn2 --username un2 --password pw2 --hostname hn3 --username un3 --password pw3``` +| Argument | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| -h, --help | Print this information to the console. | +| --hostname HOSTNAME | Hostname or IIP address of robot(s) to initially connect to | +| --username USERNAME | User name(s) of the account(s) to get credentials for when initially connecting to one or more robots. | +| --password PASSWORD | Password for the account(s) when initially connecting to one or more robots. | +| --restricted | Load Choreographer in Beginner (Restricted) mode (also available through the Help menu) | +| --delay DELAY | Delay time in seconds after pressing the Start Choreography button before starting the sequence. Defaults to 3 seconds. | +| --not-verbose | Prevent printing error messages to the console. | +| --obs-padding DISTANCE | Sets the obstacle avoidance padding in meters. Note: Obstacle avoidance is not available during most dance moves. | +| --estop-timeout TIME | Sets the duration of the E-Stop timeout in seconds for how long between losing communication with the robot and when the robot sits down and powers off. Defaults to 9 seconds. | + +Command line hostname, username, and password arguments can be especially convenient when repeatedly connecting to the same large set of robots. The following example connects to three different robots using three different sets of login credentials. + +`./choreographer --hostname hn1 --username un1 --password pw1 --hostname hn2 --username un2 --password pw2 --hostname hn3 --username un3 --password pw3` diff --git a/docs/concepts/choreography/choreographer_setup.md b/docs/concepts/choreography/choreographer_setup.md index 1c08080e1..0f01be968 100644 --- a/docs/concepts/choreography/choreographer_setup.md +++ b/docs/concepts/choreography/choreographer_setup.md @@ -8,13 +8,13 @@ Development Kit License (20191101-BDSDK-SL). # Install Choreographer -The Choreographer application allows you to easily author sequences by combining and parameterizing a variety of pre-defined moves and custom animations as well as execute on the robot with music synchronization. +The Choreographer application allows you to easily author sequences by combining and parameterizing a variety of pre-defined moves and custom animations as well as execute on the robot with music synchronization. -The application can be downloaded from the [Boston Dynamics Support Center](https://support.bostondynamics.com/s/downloads) (login required). Most Choreography API commands require a special license to use. +The application can be downloaded from the [Boston Dynamics Support Center](https://support.bostondynamics.com/s/downloads) (login required). Most Choreography API commands require a special license to use. ## System requirements -Choreographer supports 64-bit Microsoft Windows 10 and 64-bit Ubuntu 18.04 Linux. No other system dependencies are required to run the Choreographer application. However, to use the Choreography SDK independently of the Choreographer application, both Python 3 and the `bosdyn-api` and `bosdyn-choreography-client` wheels must be installed. +Choreographer supports 64-bit Microsoft Windows 10 and 64-bit Ubuntu 22.04 Linux. No other system dependencies are required to run the Choreographer application. However, to use the Choreography SDK independently of the Choreographer application, both Python 3 and the `bosdyn-api` and `bosdyn-choreography-client` wheels must be installed. ## Installing and running Choreographer @@ -30,19 +30,19 @@ To run Choreographer, double-click on the executable to open it or run it from c Command line arguments can be used to immediately connect to one or more robots upon opening. -* On windows: - ``` - choreographer.exe --hostname {ROBOT_IP} --user {USERNAME} --password {PASSWORD} - ``` -* On Linux: +- On windows: + ``` + choreographer.exe --hostname {ROBOT_IP} --user {USERNAME} --password {PASSWORD} + ``` +- On Linux: - ``` - ./choreographer --hostname {ROBOT_IP} --user {USERNAME} --password {PASSWORD} - ``` + ``` + ./choreographer --hostname {ROBOT_IP} --user {USERNAME} --password {PASSWORD} + ``` -* `--hostname` is the robot's IP address or hostname of the Spot robot to connect to Choreographer. -* `--username` and `--password` are the credentials needed for the robot. Note, unlike many of the API examples, the ROBOT_IP argument now requires the command line flag `--hostname` to precede the actual ROBOT_IP argument. +- `--hostname` is the robot's IP address or hostname of the Spot robot to connect to Choreographer. +- `--username` and `--password` are the credentials needed for the robot. Note, unlike many of the API examples, the ROBOT_IP argument now requires the command line flag `--hostname` to precede the actual ROBOT_IP argument. Multiple robots can be connected to Choreographer at once. The command line arguments `--hostname`, `--username`, `--password` must be provided for each robot. -You will also be able to connect to robots through the interface after Choreographer is open. Doing so from command line is sometimes more convenient when repeatedly connecting to the same robot(s), especially when working with multiple robots. +You will also be able to connect to robots through the interface after Choreographer is open. Doing so from command line is sometimes more convenient when repeatedly connecting to the same robot(s), especially when working with multiple robots. diff --git a/docs/concepts/choreography/choreography_in_autowalk.md b/docs/concepts/choreography/choreography_in_autowalk.md index 8c0b62de2..5d078ce5e 100644 --- a/docs/concepts/choreography/choreography_in_autowalk.md +++ b/docs/concepts/choreography/choreography_in_autowalk.md @@ -10,10 +10,21 @@ Development Kit License (20191101-BDSDK-SL). As of Spot Release 4.0.0, choreography sequences can be added as Execute Choreography Actions in autowalk missions. -*Only users with a Spot choreography license have access to choreography actions within the tablet autowalk application.* +_Only users with a Spot choreography license have access to choreography actions within the tablet autowalk application._ ## Choreography safety +CAUTION: Choreography moves can induce unpredictable or unstable motions in Spot, which may increase the risk of falls, collisions, and other hazards. Observe the following safety precautions: + +- Before using choreography, ensure there is at least 3 meters of clearance around Spot in all directions. +- Stay at least 3 meters away from Spot when motors are active. Power off motors before approaching Spot. +- Ensure that all bystanders who are in or may enter the area where choreography is performed are adequately warned and stay at least 3 meters away from Spot at all times. + +WARNING: A small percentage of people may experience epileptic seizures or blackouts when exposed to certain light patterns or flashing lights. Choreography moves that include Spot’s status lights or A/V warning system lights could trigger epileptic symptoms or seizures, even in people with no history of photosensitive epilepsy. Observe the following safety precautions: + +- When designing choreography routines that include Spot’s status lights or A/V warning system lights, avoid patterns and frequencies known to increase the risk of epileptic symptoms. +- Before using choreography, ensure that all bystanders are adequately warned of any risk of exposure to light patterns and flashing lights from Spot. + When playing any mission containing choreography actions on a robot, always keep in mind basic safety procedures. Make sure there is plenty of space around your Spot where a choreography action will be played. Make sure that neither you nor anyone else will approach the dancing Spot during the mission. Remember that robots running choreography actions are not capable of reacting to their surroundings, and will hit obstacles if they are in the path of the dancing robot. Missions with Choreography Actions should not run unsupervised. ## Adding Choreography Actions to Autowalk Missions @@ -34,7 +45,7 @@ Use the Choreography Action screen to select a choreography sequence to add to t 1. Select the name of the sequence to add. - note: Sequences must be loaded to the robot before they will be available during the autowalk recording process. To see details on playing choreography sequences through the tablet, see the [Choreography in Tablet](../choreography/choreography_in_tablet.md) documentation. + note: Sequences must be loaded to the robot before they will be available during the autowalk recording process. To see details on playing choreography sequences through the tablet, see the [Choreography in Tablet](../choreography/choreography_in_tablet.md) documentation. 2. The **Preview** button will play the selected choreography sequence, without adding it to the mission as an action. diff --git a/docs/concepts/choreography/choreography_in_tablet.md b/docs/concepts/choreography/choreography_in_tablet.md index 40807a291..31df19dc9 100644 --- a/docs/concepts/choreography/choreography_in_tablet.md +++ b/docs/concepts/choreography/choreography_in_tablet.md @@ -10,34 +10,44 @@ Development Kit License (20191101-BDSDK-SL). Dances authored and executed using Choreographer can also be played through the Tablet using the Choreography drive mode. -*Only users with a Spot choreography license will be able to view the Choreography drive screen.* +_Only users with a Spot choreography license will be able to view the Choreography drive screen._ + ## Choreography safety -When playing any choreography sequence on a robot, always keep in mind basic safety procedures. Make sure there is plenty of space around your Spot, keep all Spots at least two meters apart from each other, and be sure that neither you nor anyone else approach the dancing Spot. Never approach your Spot unless its motors have been powered off. +CAUTION: Choreography moves can induce unpredictable or unstable motions in Spot, which may increase the risk of falls, collisions, and other hazards. Observe the following safety precautions: + +- Before using choreography, ensure there is at least 3 meters of clearance around Spot in all directions. +- Stay at least 3 meters away from Spot when motors are active. Power off motors before approaching Spot. +- Ensure that all bystanders who are in or may enter the area where choreography is performed are adequately warned and stay at least 3 meters away from Spot at all times. + +WARNING: A small percentage of people may experience epileptic seizures or blackouts when exposed to certain light patterns or flashing lights. Choreography moves that include Spot’s status lights or A/V warning system lights could trigger epileptic symptoms or seizures, even in people with no history of photosensitive epilepsy. Observe the following safety precautions: + +- When designing choreography routines that include Spot’s status lights or A/V warning system lights, avoid patterns and frequencies known to increase the risk of epileptic symptoms. +- Before using choreography, ensure that all bystanders are adequately warned of any risk of exposure to light patterns and flashing lights from Spot. ## Using the Choreography drive mode -1) **Application selection** - Enter Choreography drive mode from the upper left dropdown menu where it appears with Drive and Autowalk. +1. **Application selection** - Enter Choreography drive mode from the upper left dropdown menu where it appears with Drive and Autowalk. -2. **Exiting and entering Dance mode** - For Tablets without hardware joysticks, exiting and entering dance mode allows you to toggle between playing choreography sequences and using other robot modes. For tablets with hardware joysticks, selected choreography sequences will always appear on screen. +2) **Exiting and entering Dance mode** - For Tablets without hardware joysticks, exiting and entering dance mode allows you to toggle between playing choreography sequences and using other robot modes. For tablets with hardware joysticks, selected choreography sequences will always appear on screen. -3) **Select and View Choreography Sequences** - Lists of the choreography sequences that the robot can perform are viewable by pressing the tabs at the top of the screen. Opening these menus will allow you to add dance sequences to the Choreography screen as buttons which are used to play the sequences on the robot. These tabs are configurable, and you can choose which tabs will appear as options on screen by going to the **Choreography** option in the **Settings** menu. +3. **Select and View Choreography Sequences** - Lists of the choreography sequences that the robot can perform are viewable by pressing the tabs at the top of the screen. Opening these menus will allow you to add dance sequences to the Choreography screen as buttons which are used to play the sequences on the robot. These tabs are configurable, and you can choose which tabs will appear as options on screen by going to the **Choreography** option in the **Settings** menu. - *See below for information on configuring the Choreography drive screen.* + _See below for information on configuring the Choreography drive screen._ -4. **Adding moves to the screen** - You can choose to place any sequence to the left or right side of the tablet screen, where it will be added to a list of buttons which each trigger the playback of the selected choreography sequence. Swipe horizontally left and right across the dropdown menu to scroll through the known moves. +4) **Adding moves to the screen** - You can choose to place any sequence to the left or right side of the tablet screen, where it will be added to a list of buttons which each trigger the playback of the selected choreography sequence. Swipe horizontally left and right across the dropdown menu to scroll through the known moves. -5. **Play the Choreography sequence** - Once a sequence appears on screen as a white button you can press that button to play the choreography sequence. The name on the button indicates the choreography sequence that will play. +5) **Play the Choreography sequence** - Once a sequence appears on screen as a white button you can press that button to play the choreography sequence. The name on the button indicates the choreography sequence that will play. -6. **Removing buttons from the list** - Remove a button from on screen by pressing the minus symbol next to it. This does not remove the move from the dropdown menu it was selected from. +6) **Removing buttons from the list** - Remove a button from on screen by pressing the minus symbol next to it. This does not remove the move from the dropdown menu it was selected from. -7. **Cancel moves** - Stop a choreography sequence that is playing by pressing **CANCEL** in the center of the screen. If a move is canceled while it is playing, the robot will stop the move and come to a stand. A sequence can also be aborted by entering any other mode such as Sit, Stand, Walk, or Self Right. +7) **Cancel moves** - Stop a choreography sequence that is playing by pressing **CANCEL** in the center of the screen. If a move is canceled while it is playing, the robot will stop the move and come to a stand. A sequence can also be aborted by entering any other mode such as Sit, Stand, Walk, or Self Right. Take caution when stopping choreography sequences and playing choreography sequences when the robot is not in a neutral stance. Interrupting a dance in the middle of a dynamic movement, or starting a different dance before the previous dance finishes, may cause falls. For the best behavior avoid stopping a dance partway through unless necessary for safety reasons, and start dances from a stable stance or from seated. If a dance must be stopped partway through regardless of risk, try to pick a moment when Spot isn't moving too quickly, and has at least 3 feet on the ground. This will lower the risk of falls. @@ -45,7 +55,7 @@ Take caution when stopping choreography sequences and playing choreography seque Spot comes with a small library of sequences. Some of these are intended for performance. Some gestures can be used to communicate intent through body language. These sequences are always available in the **Select Moves** dropdown. The Tablet can also play custom sequences uploaded by users. The easiest way to author choreography sequences and upload them to the robot is through the Choreographer application. -*Only users with a Spot choreography license can upload original sequences.* +_Only users with a Spot choreography license can upload original sequences._ ### Uploading choreography sequences with Choreographer @@ -59,23 +69,26 @@ Spot comes with a small library of sequences. Some of these are intended for per -5) Now connect to Spot through the Tablet, and navigate to the **Settings** section of the Hamburger menu. In **Settings** select **Choreography**. All the moves you uploaded with Choreographer should appear in a list near the bottom of the screen under **Unsaved Choreography Sequences**. +5. Now connect to Spot through the Tablet, and navigate to the **Settings** section of the Hamburger menu. In **Settings** select **Choreography**. All the moves you uploaded with Choreographer should appear in a list near the bottom of the screen under **Unsaved Choreography Sequences**. -6) To play these sequences through the tablet you will need to save them and give them a label. To save a sequence, select the edit symbol next to its name on the right side of the screen, choose a label from the dropdown, and press save. Complete this step for each sequence you wish to save and have accessible for execution through the tablet. +6. To play these sequences through the tablet you will need to save them and give them a label. To save a sequence, select the edit symbol next to its name on the right side of the screen, choose a label from the dropdown, and press save. Complete this step for each sequence you wish to save and have accessible for execution through the tablet. -*All animation moves (moves loaded from .cha files), included in a saved sequence will also be saved. Once a sequence is saved no further upload action will be required for it to be playable from the tablet or through an `ExecuteChoreography` RPC call using the sequence's name. If all sequences requiring an animation move are deleted, the stored animation move will also be removed on the next reboot. Make sure different animations have different names, or saved choreography sequences will attempt to replace the old version with the new version of the animation.* +_All animation moves (moves loaded from .cha files), included in a saved sequence will also be saved. Once a sequence is saved no further upload action will be required for it to be playable from the tablet or through an `ExecuteChoreography` RPC call using the sequence's name. If all sequences requiring an animation move are deleted, the stored animation move will also be removed on the next reboot. Make sure different animations have different names, or saved choreography sequences will attempt to replace the old version with the new version of the animation._ -7) Locate the checkbox for the label(s) you saved your sequences to, and make sure they are checked. Checking the checkbox for a label will make it appear as an option when you enter the Choreography drive screen. +7. Locate the checkbox for the label(s) you saved your sequences to, and make sure they are checked. Checking the checkbox for a label will make it appear as an option when you enter the Choreography drive screen. -8) Enter the Choreography drive screen and locate the dropdown tabs with the labels you selected in the Choreography settings screen. You will now be able to add and play your custom choreography sequences in the same way you would play the sample choreography sequences included with your robot release. +8. Enter the Choreography drive screen and locate the dropdown tabs with the labels you selected in the Choreography settings screen. You will now be able to add and play your custom choreography sequences in the same way you would play the sample choreography sequences included with your robot release. + ## Managing your uploaded Choreography sequences + ### **Deleting Saved Choreography Sequences** The original choreography sequences you save to Spot will be retained indefinitely until you actively choose to delete them. To delete a sequence go to the Choreography settings screen and select the edit button next to sequence you wish to delete. In that screen, find the trash icon next to the sequence name and press it. + ### **Adding and Removing Labels** **Add a Label**
@@ -94,12 +107,10 @@ Select the edit icon next to the label you want to delete. Find the trash icon n -Select the edit icon next to the sequence you wish to modify. Find the label you wish to remove in the list under *sequence labels* on the right side of the screen, and remove it by pressing the **X** icon next to it. +Select the edit icon next to the sequence you wish to modify. Find the label you wish to remove in the list under _sequence labels_ on the right side of the screen, and remove it by pressing the **X** icon next to it. **Add a label to a Sequence**
- Select the edit icon next to the sequence you wish to modify. Select the label you wish to add in the dropdown on the left hand side of the screen, and then press the **Add Label** button. - diff --git a/docs/concepts/choreography/choreography_service.md b/docs/concepts/choreography/choreography_service.md index ae10abf89..7e9ac75c1 100644 --- a/docs/concepts/choreography/choreography_service.md +++ b/docs/concepts/choreography/choreography_service.md @@ -20,39 +20,38 @@ A choreography sequence consists of a series of moves. A wide variety of possibl 2. Altering move parameters to vary the behavior of the move 3. Adjusting the BPM of the choreography sequence to change the speed of the moves - ### Note on reliability -The choreography framework is less robust than other Spot behaviors. It should only be used on a flat floor with plenty of space and good traction. Some combinations of moves will be incompatible and can result in the robot falling. The same is true for some combinations of parameters for an individual move. The robot **will** fall down. Trial-and-error might be needed to produce a script that looks good and succeeds reliably. +The choreography framework is less robust than other Spot behaviors. It should only be used on a flat floor with plenty of space and good traction. Some combinations of moves will be incompatible and can result in the robot falling. The same is true for some combinations of parameters for an individual move. The robot **will** fall down. Trial-and-error might be needed to produce a script that looks good and succeeds reliably. -***Not recommended for use with payloads.*** +**_Not recommended for use with payloads._** ## Choreography terminology ### Slices -In Choreographer, time is divided into slices. A slice is ¼ beat (also, a 1/16th note for 4/4 music). For example, a dance with a BPM of 100 beats/minute has 400 slices per minute. The duration of a slice can be adjusted but must remain constant throughout the entire script. +In Choreographer, time is divided into slices. A slice is ¼ beat (also, a 1/16th note for 4/4 music). For example, a dance with a BPM of 100 beats/minute has 400 slices per minute. The duration of a slice can be adjusted but must remain constant throughout the entire script. -Moves always run for an integer number of slices. Some moves require a fixed number of slices, and some are extendable. See the Config Files section for more details. +Moves always run for an integer number of slices. Some moves require a fixed number of slices, and some are extendable. See the Config Files section for more details. -Note that any number of slices per minute can be selected, however very fast or very slow slices will cause some moves to be unreliable. Many moves will be most reliable in the range of 250-450 slices per minute. +Note that any number of slices per minute can be selected, however very fast or very slow slices will cause some moves to be unreliable. Many moves will be most reliable in the range of 250-450 slices per minute. ### Tracks and layering The robot’s motion is divided into the following distinct tracks: -* Legs -* Body -* Arm -* Gripper +- Legs +- Body +- Arm +- Gripper In addition to the base motion, there are also tracks for: -* Lights: Control the robot's front two sets of LEDs. -* Annotations: Enable dance annotations that are separate from any specific move. -* Music (Choreographer only): Control the audio played from the Choreographer application when dancing. +- Lights: Control the robot's front two sets of LEDs. +- Annotations: Enable dance annotations that are separate from any specific move. +- Music (Choreographer only): Control the audio played from the Choreographer application when dancing. -Each dance move requires one or more of these tracks. Moves that use different tracks can be run simultaneously in any combination. In Choreographer, a track is represented as a horizontal section in the timeline view. Example: the following script combines moves in three of the four tracks: +Each dance move requires one or more of these tracks. Moves that use different tracks can be run simultaneously in any combination. In Choreographer, a track is represented as a horizontal section in the timeline view. Example: the following script combines moves in three of the four tracks: ![Tracks](images/tracks_labeled.png) @@ -64,22 +63,20 @@ Some moves require multiple tracks, such as the "Jump" move which uses the body ![](images/multi_tracked_dance.png) - ### Entry and exit conditions - -All moves that use the legs track have logical entry and exit positions that the body must be in before or after the move. These entry and exit positions help to prevent nonsensical choreographies. Example: Completing a kneel-to-stand transition where the robot moves to a kneeling-clap move without an intervening stand-to-knee transition. +All moves that use the legs track have logical entry and exit positions that the body must be in before or after the move. These entry and exit positions help to prevent nonsensical choreographies. Example: Completing a kneel-to-stand transition where the robot moves to a kneeling-clap move without an intervening stand-to-knee transition. To represent and enforce these requirements, all moves that use the legs track must use one of the following exit and entry transition states: -* Stand -* Sit -* Kneel -* Sprawl +- Stand +- Sit +- Kneel +- Sprawl -The first leg-track move can have any entry state. The robot automatically transitions to an acceptable entry state for that move before starting the choreography sequence. If the robot is not already in the correct starting pose, it may delay the start of the choreography sequence beyond the requested start time. +The first leg-track move can have any entry state. The robot automatically transitions to an acceptable entry state for that move before starting the choreography sequence. If the robot is not already in the correct starting pose, it may delay the start of the choreography sequence beyond the requested start time. -All subsequent legs-track moves must have an entry state that corresponds to the exit state of a previous legs-track move. Scripts that violate this requirement are rejected by the API and return warnings indicating which moves violate this rule. Routines made in Choreographer highlight moves red when the entry state does not match the previous exit state, as in this example: +All subsequent legs-track moves must have an entry state that corresponds to the exit state of a previous legs-track move. Scripts that violate this requirement are rejected by the API and return warnings indicating which moves violate this rule. Routines made in Choreographer highlight moves red when the entry state does not match the previous exit state, as in this example: ![Transitions Error](images/transition_error.png) @@ -87,27 +84,28 @@ All subsequent legs-track moves must have an entry state that corresponds to the ### Choreography API -The Choreography API defines a choreography sequence by a unique name, the number of slices per minute, and a repeated list of moves. Each move consists of: +The Choreography API defines a choreography sequence by a unique name, the number of slices per minute, and a repeated list of moves. Each move consists of: -* Move type -* Starting slice -* Duration (in slices) -* Actual parameters (`MoveParams` proto message). +- Move type +- Starting slice +- Duration (in slices) +- Actual parameters (`MoveParams` proto message). The `MoveParams` message describes how the robot should behave during each move. -Example: A move parameter could specify positions for the body. Each parameter may have specific limits/bounds that are described by the `MoveInfo` proto. This information can be found using the `ListAllMoves` RPC. +Example: A move parameter could specify positions for the body. Each parameter may have specific limits/bounds that are described by the `MoveInfo` proto. This information can be found using the `ListAllMoves` RPC. Once a choreography sequence is created, the `UploadChoreography` RPC sends the routine to the robot. The choreography service validates and checks the structure of the routine to ensure it is feasible and within bounds. The service returns a list of warnings and failures related to the uploaded choreography sequence. A failure is something the choreography service could not automatically correct and must be fixed before the routine can be executed. Warnings are automatically corrected and do not block the execution of the routine in certain scenarios. If the boolean `non_strict_parsing` is set to true in the `UploadChoreography` RPC, the service fixes any correctable errors within the routine (for example, by limiting parameters to the acceptable range) and allows a choreography sequence with warnings to be completed. -The `ExecuteChoreography` RPC runs the choreography sequence to completion on the robot. A choreography sequence is identified by the unique name of the sequence that was uploaded to the robot. Starting time (in robot’s time) and starting slice specifies when the robot when starts the choreography sequence and at which move. Named sequences can be returned using the `ListAllSequences` RPC. +The `ExecuteChoreography` RPC runs the choreography sequence to completion on the robot. A choreography sequence is identified by the unique name of the sequence that was uploaded to the robot. Starting time (in robot’s time) and starting slice specifies when the robot when starts the choreography sequence and at which move. Named sequences can be returned using the `ListAllSequences` RPC. ### Interacting With a Sequence During Execution -The `ChoreographyStatus` RPC returns information about whether the robot is currently executing a sequence or why it isn't. If it is executing a sequence, the response tells you where (what slice) within the sequence Spot currently is, as well as listing which moves are currently active and the sequence name. -Some moves (e.g. [CustomGait](custom_gait.md)) can respond to commands through the `ChorographyCommand` RPC. When such moves are active, they will provide information about what commands they are currently able to accept in the `command_limits` field as part of the Status response. The `ChoreographyCommand` RPC sends `MoveCommand`s, which are targeted at specific moves. The `move_type` and `move_id` can (optionally) be used to restrict which moves will accept the command and ensure that only the intended recipient can respond to it. +The `ChoreographyStatus` RPC returns information about whether the robot is currently executing a sequence or why it isn't. If it is executing a sequence, the response tells you where (what slice) within the sequence Spot currently is, as well as listing which moves are currently active and the sequence name. + +Some moves (e.g. [CustomGait](custom_gait.md)) can respond to commands through the `ChorographyCommand` RPC. When such moves are active, they will provide information about what commands they are currently able to accept in the `command_limits` field as part of the Status response. The `ChoreographyCommand` RPC sends `MoveCommand`s, which are targeted at specific moves. The `move_type` and `move_id` can (optionally) be used to restrict which moves will accept the command and ensure that only the intended recipient can respond to it. ### Saving Choreography Sequences to your Spot @@ -117,29 +115,30 @@ The `SaveSequence` RPC will save a sequence and all information required to play The Animation API defines an animated move (`Animation` proto message) by: -* Its unique name -* A repeated list of `AnimationKeyFrames` that describes the robot's motion at each timestamp -* Additional parameters and options that describe how the move should be executed. +- Its unique name +- A repeated list of `AnimationKeyFrames` that describes the robot's motion at each timestamp +- Additional parameters and options that describe how the move should be executed. Unlike other dance moves, the information about the minimum and maximum parameters must be specified in the `Animation` protobuf. The `Animation` can be uploaded to the robot using the `UploadAnimatedMove` RPC, which sends the animation to the robot. The choreography service validates and checks the structure of the animation to ensure it is fully specified and is feasible. If the animation does not pass this validation, the RPC responds with a failure status and a set of warning messages indicating which parts of the animation failed. -If the animation uploads successfully, it can be used within choreography sequences. The animation appears as a move option in Choreographer along with any parameters specified in the initial `Animation` protobuf message. The move type associated with the uploaded animation is "animation::" + the animation's name. The animations persist on the robot until either the robot is powered off or an animation with exactly the same name is uploaded and overwrites the previous animation. +If the animation uploads successfully, it can be used within choreography sequences. The animation appears as a move option in Choreographer along with any parameters specified in the initial `Animation` protobuf message. The move type associated with the uploaded animation is "animation::" + the animation's name. The animations persist on the robot until either the robot is powered off or an animation with exactly the same name is uploaded and overwrites the previous animation. While animations can be written manually using protobuf in any application, we have also provided a way to create animations from human-readable text files. -* Animation text file extension: *.cha -* The animation file format is described in the [animation file specification document](animation_file_specification.md). -The animation *.cha file can be converted into an `Animation` protobuf message using the `animation_file_to_proto.py` script provided in the choreography client library. +- Animation text file extension: \*.cha +- The animation file format is described in the [animation file specification document](animation_file_specification.md). + +The animation \*.cha file can be converted into an `Animation` protobuf message using the `animation_file_to_proto.py` script provided in the choreography client library. ### Choreography logs API -The Choreography logs API defines a choreography log using the `ChoreographyStateLog` protobuf message. ChoreographyStateLog consists of a repeated series of timestamped key frames that contain: +The Choreography logs API defines a choreography log using the `ChoreographyStateLog` protobuf message. ChoreographyStateLog consists of a repeated series of timestamped key frames that contain: -* The joint state of the entire robot -* The foot contacts -* The SE3Pose for the robot body relative to the animation frame. +- The joint state of the entire robot +- The foot contacts +- The SE3Pose for the robot body relative to the animation frame. The animation frame is defined based on the feet position at the beginning of the animation. The position is the center of all four feet. The rotation is yaw-only as computed from the feet positions. @@ -147,8 +146,8 @@ The animation frame is defined based on the feet position at the beginning of th Choreography logs are divided into two types: -* Automatic logs: The recording starts when the `ExecuteChoreography` RPC is first received and continues 3 seconds after the completion of the choreography. -* Manual logs: The recording starts when the `StartRecordingState` RPC is first received and continues until the `StopRecordingState` RPC is received. Manual log recordings are limited to 5 minutes. +- Automatic logs: The recording starts when the `ExecuteChoreography` RPC is first received and continues 3 seconds after the completion of the choreography. +- Manual logs: The recording starts when the `StartRecordingState` RPC is first received and continues until the `StopRecordingState` RPC is received. Manual log recordings are limited to 5 minutes. Choreography logs can be used to review how the robot actually executed a choreography or animated dance move. For example (specifically for animations): If the move is not completely feasible, the robot attempts to get as close to what was asked as possible, but may not succeed. The choreography log can be used to understand and update the animated move to make it more likely to succeed. @@ -174,53 +173,52 @@ There are two config files that describe the individual moves that are used by t ## MoveInfoConfig.txt -`MoveInfoConfig` can be parsed by a protobuf parser into each moves field of the `ListAllMovesResponse` proto. Each `MoveInfo` proto provides metadata about a particular move. - +`MoveInfoConfig` can be parsed by a protobuf parser into each moves field of the `ListAllMovesResponse` proto. Each `MoveInfo` proto provides metadata about a particular move. The fields and their meanings are: -* name: Name of this move. -* move_length_slices: Default duration of this move in slices. -* min_move_length_slices: Minimum number of slices this move can complete in. -* is_extendable: Whether this move can be extended. If is_extendable is true, the desired duration can be specified in the requested_slices field in the MoveParams proto. -* entrance_state: Which transition state the robot must be in prior to entering this move. Only applicable if controls_legs=true. Structure can support multiple allowed entry states, but all current moves only accept a single entry state. -* exit_state: Which transition state the robot will be in after completing this move. Only applicable if controls_legs=true. The next legs-track move must have the same entrance_state. -* min_time: Minimum move duration. When specified, moves may take more than the normal number of slices if the slice duration is very short (slices per minute is very high). -* max_time: Maximum move duration. This applies to moves that are extendable but cannot be made arbitrarily long. -* controls_arm: Move requires the arm track. -* controls_legs: Move requires the legs track. -* controls_body: Move requires the body track. -* controls_gripper: Move requires the gripper track. -* controls_lights: Move requires the front LED lights. -* controls_annotations: Move updates the overall dance state. -* display: How Choreographer should display the move. - * color: Color of the box for the move in timeline tracks. - * markers: Slices to draw the small grey vertical lines. These usually correspond to events such as touchdown and liftoff. Intended to help the user line those events up as desired (for example, on the beat). Negative values indicate slices before the end of the move. - * description: Text description of the move. - * image: Location of an image to display for the move. - * category: Category name of the move as it appears in the move selector in Choreographer. +- name: Name of this move. +- move_length_slices: Default duration of this move in slices. +- min_move_length_slices: Minimum number of slices this move can complete in. +- is_extendable: Whether this move can be extended. If is_extendable is true, the desired duration can be specified in the requested_slices field in the MoveParams proto. +- entrance_state: Which transition state the robot must be in prior to entering this move. Only applicable if controls_legs=true. Structure can support multiple allowed entry states, but all current moves only accept a single entry state. +- exit_state: Which transition state the robot will be in after completing this move. Only applicable if controls_legs=true. The next legs-track move must have the same entrance_state. +- min_time: Minimum move duration. When specified, moves may take more than the normal number of slices if the slice duration is very short (slices per minute is very high). +- max_time: Maximum move duration. This applies to moves that are extendable but cannot be made arbitrarily long. +- controls_arm: Move requires the arm track. +- controls_legs: Move requires the legs track. +- controls_body: Move requires the body track. +- controls_gripper: Move requires the gripper track. +- controls_lights: Move requires the front LED lights. +- controls_annotations: Move updates the overall dance state. +- display: How Choreographer should display the move. + - color: Color of the box for the move in timeline tracks. + - markers: Slices to draw the small grey vertical lines. These usually correspond to events such as touchdown and liftoff. Intended to help the user line those events up as desired (for example, on the beat). Negative values indicate slices before the end of the move. + - description: Text description of the move. + - image: Location of an image to display for the move. + - category: Category name of the move as it appears in the move selector in Choreographer. ### MoveParamsConfig.txt -`MoveParamsConfig` provides the default value for each move parameter. For moves that contain numerical parameters (for example, double, int32) the config file will also specify the minimum and maximum values. +`MoveParamsConfig` provides the default value for each move parameter. For moves that contain numerical parameters (for example, double, int32) the config file will also specify the minimum and maximum values. The config file is formatted as a block of text separated by empty lines for each available move. The first line of each block has two values: 1. The names of the moves. -2. Which option in the oneof `params` field within the `MoveParams` proto this move uses to specify its parameters. For moves with no parameters, the second entry in the first line should say `NONE`. No further lines are used in that block of text +2. Which option in the oneof `params` field within the `MoveParams` proto this move uses to specify its parameters. For moves with no parameters, the second entry in the first line should say `NONE`. No further lines are used in that block of text -The remaining lines describe the default (and possibly min/max) values for one parameter per line. +The remaining lines describe the default (and possibly min/max) values for one parameter per line. -* The first field in each of these lines will be the name of the parameter. -* Dots (“.”) indicate a level of hierarchy within the proto. -* Parameters of type bool or Enum have two fields in the line. The second field is the default value. -* Parameters of type double or int32 have 4 fields in the following order: +- The first field in each of these lines will be the name of the parameter. +- Dots (“.”) indicate a level of hierarchy within the proto. +- Parameters of type bool or Enum have two fields in the line. The second field is the default value. +- Parameters of type double or int32 have 4 fields in the following order: 1. Parameter name 1. Minimum value 1. Default value 1. Maximum value -Default values are used if no value is specified within the proto. Scripts are rejected if the values are outside the allowable range. If `non_strict_parsing` is enabled, the value will be forced into the required range and a warning will be thrown. +Default values are used if no value is specified within the proto. Scripts are rejected if the values are outside the allowable range. If `non_strict_parsing` is enabled, the value will be forced into the required range and a warning will be thrown. diff --git a/docs/concepts/choreography/custom_gait.md b/docs/concepts/choreography/custom_gait.md index 6e3ad3c2e..80d5fa630 100644 --- a/docs/concepts/choreography/custom_gait.md +++ b/docs/concepts/choreography/custom_gait.md @@ -8,30 +8,31 @@ Development Kit License (20191101-BDSDK-SL). # Custom Gait -Custom Gait is Choreography Move that behaves like a gait that can be greatly customized in its appearance and can be actively steered during operation (e.g. via a joystick). It can represent any gait pattern that has one or two steps per gait cycle for each leg. +Custom Gait is Choreography Move that behaves like a gait that can be greatly customized in its appearance and can be actively steered during operation (e.g. via a joystick). It can represent any gait pattern that has one or two steps per gait cycle for each leg. ## Behavior Within a Sequence -Custom Gait is integrated as a legs-track move within the Choreography API. It can therefore be combined with other moves that occupy the body, arm, gripper, and lights tracks. The Custom Gait move can be adjusted to occupy any number of slices within the timeline, however the sequence clock will not advance normally while Custom Gait is executing. Instead, the section of the sequence occupied by Custom Gait will represent one gait cycle (duration set by the `cycle_duration` parameter). This portion of the sequence, including moves in other tracks, will loop until Custom Gait is commanded to stop. This behavior is denoted by the black repeat symbols in the timeline view within Choreographer and will be reflected by the red cursor during execution. +Custom Gait is integrated as a legs-track move within the Choreography API. It can therefore be combined with other moves that occupy the body, arm, gripper, and lights tracks. The Custom Gait move can be adjusted to occupy any number of slices within the timeline, however the sequence clock will not advance normally while Custom Gait is executing. Instead, the section of the sequence occupied by Custom Gait will represent one gait cycle (duration set by the `cycle_duration` parameter). This portion of the sequence, including moves in other tracks, will loop until Custom Gait is commanded to stop. This behavior is denoted by the black repeat symbols in the timeline view within Choreographer and will be reflected by the red cursor during execution. -This means that Body and Arm-track moves will result in a cyclic motion phase-locked to Custom Gait, providing further options for customizing the appearance of the behavior. It is not possible for other moves to span the beginning or end of Custom Gait within the timeline. +This means that Body and Arm-track moves will result in a cyclic motion phase-locked to Custom Gait, providing further options for customizing the appearance of the behavior. It is not possible for other moves to span the beginning or end of Custom Gait within the timeline. ## Driving Custom Gait -CustomGait responds to the [ChoreographyCommand](choreography_service.md) RPC. When operating through Choreographer with an attached XBox controller, steering commands will be sent based on joystick position (left joystick for translation, right for turning), and the d-pad down button will command Custom Gait to stop, allowing the sequence to proceed. Steering commands will be scaled by the `CustomGaitCommandLimits` message returned as part of the [ChoreographyStatus](choreography_service.md) RPC. Those will generally be the values specified for `max_velocity` and `max_yaw_rate` in the parameters, but may be limited based on a determination of what that gait pattern is capable of. +CustomGait responds to the [ChoreographyCommand](choreography_service.md) RPC. When operating through Choreographer with an attached XBox controller, steering commands will be sent based on joystick position (left joystick for translation, right for turning), and the d-pad down button will command Custom Gait to stop, allowing the sequence to proceed. Steering commands will be scaled by the `CustomGaitCommandLimits` message returned as part of the [ChoreographyStatus](choreography_service.md) RPC. Those will generally be the values specified for `max_velocity` and `max_yaw_rate` in the parameters, but may be limited based on a determination of what that gait pattern is capable of. -The custom gait move can also be driven through the tablet's choreograpy drive screen using the tablet's joysticks. See [Tablet Choreography Mode](choreography_in_tablet.md) for further details on playing choreography sequences through the tablet. +The custom gait move can also be driven through the tablet's choreography drive screen using the tablet's joysticks. See [Tablet Choreography Mode](choreography_in_tablet.md) for further details on playing choreography sequences through the tablet. ## Gait Diagram -A Hildebrand-style gait diagram (see [wikipedia](https://en.wikipedia.org/wiki/Gait) is provided for Custom Gait as currently configured in the left panel of the Move Configuration tab in Choreographer. For each foot in the diagram (FL, FR, HL, HR), black regions of the diagram indicate periods of time when a foot is in contact with the ground, and white regions indicate periods of time when a foot is in the air. The phase sliders control the beginning and end of the white region. Some types of configuration errors will be indicated in red on the diagram. +A Hildebrand-style gait diagram (see [wikipedia](https://en.wikipedia.org/wiki/Gait) is provided for Custom Gait as currently configured in the left panel of the Move Configuration tab in Choreographer. For each foot in the diagram (FL, FR, HL, HR), black regions of the diagram indicate periods of time when a foot is in contact with the ground, and white regions indicate periods of time when a foot is in the air. The phase sliders control the beginning and end of the white region. Some types of configuration errors will be indicated in red on the diagram. ## Presets -Several preset gait patterns are provided in a pulldown menu where the "Reset to Default Parameters" button is for most moves. Select the desired preset, then click the "Apply" button. Note that presets only modify a subset of parameters. Presets with the prefix "gait" will only impact `cycle_duration` and phase parameters. +Several preset gait patterns are provided in a pulldown menu where the "Reset to Default Parameters" button is for most moves. Select the desired preset, then click the "Apply" button. Note that presets only modify a subset of parameters. Presets with the prefix "gait" will only impact `cycle_duration` and phase parameters. ## Tips for Configuring Custom Gait -- Fast stepping is often easier than slow stepping, especially when fewer feet are on the ground. Try starting with a faster `cycle_duration`, then gradually increasing that value to slow the cadence to your preferred speed. Exact value will depend on gait pattern, especially the duty factor, but `cycle_duration = 0.6 seconds` or even faster may be required from some patterns. + +- Fast stepping is often easier than slow stepping, especially when fewer feet are on the ground. Try starting with a faster `cycle_duration`, then gradually increasing that value to slow the cadence to your preferred speed. Exact value will depend on gait pattern, especially the duty factor, but `cycle_duration = 0.6 seconds` or even faster may be required from some patterns. - Swing Duration is `(touchdown_phase - liftoff_phase * cycle_duration)`. - Individual swings shorter than 250 ms will make it difficult to operate off of flat ground. - Individual swings shorter than 150 ms will make it difficult to move quickly, even on flat ground. @@ -40,47 +41,48 @@ Several preset gait patterns are provided in a pulldown menu where the "Reset to - The maximum duration both left or both right feet can be off the ground simultaneously is about 500ms. - The maximum duration a diagonal pair of feet can be off the ground simultaneously is about 800ms. - The "duty factor" is the fraction of the time that a foot is on the ground. -- The average duty factor of either the two front legs or the two hind legs should be at least 30%. Increasing duty factor will generally improve stability (with decreasing returns after 65%). -- More challenging gaits may only work well at low speeds and/or low accelerations. Consider lowering the speed limits using the `max_velocity` and `max_yaw_rate` sliders and lowering the acceleration limit with the `acceleration_scaling` slider during initial testing. +- The average duty factor of either the two front legs or the two hind legs should be at least 30%. Increasing duty factor will generally improve stability (with decreasing returns after 65%). +- More challenging gaits may only work well at low speeds and/or low accelerations. Consider lowering the speed limits using the `max_velocity` and `max_yaw_rate` sliders and lowering the acceleration limit with the `acceleration_scaling` slider during initial testing. ## Parameter Reference -Parameter | Effect ---|-- -cycle_duration | The duration (s) of a full gait cycle. -liftoff_phase | When within the gait cycle a particular leg lifts off the ground. -touchdown_phase | When within the gait cycle a particular leg steps onto the ground. -two_LEG_swings | Determines whether that particular leg will have two steps within the gait cycle. If active, a second set of liftoff_phase and touchdown_phase must be specified. -max_velocity | The maximum translational velocity (m/s) command that will be accepted. -max_yaw_rate | The maximum turn rate (rad/s) command that will be accepted. -acceleration_scaling | How much to limit steering acceleration. 1 is normal. Smaller is less acceleration. -com_height | Height (m) of the Center-of-Mass above the ground. -body_translation_offset | Horizontal offset (m) of the Center-of-Mass from a neutral posture. (x-forward, y-left). This is a constant offset that is additive with any phase-dependent offset specified in a Body-track move. -body_rotation_offset | Orientation offset (rad) from a neutral posture. This is a constant offset that is additive with any phase-dependent offset specified in a Body-track move. -low_speed_body_fraction | How much to scale down the body motion when navigating at low speeds. -stance_shape | The relative position of the feet when they are on the ground. -stance_shape.length | Distance (m) between front and hind feet. -stance_shape.width | Distance (m) between left and right feet. -stance_shape.front_wider_than_hind | Difference (m) between the FL<-->FR distance and the HL<-->HR distance. Positive means front feet are wider. -stance_shape.left_longer_than_right | Difference (m) between the FL<-->HL distance and the FR<-->HR distance. Positive means the left feet are farther apart. -stance_shape.left_forward_of_right | Distance (m) to shift the FL and HL feet forward relative to the FR and HR feet. Negative means shifted backwards. -general_swing_params | Swing parameters that apply to all legs not configured to use leg-specific swing parameters. -use_LEG_swing_params | Configures a particular leg to use leg-speciic swing parameters rather than the general set. -LEG_swing_params | Swing parameters used by a particular leg if configured to use leg-specific swing parameters. -SwingParams.height | How high (m) to lift the foot. Request may not be achievable due to configured vertical_speed, vertical_acceleration, and swing duration. -SwingParams.liftoff_speed | How fast (m/s) to start lifting the foot at the moment of liftoff. -SwingParams.vertical_speed | How fast (m/s) to lift and lower the foot. -SwingParams.vertical_acceleration | How fast to accelerate (m/s/s) the foot vertically to achieve the configured vertical_speed. -SwingParams.overlay_outside | How far (m) to swing the foot to the outside (negative for inside) relative to a straight-line step. -SwingParams.overlay_forward | How far (m) to swing the foot forward (negative for backward) relative to a straight-line step. -SwingParams.low_speed_fraction | How much to reduce the swing parameters when navigating at low speed. -mu | Estimated coefficient of friction between the ground and the feet. Setting this accurately will improve reliability. -timing_stiffness | How much the robot is allowed to deviate from the specified timing. 0 means no deviation. Otherwise, large values mean less deviation and small values mean more is acceptable.
Too much timing adjustment (low, non-zero values) may make the gait unstable.
At least a little timing adjustment is recommended for gaits with flight phases (periods with 0 feet on the ground). -step_position_stiffness | How much the robot is allowed to deviate from the specified stance shape.
0 means no deviation.
Otherwise: large values mean less deviation and small values mean more is acceptable.
Too much position adjustment (low, non-zero values) may make the gait unstable. -enable_perception_obstacle_avoidance | If enabled, CustomGait will attempt to avoid obstacles.
More challenging gaits may require significant obstacle avoidance padding to reliably avoid collisions. -obstacle_avoidance_padding | How far (m) to stay away from obstacles.
More challenging gaits may require significant padding to reliably avoid collisions. -enable_perception_terrain_height | If enabled, will use perception to determine the shape of the terrain.
Can be disabled if operating on a flat floor. -enable_perception_step_placement | If enabled, will use perception to determine good vs bad locations to step.
Can be disabled if operating on a flat floor. -maximum_stumble_distance | If Spot stumbles more than this distance (m), it will give up and freeze. -stand_in_place | Stand rather than stepping in place when not moving. -standard_final_stance | Go back to a standard rectangular stance when ending the gait.
Otherwise maintains the customized stance shape. -trip_sensitivity | How sensitive we should be to trip detection.
On the range [0, 1], where 1 is normal sensitivity and 0 is ignoring all trips.
Useful for very aggressive gaits or when a costume is restricting leg motion. + +| Parameter | Effect | +| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| cycle_duration | The duration (s) of a full gait cycle. | +| liftoff_phase | When within the gait cycle a particular leg lifts off the ground. | +| touchdown_phase | When within the gait cycle a particular leg steps onto the ground. | +| two_LEG_swings | Determines whether that particular leg will have two steps within the gait cycle. If active, a second set of liftoff_phase and touchdown_phase must be specified. | +| max_velocity | The maximum translational velocity (m/s) command that will be accepted. | +| max_yaw_rate | The maximum turn rate (rad/s) command that will be accepted. | +| acceleration_scaling | How much to limit steering acceleration. 1 is normal. Smaller is less acceleration. | +| com_height | Height (m) of the Center-of-Mass above the ground. | +| body_translation_offset | Horizontal offset (m) of the Center-of-Mass from a neutral posture. (x-forward, y-left). This is a constant offset that is additive with any phase-dependent offset specified in a Body-track move. | +| body_rotation_offset | Orientation offset (rad) from a neutral posture. This is a constant offset that is additive with any phase-dependent offset specified in a Body-track move. | +| low_speed_body_fraction | How much to scale down the body motion when navigating at low speeds. | +| stance_shape | The relative position of the feet when they are on the ground. | +| stance_shape.length | Distance (m) between front and hind feet. | +| stance_shape.width | Distance (m) between left and right feet. | +| stance_shape.front_wider_than_hind | Difference (m) between the FL<-->FR distance and the HL<-->HR distance. Positive means front feet are wider. | +| stance_shape.left_longer_than_right | Difference (m) between the FL<-->HL distance and the FR<-->HR distance. Positive means the left feet are farther apart. | +| stance_shape.left_forward_of_right | Distance (m) to shift the FL and HL feet forward relative to the FR and HR feet. Negative means shifted backwards. | +| general_swing_params | Swing parameters that apply to all legs not configured to use leg-specific swing parameters. | +| use_LEG_swing_params | Configures a particular leg to use leg-specific swing parameters rather than the general set. | +| LEG_swing_params | Swing parameters used by a particular leg if configured to use leg-specific swing parameters. | +| SwingParams.height | How high (m) to lift the foot. Request may not be achievable due to configured vertical_speed, vertical_acceleration, and swing duration. | +| SwingParams.liftoff_speed | How fast (m/s) to start lifting the foot at the moment of liftoff. | +| SwingParams.vertical_speed | How fast (m/s) to lift and lower the foot. | +| SwingParams.vertical_acceleration | How fast to accelerate (m/s/s) the foot vertically to achieve the configured vertical_speed. | +| SwingParams.overlay_outside | How far (m) to swing the foot to the outside (negative for inside) relative to a straight-line step. | +| SwingParams.overlay_forward | How far (m) to swing the foot forward (negative for backward) relative to a straight-line step. | +| SwingParams.low_speed_fraction | How much to reduce the swing parameters when navigating at low speed. | +| mu | Estimated coefficient of friction between the ground and the feet. Setting this accurately will improve reliability. | +| timing_stiffness | How much the robot is allowed to deviate from the specified timing. 0 means no deviation. Otherwise, large values mean less deviation and small values mean more is acceptable.
Too much timing adjustment (low, non-zero values) may make the gait unstable.
At least a little timing adjustment is recommended for gaits with flight phases (periods with 0 feet on the ground). | +| step_position_stiffness | How much the robot is allowed to deviate from the specified stance shape.
0 means no deviation.
Otherwise: large values mean less deviation and small values mean more is acceptable.
Too much position adjustment (low, non-zero values) may make the gait unstable. | +| enable_perception_obstacle_avoidance | If enabled, CustomGait will attempt to avoid obstacles.
More challenging gaits may require significant obstacle avoidance padding to reliably avoid collisions. | +| obstacle_avoidance_padding | How far (m) to stay away from obstacles.
More challenging gaits may require significant padding to reliably avoid collisions. | +| enable_perception_terrain_height | If enabled, will use perception to determine the shape of the terrain.
Can be disabled if operating on a flat floor. | +| enable_perception_step_placement | If enabled, will use perception to determine good vs bad locations to step.
Can be disabled if operating on a flat floor. | +| maximum_stumble_distance | If Spot stumbles more than this distance (m), it will give up and freeze. | +| stand_in_place | Stand rather than stepping in place when not moving. | +| standard_final_stance | Go back to a standard rectangular stance when ending the gait.
Otherwise maintains the customized stance shape. | +| trip_sensitivity | How sensitive we should be to trip detection.
On the range [0, 1], where 1 is normal sensitivity and 0 is ignoring all trips.
Useful for very aggressive gaits or when a costume is restricting leg motion. | diff --git a/docs/concepts/choreography/move_reference.md b/docs/concepts/choreography/move_reference.md index 57507785c..9980971a5 100644 --- a/docs/concepts/choreography/move_reference.md +++ b/docs/concepts/choreography/move_reference.md @@ -10,8 +10,8 @@ Development Kit License (20191101-BDSDK-SL). This section describes each Choreographer move at a high level, including: -* Parameters used by the move -* Animated GIFs demonstrating the move with default parameters (for most moves) +- Parameters used by the move +- Animated GIFs demonstrating the move with default parameters (for most moves) More information about choreography moves can be found by looking at the choreography protos in the Spot [proto reference](../../../protos/bosdyn/api/README). @@ -21,12 +21,12 @@ More information about choreography moves can be found by looking at the choreog ![](gif_images/image1.gif) -Rotates the body to a desired orientation. Nominally takes one beat (4 slices) but can be extended to go slower. +Rotates the body to a desired orientation. Nominally takes one beat (4 slices) but can be extended to go slower. -Parameter | Effect ---|-- -rotation | The desired body orientation. -return_to_start_pose | If true, returns to the previous body pose by the end of this move. If false, remains in the specified position. +| Parameter | Effect | +| -------------------- | ---------------------------------------------------------------------------------------------------------------- | +| rotation | The desired body orientation. | +| return_to_start_pose | If true, returns to the previous body pose by the end of this move. If false, remains in the specified position. | ### rotate_body_sharp @@ -34,7 +34,7 @@ return_to_start_pose | If true, returns to the previous body pose by the end of Identical to the rotate_body move, but moves to the desired position quickly and returns (unless configured not to return) more slowly. -***No Parameters*** +**_No Parameters_** ### body_hold @@ -42,90 +42,90 @@ Identical to the rotate_body move, but moves to the desired position quickly and Moves the body to a specified position/orientation and holds it steady for the specified duration then optionally returns to a neutral pose. -Parameter | Effect ---|-- -rotation/translation | The desired pose. -entry_slices | How long to spend transitioning to the desired pose. -exit_slices | How quickly to transition back to the original pose. If set to 0, remains at the specified pose. +| Parameter | Effect | +| -------------------- | ------------------------------------------------------------------------------------------------ | +| rotation/translation | The desired pose. | +| entry_slices | How long to spend transitioning to the desired pose. | +| exit_slices | How quickly to transition back to the original pose. If set to 0, remains at the specified pose. | ### body_const -Holds the body at the pose from the immediately preceding body-track move. Applies to both orientation and translation. Can be extended to any desired duration. +Holds the body at the pose from the immediately preceding body-track move. Applies to both orientation and translation. Can be extended to any desired duration. -***No Parameters*** +**_No Parameters_** ### sway ![](gif_images/image15.gif) -Sway back and forth to the beat. A full back/forth cycle takes 2 beats. +Sway back and forth to the beat. A full back/forth cycle takes 2 beats. -Parameter | Effect ---|-- -vertical/horizontal/roll | How much motion in the respective directions. -pivot | Which portion of the body remains stationary. -style | Modifies the velocity profile of the motion. -pronounced | How exaggerated the style is. Smaller values will be closer to the SWAY_STYLE_STANDARD. -hold_zero_axes | If set to true, maintains the previous pose in whichever axes 0 motion is specified. If false, those axes return to nominal. +| Parameter | Effect | +| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | +| vertical/horizontal/roll | How much motion in the respective directions. | +| pivot | Which portion of the body remains stationary. | +| style | Modifies the velocity profile of the motion. | +| pronounced | How exaggerated the style is. Smaller values will be closer to the SWAY_STYLE_STANDARD. | +| hold_zero_axes | If set to true, maintains the previous pose in whichever axes 0 motion is specified. If false, those axes return to nominal. | ### random_rotate ![](gif_images/image7.gif) -Rotate the body in a random, chaotic manner. Rotation in each axis is generated independently. Can be extended to any desired duration. +Rotate the body in a random, chaotic manner. Rotation in each axis is generated independently. Can be extended to any desired duration. -Parameter | Effect ---|-- -amplitude | How far from the nominal pose to rotate in each axis. -speed | How quickly to rotate in each axis. -speed_variation | How much to vary the speed. Controls the ratio between the slowest and fastest moves. When 0, no variation (all moves are the same speed). -num_speed_tiers | Can create multiple tiers of speed. -tier_variation | Difference between the speed of the slowest tier compared to the fastest_tier. +| Parameter | Effect | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| amplitude | How far from the nominal pose to rotate in each axis. | +| speed | How quickly to rotate in each axis. | +| speed_variation | How much to vary the speed. Controls the ratio between the slowest and fastest moves. When 0, no variation (all moves are the same speed). | +| num_speed_tiers | Can create multiple tiers of speed. | +| tier_variation | Difference between the speed of the slowest tier compared to the fastest_tier. | ### twerk ![](gif_images/image9.gif) -Lowers the robutt down and back up once. Lasts for one beat (4 slices). +Lowers the robutt down and back up once. Lasts for one beat (4 slices). -Parameter | Effect ---|-- -height | How much to lower the robutt. +| Parameter | Effect | +| --------- | ----------------------------- | +| height | How much to lower the robutt. | ### butt_circle ![](gif_images/image23.gif) -Move the robutt, head, or both head and robutt in a circle. Extendable to the desired duration. Rotates about the previous pose. +Move the robutt, head, or both head and robutt in a circle. Extendable to the desired duration. Rotates about the previous pose. -Parameter | Effect ---|-- -radius | Size of the rotation circle. -beats_per_circle | The duration of a circle in beats (4 slices each). Mutually exclusive with number_of_circles. Will be ignored unless number_of_circles = 0. -number_of_circles | The number of circles to perform. Mutually exclusive with beats_per_circle. If number_of_circles = 0, beats_per_circle will be used instead. -pivot | What part of the robot to pivot around. Pivoting around the front means the robutt moves in circles. -clockwise | Which direction to rotate. -starting_angle | Where in the circle to start rotation. Since it spirals outwards, it may not be obvious exactly where it starts. +| Parameter | Effect | +| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| radius | Size of the rotation circle. | +| beats_per_circle | The duration of a circle in beats (4 slices each). Mutually exclusive with number_of_circles. Will be ignored unless number_of_circles = 0. | +| number_of_circles | The number of circles to perform. Mutually exclusive with beats_per_circle. If number_of_circles = 0, beats_per_circle will be used instead. | +| pivot | What part of the robot to pivot around. Pivoting around the front means the robutt moves in circles. | +| clockwise | Which direction to rotate. | +| starting_angle | Where in the circle to start rotation. Since it spirals outwards, it may not be obvious exactly where it starts. | ### fidget_stand -A procedurally-generated idle animation. It looks around, breathes, shifts its weight, and stamps. Can use one of the preset configurations or customize the parameters. - -Parameter | Effect ---|-- -preset | Pre-designed parameter combinations that attempt to convey a specific emotion. NOTE: All other sliders are only active if this is set to "Custom". -min_gaze_pitch | How far down the robot looks. (Radians) -max_gaze_pitch | How far up the robot looks. (Radians) -gaze_mean_period | How frequently the robot looks somewhere else. (Seconds) -gaze_center_cfp | Where the gaze array originates in the center-of-footprint frame. (Meters) -shift_mean_period | How frequently the robot shifts its weight. (Seconds) -shift_max_transition_time | Maximum amount of time the robot spends shifting its weight. (Seconds) -breath_min_z | Minimum amplitude of the "breathing" (meters) -breath_max_z | Maximum amplitude of the "breathing" (meters) -leg_gesture_mean_period | How frequently the robot does a leg gesture. (Seconds) -gaze_slew_rate | How quickly the robot shifts its gaze. (Meters/Second) -gaze_position_generation_gain | How much Brownian motion is applied to the gaze point. -gaze_roll_generation_gain | How much Brownian motion is applied to the gaze roll. +A procedurally-generated idle animation. It looks around, breathes, shifts its weight, and stamps. Can use one of the preset configurations or customize the parameters. + +| Parameter | Effect | +| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| preset | Pre-designed parameter combinations that attempt to convey a specific emotion. NOTE: All other sliders are only active if this is set to "Custom". | +| min_gaze_pitch | How far down the robot looks. (Radians) | +| max_gaze_pitch | How far up the robot looks. (Radians) | +| gaze_mean_period | How frequently the robot looks somewhere else. (Seconds) | +| gaze_center_cfp | Where the gaze array originates in the center-of-footprint frame. (Meters) | +| shift_mean_period | How frequently the robot shifts its weight. (Seconds) | +| shift_max_transition_time | Maximum amount of time the robot spends shifting its weight. (Seconds) | +| breath_min_z | Minimum amplitude of the "breathing" (meters) | +| breath_max_z | Maximum amplitude of the "breathing" (meters) | +| leg_gesture_mean_period | How frequently the robot does a leg gesture. (Seconds) | +| gaze_slew_rate | How quickly the robot shifts its gaze. (Meters/Second) | +| gaze_position_generation_gain | How much Brownian motion is applied to the gaze point. | +| gaze_roll_generation_gain | How much Brownian motion is applied to the gaze roll. | ## Step moves @@ -133,34 +133,37 @@ gaze_roll_generation_gain | How much Brownian motion is applied to the gaze roll ![](gif_images/image18.gif) -Take a single step with one or two feet. Nominally requires one beat (4 slices) but can be extended to step slower. If stepping with two feet, especially both front or both hind feet, longer steps will be unreliable. Lifts off one slice after the move begins and touches down one slice before it ends. - -Parameter | Effect ---|-- -foot/second_foot | Which feet to step with. If only a single foot is desired, second_foot should be set to LEG_NO_LEG. -offset | Where to step relative to a nominal stance for the first foot. -touch | If true, taps the foot near the ground midway through swing. -touch_offset | If touch is true, where the touch should occur relative to the nominal stance location. -mirror_x, mirror_y | Determines whether the second_foot (if there is one) has the same offset and touch_offset as the first foot (false) or the opposite offset (true). Specified independently for the x and y axis. -swing_waypoint | Defines a waypoint that the swing leg must go through between liftoff and touchdown. If left at {0,0,0}, no waypoint will be added and the system will take a normal swing. -waypoint_dwell | What fraction of the swing should be spent near the waypoint. -swing_height | How high to lift the foot/feet. Does nothing if a swing_waypoint is specified. -liftoff_velocity | How quickly to raise the foot/feet. Does nothing if a swing_waypoint is specified. -touchdown_velocity | How quickly to lower the foot/feet. Does nothing if a swing_waypoint is specified. +Take a single step with one or two feet. Nominally requires one beat (4 slices) but can be extended to step slower. If stepping with two feet, especially both front or both hind feet, longer steps will be unreliable. Lifts off one slice after the move begins and touches down one slice before it ends. + +| Parameter | Effect | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| foot/second_foot | Which feet to step with. If only a single foot is desired, second_foot should be set to LEG_NO_LEG. | +| offset | Where to step relative to a nominal stance for the first foot. | +| touch | If true, taps the foot near the ground midway through swing. | +| touch_offset | If touch is true, where the touch should occur relative to the nominal stance location. | +| mirror_x, mirror_y | Determines whether the second_foot (if there is one) has the same offset and touch_offset as the first foot (false) or the opposite offset (true). Specified independently for the x and y axis. | +| swing_waypoint | Defines a waypoint that the swing leg must go through between liftoff and touchdown. If left at {0,0,0}, no waypoint will be added and the system will take a normal swing. | +| waypoint_dwell | What fraction of the swing should be spent near the waypoint. | +| swing_height | How high to lift the foot/feet. Does nothing if a swing_waypoint is specified. | +| liftoff_velocity | How quickly to raise the foot/feet. Does nothing if a swing_waypoint is specified. | +| touchdown_velocity | How quickly to lower the foot/feet. Does nothing if a swing_waypoint is specified. | ### goto ![](gif_images/Goto.gif) -Trot to a specified position in the dance frame. Unless explicitly set, the dance frame is defined by where the dance begins. Takes 1 step per beat. Extend the duration to successfully move farther. +Trot to a specified position in the dance frame. Unless explicitly set, the dance frame is defined by where the dance begins. Takes 1 step per beat. Extend the duration to successfully move farther. -Parameter | Effect ---|-- -absolute_position | Position the robot moves to in the dance frame. -absolute_yaw | Yaw orientation the robot moves to in the dance frame. -step_position_stiffness | How precisely the robot steps in the nominal locations. -duty_cycle | What fraction of the time a foot is on the ground. 0.5 is a standard trot. -link_to_next | Should the robot smoothly transition from this move to a subsequent goto move. +| Parameter | Effect | +| ----------------------- | ------------------------------------------------------------------------------------------------------ | +| relative | Relative to starting pose if true. Target specified in dance frame if false. | +| absolute_position | Position the robot moves to in the dance frame. Ignored if absolute = false. | +| absolute_yaw | Yaw orientation the robot moves to in the dance frame. Ignored if absolute = false. | +| relative_position | Position the robot moves to relative to where it started this move. Ignored if absolute = true. | +| relative_yaw | Yaw orientation the robot moves to relative to where it started this move. Ignored if absolute = true. | +| step_position_stiffness | How precisely the robot steps in the nominal locations. | +| duty_cycle | What fraction of the time a foot is on the ground. 0.5 is a standard trot. | +| link_to_next | Should the robot smoothly transition from this move to a subsequent goto move. | ### trot @@ -168,10 +171,10 @@ link_to_next | Should the robot smoothly transition from this move to a subseque Runs the trot gait. Can be extended to run for an arbitrary duration. -Parameter | Effect ---|-- -velocity/yaw_rate | The steering command. -stand_time | Duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. +| Parameter | Effect | +| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| velocity/yaw_rate | The steering command. | +| stand_time | Duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. | ### pace @@ -179,56 +182,60 @@ stand_time | Duration before the end of the nominal move to start going to a sta Runs the pace gait. Can be extended to run for any desired duration. -Parameter | Effect ---|-- -velocity/yaw_rate | The steering command. -stand_time | Duration before the end of the nominal move to start going to a stand. If set too short, it may not finish transitioning and could fall. +| Parameter | Effect | +| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| velocity/yaw_rate | The steering command. | +| stand_time | Duration before the end of the nominal move to start going to a stand. If set too short, it may not finish transitioning and could fall. | ### turn_2step ![](gif_images/image14.gif) -Take two steps to turn in place. Requires 2 beats (8 slices). +Take two steps to turn in place. Requires 2 beats (8 slices). -Parameter | Effect ---|-- -motion_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). -motion | How far to move. (Meters) -absolute_motion | Where to move to in the dance frame. (Meters) -yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). -yaw | How far to rotate. (Radians) -absolute_yaw | Where to rotate to in the dance frame. (Radians) -swing_height | How to pick up the feet. Zero indicates to use a default swing. -swing_velocity | How quickly to lift off and touch down the feet. Zero indicates to use a default swing. +| Parameter | Effect | +| ------------------ | --------------------------------------------------------------------------------------- | +| motion_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). | +| motion | How far to move. (Meters) | +| absolute_motion | Where to move to in the dance frame. (Meters) | +| yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). | +| yaw | How far to rotate. (Radians) | +| absolute_yaw | Where to rotate to in the dance frame. (Radians) | +| swing_height | How to pick up the feet. Zero indicates to use a default swing. | +| swing_velocity | How quickly to lift off and touch down the feet. Zero indicates to use a default swing. | ## pace_2step ![](gif_images/image21.gif) -Take two steps to translate using a pace gait (legs on the same side of the robot move together). Requires 2 beats (8 slices). Caution: Large lateral steps require a high-traction floor. +Take two steps to translate using a pace gait (legs on the same side of the robot move together). Requires 2 beats (8 slices). Caution: Large lateral steps require a high-traction floor. -Parameter | Effect ---|-- -motion_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). -motion | How far to move. (Meters) -absolute_motion | Where to move to in the dance frame. (Meters) -yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). -yaw | How far to rotate. (Radians) -absolute_yaw | Where to rotate to in the dance frame. (Radians) -swing_height | How to pick up the feet. Zero indicates to use a default swing. -swing_velocity | How quickly to lift off and touch down the feet. Zero indicates to use a default swing. +| Parameter | Effect | +| ------------------ | --------------------------------------------------------------------------------------- | +| motion_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). | +| motion | How far to move. (Meters) | +| absolute_motion | Where to move to in the dance frame. (Meters) | +| yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). | +| yaw | How far to rotate. (Radians) | +| absolute_yaw | Where to rotate to in the dance frame. (Radians) | +| swing_height | How to pick up the feet. Zero indicates to use a default swing. | +| swing_velocity | How quickly to lift off and touch down the feet. Zero indicates to use a default swing. | ### crawl ![](gif_images/image11.gif) -Locomotes, taking one step every beat. Can be extended to run for any desired duration. +Locomotes, taking one step every beat. Can be extended to run for any desired duration. -Parameter | Effect ---|-- -velocity | Desired velocity of the robot. -swing_slices | Duration of a swing in slices. An entire gait cycle takes 4 beats (16 slices). At the maximum value of 8 slices two of the robot's feet will always be on the ground, as in the Amble gait. With a value of 4, the robot will always have one foot on the ground, as in the Crawl gait. -stance_width, stance_length | The dimensions and shape of the rectangle the stance feet make. +| Parameter | Effect | +| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| velocity | Desired velocity of the robot. | +| swing_slices | Duration of a swing in slices. An entire gait cycle takes 4 beats (16 slices). At the maximum value of 8 slices two of the robot's feet will always be on the ground, as in the Amble gait. With a value of 4, the robot will always have one foot on the ground, as in the Crawl gait. | +| stance_width, stance_length | The dimensions and shape of the rectangle the stance feet make. | + +### custom_gait + +See [CustomGait](custom_gait.md) ## Dynamic moves @@ -236,18 +243,18 @@ stance_width, stance_length | The dimensions and shape of the rectangle the stan ![](gif_images/image16.gif) -Spot’s version of the “running man” dance move. Can be extended to run for any desired duration. +Spot’s version of the “running man” dance move. Can be extended to run for any desired duration. -Parameter | Effect ---|-- -velocity | By default, the robot dances in place but can move around in the world. -pre_move_cycles | How many slices to dance in place before moving at the specified velocity. -swing_height | How high to pick up the feet. -spread | How far to slide the feet backward from where they’re initially placed. -reverse | If true, will step backwards and slide forward: The reverse of the normal motion. -speed_multiplier | Run the move at something other than the song's overall beats-per-minute. -duty_cycle | What fraction of the time legs are in stance. -com_height | Desired height of the center-of-mass. +| Parameter | Effect | +| ---------------- | --------------------------------------------------------------------------------- | +| velocity | By default, the robot dances in place but can move around in the world. | +| pre_move_cycles | How many slices to dance in place before moving at the specified velocity. | +| swing_height | How high to pick up the feet. | +| spread | How far to slide the feet backward from where they’re initially placed. | +| reverse | If true, will step backwards and slide forward: The reverse of the normal motion. | +| speed_multiplier | Run the move at something other than the song's overall beats-per-minute. | +| duty_cycle | What fraction of the time legs are in stance. | +| com_height | Desired height of the center-of-mass. | ### bourree @@ -255,22 +262,21 @@ com_height | Desired height of the center-of-mass. Cross-legged tippy-taps, like the ballet move. -Parameter | Effect ---|-- -velocity, yaw_rate | Steering command. -stance_length | Distance between front and hind legs. +| Parameter | Effect | +| ------------------ | ------------------------------------- | +| velocity, yaw_rate | Steering command. | +| stance_length | Distance between front and hind legs. | ### hop ![](gif_images/image13.gif) - Runs the hop gait. Can be extended to run for any desired duration. -Parameter | Effect ---|-- -velocity/yaw_rate | The steering command. -stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. +| Parameter | Effect | +| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| velocity/yaw_rate | The steering command. | +| stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. | ### jog @@ -278,11 +284,10 @@ stand_time | The duration before the end of the nominal move to start going to a Runs the jog gait. Can be extended to run for any desired duration. -Parameter | Effect ---|-- -velocity/yaw_rate | The steering command. -stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. - +| Parameter | Effect | +| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| velocity/yaw_rate | The steering command. | +| stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. | ### skip @@ -290,40 +295,40 @@ stand_time | The duration before the end of the nominal move to start going to a Runs the skip gait. Is extendable to run for an arbitrary duration. -Parameter | Effect ---|-- -velocity/yaw_rate | The steering command. -stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. +| Parameter | Effect | +| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| velocity/yaw_rate | The steering command. | +| stand_time | The duration before the end of the nominal move to start going to a stand. If set too short, the robot may not finish transitioning and could fall. | ### front_up ![](gif_images/image19.gif) -Lifts the front feet then returns to a stand. Can be extended to adjust the duration of the hind-feet-only stance. Longer durations are unreliable. Lifts off 2 slices from the start of the move and touches down one slice from the end of the move. +Lifts the front feet then returns to a stand. Can be extended to adjust the duration of the hind-feet-only stance. Longer durations are unreliable. Lifts off 2 slices from the start of the move and touches down one slice from the end of the move. -Parameter | Effect ---|-- -mirror | If true, raises the hind legs instead of the front legs. +| Parameter | Effect | +| --------- | -------------------------------------------------------- | +| mirror | If true, raises the hind legs instead of the front legs. | ### jump ![](gif_images/image17.gif) -Jumps in place. Nominally lasts one beat but may take more slices at faster tempos. - -Parameter | Effect ---|-- -translation_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). -translation | How far to move. (Meters) -absolute_translation | Where to move to in the dance frame. (Meters) -yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). -yaw | How far to rotate. (Radians) -absolute_yaw | Where to rotate to in the dance frame. (Radians) -flight_slices | How long the jump should last with all feet off the ground measured in slices. Depending on tempo, higher values will be unreliable. -stance_width/stance_length | The footprint the robot should land its jump in. -swing_height | How how to pick up the feet. -split_fraction | Splits the liftoff and touchdown into two pairs of two legs. In fraction of of swing with two legs in flight, so 0 means all legs fully synchronized. -lead_leg_pair | If split_fraction is not 0, indicates which legs lift off first. Default AUTO mode will select a pair based on the translation vector. +Jumps in place. Nominally lasts one beat but may take more slices at faster tempos. + +| Parameter | Effect | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| translation_is_absolute | Is motion in the dance frame (true) or relative to the current position (false). | +| translation | How far to move. (Meters) | +| absolute_translation | Where to move to in the dance frame. (Meters) | +| yaw_is_absolute | Is yaw in the dance frame (true) or relative to the current position (false). | +| yaw | How far to rotate. (Radians) | +| absolute_yaw | Where to rotate to in the dance frame. (Radians) | +| flight_slices | How long the jump should last with all feet off the ground measured in slices. Depending on tempo, higher values will be unreliable. | +| stance_width/stance_length | The footprint the robot should land its jump in. | +| swing_height | How how to pick up the feet. | +| split_fraction | Splits the liftoff and touchdown into two pairs of two legs. In fraction of of swing with two legs in flight, so 0 means all legs fully synchronized. | +| lead_leg_pair | If split_fraction is not 0, indicates which legs lift off first. Default AUTO mode will select a pair based on the translation vector. | ## Transition moves @@ -331,72 +336,71 @@ lead_leg_pair | If split_fraction is not 0, indicates which legs lift off first. ![](gif_images/image10.gif) -Sit the robot down or remain seated. Requires at least 3 seconds. +Sit the robot down or remain seated. Requires at least 3 seconds. -***No Parameters*** +**_No Parameters_** ### stand_up -Stand the robot up from a seated position. Requires at least 2 seconds. +Stand the robot up from a seated position. Requires at least 2 seconds. -***No Parameters*** +**_No Parameters_** ### sit_to_sprawl ![](gif_images/image12.gif) -Starting from a seated position, rolls the robot onto its side/back. Intended to prep the robot for a more dramatic self-right. - -Parameter | Effect ---|-- -side | Which side to roll to. +Starting from a seated position, rolls the robot onto its side/back. Intended to prep the robot for a more dramatic self-right. +| Parameter | Effect | +| --------- | ---------------------- | +| side | Which side to roll to. | ### random_stretch -Extends any extendable moves immediately prior to it by a random number of slices between 0 and the duration of the stretch move. The robot then immediately jumps to the end of this move. Note: This changes the duration of a choreography sequence. +Extends any extendable moves immediately prior to it by a random number of slices between 0 and the duration of the stretch move. The robot then immediately jumps to the end of this move. Note: This changes the duration of a choreography sequence. -***No Parameters*** +**_No Parameters_** ### stand_to_kneel ![](gif_images/image3.gif) -Transitions from standing to kneeling on the hind legs. Requires 2 seconds. +Transitions from standing to kneeling on the hind legs. Requires 2 seconds. -***No Parameters*** +**_No Parameters_** ### kneel_to_stand ![](gif_images/image5.gif) -Transitions from kneeling on the hind legs to a stand. Requires 2.4 seconds. +Transitions from kneeling on the hind legs to a stand. Requires 2.4 seconds. -***No Parameters*** +**_No Parameters_** ### kneel_to_stand_fast ![](gif_images/kneel2standFast.gif) -Transitions from kneeling on the hind legs to a stand. Faster and smoother than kneel_To_stand, but might be less reliable in some combinations. +Transitions from kneeling on the hind legs to a stand. Faster and smoother than kneel_To_stand, but might be less reliable in some combinations. -***No Parameters*** +**_No Parameters_** ### self_right ![](gif_images/image22.gif) -Activate the self-right behavior. Primarily useful as the first move in a dance if you wish to start from a non-standard posture. Nominally requires 5 seconds, but can be extended to ensure that it completes. +Activate the self-right behavior. Primarily useful as the first move in a dance if you wish to start from a non-standard posture. Nominally requires 5 seconds, but can be extended to ensure that it completes. -***No Parameters*** +**_No Parameters_** ### leg_pose -Directly pose Spot's legs by specifying joint angles. Spot will make no attempt to balance. +Directly pose Spot's legs by specifying joint angles. Spot will make no attempt to balance. -Parameter | Effect ---|-- -angles | The specified joint angles. +| Parameter | Effect | +| --------- | --------------------------- | +| angles | The specified joint angles. | ## Kneel moves @@ -404,53 +408,54 @@ angles | The specified joint angles. ![](gif_images/image8.gif) -While kneeling, move the front legs to a specified joint configuration. Nominally takes one beat (4 slices) but can be extended to go slower. +While kneeling, move the front legs to a specified joint configuration. Nominally takes one beat (4 slices) but can be extended to go slower. -Parameter | Effect ---|-- -hip_x, hip_y, knee | Joint angles for the front-left leg. -mirror | If true, move the legs in a mirrored manner. If false, front-right leg moves to the same joint configuration as the front-left. If true, the front-right hip_x angle has the opposite sign: The front-left leg and the other joint angles will be the same. -easing | Controls the velocity profile of the motion. +| Parameter | Effect | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| hip_x, hip_y, knee | Joint angles for the front-left leg. | +| mirror | If true, move the legs in a mirrored manner. If false, front-right leg moves to the same joint configuration as the front-left. If true, the front-right hip_x angle has the opposite sign: The front-left leg and the other joint angles will be the same. | +| easing | Controls the velocity profile of the motion. | ### kneel_leg_move2 ![](gif_images/image8.gif) -Similar to kneel_leg_move, but allows you to independently set the front-left and front-right leg joint angles. Additionally allows linking for smoother transitions between multiple consecutive moves. +Similar to kneel_leg_move, but allows you to independently set the front-left and front-right leg joint angles. Additionally allows linking for smoother transitions between multiple consecutive moves. + +| Parameter | Effect | +| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| left_hip_x, left_hip_y, left_knee | Joint angles for the front-left leg. | +| right_hip_x, right_hip_y, right_knee | Joint angles for the front-left leg. | +| easing | Controls the velocity profile of the motion. Does nothing for linked moves. | +| link_to_next | Links this move to a second kneel_leg_move2 that immediately follows it if there is one. Multiple moves can be linked in this way. Linked moves form a combined trajectory where the joints travel through each waypoint but not necessarily come to a zero-velocity stop at the end of each move. | -Parameter | Effect ---|-- -left_hip_x, left_hip_y, left_knee | Joint angles for the front-left leg. -right_hip_x, right_hip_y, right_knee | Joint angles for the front-left leg. -easing | Controls the velocity profile of the motion. Does nothing for linked moves. -link_to_next | Links this move to a second kneel_leg_move2 that immediately follows it if there is one. Multiple moves can be linked in this way. Linked moves form a combined trajectory where the joints travel through each waypoint but not necessarily come to a zero-velocity stop at the end of each move. ### kneel_clap ![](gif_images/image2.gif) -While kneeling, clap the front feet together. Takes one beat (4 slices). +While kneeling, clap the front feet together. Takes one beat (4 slices). -Parameter | Effect ---|-- -direction | The movement direction of the clap in the flat_body frame (z is up, x is direction the robot faces). -location | The location of the clap in body frame. -speed | The speed of the clap. -clap_distance | How far apart the feet will be prior to clapping. +| Parameter | Effect | +| ------------- | ---------------------------------------------------------------------------------------------------- | +| direction | The movement direction of the clap in the flat_body frame (z is up, x is direction the robot faces). | +| location | The location of the clap in body frame. | +| speed | The speed of the clap. | +| clap_distance | How far apart the feet will be prior to clapping. | ### kneel_circles ![](gif_images/image6.gif) -While kneeling, move the front feet in circles in the body-XZ (sagittal) plane. The two feet will be 180 degrees out of phase. Can be extended to run for any duration. +While kneeling, move the front feet in circles in the body-XZ (sagittal) plane. The two feet will be 180 degrees out of phase. Can be extended to run for any duration. -Parameter | Effect ---|-- -location | The location of the center of the circles in body frame. -beats_per_circle | The duration of a full circle in beats. Ignored unless number_of_circles = 0. -number_of_circles | Number of circles to perform. If 0, then use beats_per_circle. -offset | Distance between the circle plane and the body centerline. -radius | Size of the circles that the feet move in. -reverse | Reverses the circle direction. Nominal direction is away from the body on top. +| Parameter | Effect | +| ----------------- | ------------------------------------------------------------------------------ | +| location | The location of the center of the circles in body frame. | +| beats_per_circle | The duration of a full circle in beats. Ignored unless number_of_circles = 0. | +| number_of_circles | Number of circles to perform. If 0, then use beats_per_circle. | +| offset | Distance between the circle plane and the body centerline. | +| radius | Size of the circles that the feet move in. | +| reverse | Reverses the circle direction. Nominal direction is away from the body on top. | ## Arm moves @@ -458,17 +463,17 @@ reverse | Reverses the circle direction. Nominal direction is away from the bod ![](gif_images/nod.gif) -Moves the WR0 joint up and back down for one beat (4 slices). If done from a stow pose, will raise the hand. +Moves the WR0 joint up and back down for one beat (4 slices). If done from a stow pose, will raise the hand. -***No Parameters*** +**_No Parameters_** ### stow ![](gif_images/stow.gif) -Returns the arm to a stowed configuration. Nominally takes one beat (4 slices) but can be extended to go slower. +Returns the arm to a stowed configuration. Nominally takes one beat (4 slices) but can be extended to go slower. -***No Parameters*** +**_No Parameters_** ### unstow @@ -476,32 +481,32 @@ Returns the arm to a stowed configuration. Nominally takes one beat (4 slices) Moves the arm to a deployed configuration. Nominally takes one beat (4 slices) but can be extended to go slower. -***No Parameters*** +**_No Parameters_** ### shoulder_left ![](gif_images/shoulder-lft.gif) -Rotate the SH0 joint to move the gripper to the left. Nominally takes one beat (4 slices) but can be extended to go slower. +Rotate the SH0 joint to move the gripper to the left. Nominally takes one beat (4 slices) but can be extended to go slower. -***No Parameters*** +**_No Parameters_** ### shoulder_right ![](gif_images/shoulder-rt.gif) -Rotate the SH0 joint to move the gripper to the right. Nominally takes one beat (4 slices) but can be extended to go slower. +Rotate the SH0 joint to move the gripper to the right. Nominally takes one beat (4 slices) but can be extended to go slower. -***No Parameters*** +**_No Parameters_** ### arm_move -Moves the arm to the specified joint angles. Nominally takes one beat (4 slices) but can be adjusted to go faster or slower. +Moves the arm to the specified joint angles. Nominally takes one beat (4 slices) but can be adjusted to go faster or slower. -Parameter | Effect ---|-- -angles | The specified joint angles, including the gripper angle. -easing | Controls the velocity profile of the motion. +| Parameter | Effect | +| --------- | -------------------------------------------------------- | +| angles | The specified joint angles, including the gripper angle. | +| easing | Controls the velocity profile of the motion. | ### arm_move_no_gripper @@ -509,124 +514,170 @@ Identical to arm_move, but excluding the gripper track. ### arm_move_relative -Moves the arm incrementally, relative to the previous pose. Nominally takes one beat (4 slices) but can be adjusted to go faster or slower. +Moves the arm incrementally, relative to the previous pose. Nominally takes one beat (4 slices) but can be adjusted to go faster or slower. -Parameter | Effect ---|-- -angles | The specified joint angles, including the gripper angle. -easing | Controls the velocity profile of the motion. +| Parameter | Effect | +| --------- | -------------------------------------------------------- | +| angles | The specified joint angles, including the gripper angle. | +| easing | Controls the velocity profile of the motion. | ### workspace_arm_move Moves the gripper to a location specified in the world (not joint angles). -Parameter | Effect ---|-- -frame | Frame in which the motion is specified. -absolute | If true goes to a position/orientation relative to the origin of the given frame. If false, direction is defined by the specified frame, but motion is relative to previous pose. -rotation, translation | The pose to move to. -easing | Controls the velocity profile of the motion. +| Parameter | Effect | +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| frame | Frame in which the motion is specified. | +| absolute | If true goes to a position/orientation relative to the origin of the given frame. If false, direction is defined by the specified frame, but motion is relative to previous pose. | +| rotation, translation | The pose to move to. | +| easing | Controls the velocity profile of the motion. | ### figure8_move ![](gif_images/fig8.gif) -Moves the gripper in a figure-8 pattern centered on the previous pose. Repeats for the specified duration. +Moves the gripper in a figure-8 pattern centered on the previous pose. Repeats for the specified duration. -Parameter | Effect ---|-- -height, width | The size and shape of the figure-8 pattern. -beats_per_cycle | How long to complete one cycle of the figure-8 pattern. +| Parameter | Effect | +| --------------- | ------------------------------------------------------- | +| height, width | The size and shape of the figure-8 pattern. | +| beats_per_cycle | How long to complete one cycle of the figure-8 pattern. | ### gripper ![](gif_images/gripper.gif) -Moves the gripper to the specified angle. Duration can be set to any number of slices but speed will be determined by parameter. Once the gripper reaches the specified angle it will stop. If the selected duration is too short to complete the move given the configured speed, the robot remains at whatever angle it reaches when move ends. +Moves the gripper to the specified angle. Duration can be set to any number of slices but speed will be determined by parameter. Once the gripper reaches the specified angle it will stop. If the selected duration is too short to complete the move given the configured speed, the robot remains at whatever angle it reaches when move ends. -Parameter | Effect ---|-- -angle | The desired gripper angle. -speed | The desired velocity of the gripper in rad/s. +| Parameter | Effect | +| --------- | --------------------------------------------- | +| angle | The desired gripper angle. | +| speed | The desired velocity of the gripper in rad/s. | ### frame_snapshot -This move sets the frame to be used by future moves that are in an absolute frame. Some moves will always be in the dance frame (frame_id = 0) and some allow you to explicitly select a frame_id. This move can set frames relative to either a fiducial or to the robot's footprint. +This move sets the frame to be used by future moves that are in an absolute frame. Some moves will always be in the dance frame (frame_id = 0) and some allow you to explicitly select a frame_id. This move can set frames relative to either a fiducial or to Spot's footprint. -Parameter | Effect ---|-- -frame_id | Which frame to set. The dance frame 0 is used by moves that do absolute motion but don't explicitly select a frame. -fiducial_number | Which fiducial to set the frame relative to. If set to -1 or if the fiducial has not been seen recently, the fiducial number is set according to the robot's footprint. -include_each_leg | Should each leg be included when determining the footprint. -compensated | If a foot is not included, should we offset the footprint as if that foot were in a nominal stance? Otherwise, we'll take the center of the included feet. +| Parameter | Effect | +| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| frame_id | Which frame to set. The dance frame 0 is used by moves that do absolute motion but don't explicitly select a frame. | +| fiducial_number | Which fiducial to set the frame relative to. If set to -1 or if the fiducial has not been seen recently, the fiducial number is set according Spot's footprint. | +| include_each_leg | Should each leg be included when determining the footprint. | +| compensated | If a foot is not included, should we offset the footprint as if that foot were in a nominal stance? Otherwise, we'll take the center of the included feet. | ### chicken_head ![](gif_images/chickenhead-opt.gif) -Holds the arm stationary in the world while the body is moving. Can also be configured to move in a fixed oscillation in the world. +Holds the arm stationary in the world while the body is moving. Can also be configured to move in a fixed oscillation in the world. -Parameter | Effect ---|-- -bob_magnitude | A vector describing the amplitude and direction of a periodic motion of the gripper in the world. -beats_per_cycle | How long it takes to complete 1 cycle of the motion described by bob_magnitude -follow | If set to true, the gripper position will adjust if the robot steps to a new location. +| Parameter | Effect | +| --------------- | ------------------------------------------------------------------------------------------------- | +| bob_magnitude | A vector describing the amplitude and direction of a periodic motion of the gripper in the world. | +| beats_per_cycle | How long it takes to complete 1 cycle of the motion described by bob_magnitude | +| follow | If set to true, the gripper position will adjust if the robot steps to a new location. | -## Lights moves +## Face Lights moves All colors are specified as RGB on a 0-255 scale. ### set_color -Sets the color of the robot's face lights. Left and right lights can be independently set. Lights can be set to fade in and out. +Sets the color of Spot's face (status) lights. Left and right lights can be independently set. Lights can be set to fade in and out. -Parameter | Effect ---|-- -left_color | Color of the left lights. Color of all lights if right_same_as_left specified. -right_same_as_left | If true, all lights are left_color. If false, left and right are independently specified. -right_color | Color of the right lights. Does nothing if right_same_as_left specified. -fade_in_slices | How long to spend brightening at the beginning, measured in slices (1/4 beats). -fade_out_slices | How long to spend darkening at the end, measured in slices (1/4 beats). +| Parameter | Effect | +| ------------------ | ---------------------------------------------------------------------------------------------- | +| left_color | Color of the left face lights. Color of all face lights if right_same_as_left specified. | +| right_same_as_left | If true, all face lights are left_color. If false, left and right are independently specified. | +| right_color | Color of the right face lights. Does nothing if right_same_as_left specified. | +| fade_in_slices | How long to spend brightening at the beginning, measured in slices (1/4 beats). | +| fade_out_slices | How long to spend darkening at the end, measured in slices (1/4 beats). | ### fade_color -Sets the lights to show one color at the top fading towards another color at the bottom. +Sets the face (status) lights to show one color at the top fading towards another color at the bottom. -Parameter | Effect ---|-- -top_color | The color of the topmost lights. -bottom_color | The color of the bottommost lights. -fade_in_slices | How long to brighten, measured in slices (1/4 beats). -fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). +| Parameter | Effect | +| --------------- | ----------------------------------------------------------- | +| top_color | The color of the topmost lights. | +| bottom_color | The color of the bottommost lights. | +| fade_in_slices | How long to brighten, measured in slices (1/4 beats). | +| fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). | ### independent_color -Independently specifies the color of all 8 lights. - -Parameter | Effect ---|-- -top_left | Color of the top left light. -upper_mid_left | Color of the second from top left light. -lower_mid_left | Color of the second from bottom left light. -bottom_left | Color of the bottom left light. -top_right | Color of the top right light. -upper_mid_right | Color of the second from top right light. -lower_mid_right | CColor of the second from bottom right light. -bottom_right | Color of the bottom right light. -fade_in_slices | How long to brighten, measured in slices (1/4 beats). -fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). +Independently specifies the color of all 8 face (status) lights. + +| Parameter | Effect | +| --------------- | ----------------------------------------------------------- | +| top_left | Color of the top left light. | +| upper_mid_left | Color of the second from top left light. | +| lower_mid_left | Color of the second from bottom left light. | +| bottom_left | Color of the bottom left light. | +| top_right | Color of the top right light. | +| upper_mid_right | Color of the second from top right light. | +| lower_mid_right | CColor of the second from bottom right light. | +| bottom_right | Color of the bottom right light. | +| fade_in_slices | How long to brighten, measured in slices (1/4 beats). | +| fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). | ### ripple_color -Sets the lights in a variety of moving patterns. +Sets the face (status) lights in a variety of moving patterns. -Parameter | Effect ---|-- -main | Color to make the lights. -secondary | Second color to make the lights, used only by some patterns. -pattern | Select from a variety of light motion patterns. -light_side | Which side lights to use for the pattern. -increment_slices | How quickly to move the pattern in slices (1/4 beats) between updates to the pattern. +| Parameter | Effect | +| ---------------- | ------------------------------------------------------------------------------------- | +| main | Color to make the face lights. | +| secondary | Second color to make the face lights, used only by some patterns. | +| pattern | Select from a variety of light motion patterns. | +| light_side | Which side lights to use for the pattern. | +| increment_slices | How quickly to move the pattern in slices (1/4 beats) between updates to the pattern. | -### custom_gait -See [CustomGait](custom_gait.md) \ No newline at end of file +## Audio Visual Lights moves + +All colors are specified as RGB on a 0-255 scale. + +### set_audio_visual_color + +Sets the color of the audio visual system's lights. Lights can be independently set. Lights can be set to fade in and out. + +| Parameter | Effect | +| ------------------ | --------------------------------------------------------------------------------------------------------------- | +| front_center_color | Color of the front center audio visual light. Color of all audio visual lights if all_same_as_center specified. | +| all_same_as_center | If true, all lights are front_center_color. If false, lights are independently specified. | +| front_left_color | Color of the front left audio visual light. Does nothing if all_same_as_center specified. | +| front_right_color | Color of the front right audio visual light. Does nothing if all_same_as_center specified. | +| back_left_color | Color of the back left audio visual light. Does nothing if all_same_as_center specified. | +| back_right_color | Color of the back right audio visual light. Does nothing if all_same_as_center specified. | +| fade_in_slices | How long to brighten, measured in slices (1/4 beats). | +| fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). | + +### set_all_color + +Sets the color of the audio visual system's lights and the face (status) lights. Lights can be independently set. Lights can be set to fade in and out. + +| Parameter | Effect | +| ------------------ | --------------------------------------------------------------------------------------------------------------- | +| front_center_color | Color of the front center audio visual light. Color of all audio visual lights if all_same_as_center specified. | +| all_same_as_center | If true, all lights are front_center_color. If false, lights are independently specified. | +| status_left_color | Color of the left face lights. Does nothing if all_same_as_center specified. | +| status_right_color | Color of the right face lights. Does nothing if all_same_as_center specified. | +| front_left_color | Color of the front left audio visual light. Does nothing if all_same_as_center specified. | +| front_right_color | Color of the front right audio visual light. Does nothing if all_same_as_center specified. | +| back_left_color | Color of the back left audio visual light. Does nothing if all_same_as_center specified. | +| back_right_color | Color of the back right audio visual light. Does nothing if all_same_as_center specified. | +| fade_in_slices | How long to brighten, measured in slices (1/4 beats). | +| fade_out_slices | How long to dim at the end, measured in slices (1/4 beats). | + +## Audio Visual Buzzer moves + +### buzzer_note + +Play a note from the Audio Visual System Buzzer for the duration of the move. + +| Parameter | Effect | +| --------- | ---------------------------------------------------------------------------------------------------------- | +| note | The musical note that will be played. | +| sharp | If true, raises the note by a half step, or semitone. If both sharp and flat are true, there is no effect. | +| flat | If true, lowers the note by a half step, or semitone. If both sharp and flat are true, there is no effect. | +| octave | The octave of the note. | diff --git a/docs/concepts/choreography/robot_controls_in_choreographer.md b/docs/concepts/choreography/robot_controls_in_choreographer.md index 0dd37c978..724080918 100644 --- a/docs/concepts/choreography/robot_controls_in_choreographer.md +++ b/docs/concepts/choreography/robot_controls_in_choreographer.md @@ -12,10 +12,8 @@ Robots can either be connected to Choreographer before starting the application To connect your robot to Choreographer, start Choreographer from the command line with arguments: - --hostname {IP/Hostname of your Spot} --user {Username you use to log in to your Spot} --password {Password for your Spot} - To connect multiple Spots at once include additional command line arguments, one set for each Spot. To connect your robot after the application has been started @@ -34,18 +32,18 @@ Choreographer supports connections to multiple robots. In the Robot Management T The **Robot Controls** bar is disabled if there are no robots connected to Choreographer. If a robot is connected to Choreographer, the buttons will have the following effects: -Button | Function -----|---- -Power Off| Powers off Spot’s motors. Always press Power off before approaching the robot. -Power On | Powers on your Spot’s motors. You must activate this before your Spot can stand or start choreography. -E-Stop | Enables or disables your Spot’s E-Stop. In an emergency, use this to stop the Spot immediately. -Self-Right | If your Spot has fallen, self-righting causes the robot to attempt to return to the sitting pose. -Sit | Sits the Spot in-place. Cancels all current choreography and music. E-Stop and Power Off can still be used in an emergency. -Stand | Brings Spot to a stand. Cancels all current choreography and music. E-Stop and Power Off can still be used in an emergency. -Enable Joystick | Activates joystick controls (see Joystick controls section) -Enable WASD Driving | Activates WASD keyboard driving (see WASD Controls section) -Return To Start | Spot walks from its current location to the last location it started a dance (either a full choreography or the move preview dance). -Start Choreography | Sends a choreography sequence to the robot, then starts a 3 second countdown before the robot begins dancing. Any loaded music will automatically start as soon as Spot begins to dance. +| Button | Function | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Power Off | Powers off Spot’s motors. Always press Power off before approaching the robot. | +| Power On | Powers on your Spot’s motors. You must activate this before your Spot can stand or start choreography. | +| E-Stop | Enables or disables your Spot’s E-Stop. In an emergency, use this to stop the Spot immediately. | +| Self-Right | If your Spot has fallen, self-righting causes the robot to attempt to return to the sitting pose. | +| Sit | Sits the Spot in-place. Cancels all current choreography and music. E-Stop and Power Off can still be used in an emergency. | +| Stand | Brings Spot to a stand. Cancels all current choreography and music. E-Stop and Power Off can still be used in an emergency. | +| Enable Joystick | Activates joystick controls (see Joystick controls section) | +| Enable WASD Driving | Activates WASD keyboard driving (see WASD Controls section) | +| Return To Start | Spot walks from its current location to the last location it started a dance (either a full choreography or the move preview dance). | +| Start Choreography | Sends a choreography sequence to the robot, then starts a 3 second countdown before the robot begins dancing. Any loaded music will automatically start as soon as Spot begins to dance. | Note: **Return to Start** brings all selected robots back to their starting position after completing a choreography. If multiple robots are being controlled, obstacle avoidance is enabled when they are navigating back to the starting position. To adjust this obstacle padding distance (in meters) the command line argument `--obs-padding DIST_IN_METERS` can be added to the Choreographer command line. @@ -53,18 +51,18 @@ Note: **Return to Start** brings all selected robots back to their starting posi ![Joystick Controls](images/joystick_help.png) -An Xbox gamepad controller can be used with the GUI for moving and positioning the robot. The button layout is set up for Xbox 360 controllers. Xbox controllers are connected to a computer using a USB port. Many of the buttons in the GUI are linked to gamepad buttons, and the gamepad button will behave the same as the corresponding GUI button. As shown in the diagram above they are: +An Xbox gamepad controller can be used with the GUI for moving and positioning the robot. The button layout is set up for Xbox 360 controllers. Xbox controllers are connected to a computer using a USB port. Many of the buttons in the GUI are linked to gamepad buttons, and the gamepad button will behave the same as the corresponding GUI button. As shown in the diagram above they are: -Button | Function -----|----- -A | Stop -B | Enable joystick -X | Start choreography -Y | Stand -Left-Bumper | Self-right -Right-Bumper | Sit -Start | Power on -Back | Power off +| Button | Function | +| ------------ | ------------------ | +| A | Stop | +| B | Enable joystick | +| X | Start choreography | +| Y | Stand | +| Left-Bumper | Self-right | +| Right-Bumper | Sit | +| Start | Power on | +| Back | Power off | When the joystick is enabled by tapping the **B** button on the gamepad or using the GUI button, the robot walks and can be driven using the joysticks. As shown in the diagram above, the left joystick controls translation. The right joystick controls yaw. @@ -82,22 +80,21 @@ When enabled, the robot can be driven using the WASD keys. Joystick mode is disa When the robot is controlled through any of the other Robot Controls buttons, WASD driving is disabled. Other keypresses still work. - -Key | Function -----|----- -v | Enable WASD mode -b | Enable joystick mode -k | Power on -l | Power off -y | Stand -x | Start choreography -[ | Sit -] | Self-right -w | Walk forward -a | Strafe left -s | Walk backwards -d | Strafe right -q | Turn left -e | Turn right +| Key | Function | +| --- | -------------------- | +| v | Enable WASD mode | +| b | Enable joystick mode | +| k | Power on | +| l | Power off | +| y | Stand | +| x | Start choreography | +| [ | Sit | +| ] | Self-right | +| w | Walk forward | +| a | Strafe left | +| s | Walk backwards | +| d | Strafe right | +| q | Turn left | +| e | Turn right | Select **Hotkeys Documentation** from the Help menu to view a keystroke mapping table. diff --git a/docs/concepts/data.md b/docs/concepts/data.md index 3013b0f59..abb84faa3 100644 --- a/docs/concepts/data.md +++ b/docs/concepts/data.md @@ -6,14 +6,15 @@ is subject to the terms and conditions of the Boston Dynamics Software Development Kit License (20191101-BDSDK-SL). --> -# Spot Data +# Spot Data + This sections describes various concepts on how data is captured, stored and retrieved in Spot services. ## Contents -* [Data Acquisition Overview](data_acquisition_overview.md) -* [Data Acquisition Output](data_acquisition_output.md) -* [Integrate Payloads with the API](writing_services_for_data_acquisition.md) -* [Data Buffer Overview](data_buffer_overview.md) -* [BDDF File Format](bddf.md) -* [Thermal Raw Data Format](data_acquisition_thermal_raw.md) +- [Data Acquisition Overview](data_acquisition_overview.md) +- [Data Acquisition Output](data_acquisition_output.md) +- [Integrate Payloads with the API](writing_services_for_data_acquisition.md) +- [Data Buffer Overview](data_buffer_overview.md) +- [BDDF File Format](bddf.md) +- [Thermal Raw Data Format](data_acquisition_thermal_raw.md) diff --git a/docs/concepts/data_acquisition_output.md b/docs/concepts/data_acquisition_output.md index 71aa7cab4..2f671c21b 100644 --- a/docs/concepts/data_acquisition_output.md +++ b/docs/concepts/data_acquisition_output.md @@ -8,11 +8,12 @@ Development Kit License (20191101-BDSDK-SL). # Data Acquisition Output - The data stored from data acquisition captures can be downloaded over a REST endpoint from the robot. When downloading the data, the result will be returned in a zip file containing all data that matches the particular query parameters sent to the endpoint. +The data stored from data acquisition captures can be downloaded over a REST endpoint from the robot. When downloading the data, the result will be returned in a zip file containing all data that matches the particular query parameters sent to the endpoint. ## Zip file structure An example zip file with data from both a teleoperation session and a run of a mission named "Inspection": + ``` downloaded_file.zip └───teleop_2020-10-29T183020Z @@ -33,7 +34,6 @@ downloaded_file.zip ... ``` - Each separate group from the stored data will be in its own directory. The directory name will be the `group_name`, formatted as `_` for Autowalk missions, or `teleop_` for teleop captures. Within each group's directory the images captured as part of that group will be saved with filenames of the form ` -.jpg`. There will be a `metadata.json` file with all of the associated metadata captured during that group, and optionally CSV files for basic or detailed position data (present if the data was captured during the group's actions). @@ -62,6 +62,7 @@ The json data is structured around actions, and the data within those actions. M ] } ``` + The "data" member will contain entries that map to the files stored in the zip, while the "metadata" member will contain json data that is associated with the action. Within the "data" or "metadata" members of an action, the individual entries will be stored in a list inside a member with the name of the channel. In general there will only be a single element inside this list, unless you separately store multiple pieces of data or metadata to the same channel during a particular capture action. Any json saved as part of the `metadata` field in `AcquireDataRequest` or the `metadata` argument to `DataAcquisitionClient.acquire_data()` will be saved on the "metadata" channel. Autowalk action tags are stored in this manner in a "custom_metadata" member. @@ -112,6 +113,7 @@ Note that these pieces of data or metadata can have their own set of "metadata", ``` Data from an example mission: + ```javascript { "actions": [ @@ -198,8 +200,9 @@ Data from an example mission: ], ... ``` + ## CSV structure The csv files will have one row for every file in the group. The columns of the csv file will be a flattened version of the basic-position-data or detailed-position-data metadata, as well as any custom Autowalk tags entered during recording. -Entries will be left empty in a row if the data was not captured for that file. \ No newline at end of file +Entries will be left empty in a row if the data was not captured for that file. diff --git a/docs/concepts/data_acquisition_thermal_raw.md b/docs/concepts/data_acquisition_thermal_raw.md index cc4a5adaf..fa7cf12c8 100644 --- a/docs/concepts/data_acquisition_thermal_raw.md +++ b/docs/concepts/data_acquisition_thermal_raw.md @@ -7,34 +7,40 @@ Development Kit License (20191101-BDSDK-SL). --> # Thermal Raw Data + The Spot CAM+IR payload allows capture of thermal data in the forms of `.raw` or `.pgm` files. Raw data files allow for more versatility when compared to a thermal `jpeg` image because they allow the thermal data to be rendered or analyzed as needed. For example, re-construction of a thermal image from the raw thermal data enables viewing with custom color palettes or to perform specific image processing in more advanced applications. ## Understanding thermal data + The raw thermal data from the Spot CAM+IR contains 327,680 (640x512) 16-bit unsigned values. Each value describes a temperature in units of decikelvin. To get the value in units of kelvin, divide the value by 10. The two bytes encoding each data value are given in **big endian**, meaning that the most significant byte of the two is given first when reading the data from left to right. There is an exception to this for version 3.1.0 of the Spot CAM+IR software, in which the byte order of the data was reversed to **little endian**. -SpotCAM+IR Software Version | Endianness ---|-- -v3.1.0 | Little endian -All other versions | Big endian - +| SpotCAM+IR Software Version | Endianness | +| --------------------------- | ------------- | +| v3.1.0 | Little endian | +| All other versions | Big endian | ### Thermal file types (`.pgm` vs `.raw`) + Raw data captured using the SDK is captured as `.pgm` while the same data captured using callbacks is captured as `.raw`. Both contain the same data, except that the `.pgm` file contains additional header lines. In general, `.pgm` files are downloaded when using the spot SDK while `.raw` files are downloaded when downloading through [the data service](data_buffer_overview.md#data-acquisition-download). The example script can read both file types, but it throws away any header files. The `.pgm` headers are necessary to parse the data if the width and height of the image are variable. ## Rendering raw thermal data + Some image viewers can natively open .pgm files as a grayscale image. To instead show with a particular color palette, a lookup-table can be referenced to map from temperature to a color. For example, the lookup tables used by matplotlib can be referenced at this [link](https://github.com/matplotlib/matplotlib/blob/850bf04d317cbd85f3baff888dd273582d19a3c7/lib/matplotlib/_cm_listed.py) ### Scaling the color mapping + The left image is a render using the min and max temperatures mapping directly to the min and max values in the color map. The image on the right shows the same image but with the mapping adjusted so that the lower temperature values are less prominent. This allows for more contrast and improved visibility of the hotter areas. ![Thermal Ironbow Example](./images/thermal_example_contrast.png) ### Color palettes: -The following renderings are generated from a single thermal data capture and rendered with OpenCV. + +The following renderings are generated from a single thermal data capture and rendered with OpenCV. ![Thermal Custom Palettes Example](./images/thermal_example_custom_colors.png) ### Example code + ``` import matplotlib.pyplot as plt import numpy @@ -58,7 +64,7 @@ with open(filename, 'rb') as f: processed_data = processed_data.reshape((int(height), int(width))) - image = list(processed_data) + image = list(processed_data) plt.imshow(image, plt.cm.inferno) # some alternate colormaps: inferno, plasma, viridis, ocean, cubehelix, rainbow plt.show() -``` \ No newline at end of file +``` diff --git a/docs/concepts/data_buffer_overview.md b/docs/concepts/data_buffer_overview.md index 42112801d..c703c9811 100644 --- a/docs/concepts/data_buffer_overview.md +++ b/docs/concepts/data_buffer_overview.md @@ -7,42 +7,54 @@ Development Kit License (20191101-BDSDK-SL). --> # Data Buffer Overview -The "Data Buffer" is a system that enables API clients to log data to the robot using the API. This data is combined with data logged by internal robot services, offering users a better understanding of robot operation and offering developers better tools for developing and debugging their new services. Clients are able to query the robot data service for information about the data stored on the robot as well as download the data from an HTTP server. Data acquisition services use the data buffer as a mechanism for storing acquired sensor data. -The robot allocates 60 gigabytes for data buffer storage. Logged data is saved to persistent storage in data _pages_. In Spot v2.1 all data pages are BDDF files on disk. When the limit of 60 gigabytes is exceeded, data files are deleted in oldest-first order until disk space used by these files falls below that threshold. +The "Data Buffer" is a system that enables API clients to log data to the robot using the API. This data is combined with data logged by internal robot services, offering users a better understanding of robot operation and offering developers better tools for developing and debugging their new services. Clients are able to query the robot data service for information about the data stored on the robot as well as download the data from an HTTP server. Data acquisition services use the data buffer as a mechanism for storing acquired sensor data. + +The robot allocates 60 gigabytes for data buffer storage. Logged data is saved to persistent storage in data _pages_. In Spot v2.1 all data pages are BDDF files on disk. When the limit of 60 gigabytes is exceeded, data files are deleted in oldest-first order until disk space used by these files falls below that threshold. ## Supported Data Types + Although API clients may log arbitrary data, the [Data Buffer service](../../protos/bosdyn/api/data_buffer_service.proto) enables clients to log specific [structured types](../../protos/bosdyn/api/data_buffer.proto) that may be handled specially and simplify later analysis. ### Text Messages -Basic text logs supporting _Info_, _Error_, _Warning_, and _Debug_ levels, as well as file and line number of origin. API clients and services may use the data buffer as a backend to their own text logging systems. Clients may log text messages via the `RecordTextMessages` RPC. + +Basic text logs supporting _Info_, _Error_, _Warning_, and _Debug_ levels, as well as file and line number of origin. API clients and services may use the data buffer as a backend to their own text logging systems. Clients may log text messages via the `RecordTextMessages` RPC. ### Operator Comments -Text-based messages, but primarily intended as a mechanism for robot operators to insert comments describing, for example, notable robot or mission observations, or instances where the robot did not perform as expected. Operator comments do not have a level, file, or line number. These messages are shown on the timeline in the log-download page. Also, internal log data near the time of log comments is preserved for a longer time so that it may be selected for sending to Boston Dynamics for debugging and failure analysis. Clients may log operator comments via the `RecordOperatorComments` RPC. + +Text-based messages, but primarily intended as a mechanism for robot operators to insert comments describing, for example, notable robot or mission observations, or instances where the robot did not perform as expected. Operator comments do not have a level, file, or line number. These messages are shown on the timeline in the log-download page. Also, internal log data near the time of log comments is preserved for a longer time so that it may be selected for sending to Boston Dynamics for debugging and failure analysis. Clients may log operator comments via the `RecordOperatorComments` RPC. ### Events -Event messages are appended to an on-robot event _diary_, enabling a robot or mission timeline to be built. Typical usage will include events for robot falls or calibration, but clients may add any context-building events that are useful when reviewing missions or robot performance. Each event is logged with a "level" enum designating the importance or criticality of the event. Most events will be enumerated with LOW, MEDIUM, or HIGH level, but the most important events may be enumerated as MISSION_CRITICAL or SYSTEM_CRITICAL. Clients may choose any appropriate level, but SYSTEM_CRITICAL events are quasi-reserved for internal events generated by Boston Dynamics. Clients may log events via the `RecordEvents` RPC. + +Event messages are appended to an on-robot event _diary_, enabling a robot or mission timeline to be built. Typical usage will include events for robot falls or calibration, but clients may add any context-building events that are useful when reviewing missions or robot performance. Each event is logged with a "level" enum designating the importance or criticality of the event. Most events will be enumerated with LOW, MEDIUM, or HIGH level, but the most important events may be enumerated as MISSION_CRITICAL or SYSTEM_CRITICAL. Clients may choose any appropriate level, but SYSTEM_CRITICAL events are quasi-reserved for internal events generated by Boston Dynamics. Clients may log events via the `RecordEvents` RPC. ### Signals -Signals messages enable logging of numerical time series data. Clients must first log a "schema" message describing the time series data to be logged, including the name and type of each variable. This enables post-processing tools to properly parse the downloaded signals logs. The robot returns a schema id and the client may proceed to log the time varying values associated with that schema. Clients may register schemas via the `RegisterSignalSchema` RPC and log signals via the `RecordSignalTicks` RPC. Signals data is not well-supported in release 2.1, but tools for using this data should become available in future releases. + +Signals messages enable logging of numerical time series data. Clients must first log a "schema" message describing the time series data to be logged, including the name and type of each variable. This enables post-processing tools to properly parse the downloaded signals logs. The robot returns a schema id and the client may proceed to log the time varying values associated with that schema. Clients may register schemas via the `RegisterSignalSchema` RPC and log signals via the `RecordSignalTicks` RPC. Signals data is not well-supported in release 2.1, but tools for using this data should become available in future releases. ### Blobs -Blob messages enable clients to log arbitrary binary message data to the robot. This may include, for example, sensor data products, user-defined structures and messages, whole files, etc. The data buffer itself does not parse the binary data, but requires that the client specify a `type_id` and `channel` in the logging request. The `type_id` specifies the type of data stored in the opaque blob, required for post-processing. The `channel` is a name for a sequence of messages. Clients may log blobs via the `RecordDataBlobs` RPC. The [Data Acquisition system](./data_acquisition_overview.md) logs acquired data to the data buffer as blobs for later retrieval. + +Blob messages enable clients to log arbitrary binary message data to the robot. This may include, for example, sensor data products, user-defined structures and messages, whole files, etc. The data buffer itself does not parse the binary data, but requires that the client specify a `type_id` and `channel` in the logging request. The `type_id` specifies the type of data stored in the opaque blob, required for post-processing. The `channel` is a name for a sequence of messages. Clients may log blobs via the `RecordDataBlobs` RPC. The [Data Acquisition system](./data_acquisition_overview.md) logs acquired data to the data buffer as blobs for later retrieval. ## Internally Logged Data -Internally, the robot logs a subset of its data to the data buffer which may be accessed by external clients. This data set may expand in future releases. The current set includes events for robot falls, SpotCheck, comms loss, along with all the gRPC requests/responses, and Spot IO data acquisitions. For improved performance, large fields in the gRPC messages may be stripped from the log. + +Internally, the robot logs a subset of its data to the data buffer which may be accessed by external clients. This data set may expand in future releases. The current set includes events for robot falls, SpotCheck, comms loss, along with all the gRPC requests/responses, and Spot IO data acquisitions. For improved performance, large fields in the gRPC messages may be stripped from the log. ## Data Service -The data service is a gRPC service that allows clients to query for information about data that has been logged to the robot. The user may: -* Query for pages containing data within a specified time range -* Query for events and comments logged to the robot -* Query for overall data buffer status, including the amount of data currently logged to the robot -* Delete individual data pages on the robot + +The data service is a gRPC service that allows clients to query for information about data that has been logged to the robot. The user may: + +- Query for pages containing data within a specified time range +- Query for events and comments logged to the robot +- Query for overall data buffer status, including the amount of data currently logged to the robot +- Delete individual data pages on the robot ## Data Download ### Raw Data Download -Data may be downloaded as BDDF files by querying the robot's HTTPS REST interface with a GET request at the URL `/v1/data-buffer/bddf/`. Queries are limited to one hour. A single start time must be specified in either the `from_sec` or `from_nsec` parameters. Likewise, a single end time must be specified in either the `to_sec` or `to_nsec` parameters. If the time range is unspecified or exceeds 3600 seconds, the query fails and HTTP 403 (Bad Request) is returned. The `event_level_min` parameter can only be specified once. All other parameters may be specified zero or more times in combination. + +Data may be downloaded as BDDF files by querying the robot's HTTPS REST interface with a GET request at the URL `/v1/data-buffer/bddf/`. Queries are limited to one hour. A single start time must be specified in either the `from_sec` or `from_nsec` parameters. Likewise, a single end time must be specified in either the `to_sec` or `to_nsec` parameters. If the time range is unspecified or exceeds 3600 seconds, the query fails and HTTP 403 (Bad Request) is returned. The `event_level_min` parameter can only be specified once. All other parameters may be specified zero or more times in combination. + - `from_sec` or `from_nsec`: Download data after the specified epoch time if set, in seconds and nanoseconds respectively. - `to_sec` or `to_nsec`: Download data before the specified epoch time if set, in seconds and nanoseconds respectively. - `type`: Filter on the `type_id` of blobs. @@ -53,16 +65,20 @@ Data may be downloaded as BDDF files by querying the robot's HTTPS REST interfac - `event_level_min`: Filter events by level. ### Data Acquisition Download -As noted, Data Acquisition services use the data buffer for storing captured data. The data is retrieved by querying the HTTPS server with a GET request at the URL `/v1/data-buffer/daq-data/`. These requests return data blobs of type `bosdyn.api.DataAcquisitionObject` and `bosdyn.api.AssociatedMetadata` as a ZIP file. By default, all such objects are returned, but can be filtered by the following parameters: -- `from_sec` or `from_nsec`: Download data after the specified epoch time if set, in seconds and nanoseconds respectively. These are mutually exclusive, and may only be specified once. -- `to_sec` or `to_nsec`: Download data before the specified epoch time if set, in seconds and nanoseconds respectively. These are mutually exclusive, and may only be specified once. -- `channel`: Filter on the `channel` associated with the logged blobs. May be specified zero or more times. + +As noted, Data Acquisition services use the data buffer for storing captured data. The data is retrieved by querying the HTTPS server with a GET request at the URL `/v1/data-buffer/daq-data/`. These requests return data blobs of type `bosdyn.api.DataAcquisitionObject` and `bosdyn.api.AssociatedMetadata` as a ZIP file. By default, all such objects are returned, but can be filtered by the following parameters: + +- `from_sec` or `from_nsec`: Download data after the specified epoch time if set, in seconds and nanoseconds respectively. These are mutually exclusive, and may only be specified once. +- `to_sec` or `to_nsec`: Download data before the specified epoch time if set, in seconds and nanoseconds respectively. These are mutually exclusive, and may only be specified once. +- `channel`: Filter on the `channel` associated with the logged blobs. May be specified zero or more times. ### Authorization -All requests to download data from the robot must be authorized with a user token included in the HTTP header as a bearer token. User tokens may be acquired by authorizing with the API auth service. + +All requests to download data from the robot must be authorized with a user token included in the HTTP header as a bearer token. User tokens may be acquired by authorizing with the API auth service. ### Example -An example data download, using cURL, is shown below. This example assumes the user has a valid user token in the file `user.token` and that the robot hostname or IP address is stored in the `$ROBOT` environment variable. This downloads Data Acquisition data between the epoch timestamps `1601524800` and `1601611200`, corresponding to Thursday, October 1, 2020 12:00:00 AM GMT-04:00, through Friday, October 2, 2020 12:00:00 AM GMT-04:00. + +An example data download, using cURL, is shown below. This example assumes the user has a valid user token in the file `user.token` and that the robot hostname or IP address is stored in the `$ROBOT` environment variable. This downloads Data Acquisition data between the epoch timestamps `1601524800` and `1601611200`, corresponding to Thursday, October 1, 2020 12:00:00 AM GMT-04:00, through Friday, October 2, 2020 12:00:00 AM GMT-04:00. ```bash curl -O -J \ @@ -71,4 +87,5 @@ curl -O -J \ ``` ## BDDF (Boston Dynamics Data Format) -Raw data downloaded off the robot will generally be returned in BDDF (Bosdyn Download Data Format) files. BDDF is an open file format developed by Boston Dynamics that can hold arbitrary POD (plain old data) or message style data. BDDF files are simple to read and write, offer efficient random access to embedded messages or can be streamed, and are secure in that they require little or no parsing logic. Additional details can be found in the [BDDF documentation](./bddf.md). + +Raw data downloaded off the robot will generally be returned in BDDF (Bosdyn Download Data Format) files. BDDF is an open file format developed by Boston Dynamics that can hold arbitrary POD (plain old data) or message style data. BDDF files are simple to read and write, offer efficient random access to embedded messages or can be streamed, and are secure in that they require little or no parsing logic. Additional details can be found in the [BDDF documentation](./bddf.md). diff --git a/docs/concepts/developing_api_services.md b/docs/concepts/developing_api_services.md index e3f7ab6f4..7a84b9b6b 100644 --- a/docs/concepts/developing_api_services.md +++ b/docs/concepts/developing_api_services.md @@ -11,24 +11,31 @@ Development Kit License (20191101-BDSDK-SL). In order to expand the capabilities of Spot it may be necessary to stand up services beyond the onboard services that ship with Spot. Additional services may enable collection of data from third party sensors, trigger actions outside of the robot, or process collected data in real time. ## Interface + Developed services are expected to comply with the same service interface standards that all Spot services use. ### Robot Directory + Clients can communicate with third party services by making requests through Spot. A service is expected to register itself with the robot directory, which will enable the robot to reroute any requests to the network location hosting the service. At registration time, a service will need to declare its service name, authority, type, and network location. ### gRPC + Services should be designed to handle all possible RPCs defined in a corresponding [gRPC](https://grpc.io/) protobuf service definition. It is possible to use the same protobuf service definitions that are included with the Spot SDK or to define entirely new ones. Client requests of the same type will be routed to the proper service based on service name and authority, both of which must be unique per service. ## Basic Structure ### Servicers + All the information necessary to write a basic gRPC service is outlined in the [gRPC documentation](https://grpc.io/docs/languages/python/basics/) and will not be repeated here. ### Infrastructure + There are two components of establishing a service: starting the server and registering the service with the robot. #### Starting a Server + The server itself can be spun up with the Python `grpc` library. The Spot Python SDK provides helpers that wrap the library and make it easier to manage a server. An example of the code to run a gRPC service is shown below. + ```python # Proto service specific function used to attach a servicer to a server. add_servicer_to_server_fn = image_service_pb2_grpc.add_ImageServiceServicer_to_server @@ -40,10 +47,13 @@ service_runner = GrpcServiceRunner(service_servicer, add_servicer_to_server_fn, # Run the server until a SIGINT is received. service_runner.run_until_interrupt() ``` + The `image_service_pb2_grpc.add_ImageServiceServicer_to_server` is a function auto generated from a protobuf service definition. The function links a servicer to a server and is generated for every protobuf server compiled. The `WebCamImageServicer` is a custom class that inherits from the servicer class auto generated from the protobuf service definition. It defines methods for responding to all possible service requests. The [`GrpcServiceRunner`](../../python/bosdyn-client/src/bosdyn/client/server_util.py) class will create and run a server object associated with the passed in servicer. It will monitor for requests at the given port. The `run_until_interrupt()` method can be used to keep a server alive until it receives a SIGINT. #### Registering a Service + Registering a service requires communication with the robot. A service can register itself via the Directory Registration Client provided with the Python SDK. Each service instance should have a unique service name, service authority, and service type associated with it that are provided at registration time. These details will enable Spot to route client requests to the proper service. The preferred method of registering a service is shown below. Note that it registers with a directory keep alive and will have liveness monitoring enabled. + ```python dir_reg_client = robot.ensure_client(DirectoryRegistrationClient.default_service_name) keep_alive = DirectoryRegistrationKeepAlive(dir_reg_client) @@ -54,7 +64,9 @@ with keep_alive: ``` ## Examples + The Spot SDK provides a myriad of examples showing how an off-robot Python gRPC service can be developed. + - [Custom Parameter Web Cam Image Service](../../python/examples/service_customization/custom_parameter_image_server/README.md) - [Ricoh Theta Image Service](../../python/examples/ricoh_theta/README.md) - [Remote Mission Services](../../python/examples/remote_mission_service/README.md) diff --git a/docs/concepts/estop_service.md b/docs/concepts/estop_service.md index 204b0d5e6..a1d0a8b1f 100644 --- a/docs/concepts/estop_service.md +++ b/docs/concepts/estop_service.md @@ -13,9 +13,10 @@ The "estop" service uses a heartbeat-based, software-implemented service to help In short, one or more pre-determined clients must confirm that they can talk to the robot by sending a special message. In the parlance of the service, one or more Endpoints that have been Registered against the Configuration must send CheckIn messages. Clients can set one of the following "stop levels": - - `CUT` -- actuator power is cut immediately. - - `SETTLE_THEN_CUT` -- the robot attempts to come to a stop, sit down, and then cut actuator power. - - `NONE` -- no stop level. Actuators are allowed to power on. This does NOT turn the actuators on. + +- `CUT` -- actuator power is cut immediately. +- `SETTLE_THEN_CUT` -- the robot attempts to come to a stop, sit down, and then cut actuator power. +- `NONE` -- no stop level. Actuators are allowed to power on. This does NOT turn the actuators on. The setup happens over the course of several steps: Configuration, Registration, and CheckIn. Once all registered endpoints have checked in, actuators can be powered on. @@ -25,21 +26,21 @@ The Python library takes care of these steps for you. See the E-Stop example in The client sending the `SetEstopConfigRequest` is saying "This is the exact number of endpoints I expect to exist, and how often they must check in." Endpoints in the configuration have two important values they must fill out: -1) role -2) timeout +1. role +2. timeout See the protobuf's documentation for more details. There are some limitations on the configuration: -1) In 3.2 and earlier, there must be exactly one Endpoint with a role set to `PDB_rooted`. In 3.3 and later, it is also acceptable to have a configuration without any Endpoints. -2) The `PDB_rooted` Endpoint must have a `timeout` of 65530 seconds or less. +1. In 3.2 and earlier, there must be exactly one Endpoint with a role set to `PDB_rooted`. In 3.3 and later, it is also acceptable to have a configuration without any Endpoints. +2. The `PDB_rooted` Endpoint must have a `timeout` of 65530 seconds or less. The `PDB_rooted` endpoint has its communications verified in the firmware, which is why it has special requirements on its configuration. Once the configuration is set, the robot waits for individual endpoints to register themselves. In the simplest case, a client will set a configuration with one endpoint. -*By setting a configuration, any currently registered endpoints are forgotten about. This means the robot will behave as if the CUT stop level was sent by a client* +_By setting a configuration, any currently registered endpoints are forgotten about. This means the robot will behave as if the CUT stop level was sent by a client_ ## Registration @@ -61,7 +62,7 @@ If an incorrect challenge/response pair is received by the server, that check-in The E-Stop service will allow actuators to be powered on as long as the following conditions are met: -1) There is a valid configuration -1) All endpoints in the configuration have been registered -1) All registered endpoints have checked in with the NONE stop level -1) The number of seconds between each endpoint's previous check-in and now is less than each endpoint's timeout +1. There is a valid configuration +1. All endpoints in the configuration have been registered +1. All registered endpoints have checked in with the NONE stop level +1. The number of seconds between each endpoint's previous check-in and now is less than each endpoint's timeout diff --git a/docs/concepts/faults.md b/docs/concepts/faults.md index 18876b520..8731810f1 100644 --- a/docs/concepts/faults.md +++ b/docs/concepts/faults.md @@ -13,17 +13,21 @@ Spot is a carefully designed and well-engineered device, but it is still likely There are multiple different types of faults that are associated with different categories of problems. Each type of fault is grouped independently and can be accessed through the [robot state](../../protos/bosdyn/api/robot_state.proto). ## System Faults + System Faults indicate a hardware or software fault on the robot. They include an error code and message, and can inform a user about anything from a perception fault with a certain camera to a battery overheating. They are raised by internal robot systems when they are encountered and appear in the robot state and on the tablet. Resolving these faults requires following up on the specific issue outlined by the error code and message. ## Behavior Faults + Behavior Faults track faults related to behavior commands and issue warnings if a certain behavior fault will prevent execution of subsequent commands. Behavior faults include an ID, a cause, and clearable status. Clearable behavior faults can be cleared via the robot command service, accessible through the [robot command client](../../python/bosdyn-client/src/bosdyn/client/robot_command.py) provided in the Spot Python SDK. Behavior faults appear in the robot state and on the tablet. ## Service Faults + Third party payloads and services may encounter unexpected issues on hardware or software connected to Spot. External Service Faults are able to be reported and cleared via the API fault service, accessible through the [fault client](../../python/bosdyn-client/src/bosdyn/client/fault.py) provided in the Spot Python SDK. These faults can be associated with an API service, a registered payload, or both. All other consumers of the API are able to view the externally raised faults and determine how they might respond to different errors. Service Faults also enable payload and service liveness monitoring. A payload or service registering with the robot can opt in by setting a liveness timeout at registration time. After registration, the external device must maintain liveness by repeatedly issuing heartbeats to the robot. If a payload or service times out the robot automatically raises a Service Fault on behalf of the external device. The payload and directory keep-alive classes provided in the Python SDK simplify this process. ### Service Fault Guidelines + Unlike system faults and behavior faults, API users are collectively responsible for raising, managing, and reacting to Service Faults. It is important to consider that the application you are writing may not be the only API user of a Spot. To ensure that all developers are able to take advantage of the fault system some guiding principles are laid out here. **Associate faults correctly** @@ -43,6 +47,7 @@ Applications that fill up the fault service with many faults that relate to the **Use liveness timeouts and keepalives** The Spot Python SDK provides both payload and directory keepalive classes. These keepalives make it easy to implement liveness checks and maintain regular heartbeats with Spot. Having liveness monitoring in the background improves the reliability of your applications with minimal effort required. The code snippet below demonstrates how a directory keepalive can be implemented with relative ease. + ``` dir_reg_client = robot.ensure_client(DirectoryRegistrationClient.default_service_name) keep_alive = DirectoryRegistrationKeepAlive(dir_reg_client) diff --git a/docs/concepts/geometry_and_frames.md b/docs/concepts/geometry_and_frames.md index 7d4b968cd..98f4c4c31 100644 --- a/docs/concepts/geometry_and_frames.md +++ b/docs/concepts/geometry_and_frames.md @@ -12,12 +12,10 @@ Spot uses 3D transformations to describe itself, objects around it, and its unde These transformations are expressed in 3D space using the x, y, and z axes. A translation is a 3 element vector (x, y, z) describing the difference between two frames' origins. A rotation is a quaternion (w, x, y, z) that describes the change between two frames' coordinate axes orientations. In the API geometry, we use an SE3Pose to encapsulate the translation and rotation used for transformations. Similarly, we use strings to describe different frames that can be related to each other using SE3Pose transformations. - ![Spot frames](spotframes.png) For example, a camera frame origin may be located at the lens of the camera with the Z axis pointed out and the X and Y axes aligned with horizontal/vertical dimensions of the picture. A point at \[0, 0, 1m\] in the camera frame would be in the center of the lens and 1 meter forward of origin where the camera is pointing. A transformation could be used to describe how to express this camera frame with respect to Spot's body frame, and the API adopts a notation of body_tform_camera to denote the SE3Pose of this transformation. - ## Frames in the Spot robot world Generally, you will only need to work with the following frame types: inertial frames, sensor frames, object frames, and the robot's body frame. However, the robot may also report other frames it has knowledge about. @@ -33,16 +31,18 @@ Objects can also be described using a frame. For example, a fiducial has an orig As the robot moves around in the world, the relationship between the two frames can either stay the same always, or be non-static and dynamically changing. The transformation between an inertial frame and the robot's body frame will change as the robot moves. In contrast, the transformation between the robot's body and the camera frame will not change regardless of whether the robot is moving or not. The following frames are known to Spot: -* "odom" frame: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up) using the kinematics of the robot. -* "vision" frame: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up), and is calculated using visual analysis of the world and the robot's odometry. -* "body" frame: A frame describing the robot body's position and orientation. The frame's origin is at the geometric center of the hips with the x-axis pointing from the hip center to the middle of the front hips, as shown in the illustration above. -* "flat_body" frame: A gravity-aligned frame describing the robot body's position and orientation. The position is at the robot's center, and the x/y-axes lie flat in the "odom" frame x-y plane. Specifically, the x-axis is the normalized projection of the robot's "body" frame x-axis to the "odom" x-y plane. -* "gpe" frame: A frame that represents the robot's ground plane estimate. The full SE(3) pose can be converted into a plane (a point and normal). -* "fiducial_XXX" frame: A frame that represents a raw fiducial detection, where "XXX" will be filled with the fiducial's tag ID. -* "filtered_fiducial_XXX" frame: A frame that represents a filtered, more stable fiducial detection, where "XXX" will be filled with the fiducial's tag ID. This frame is only valid for fiducials which are static in the world and should not be used for fiducials which may be moving. -* "frontleft_fisheye" frame: An example sensor frame; this frame name represents the frontleft fisheye camera. All five cameras on spot have their own sensor frame names, which will describe the exact camera sensor's position and orientation. -In the API, other frames not listed above will often be captured by name in the proto definition. Typically, an object will have one or more fields prefixed with "frame_name_" to describe its specific frames, and the transforms associated with these frames can then be found in that object's transform snapshot. For example, the [LocalGrid](../../protos/bosdyn/api/local_grid.proto) proto has `frame_name_local_grid_data` which refers to the position and orientation of the top, left corner of the grid map. +- "odom" frame: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up) using the kinematics of the robot. +- "vision" frame: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up), and is calculated using visual analysis of the world and the robot's odometry. +- "body" frame: A frame describing the robot body's position and orientation. The frame's origin is at the geometric center of the hips with the x-axis pointing from the hip center to the middle of the front hips, as shown in the illustration above. +- "flat_body" frame: A gravity-aligned frame describing the robot body's position and orientation. The position is at the robot's center, and the x/y-axes lie flat in the "odom" frame x-y plane. Specifically, the x-axis is the normalized projection of the robot's "body" frame x-axis to the "odom" x-y plane. +- "gpe" frame: A frame that represents the robot's ground plane estimate. The full SE(3) pose can be converted into a plane (a point and normal). +- "feet_center" frame: A gravity-aligned frame representing the robot's footprint. The origin is at the geometric center of the robot's feet. The x-axis is aligned such that it points from the center of the rear feet to the center of the front feet in the x-y plane. +- "fiducial_XXX" frame: A frame that represents a raw fiducial detection, where "XXX" will be filled with the fiducial's tag ID. +- "filtered_fiducial_XXX" frame: A frame that represents a filtered, more stable fiducial detection, where "XXX" will be filled with the fiducial's tag ID. This frame is only valid for fiducials which are static in the world and should not be used for fiducials which may be moving. +- "frontleft_fisheye" frame: An example sensor frame; this frame name represents the frontleft fisheye camera. All five cameras on spot have their own sensor frame names, which will describe the exact camera sensor's position and orientation. + +In the API, other frames not listed above will often be captured by name in the proto definition. Typically, an object will have one or more fields prefixed with "frame*name*" to describe its specific frames, and the transforms associated with these frames can then be found in that object's transform snapshot. For example, the [LocalGrid](../../protos/bosdyn/api/local_grid.proto) proto has `frame_name_local_grid_data` which refers to the position and orientation of the top, left corner of the grid map. ## Transformations between Spot's frames @@ -50,7 +50,6 @@ Spot has knowledge about many of the frames mentioned above and how they relate Different services provide a snapshot of the transformation tree graph at a given timestamp (which is described in the field acquisition_time), which includes transformations between "vision," "odom," and "body" frames in addition to any other relevant frames, such as the sensor frames for images or frames for world objects. All transformations in the snapshot are guaranteed to provide the most accurate SE3Pose for the timestamp. - ## Transformation Math Since frames are related to each other via transformations, we can change geometric data expressed in one frame to be expressed in another frame with the appropriate transformations. This is done by multiplying transformations together. For example, say the robot detected a soccer ball in its left camera and computed the transformation left_camera_tform_soccer_ball to express the position of the soccer ball relative to the camera. As well, the robot knows the transformation vision_tform_left_camera, which describes the left camera frame in the vision inertial frame. Using these transformations, we can compute the position of the soccer ball in the vision inertial frame: @@ -61,7 +60,6 @@ By multiplying the transformations together, we can "cancel out" the left camera A transformation can also be inverted. For the transformation vision_tform_body which describes Spot's body within the vision inertial frame. If we invert this transformation, we compute body_tform_vision. This transformation now describes the vision inertial frame with respect to the robot body, so where origin of the vision frame is relative to Spot's current body position. Inverting a transformation can be useful if you want to multiply two transformations together that do not have a matching middle element. For example, if we want to compute the transformation vision_tform_body, but only know the transformations vision_tform_odom and body_tform_odom, then we can use the inverse operation: - vision_tform_body = vision_tform_odom * body_tform_odom.inverse() Other mathematical operations can be computed with an SE3Pose transformation, such as creating a 4x4 matrix, transforming points, or computing roll, pitch, or yaw. The API provides helper functions for these operations, including transformation multiplication and inversion, in [math_helpers.py](../../python/bosdyn-client/src/bosdyn/client/math_helpers.py). diff --git a/docs/concepts/keepalive_service.md b/docs/concepts/keepalive_service.md index a809ed52c..23ad2cd16 100644 --- a/docs/concepts/keepalive_service.md +++ b/docs/concepts/keepalive_service.md @@ -6,11 +6,9 @@ is subject to the terms and conditions of the Boston Dynamics Software Development Kit License (20191101-BDSDK-SL). --> -# Keepalive Service (BETA) +# Keepalive Service -*This service is currently in BETA and may undergo changes in future releases* - -The Keepalive service, added in 3.3, unifies and expands the comms-loss behaviors of Spot. It lets a client specify one or more Policies, each containing one or more actions. Each action will automatically occur if a client does not send a CheckInRequest within a configurable amount of time. +The Keepalive service unifies and expands the comms-loss behaviors of Spot. It lets a client specify one or more Policies, each containing one or more actions. Each action will automatically occur if a client does not send a CheckInRequest within a configurable amount of time. For example, you may send a ModifyPolicyRequest that adds the following Policy: @@ -30,20 +28,20 @@ A Policy tells the robot what to do, when. Zero or more clients may have zero or When a Policy is added, the Keepalive service -1) provides the client with an ID for that Policy. -1) starts a timer associated with the ID. +1. provides the client with an ID for that Policy. +1. starts a timer associated with the ID. -The Policy's timer is reset to 0 when the Poicy is added or "checked into". Each Policy has a separate timer. The timer increments along with the robot's clock. When the timer increments past an action's associated duration, the action will automatically happen. +The Policy's timer is reset to 0 when the Policy is added or "checked into". Each Policy has a separate timer. The timer increments along with the robot's clock. When the timer increments past an action's associated duration, the action will automatically happen. ### Actions The following actions are available in a Policy: - - Record one or more Events, as if via the DataBufferService. - - Begin AutoReturn, as if via the AutoReturnService. - - Come to a controlled stop, then power motors off. - - Immediately power the motors AND robot computers off. - - Mark a Lease as stale. +- Record one or more Events, as if via the DataBufferService. +- Begin AutoReturn, as if via the AutoReturnService. +- Come to a controlled stop, then power motors off. +- Immediately power the motors AND robot computers off. +- Mark a Lease as stale. Most actions can be configured by the client. For example, for the `RecordEvent` action, the client specifies the Events to be recorded. @@ -51,8 +49,8 @@ Most actions can be configured by the client. For example, for the `RecordEvent` There are two main ways of removing a Policy. -1) Explicitly, by adding the target Policy ID to the `policy_ids_to_remove` field of `ModifyPolicyRequest`. -1) Implicitly, by adding to the `associated_leases` on the Policy. +1. Explicitly, by adding the target Policy ID to the `policy_ids_to_remove` field of `ModifyPolicyRequest`. +1. Implicitly, by adding to the `associated_leases` on the Policy. For example, if a client has acquired `leaseA = [6]` from the robot and adds that lease to the `associated_leases` field of Policy `1`, the next time the robot gives out `leaseB = [7]`, Policy `1` will automatically be removed. @@ -60,18 +58,18 @@ For example, if a client has acquired `leaseA = [6]` from the robot and adds tha The Keepalive service shares some features with other services, namely -1) The [E-Stop Service](./estop_service.md) -1) The "staleness" feature of the [Lease Service](./lease_service.md) -1) The [AutoReturn Service](./autonomy/auto_return.md) +1. The [E-Stop Service](./estop_service.md) +1. The "staleness" feature of the [Lease Service](./lease_service.md) +1. The [AutoReturn Service](./autonomy/auto_return.md) These other services will still work as usual if the Keepalive service is not used, with a few exceptions: -1) It is now valid to have no E-Stop configuration. -1) If an E-Stop configuration with Endpoints is set, and one or more Endpoints time out, the error will reference the Keepalive service. +1. It is now valid to have no E-Stop configuration. +1. If an E-Stop configuration with Endpoints is set, and one or more Endpoints time out, the error will reference the Keepalive service. If you are using the Keepalive service, you may notice a few things: -1) Registering an E-Stop Endpoint automatically adds a Policy with a matching timeout. -1) Acquiring a Lease automatically adds a Policy with LeaseStale actions at the previously hardcoded timeout. +1. Registering an E-Stop Endpoint automatically adds a Policy with a matching timeout. +1. Acquiring a Lease automatically adds a Policy with LeaseStale actions at the previously hardcoded timeout. It is safe to remove those auto-generated Policies if you wish. diff --git a/docs/concepts/lease_service.md b/docs/concepts/lease_service.md index 58d1b26e8..b4a0d85b3 100644 --- a/docs/concepts/lease_service.md +++ b/docs/concepts/lease_service.md @@ -10,7 +10,7 @@ Development Kit License (20191101-BDSDK-SL). Leases represent ownership of the robot for the purpose of issuing commands to control the robot. There can only ever be a single owner of a specific robot resource at any given time, however an application can delegate the lease to other systems to perform various tasks. Leases can be returned by one application and subsequently acquired by a different application to change ownership. Alternatively, a lease can be revoked by another application to change ownership forcefully. -In addition to identifying ownership, the lease system is used to confirm that a robot is still being controlled and that there are valid communications to the owner. If an owner can no longer be reached within a certain period of time, the lease will become "stale" and may be acquired by another client. If the owner returns to valid communications before another client acquires, the lease will become "fresh" again. +In addition to identifying ownership, the lease system is used to confirm that a robot is still being controlled and that there are valid communications to the owner. If an owner can no longer be reached within a certain period of time, the lease will become "stale" and may be acquired by another client. If the owner returns to valid communications before another client acquires, the lease will become "fresh" again. ## Basic Lease Usage @@ -22,13 +22,14 @@ Throughout the duration of the application, the client should continue to send When issuing robot commands, the robot will be sent a version of the lease with the specific command to permit the robot to complete the desired command. This lease will automatically be included with the command request when using the SDK -Finally, when the application is complete, it should return the lease. The `ReturnLease` RPC should be used when a client is finished with their ownership to indicate that the robot is no longer owned without waiting for a revocation timeout. Note, an application should only return the lease when it was the one who acquired the lease using the `AcquireLease` RPC. In the case of a remote mission service callback or other services which are delegated the lease by a different main service, the application's service should *not* return the lease when finished - the main service acquired the lease and will return it when complete. +Finally, when the application is complete, it should return the lease. The `ReturnLease` RPC should be used when a client is finished with their ownership to indicate that the robot is no longer owned without waiting for a revocation timeout. Note, an application should only return the lease when it was the one who acquired the lease using the `AcquireLease` RPC. In the case of a remote mission service callback or other services which are delegated the lease by a different main service, the application's service should _not_ return the lease when finished - the main service acquired the lease and will return it when complete. ## [Advanced] Understanding Lease Errors When a command is sent including a lease, the service checks the following things before accepting the command: - - The incoming lease is valid: contains the current epoch, has known robot resources and the resources are correct for this type of command, has a non-empty sequence with a root lease number which has been issued by the lease service. - - The incoming lease shows ownership as the newest lease: compares the incoming lease with the service’s current known lease. + +- The incoming lease is valid: contains the current epoch, has known robot resources and the resources are correct for this type of command, has a non-empty sequence with a root lease number which has been issued by the lease service. +- The incoming lease shows ownership as the newest lease: compares the incoming lease with the service’s current known lease. The service will then respond to the command with a `LeaseUseResult` proto that indicates whether the incoming lease passed the checks and includes additional information to aid in debugging. @@ -67,5 +68,3 @@ Consider the example below. ![Lease Usage Example](lease_example.png) A client application took the lease from the tablet (or the tablet lost communication) and now owns the robot. The client application delegates control to graph-nav by creating a sub-lease, and graph-nav again creates a sub-lease to give control to the robot command service. When the tablet attempts to issue a robot command, it will be rejected because it is now considered older. - - diff --git a/docs/concepts/about_orbit.md b/docs/concepts/orbit/about_orbit.md similarity index 80% rename from docs/concepts/about_orbit.md rename to docs/concepts/orbit/about_orbit.md index 6ab1fc289..c1aa2fe9e 100644 --- a/docs/concepts/about_orbit.md +++ b/docs/concepts/orbit/about_orbit.md @@ -10,71 +10,40 @@ Development Kit License (20191101-BDSDK-SL). Orbit is a collection of web services for site awareness, fleet management and data centralization deployed to an on-premise or cloud server. Learn more about the product and deployment [here](https://www.bostondynamics.com/products/orbit). -Orbit collects, organizes, and stores data from every mission and teleoperation session executed by a Spot fleet - this information is served to users through a programmatic Application Programming Interface (API) called the Orbit API. - -## Orbit API - -The Orbit API is a web API served by an Orbit instance. The API is interacted with by sending HTTPs requests to a number of resource endpoints. Each resource endpoint is prefixed with the API route `/api/v0/`. For example, a list of `run_events` may be retrieved by sending a `GET` request to `/api/v0/run_events`. A complete URL would add this to the URL of the Orbit instance - e.g. `https://my-orbit.com/api/v0/run_events/`. - -The Orbit API is language-agnostic and may be programmed against using any programming language that supports sending HTTP requests. - -For a complete list of resources and their methods, see the Orbit API Reference. +Orbit collects, organizes, and stores data from every mission and teleoperation session executed by a Spot fleet - this information is served to users through a programmatic Application Programming Interface (API) called the [Orbit API](orbit_api.md). ## Contents -- Orbit API REST Reference -- [Orbit API Python SDK](../../python/bosdyn-orbit/src/bosdyn/orbit/README.md) -- [Orbit API Python SDK Examples](../../python/examples/docs/orbit.md) -- [Authentication](#authentication) +- [Orbit API](orbit_api.md) +- [WebViews](#webviews) - [Webhooks](#webhooks) - [Scheduling Missions](#scheduling-missions) -### Authentication +## WebViews -Resources can only be requested by authorized Orbit users. In order to be authorized, users need to provide headers with an API token obtained from an Orbit instance's admin settings. +Orbit has the ability to embed external websites in the Orbit user interface, this is referred to as a `WebView`. Only sites that utilize HTTPS can be embedded into Orbit. For unverified TLS sites the user must first accept the privacy errors for that site before the site will show up correctly in the Orbit web view. -To authorize with the obtained API token, make a request to the login endpoint at `/api/v0/api_token/authenticate`: +To add a website as a web view first navigate to "Custom Web Views" in the Orbit settings page. Click the plus icon to add a new web view: -```py -"""Authenticate with an API token obtained from an Orbit instance.""" -import json -import requests +![Webview Creation 1](webview_creation_1.png) -# Set API token in headers -headers = {'Authorization': 'Bearer ' + } -# Check the validity of the API token -authenticate_response = requests.get( - f'https://{my-orbit.com}/api/v0/api_token/authenticate', headers=headers) -if authenticate_response.ok: - print('Client: Auth succeeded') -else: - print('Client: Auth failed: {} Please, obtain a valid API token from the instance!'. - format(authenticate_response.text)) -``` +Next, fill out the required information including a name for the web view, the address to the icon to use, and the website URL to the desired website to embed. -Now that we have a valid API token, we can use it to request resources. When requesting, the API token needs to be provided as part of the `headers` argument: +![Webview Creation 2](webview_creation_2.png) -```py -"""Use the cookies to fetch some robots. The same authorization strategy is used for other http methods.""" -robots_response = requests.get(f'https://{hostname}/api/v0/robots', headers=headers, verify=False) -if not robots_response.ok: - print(f'Encountered a problem while requesting robots: {robots_response.text}') -else: - robots_json = robots_response.json() - print("Fetched robots!") -``` +If done correctly, the web view should populate in the "Custom Web Views" button in the top right. Clicking on the web view should then show the content of the website within the Orbit UI as shown below. -The API token must be provided in every request aside from the request. If an unauthorized request is made, a `401` response is sent. Likewise, if an API link is visited in the browser without the user being authorized, `Forbidden` is shown. +![Webview Creation 3](webview_creation_3.png) -## Orbit API and the Python SDK +`WebViews` rely on the user's browser for things like networking, cookies and caching. This means that clients interact with external websites independently and are able to access web views for websites that Orbit does not have proper routing to. In the example above, the Orbit instance is unable to `curl https://dev.bostondynamics.com/` but the web view still works as intended on the client browser. -The Spot Python SDK includes a `bosdyn-orbit` Python package and client implementation for the Orbit API. The `bosdyn-orbit` package documentation is [here](../../python/bosdyn-orbit/src/bosdyn/orbit/README.md). +### Custom WebViews -Once instantiated and authenticated, a `Client` provides a number of helpful methods which abstract away the details of HTTP to simplify building programs with the Orbit API. Please refer to the [Hello Orbit](../../python/examples/orbit/hello_orbit/README.md) SDK example to get started developing with the Orbit API Python client. +Developers have the option to host web servers as an orbit extension (ports 21000-22000) that can then be pointed to as a web view. Due to these servers likely not have verified TLS certificates, the user will have to visit the direct URL, `https://ORBIT_IP:PORT/`, of the web server first to get around the privacy error described above. -### Deprecation Warning +#### Note -Following the rebranding of "Scout" to "Orbit" in 4.0.0, the pre-existing Python package `bosdyn-scout` is being deprecated. All [SDK examples](../../python/examples/docs/orbit.md) now use `bosdyn-orbit` instead. Any previous applications that used `bosdyn-scout` will continue to work. It is highly recommended that `bosdyn-orbit` be used moving forward. +Orbit does not save any credentials or payloads passed to external websites. ## Webhooks @@ -113,11 +82,11 @@ Orbit allows a webhook to subscribe to multiple events. The webhook will be invo #### Action Completed -The "action completed" event is triggered whenever a robot completes an action. The value of `type` in the request payload will be `"ACTION_COMPLETED"`. The structure of the `data` field will be identical to the `run_event` object. At a high level, it contains information about the completed action like the name of the action, when it occurred, any key results that were generated, as well as links to any images that were taken as part of the action. See the `run_events` API documentation for more details on the data contained in a `run_event`. +The "action completed" event is triggered whenever a robot completes an action. The value of `type` in the request payload will be `"ACTION_COMPLETED"`. The structure of the `data` field will be identical to the `run_event` object. At a high level, it contains information about the completed action like the name of the action, when it occurred, any key results that were generated, as well as links to any images that were taken as part of the action. See the `run_events` [API documentation](orbit_api.md) for more details on the data contained in a `run_event`. #### Action Completed With Alert -The "action completed with alert" event is triggered whenever a robot completes an action where anomalous data was collected. For example, if a thermal inspection identifies an object that is above the configured maximum temperature threshold, Orbit will trigger the "action completed with alert" event. The value of `type` in the request payload will be `"ACTION_COMPLETED_WITH_ALERT"`. The structure of the `data` field will be identical to the `run_event` object. At a high level, it contains information about the completed action like the name of the action, when it occurred, any key results that were generated, as well as links to any images that were taken as part of the action. See the `run_events` API documentation for more details on the data contained in a `run_event`. +The "action completed with alert" event is triggered whenever a robot completes an action where anomalous data was collected. For example, if a thermal inspection identifies an object that is above the configured maximum temperature threshold, Orbit will trigger the "action completed with alert" event. The value of `type` in the request payload will be `"ACTION_COMPLETED_WITH_ALERT"`. The structure of the `data` field will be identical to the `run_event` object. At a high level, it contains information about the completed action like the name of the action, when it occurred, any key results that were generated, as well as links to any images that were taken as part of the action. See the `run_events` [API documentation](orbit_api.md) for more details on the data contained in a `run_event`. ### Securing Webhooks diff --git a/docs/concepts/orbit/orbit_api.md b/docs/concepts/orbit/orbit_api.md new file mode 100644 index 000000000..14a71bf03 --- /dev/null +++ b/docs/concepts/orbit/orbit_api.md @@ -0,0 +1,129 @@ + + +# Orbit API + +The Orbit API is a web API served by an Orbit instance. The API is interacted with by sending HTTPS requests to a number of resource endpoints. Each resource endpoint is prefixed with the API route `/api/v0/`. For example, a list of `run_events` may be retrieved by sending a `GET` request to `/api/v0/run_events`. A complete URL would add this to the URL of the Orbit instance - e.g. `https://my-orbit.com/api/v0/run_events/`. + +The Orbit API is language-agnostic and may be programmed against using any programming language that supports sending HTTP requests. + +For a complete list of resources and their methods, see the Orbit API Reference. + +## Contents + +- RESTful API Reference +- [Authentication](#authentication) +- [Object Structure](#orbit-object-structure) +- [Facets](#facets) +- [Orbit API Python SDK](../../../python/bosdyn-orbit/src/bosdyn/orbit/README.md) +- [Orbit API Python SDK Examples](../../../python/examples/docs/orbit.md) + +### Authentication + +Resources can only be requested by authorized Orbit users. In order to be authorized, users need to provide headers with an API token obtained from an Orbit instance's admin settings. + +![Orbit Token Creation 1](token_creation_1.png) + +A variety of options are available with different authorities. Pick the one that is most appropriate for you or your application. + +![Orbit Token Creation 2](token_creation_2.png) + +Make sure to copy and save the token in a safe place as this token will not be accessible again. + +To authorize with the obtained API token, send a `GET` request to the authentication endpoint at `/api/v0/api_token/authenticate`: + +```py +"""Authenticate with an API token obtained from an Orbit instance.""" +import json +import requests + +# Set API token in headers +headers = {'Authorization': 'Bearer ' + } +# Check the validity of the API token +authenticate_response = requests.get( + f'https://{my-orbit.com}/api/v0/api_token/authenticate', headers=headers) +if authenticate_response.ok: + print('Client: Auth succeeded') +else: + print('Client: Auth failed: {} Please, obtain a valid API token from the instance!'. + format(authenticate_response.text)) +``` + +Now that we have a valid API token, we can use it to request resources. When requesting, the API token needs to be provided as part of the `headers` argument: + +```py +"""Use the cookies to fetch some robots. The same authorization strategy is used for other http methods.""" +robots_response = requests.get(f'https://{hostname}/api/v0/robots', headers=headers, verify=False) +if not robots_response.ok: + print(f'Encountered a problem while requesting robots: {robots_response.text}') +else: + robots_json = robots_response.json() + print("Fetched robots!") +``` + +The API token must be provided in every request aside from the request. If an unauthorized request is made, a `401` response is sent. Likewise, if an API link is visited in the browser without the user being authorized, `Forbidden` is shown. + +## Orbit Object Structure + +### Data + +Below is a simple example of the data structure of a mission run that was uploaded from a robot to Orbit. This mission has two RunEvents (actions) and three total data points (RunCaptures), two of which are associated with a single action. Runs may have many actions while RunEvents may have many RunCaptures, much like missions can have many actions, and each action can save many pieces of data. + +![Orbit Data Structure](orbit_structure_data.png) + +#### Run (Mission Archive) + +A `Run` represents a period of robot operation. Both teleoperation and autonomous operations are represented as `Runs`. They provide other information such as: status, start/end times, action count, and robot name. It is important to to note that the end time may not be populated when a mission is currently in progress so it is a good idea to check for this. `Runs` can have many `RunEvents` which depict the output from each action that transpired during the operation period, these `RunEvents` are linked to the `Run` by the `Run`’s uuid. + +#### RunEvent (Action Archive) + +A `RunEvent` represents the output of an action executed during a `Run`. It contains all the RunCaptures associated with the action. A `RunEvent` can only be associated with a singular `Run`. It also contains a list of all `RunCaptures` (data captures) associated with the action. `RunCaptures `are linked to the `RunEvent` by the `RunEvent`’s uuid. + +#### RunCapture (Data Archive) + +A `RunCapture` describes a data point captured during a particular `RunEvent`. There can be many `RunCaptures` for a given `RunEvent`. A `RunCapture` can only be linked to one `RunEvent` through the `runEventUuid` field. + +#### Note + +It is best practice to query and refer to `Runs`, `RunEvents`, and `RunCaptures` with their uuid as this is a unique identifier. Using the names of these objects may not correctly refer to the desired object as there may be duplicates. Ex: the same mission run twice will have two `Runs` with the same `missionName` field. + +### Missions + +Below is a simple representation of what a mission looks like in the context of Orbit. + +![Orbit Mission Structure](orbit_structure_mission.png) + +#### SiteWalk (Mission) + +A `SiteWalk` describes a series of tasks that define autonomous robot operation. It contains `SiteElements` and `SiteDocks` together with other parameters that define autonomous operation. A `SiteWalk` has a list of `SiteElements` which are attempted in sequential order. `SiteWalks` also have a list of `SiteDocks` that define which charging station locations are allowed to be used during a specific `SiteWalk`. The robot will choose which `SiteDock` is best at runtime. + +#### SiteElement (Action) + +A `SiteElement` describes what a robot should do and where to do it. `SiteElements` are normally associated with a specific waypoint where the action is to be performed. These performed actions are then represented as `RunEvents` once the data is transferred to Orbit. `SiteElements` can be utilized in many `SiteWalks`. + +#### SiteDock (Charging Station) + +A `SiteDock` is a representation of a robot's docking station. The robot can utilize `SiteDocks` during and after `SiteWalks` to ensure the battery never runs out. + +The same SiteDock can be used in multiple `SiteWalks`, but as of 4.1.0, users are responsible for ensuring the physical dock is not taken if they need the robot to dock there. This may change in the future (and we may forget to update this page accordingly). + +## Facets + +Facets are API endpoints that return a more specific output. Facets can simplify client code and reduce network traffic by returning useful descriptions of different objects. For example, the `/runs/facets/missions` returns every unique mission that produced a `Run`, a count of how many times the mission ran, and the last start time. + +See Orbit API Reference for a full list of facets. + +## Orbit API and the Python SDK + +The Spot Python SDK includes a `bosdyn-orbit` Python package and client implementation for the Orbit API. The `bosdyn-orbit` package documentation is [here](../../../python/bosdyn-orbit/src/bosdyn/orbit/README.md). + +The package provides `OrbitClient` - an implementation for the Orbit API. Once instantiated and authenticated, it provides a number of helpful methods which abstract away the details of HTTP to simplify building programs with the Orbit API. Please refer to the [Hello Orbit](../../../python/examples/orbit/hello_orbit/README.md) SDK example to get started developing with the Orbit API Python client. + +### Deprecation Warning + +Following the rebranding of "Scout" to "Orbit" in 4.0.0, the pre-existing Python package `bosdyn-scout` is deprecated. All [SDK examples](../../../python/examples/docs/orbit.md) now use `bosdyn-orbit` instead. Any previous applications that used `bosdyn-scout` will continue to work. It is highly recommended that `bosdyn-orbit` be used moving forward. diff --git a/docs/concepts/orbit/orbit_structure_data.png b/docs/concepts/orbit/orbit_structure_data.png new file mode 100644 index 000000000..0a85427d8 Binary files /dev/null and b/docs/concepts/orbit/orbit_structure_data.png differ diff --git a/docs/concepts/orbit/orbit_structure_mission.png b/docs/concepts/orbit/orbit_structure_mission.png new file mode 100644 index 000000000..dc03846d8 Binary files /dev/null and b/docs/concepts/orbit/orbit_structure_mission.png differ diff --git a/docs/concepts/orbit/token_creation_1.png b/docs/concepts/orbit/token_creation_1.png new file mode 100644 index 000000000..7c0e08c9d Binary files /dev/null and b/docs/concepts/orbit/token_creation_1.png differ diff --git a/docs/concepts/orbit/token_creation_2.png b/docs/concepts/orbit/token_creation_2.png new file mode 100644 index 000000000..542b3bfd9 Binary files /dev/null and b/docs/concepts/orbit/token_creation_2.png differ diff --git a/docs/concepts/orbit/webview_creation_1.png b/docs/concepts/orbit/webview_creation_1.png new file mode 100644 index 000000000..6578035b8 Binary files /dev/null and b/docs/concepts/orbit/webview_creation_1.png differ diff --git a/docs/concepts/orbit/webview_creation_2.png b/docs/concepts/orbit/webview_creation_2.png new file mode 100644 index 000000000..88dad5523 Binary files /dev/null and b/docs/concepts/orbit/webview_creation_2.png differ diff --git a/docs/concepts/orbit/webview_creation_3.png b/docs/concepts/orbit/webview_creation_3.png new file mode 100644 index 000000000..126fa0abd Binary files /dev/null and b/docs/concepts/orbit/webview_creation_3.png differ diff --git a/docs/concepts/robot_services.md b/docs/concepts/robot_services.md index 1a7daed48..9eb0a19a6 100644 --- a/docs/concepts/robot_services.md +++ b/docs/concepts/robot_services.md @@ -8,70 +8,75 @@ Development Kit License (20191101-BDSDK-SL). # Robot Services -Spot tracks knowledge about multiple sources of state, including the robot's current physical state, the images captured by its cameras, and the terrain and objects around it. This state information can be used to make decisions about how to control the robot or how to command the robot from a higher level application. The different state services available on Spot are: +Spot tracks knowledge about multiple sources of state, including the robot's current physical state, the images captured by its cameras, and the terrain and objects around it. This state information can be used to make decisions about how to control the robot or how to command the robot from a higher level application. The different state services available on Spot are: -* Robot State Service -* Image Service -* Local Grid Service -* World Object Service +- Robot State Service +- Image Service +- Local Grid Service +- World Object Service -To command and operate Spot, a client must take additional steps beyond authentication. The client establishes application-layer time synchronization and acquires a lease; both processes are streamlined by the SDK. Once fully in control of the robot, the client will need to maintain the software stop, enable motor power and send commands. - -* E-Stop Service -* Power Service -* Robot Command Service +To command and operate Spot, a client must take additional steps beyond authentication. The client establishes application-layer time synchronization and acquires a lease; both processes are streamlined by the SDK. Once fully in control of the robot, the client will need to maintain the software stop, enable motor power and send commands. +- E-Stop Service +- Power Service +- Robot Command Service ## estop + The E-Stop service provides a secondary keep-alive mechanism by acting as a software stop. -First the E-Stop configuration is set; this specifies the expected endpoints (at least one) and their timeout. Before enabling motor power all endpoints must be registered and checking in. +First the E-Stop configuration is set; this specifies the expected endpoints (at least one) and their timeout. Before enabling motor power all endpoints must be registered and checking in. -During operation all endpoints will be periodically checking in. If an endpoint fails to check in (or does check in but denies the authority to operate) then the robot will turn off motor power. +During operation all endpoints will be periodically checking in. If an endpoint fails to check in (or does check in but denies the authority to operate) then the robot will turn off motor power. Note: + - Abruptly turning off motor power will cause the robot to drop, clients are encouraged to use `stop_level=SETTLE_THEN_CUT` or the `SafePowerOffCommand` where possible. - Changing the E-Stop configuration when motor power is on will abruptly turn it off, clients are encouraged to turn off motor power first. The [E-Stop documentation](estop_service.md) provides a more in-depth description of E-stop configurations, registration and check-ins. ## power -The power service allows a client to power the motors on and off. -To turn on, the client should send a `PowerCommandRequest` RPC with `REQUEST_ON`. This may take a few seconds. +The power service allows a client to power the motors on and off. -To turn off, clients are encouraged to use the `SafePowerOffCommand` RPC from the robot-command service in nominal operation. This RPC part of the robot-command service because it coordinates gently sitting the robot down prior to turning off motor power. To turn off quickly, the client should send a `PowerCommandRequest` RPC with `REQUEST_OFF`. +To turn on, the client should send a `PowerCommandRequest` RPC with `REQUEST_ON`. This may take a few seconds. +To turn off, clients are encouraged to use the `SafePowerOffCommand` RPC from the robot-command service in nominal operation. This RPC part of the robot-command service because it coordinates gently sitting the robot down prior to turning off motor power. To turn off quickly, the client should send a `PowerCommandRequest` RPC with `REQUEST_OFF`. ## robot-command + The robot command service allows a client to move the robot. -There are many commands exposed to clients to make the robot self-right, sit, stand, move to a position, move with a velocity, stop and power off. Most commands have associated parameters, for example the stand command contains an optional offset allowing the client to orient the robot's body. +There are many commands exposed to clients to make the robot self-right, sit, stand, move to a position, move with a velocity, stop and power off. Most commands have associated parameters, for example the stand command contains an optional offset allowing the client to orient the robot's body. -Clients are encouraged to send short-lived commands and continuously resend them so that the robot stops in the even of a client-side issue. For longer commands, client should cache the id returned by the CommandResponse and poll the associated CommandFeedbackRequest to monitor the command. +Clients are encouraged to send short-lived commands and continuously resend them so that the robot stops in the even of a client-side issue. For longer commands, client should cache the id returned by the CommandResponse and poll the associated CommandFeedbackRequest to monitor the command. ## robot-state + The robot state service tracks all information about the measured and computed states of the robot at the current time. The hardware configuration of the robot is described through a urdf and skeleton model, which represents each joint and link of the robot, and can be accessed using the `GetRobotHardwareConfiguration` RPC. This configuration representation is fully expressive of the robot's joint states relative to each other and can be used to visualize the robot model. A urdf model of the base robot and its geometry can also be found [here](../../files/spot_base_urdf.zip). The full robot state includes information about the batteries and power status, the status of network communication, known E-Stop states, the foot states, system and behavior faults, and the kinematic state of the robot. The `GetRobotState` RPC can provide this state information for the current timestamp. -* **BatteryState, PowerState**: The battery and power information can be used to determine if the robot successfully powered on or off, the current charge of the battery, or if the battery is overheating. Applications can use this information to determine when to pause the progression of the application or if the robot needs a new battery. -* **CommsState**: The robot can report the type of communication network being used, so whether the robot is an access point or a client itself. -* **EStopState**: The robot can have multiple different E-Stops at once, including both software and hardware E-Stops, and the robot state service will track the names of these E-Stops and whether or not they are activated. If any one E-Stop is activated, then the robot will be unable to power on the actuators. -* **FootState**: The foot states of the robot describe the current position of the foot as an (x,y,z) coordinate with respect to the body, and whether or not the robot believes this foot is in contact with the ground at the given time. -* **SystemFaultState**: The system faults can inform a user about a perception fault with a certain camera or if a battery is overheating. The robot state services track both active faults that could affect robot operation, as well as historical faults that have occurred, which can be used to diagnose unexpected robot behavior. A fault can be related to both software and hardware for the robot, and is described with an error code and message, and a level of severity. An application can use this information to monitor the health of the robot and respond appropriately if a fault appears. For example, the tablet application will warn a user when there's a perception fault since this can significantly impact how well the robot navigates the terrain. -* **BehaviorFaultState**: Similar to a system fault, the behavior faults track errors related to behavior commands and issue warnings if a certain behavior fault will prevent execution of subsequent commands. The fault is described through an id, the potential cause of the fault, and if it can be cleared. An application can monitor these faults and respond to clearable faults; often times a behavior fault can be cleared and the application can continue its normal execution. -* **KinematicState**: The kinematic state of the robot describes the current estimated positions of the robot body and joints throughout the world. It includes a transform snapshot of the robot’s current known frames as well as joint states and the velocity of the body. -* **SystemState**: The system state can be used to determine if the robot's motors are running hot. +- **BatteryState, PowerState**: The battery and power information can be used to determine if the robot successfully powered on or off, the current charge of the battery, or if the battery is overheating. Applications can use this information to determine when to pause the progression of the application or if the robot needs a new battery. +- **CommsState**: The robot can report the type of communication network being used, so whether the robot is an access point or a client itself. +- **EStopState**: The robot can have multiple different E-Stops at once, including both software and hardware E-Stops, and the robot state service will track the names of these E-Stops and whether or not they are activated. If any one E-Stop is activated, then the robot will be unable to power on the actuators. +- **FootState**: The foot states of the robot describe the current position of the foot as an (x,y,z) coordinate with respect to the body, and whether or not the robot believes this foot is in contact with the ground at the given time. +- **SystemFaultState**: The system faults can inform a user about a perception fault with a certain camera or if a battery is overheating. The robot state services track both active faults that could affect robot operation, as well as historical faults that have occurred, which can be used to diagnose unexpected robot behavior. A fault can be related to both software and hardware for the robot, and is described with an error code and message, and a level of severity. An application can use this information to monitor the health of the robot and respond appropriately if a fault appears. For example, the tablet application will warn a user when there's a perception fault since this can significantly impact how well the robot navigates the terrain. +- **BehaviorFaultState**: Similar to a system fault, the behavior faults track errors related to behavior commands and issue warnings if a certain behavior fault will prevent execution of subsequent commands. The fault is described through an id, the potential cause of the fault, and if it can be cleared. An application can monitor these faults and respond to clearable faults; often times a behavior fault can be cleared and the application can continue its normal execution. +- **KinematicState**: The kinematic state of the robot describes the current estimated positions of the robot body and joints throughout the world. It includes a transform snapshot of the robot’s current known frames as well as joint states and the velocity of the body. +- **SystemState**: The system state can be used to determine if the robot's motors are running hot. The robot state service also tracks different parameters for the robot and this information can be accessed with the `GetRobotMetrics` RPC. These metrics can be useful for monitoring the system status and health of the robot. ## log-status + The log status service provides users access to files Spot generates that contains data about its performance during operation. Files can be generated with data from the past, such files are known as retro logs. Files can also be generated with present data and into the future, such files are called experiment logs. The `LogStatus` object in the response of each API displays the status of the requested file and the id that can be provided to BD support for assistance in debugging issues. The steps for sending logs to our support team are outlined [here](https://support.bostondynamics.com/s/article/Spot-robot-logging#DownloadSendLog). ## metrics_logging + The metrics logging service aggregates internal operation and usability metrics to help Boston Dynamics improve performance and user experience. You can retrieve metrics by using the RPCs defined in the [service definition](../../protos/bosdyn/api/metrics_logging/metrics_logging_robot_service.proto). For a working example, see `Metrics over CORE I/O` from [Payloads Examples](../../python/examples/docs/payloads_examples.md), which uses the [MetricsLoggingClient](../../python/bosdyn-client/src/bosdyn/client/metrics_logging.py). ## image @@ -82,10 +87,9 @@ Images can be regular pixel-based visual images where the data value corresponds Since an image can be a lot of data, there are also different types of encodings and compression schemes that the image can be transmitted as to reduce the size of the data sent over the wire. The image service offers a `Format` field to describe the encoding of the image: -* `JPEG`: a lossy compression with tunable image quality -* `RLE`: a run length encoding -* `RAW`: the raw uncompressed image data - +- `JPEG`: a lossy compression with tunable image quality +- `RLE`: a run length encoding +- `RAW`: the raw uncompressed image data ## local-grid @@ -97,20 +101,14 @@ The different types of grids available in the local grid service are "terrain," The Spot robot's estimates of the height of the terrain are stored in the "terrain" grid, where each data value for a given cell represents the z-height of the world. This grid source can be combined with the "terrain_valid" grid to filter cells which have invalid height estimates. A cell could be considered invalid if the height estimate is too extreme for Spot's sensors. In addition, the intensity values of each terrain grid cell are stored as raw grayscale values in the "intensity" grid source and can be used to colorize the terrain grid. - - ![Obstacle Distance Example Grid](obstacle_map.png) - - Spot considers walls, large obstacles, and even platforms that are too high (a height of > 40 cm) to be obstacles. Information about the obstacles near the robot is stored in the "obstacle_distance" grid, where the data value in each grid cell represents the signed distance to the nearest obstacle region. A positive distance is measured from outside the obstacle, and a negative distance is measured from inside the obstacle. For example, the image shows a box being considered an obstacle by Spot, and the fake "obstacle_distance" grid with cell values representing distance in an arbitrary unit. Knowing the distance to the nearest obstacle can be used within an application to determine where the robot is able to walk or to create a safety barrier for the robot such that it must remain a certain distance from all obstacles. In addition to detecting obstacles, Spot can use information about its body and the nearby terrain and obstacles to determine whether or not it is capable of stepping in a certain location. The "no_step" grid stores this information within each grid cell as a boolean value. - - ## world-object The world object service provides a way to track and store objects detected in the world around Spot. A world object is considered a higher-level item in the scene that has some amount of semantic information associated with it. For example, a world object could be an AprilTag fiducial, a door handle, the stairs, or a virtual object drawn for debugging purposes. diff --git a/docs/concepts/service_customization.md b/docs/concepts/service_customization.md index 48293fa63..978fa46e2 100644 --- a/docs/concepts/service_customization.md +++ b/docs/concepts/service_customization.md @@ -7,93 +7,84 @@ Development Kit License (20191101-BDSDK-SL). --> # Service Customization -Spot 3.3 release features a new system for parameterizing 3rd party services. If your service has a knob that needs wiggling by a user, your service can advertise a parameter, Boston Dynamics clients will display that knob, and users will be able to wiggle it. Services that opt into this feature will get: + +Spot 3.3 release features a new system for parameterizing 3rd party services. If your service has a knob that needs wiggling by a user, your service can advertise a parameter, Boston Dynamics clients will display that knob, and users will be able to wiggle it. Services that opt into this feature will get: + - UI on the Tablet application for actions containing parameters (either when recording a mission, or just performing actions in teleoperation). - UI on the Tablet application for adjusting image parameters when streaming from a 3rd party image source. - UI on Scout for editing any autowalk action with parameters. - The following services support service customization: +- `Image` services. +- `Data Acquisition Plugin` services. +- `Network Compute Bridge Worker` services. +- `Remote Mission` services. +- `Area Callback` services. -* `Image` services. -* `Data Acquisition Plugin` services. -* `Network Compute Bridge Worker` services. -* `Remote Mission` services. -* `Area Callback` services. - - -The service customization system supports several different primitive types, and hierarchical containers - it's powerful. All first class Boston Dynamics inspections, including our 3.3 thermal inspection (shown below), are built using the same service customization system that's available to developers: - +The service customization system supports several different primitive types, and hierarchical containers - it's powerful. All first class Boston Dynamics inspections, including our 3.3 thermal inspection (shown below), are built using the same service customization system that's available to developers: ![Tablet Screenshot](./images/service_customization_thermal.jpg) - ## Service Customization Language - ### Spec -A specification, or spec, is what services advertises to clients so that the client can build a UI. It's how services encode what parameters that service expects - "I need a slider from 0 to 100" or "I need two sliders and a checkbox". The root level of any service spec is a dictionary so that parameters can be added in the future with ease. +A specification, or spec, is what services advertises to clients so that the client can build a UI. It's how services encode what parameters that service expects - "I need a slider from 0 to 100" or "I need two sliders and a checkbox". The root level of any service spec is a dictionary so that parameters can be added in the future with ease. ### Parameter -Parameters are instantiations of Specs. Where a spec says: "I need a slider from 0 to 100 titled threshold", a parameter says "threshold: 58". It's result of a spec after it's been turned into a UI, and a user has wiggled knobs. +Parameters are instantiations of Specs. Where a spec says: "I need a slider from 0 to 100 titled threshold", a parameter says "threshold: 58". It's result of a spec after it's been turned into a UI, and a user has wiggled knobs. ## Parameter Types - ### Double -The double parameter allows users to enter a floating point number. It is defined by the `DoubleParam` and `DoubleParam.Spec` protobuf messages. The spec for doubles allows developers to set a _min value_, and a _max value_. The UI element displayed will differ based on the contents of _min value_ and _max value_. If both are set, the UI will provide a slider AND a numerical textbox users can type values into, otherwise, the UI will display just a numerical textbox. `DoubleParam.Spec` also allows developers to specify units, which we'll talk about in a second. +The double parameter allows users to enter a floating point number. It is defined by the `DoubleParam` and `DoubleParam.Spec` protobuf messages. The spec for doubles allows developers to set a _min value_, and a _max value_. The UI element displayed will differ based on the contents of _min value_ and _max value_. If both are set, the UI will provide a slider AND a numerical textbox users can type values into, otherwise, the UI will display just a numerical textbox. `DoubleParam.Spec` also allows developers to specify units, which we'll talk about in a second. ### Int -The int parameter is identical to the double parameter, but everything is an integer. It is defined by the `Int64Param` and `Int64Param.Spec` protobuf messages. +The int parameter is identical to the double parameter, but everything is an integer. It is defined by the `Int64Param` and `Int64Param.Spec` protobuf messages. ### Units for Int & Double -Both int and double allow developers to specify units. Units will show up on the UI next to the specified value; a units string of "%" will cause the UI to render "32%". If developers specify one of the first class unit enums, temperature or pressure, clients will automatically convert units to match the users preference, and do the conversion for the service. - -For example, imagine a service that wants a temperature parameter between 0°C and 100°C. If the service specified the limits of 0 - 100, and the units as `TEMPERATURE_CELSIUS`, clients will either show that as 32°F to 212°F or 0°C to 100°C, depending on the users unit preferences. Either way, the client will pack in the specified value as Celsius. **The service can assume all values are in Celsius, because they will be.** Also note that the units proto includes an *is_relative* flag, which allows developers to specify if they want the client to respect a zero point offset between units. This mostly helps to differentiate absolute and relative temperatures. If ensuring an object is no hotter than a specific temperature, 0°C - 100°C should map to 32°F to 212°F (what happens when *is_relative* is set to false). If ensuring that two objects are no more than X degrees apart, 0°C - 100°C should map to 0°F to 180°F (what happens when *is_relative* is set to true). Note that 0 C now maps to 0 F. +Both int and double allow developers to specify units. Units will show up on the UI next to the specified value; a units string of "%" will cause the UI to render "32%". If developers specify one of the first class unit enums, temperature or pressure, clients will automatically convert units to match the users preference, and do the conversion for the service. +For example, imagine a service that wants a temperature parameter between 0°C and 100°C. If the service specified the limits of 0 - 100, and the units as `TEMPERATURE_CELSIUS`, clients will either show that as 32°F to 212°F or 0°C to 100°C, depending on the users unit preferences. Either way, the client will pack in the specified value as Celsius. **The service can assume all values are in Celsius, because they will be.** Also note that the units proto includes an _is_relative_ flag, which allows developers to specify if they want the client to respect a zero point offset between units. This mostly helps to differentiate absolute and relative temperatures. If ensuring an object is no hotter than a specific temperature, 0°C - 100°C should map to 32°F to 212°F (what happens when _is_relative_ is set to false). If ensuring that two objects are no more than X degrees apart, 0°C - 100°C should map to 0°F to 180°F (what happens when _is_relative_ is set to true). Note that 0 C now maps to 0 F. ### String -The string parameter allows users to specify a string. It is defined by the `StringParam` and `StringParam.Spec` protobuf messages. A string spec can be used to let a user: (1) pick from a set of predefined options, (2) type in their own free form string, or (3) both. Predefined options are specified using the _options_ field, and whether or not the user is allowed to type in their own option is controlled by the _editable_ flag. Strings will be represented in the client UI by either a switch, a set of radio buttons, or a combo box, depending on how many options are present. +The string parameter allows users to specify a string. It is defined by the `StringParam` and `StringParam.Spec` protobuf messages. A string spec can be used to let a user: (1) pick from a set of predefined options, (2) type in their own free form string, or (3) both. Predefined options are specified using the _options_ field, and whether or not the user is allowed to type in their own option is controlled by the _editable_ flag. Strings will be represented in the client UI by either a switch, a set of radio buttons, or a combo box, depending on how many options are present. ### Bool -The bool parameter allows users to turn things on and off. It is defined by the `BoolParam` and `BoolParam.Spec` protobuf messages. It will be represented in the UI by a checkbox. +The bool parameter allows users to turn things on and off. It is defined by the `BoolParam` and `BoolParam.Spec` protobuf messages. It will be represented in the UI by a checkbox. ### Region of Interest -Region of Interest, or ROI, allows users to specify a region of an image. It is defined by the `RegionOfInterestParam` and `RegionOfInterestParam.Spec` protobuf messages. As of 3.3, ROI params are limited to specifying rectangular regions, and really only work well for `Network Compute Bridge Worker` services. The tablet does not allow setting ROI for `Area Callback` services, but that will likely change in the future. Other services have limited ROI functionality. +Region of Interest, or ROI, allows users to specify a region of an image. It is defined by the `RegionOfInterestParam` and `RegionOfInterestParam.Spec` protobuf messages. As of 3.3, ROI params are limited to specifying rectangular regions, and really only work well for `Network Compute Bridge Worker` services. The tablet does not allow setting ROI for `Area Callback` services, but that will likely change in the future. Other services have limited ROI functionality. -Region of interest is helpful to narrow down a search space if there is a lot going on in an image, and the camera can't be moved or zoomed in such a way that only the thing the user care's about is in frame. Users will be able to draw regions on live images using the tablet UI, and on images taken at record time when editing parameters in Scout. - +Region of interest is helpful to narrow down a search space if there is a lot going on in an image, and the camera can't be moved or zoomed in such a way that only the thing the user care's about is in frame. Users will be able to draw regions on live images using the tablet UI, and on images taken at record time when editing parameters in Scout. ### Dictionary -Dictionary is the first container type, and is defined by the `DictParam` and `DictParam.Spec` protobuf messages. Dictionaries allow users to specify many named children of various types: string, ints, dictionaries, etc. Note: primitives themselves don't contain a name, but their entries inside containers do. Each child of a dictionary is required to have a _key_ string, which services will use to find particular values. Changing a _key_ has consequences for backwards compatibility, so there is a second ephemeral name field embedded into `UserInterfaceInfo` called *display_name*. *display_name* exists so it can be changed at any time, without consequence. If no *display_name* is specified, _key_ will be used. - -UI's will always allow users to specify every child of a dictionary. Each child is independent. Dictionaries can be told to start collapsed, which is a great way to hide advanced parameters for your inspections that most users won't wiggle. +Dictionary is the first container type, and is defined by the `DictParam` and `DictParam.Spec` protobuf messages. Dictionaries allow users to specify many named children of various types: string, ints, dictionaries, etc. Note: primitives themselves don't contain a name, but their entries inside containers do. Each child of a dictionary is required to have a _key_ string, which services will use to find particular values. Changing a _key_ has consequences for backwards compatibility, so there is a second ephemeral name field embedded into `UserInterfaceInfo` called _display_name_. _display_name_ exists so it can be changed at any time, without consequence. If no _display_name_ is specified, _key_ will be used. +UI's will always allow users to specify every child of a dictionary. Each child is independent. Dictionaries can be told to start collapsed, which is a great way to hide advanced parameters for your inspections that most users won't wiggle. ### One-Of -One-Of is another container type, and is defined by the `OneOfParam` and `OneOfParam.Spec` protobuf messages. Unlike dictionary, One-Of will only let the users specify a single child at a time. The UI will allow users to pick which child they want to specify, and allow users to specify that child. Note that the child can be completely empty. One-Of's are a great way to encode optional parameters, or parameters that only exist under circumstances. It is valid to have an empty One-Of child - that just means that if selected, that option has no additional parameters. +One-Of is another container type, and is defined by the `OneOfParam` and `OneOfParam.Spec` protobuf messages. Unlike dictionary, One-Of will only let the users specify a single child at a time. The UI will allow users to pick which child they want to specify, and allow users to specify that child. Note that the child can be completely empty. One-Of's are a great way to encode optional parameters, or parameters that only exist under circumstances. It is valid to have an empty One-Of child - that just means that if selected, that option has no additional parameters. -Like dictionary children, one-of children also contain a `UserInterfaceInfo`, which allows developers to both order elements in a deterministic way, and override what string the UI uses to represent the child. One-Of specs are constrained to ONLY contain dictionary children. - +Like dictionary children, one-of children also contain a `UserInterfaceInfo`, which allows developers to both order elements in a deterministic way, and override what string the UI uses to represent the child. One-Of specs are constrained to ONLY contain dictionary children. ### List -List is the final container type, and is defined by the `ListParam` and `ListParam.Spec` protobuf messages. Lists must be homogenous, meaning each child in the list must meet the same spec. +List is the final container type, and is defined by the `ListParam` and `ListParam.Spec` protobuf messages. Lists must be homogenous, meaning each child in the list must meet the same spec. ### Custom Param -The `CustomParam` and `CustomParam.Spec` protobuf messages are container types for the various parameter types. A custom param can either be a double, or a bool, or an int, or a dictionary, etc. Both dictionaries and list children contain a CustomParam. +The `CustomParam` and `CustomParam.Spec` protobuf messages are container types for the various parameter types. A custom param can either be a double, or a bool, or an int, or a dictionary, etc. Both dictionaries and list children contain a CustomParam. ## Example Specifications @@ -192,64 +183,61 @@ specs { } ``` - Let's take another look at the 3.3 boston dynamic thermal inspection: - ![Tablet Screenshot](./images/service_customization_thermal.jpg) - -The UI on the left is generated with service customization. The spec provided for the thermal NCB worker looks like this: - +The UI on the left is generated with service customization. The spec provided for the thermal NCB worker looks like this: - A root level dictionary, containing: - - "Relative threshold", a one-of with two children: - - "Off" - a dictionary with no child parameters - - "On" - a dictionary with child parameters: - - "Threshold" - a double param with temperature units and minimum value 0, and *is_relative* set to true. - - A list, containing 1-3 children that meet the spec: - - Dictionary, containing: - - "Region" - a region of interest on a thermal image. - - "Max Alarm Threshold", a one-of with two children: - - "Off" - a dictionary with no child parameters - - "On" - a dictionary with child parameters: - - "Threshold" - a double param with temperature units and *is_relative* set to false. - - "Min Alarm Threshold", a one-of with two children: - - "Off" - a dictionary with no child parameters - - "On" - a dictionary with child parameters: - - "Threshold" - a double param with temperature units and *is_relative* set to false. - + - "Relative threshold", a one-of with two children: + - "Off" - a dictionary with no child parameters + - "On" - a dictionary with child parameters: + - "Threshold" - a double param with temperature units and minimum value 0, and _is_relative_ set to true. + - A list, containing 1-3 children that meet the spec: + - Dictionary, containing: + - "Region" - a region of interest on a thermal image. + - "Max Alarm Threshold", a one-of with two children: + - "Off" - a dictionary with no child parameters + - "On" - a dictionary with child parameters: + - "Threshold" - a double param with temperature units and _is_relative_ set to false. + - "Min Alarm Threshold", a one-of with two children: + - "Off" - a dictionary with no child parameters + - "On" - a dictionary with child parameters: + - "Threshold" - a double param with temperature units and _is_relative_ set to false. ## Implementing Service Customization - ### **Image** services + - Specs: specs need to be returned by the `ListImageSourcesResponse` rpc, inside the `ImageSource` protobuf message. - Parameters: parameters are sent to the service as part of the `GetImage` rpc, inside the `ImageRequest` protobuf message. - Example: see the [custom_parameter_image_server](../../python/examples/service_customization/custom_parameter_image_server/README.md) python example. - ### **Network Compute Bridge Worker** services + - Specs: specs need to be returned by the `ListAvailableModels` rpc, inside the `ModelData` protobuf message. - Parameters: parameters are sent to the service as part of the `WorkerCompute` rpc, inside the `ComputeParameters` protobuf message. - Example: see the [custom_parameter_ncb_worker](../../python/examples/service_customization/custom_parameter_ncb_worker/README.md) python example. - ### **Remote Mission** services + - Specs: specs need to be returned by the `GetRemoteMissionServiceInfo` rpc, inside the `GetRemoteMissionServiceInfoResponse` protobuf message. - Parameters: parameters are sent to the service as part of the `Tick` rpc, inside the `TickRequest` protobuf message. - Example: see the [hello_world_mission_service](../../python/examples/remote_mission_service/README.md) python example. - ### **Area Callback** services + - Specs: specs need to be returned by the `AreaCallbackInformation` rpc, inside the `AreaCallbackInformation` protobuf message. - Parameters: parameters are sent to the service as part of the `BeginCallback` rpc, inside the `BeginCallbackRequest` protobuf message. - No example available. ## Parameter Coercion + Coercion allows you to gracefully handle errors in your parameters. If the parameter provided from the server is out of spec, it can be coerced to be in spec. Given a `StringSpec`: + ``` string_spec { options: "A" @@ -257,7 +245,9 @@ string_spec { options: "C" } ``` + If the parameter came back with a value `D`, this would be considered out of spec. + ```python >>> from bosdyn.client.service_customization_helpers import string_param_coerce_to, make_string_param_spec >>> from bosdyn.api.service_customization_pb2 import StringParam @@ -270,6 +260,7 @@ True >>> param value: 'B' ``` + The parameter is modified in-place - a new parameter does not get returned. An example demonstrating coercion can be found in the [hello_world_mission_service](../../python/examples/remote_mission_service/README.md) python example. Each coercion function returns a boolean indicating whether any field was modified to be in spec. It is not specified which precise field(s) may have been modified. diff --git a/docs/concepts/writing_services_for_data_acquisition.md b/docs/concepts/writing_services_for_data_acquisition.md index c02fd3b6f..6556ee027 100644 --- a/docs/concepts/writing_services_for_data_acquisition.md +++ b/docs/concepts/writing_services_for_data_acquisition.md @@ -14,12 +14,11 @@ To fully integrate the sensor, a payload needs to implement either the Boston Dy ![Communication Map Screenshot](./images/payload_communication_map.png) - ## Camera Payloads To integrate a camera payload which outputs image data in a known format (e.g. raw bytes or JPEG) with the data acquisition pipeline, a developer needs to implement an [ImageService](../../protos/bosdyn/api/image_service.proto). -The data acquisition service will automatically recognize any directory-registered image services, create `ImageAcquistionCapabilities` for the image sources, and be able to collect image data for each service using the standard `ImageService` RPCs. For a camera payload, a developer will need to implement an image servicer class. To simplify the implementation of an image service, a set of base image service helper functions are provided in [image_service_helpers.py](../../python/bosdyn-client/src/bosdyn/client/image_service_helpers.py). +The data acquisition service will automatically recognize any directory-registered image services, create `ImageAcquisitionCapabilities` for the image sources, and be able to collect image data for each service using the standard `ImageService` RPCs. For a camera payload, a developer will need to implement an image servicer class. To simplify the implementation of an image service, a set of base image service helper functions are provided in [image_service_helpers.py](../../python/bosdyn-client/src/bosdyn/client/image_service_helpers.py). For each image source that will be available in the image service, a `VisualImageSource` helper class should be created to create the necessary protos for responding to gRPC requests from an image service, request and decode image data from the specific image source, and create or clear faults specific to the image source. The constructor requires the image source name to be provided (as a string), and then a class inheriting from the `CameraInterface` and overriding the functions for capturing image data and decoding the data. Optionally, the number of pixel rows and columns in the image can be provided as integer values in the `VisualImageSource` constructor. The gain and exposure time can be provided as either a function which dynamically determines the values or fixed float values in the `VisualImageSource` constructor as well. @@ -30,16 +29,20 @@ The image service can be created with the `CameraBaseImageServicer` class, which Each image source should implement a class which inherits the parent class `CameraInterface` and overrides the virtual functions `blocking_capture` and `image_decode`. The `blocking_capture` interface function should be a blocking function which calls out to a camera using the hardware's api, and collects then returns the image data. The virtual function has the following signature: + ``` def blocking_capture(self): returns (image_data: "Any Data Format", acquisition_time_seconds: float) ``` + The `image_data` returned can be any type, but must be consistent across the capture function's output and the decode function's input. The `acquisition_time_seconds` should be a float, in the service computer's clock, which represents the time the image data was acquired. **The `blocking_capture` function must not return until the image_data has been acquired.** The `image_decode` interface function should decode the image data into bytes in the desired format and populate an image proto message with the decoded data. The virtual function has the following signature: + ``` def image_decode(self, image_data : "Any Data Format", image_proto: image_pb2.Image, image_format : image_pb2.Image.Format, quality_percent : int) ``` + The input image data will always be the same format (and contents) as the image data returned by the `blocking_capture` function. The `image_proto` is an Image protobuf message which will be mutated within the decode function to include: 1) the image data, 2) the pixel format, 3) the image format, and 4) optionally the transform snapshot fields. The decoding function does not need to return anything, but it must mutate the image protobuf message. The `image_format` is the requested format (e.g. jpeg, raw); if the image data cannot be decoded into a specific format, an Exception should be raised within the `image_decode` function providing an error message (e.x. `raise Exception("Unable to decode to FORMAT_RAW for the web cam")`). If the requested image format is `None`, then the `image_decode` function should choose the best/preferred format for the image data and decode it into that format. @@ -48,7 +51,7 @@ Lastly, the `quality_percent` may be provided as a parameter for decoding the im **Note:** The tablet and the on-robot data acquisition service makes requests for JPEG formatted images, so the `image_decode` function must at least be able to respond to a `image_format=image_pb2.Image.FORMAT_JPEG` to ensure that the camera payload can be viewed on the tablet. -**Note:** Does your camera service require inputs or parameters? Do you want controls or widgets for those parameters to show up on the SpotApp android application or on Scout? Please refer to [this document](service_customization.md) to learn how to add parameters to a camera service. +**Note:** Does your camera service require inputs or parameters? Do you want controls or widgets for those parameters to show up on the SpotApp android application or on Scout? Please refer to [this document](service_customization.md) to learn how to add parameters to a camera service. ### Using Background Capture Threads @@ -61,16 +64,19 @@ When `use_background_capture_thread` is set to False, the `CameraBaseImageServic There are two SDK examples showing `ImageService` implementations using the helper functions: a [USB web camera](../../python/examples/service_customization/custom_parameter_image_server/README.md), and the [Ricoh Theta camera](../../python/examples/ricoh_theta/README.md). ### Tips for Creating an Image Service + - The `image_decode` function should attempt to accurately fill out the PixelFormat and ImageFormat fields for the image proto in addition to the image data. This allows for end-user applications to more accurately decode the image data. - The `image_decode` function should handle an input argument of `image_format=None`. Therefore, if the `image_format` is `None`, the `image_decode` function should choose the best/preferred format and respond with image data decoded into that format and set the ImageFormat field to the chosen format in the image proto. - To have a specific camera source run a background thread, but other sources in the same service run the `blocking_capture` function at RPC time, provide `use_background_capture_thread` as False to the `CameraBaseImageServicer` constructor. Separately, for the `VisualImageSource` object, start the thread using the `create_capture_thread()` function before passing the list of sources to the image service constructor. The following is pseudocode demonstrating the process: - ``` - visual_source1 = VisualImageSource("source1", camera_interface_object) - visual_source2_not_threaded = VisualImageSource2("source2", camera_interface_object) - visual_source1.create_capture_thread() - CameraBaseImageServicer(robot, "image-service-name", [visual_source1, visual_source2_not_threaded], use_background_capture_thread=False) - ``` + ``` + visual_source1 = VisualImageSource("source1", camera_interface_object) + visual_source2_not_threaded = VisualImageSource2("source2", camera_interface_object) + visual_source1.create_capture_thread() + CameraBaseImageServicer(robot, "image-service-name", [visual_source1, visual_source2_not_threaded], use_background_capture_thread=False) + + ``` + - While developing an image service, if the service is not behaving as expected or failing unexpectedly, an image service tester program (`python/examples/tester_programs/image_service_tester.py`) is available to help test and debug common failure modes through detailed display of the system's outputs. ## Non-image Payloads @@ -84,10 +90,11 @@ The plugin service can be created with the `DataAcquisitionPluginService` class, ### Data Capabilities List For each piece of data that will be collected from the payload, the plugin service must specify: + - Name: uniquely identifies which piece of data will be collected. - Description: a short, human-readable description of what data is being collected. This description will be displayed on the tablet when configuring data collection actions during teleop and autowalk. - Channel name: a string that will be associated with all data collected and stored by this plugin service in the data buffer. - - It is recommended to put different kinds of captures on different channels. If you want to store multiple pieces of data on the same channel during the same capture action, please set the `data_name` in the `DataIdentifier`, so that the pieces of data can still be uniquely identified. + - It is recommended to put different kinds of captures on different channels. If you want to store multiple pieces of data on the same channel during the same capture action, please set the `data_name` in the `DataIdentifier`, so that the pieces of data can still be uniquely identified. Using this information, the data acquisition plugin will create a list of capabilities, which are `Capability(name, description, channel_name)`. For example, a plugin collecting laser scan data that can be both sparse and dense would have the following capabilities list: @@ -110,28 +117,29 @@ The `request` argument is the `AcquirePluginDataRequest`, which has the `acquisi It is important to note that the data collection function should **block for the entire process** of collecting the payload data and storing it in the data acquisition store service, and not return until all data is collected and has been stored. The data collection function should perform the following things for each `DataCapture` requested in the `acquisition_requests` list passed as an argument to the function: + 1. Create a `DataIdentifier` from the acquisition request’s `action_id` field. This data identifier will be stored with all of the collected data. If the same channel is used for all of the plugin’s data capabilities, then the `data_name` field should be populated with the data capture’s `name` field. - ``` - data_id = data_acquisition_pb2.DataIdentifier(action_id=request.action_id, channel=CHANNEL_NAME, data_name=DATA_NAME) - ``` + ``` + data_id = data_acquisition_pb2.DataIdentifier(action_id=request.action_id, channel=CHANNEL_NAME, data_name=DATA_NAME) + ``` 2. Collect the data by communicating with the payload. - * Note: Long-running acquisitions should be sure to call `store_helper.state.cancel_check()` occasionally to exit early and cleanly if the acquisition has been cancelled by the user or a timeout. + - Note: Long-running acquisitions should be sure to call `store_helper.state.cancel_check()` occasionally to exit early and cleanly if the acquisition has been cancelled by the user or a timeout. 3. Store the data in the data acquisition store service using the `store_helper`. The data can either be stored as `AssociatedMetadata`, which is json structured data, or as raw bytes data. 4. To save data as raw bytes, the `store_data` function is used. - * Tip: if the collected data is a protobuf message, the protobuf `SerializeToString()` function will convert the proto into bytes. - ``` - store_helper.store_data(BYTES_DATA, data_id) - ``` + - Tip: if the collected data is a protobuf message, the protobuf `SerializeToString()` function will convert the proto into bytes. + ``` + store_helper.store_data(BYTES_DATA, data_id) + ``` 5. To save data as associated metadata, the `store_metadata` function is used. The `AssociatedMetadata` proto message is used to package the json data, and the `reference_id` of that proto should include the `request.action_id`. - ``` - message = data_acquisition_pb2.AssociatedMetadata() - message.reference_id.action_id.CopyFrom(request.action_id) - message.metadata.data.update({ - "data": “special_data” - }) - store_helper.store_metadata(message, data_id) - ``` -Note, the `DataAcquisitionPluginService` class will wait to respond to the `AcquirePluginData` RPC until all data is collected and all store calls have been completed. + ``` + message = data_acquisition_pb2.AssociatedMetadata() + message.reference_id.action_id.CopyFrom(request.action_id) + message.metadata.data.update({ + "data": “special_data” + }) + store_helper.store_metadata(message, data_id) + ``` + Note, the `DataAcquisitionPluginService` class will wait to respond to the `AcquirePluginData` RPC until all data is collected and all store calls have been completed. ### Example Plugins @@ -150,23 +158,23 @@ If the plugin service encounters an error that is unrelated to a specific piece ### Tips for Creating a Data Acquisition Plugin - Typically, a plugin will acquire all the requested data at once before storing any data with the `store_helper`. This allows a plugin to accurately set the status as `STATUS_SAVING` to indicate that all acquisitions are complete and provide feedback for the `GetStatus` RPC before beginning to store its data. As well, a plugin can check if it has been cancelled before saving any data to prevent accidentally storing data for a later cancelled request. - ``` - store_helper.state.set_status(data_acquisition_pb2.GetStatusResponse.STATUS_SAVING) - ``` + ``` + store_helper.state.set_status(data_acquisition_pb2.GetStatusResponse.STATUS_SAVING) + ``` - While developing a data acquisition plugin service, if the service is not behaving as expected or failing unexpectedly, a plugin tester program (`python/examples/tester_programs/plugin_tester.py`) is available to help test and debug common failure modes through detailed display of the system's outputs. - The data collection function can be part of its own class that manages state specific to the payload. Additionally, if an individual class is created for the data collection and management, it can use background threads to collect and buffer data to speed up the response to the `AcquirePluginData` RPC. - The data acquisition service will mark acquisition requests as `STATUS_TIMEDOUT` if they take longer than 30 seconds. A plugin can extend the timeout used by providing an additional function following this signature: - ``` - def acquire_response_fn(request:data_acquisition_pb2.AcquirePluginDataRequest, response:data_acquisition_pb2.AcquirePluginDataResponse): returns Boolean - ``` + ``` + def acquire_response_fn(request:data_acquisition_pb2.AcquirePluginDataRequest, response:data_acquisition_pb2.AcquirePluginDataResponse): returns Boolean + ``` - The acquire response function can verify the request header and check if the acquisition request is valid. If it is not, the `response` argument should be modified to set the `status` field. As well, the timeout can be extended for valid functions by updating the response’s `timeout_deadline` field. Note, the timeout should be set in the robot’s clock. Ultimately, the acquire response function will respond with a boolean indicating if the acquisition request is valid, and if so, the data collection will continue. + The acquire response function can verify the request header and check if the acquisition request is valid. If it is not, the `response` argument should be modified to set the `status` field. As well, the timeout can be extended for valid functions by updating the response’s `timeout_deadline` field. Note, the timeout should be set in the robot’s clock. Ultimately, the acquire response function will respond with a boolean indicating if the acquisition request is valid, and if so, the data collection will continue. - If a plugin’s data collection is slow, it should periodically check if the RPC is ever cancelled so that it can immediately stop the no longer necessary data collection. Within the data collection function, to check if an acquisition is cancelled: - ``` - store_helper.state.cancel_check() - ``` + ``` + store_helper.state.cancel_check() + ``` - Be careful using async functions within the data collection function for communicating with the payload. The service architecture expects the data collection process to block until all data is completely collected and stored. ### Attaching Metadata with other Data or Images @@ -176,6 +184,7 @@ Additional metadata, such as the robot state or sensor configuration information The metadata will be configured as JSON data, and can be stored as an `AssociatedMetadata` proto. This proto contains a `reference_id` field, which will be the `DataIdentifier` from the data it should be associated with; if only the `action_id` of that identifier is filled out, than the metadata is associated with the entire action (all of the repeated data identifiers). A plugin can store this associated metadata using the store helper with the `AssociatedMetadata` proto and a new `DataIdentifier` which uniquely identifies the associated metadata (and not what the metadata is referencing): + ``` store_helper.store_metadata(associated_metadata_proto, data_id) ``` @@ -196,4 +205,4 @@ For other types of services, the general service checking helper functions are a ``` python3 -m bosdyn.client {ROBOT_IP} --help -``` \ No newline at end of file +``` diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index 199011797..f21343447 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 2df23ade66693083ee8be90de50fa256 +config: 05219855b5c7ab8d8ae99cb9f5342057 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/README.html b/docs/html/README.html index b1f85bffc..920818cfc 100644 --- a/docs/html/README.html +++ b/docs/html/README.html @@ -4,7 +4,7 @@ - Spot SDK — Spot 4.0.3 documentation + Spot SDK — Spot 4.1.0 documentation @@ -37,7 +37,7 @@
- 4.0.3 + 4.1.0
@@ -50,7 +50,8 @@ -

This is version 4.0.3 of the SDK. Please review the Release Notes to see what has changed.

+

This is version 4.1.0 of the SDK. Please review the Release Notes to see what has changed.

Contents

diff --git a/docs/html/_images/Detect_and_Follow.png b/docs/html/_images/Detect_and_Follow.png deleted file mode 100644 index 6a60ef025..000000000 Binary files a/docs/html/_images/Detect_and_Follow.png and /dev/null differ diff --git a/docs/html/_images/orbit_structure_data.png b/docs/html/_images/orbit_structure_data.png new file mode 100644 index 000000000..0a85427d8 Binary files /dev/null and b/docs/html/_images/orbit_structure_data.png differ diff --git a/docs/html/_images/orbit_structure_mission.png b/docs/html/_images/orbit_structure_mission.png new file mode 100644 index 000000000..dc03846d8 Binary files /dev/null and b/docs/html/_images/orbit_structure_mission.png differ diff --git a/docs/html/_images/token_creation_1.png b/docs/html/_images/token_creation_1.png new file mode 100644 index 000000000..7c0e08c9d Binary files /dev/null and b/docs/html/_images/token_creation_1.png differ diff --git a/docs/html/_images/token_creation_2.png b/docs/html/_images/token_creation_2.png new file mode 100644 index 000000000..542b3bfd9 Binary files /dev/null and b/docs/html/_images/token_creation_2.png differ diff --git a/docs/html/_images/webview_creation_1.png b/docs/html/_images/webview_creation_1.png new file mode 100644 index 000000000..6578035b8 Binary files /dev/null and b/docs/html/_images/webview_creation_1.png differ diff --git a/docs/html/_images/webview_creation_2.png b/docs/html/_images/webview_creation_2.png new file mode 100644 index 000000000..88dad5523 Binary files /dev/null and b/docs/html/_images/webview_creation_2.png differ diff --git a/docs/html/_images/webview_creation_3.png b/docs/html/_images/webview_creation_3.png new file mode 100644 index 000000000..126fa0abd Binary files /dev/null and b/docs/html/_images/webview_creation_3.png differ diff --git a/docs/html/_modules/bosdyn/bddf/base_data_reader.html b/docs/html/_modules/bosdyn/bddf/base_data_reader.html index 7223cb418..a1756da06 100644 --- a/docs/html/_modules/bosdyn/bddf/base_data_reader.html +++ b/docs/html/_modules/bosdyn/bddf/base_data_reader.html @@ -3,7 +3,7 @@ - bosdyn.bddf.base_data_reader — Spot 4.0.3 documentation + bosdyn.bddf.base_data_reader — Spot 4.1.0 documentation @@ -35,7 +35,7 @@
- 4.0.3 + 4.1.0
@@ -48,7 +48,8 @@
@@ -526,7 +531,8 @@

Contents

Interacting With a Sequence During Execution

-

The ChoreographyStatus RPC returns information about whether the robot is currently executing a sequence or why it isn’t. If it is executing a sequence, the response tells you where (what slice) within the sequence Spot currently is, as well as listing which moves are currently active and the sequence name.

-

Some moves (e.g. CustomGait) can respond to commands through the ChorographyCommand RPC. When such moves are active, they will provide information about what commands they are currently able to accept in the command_limits field as part of the Status response. The ChoreographyCommand RPC sends MoveCommands, which are targeted at specific moves. The move_type and move_id can (optionally) be used to restrict which moves will accept the command and ensure that only the intended recipient can respond to it.

+

The ChoreographyStatus RPC returns information about whether the robot is currently executing a sequence or why it isn’t. If it is executing a sequence, the response tells you where (what slice) within the sequence Spot currently is, as well as listing which moves are currently active and the sequence name.

+

Some moves (e.g. CustomGait) can respond to commands through the ChorographyCommand RPC. When such moves are active, they will provide information about what commands they are currently able to accept in the command_limits field as part of the Status response. The ChoreographyCommand RPC sends MoveCommands, which are targeted at specific moves. The move_type and move_id can (optionally) be used to restrict which moves will accept the command and ensure that only the intended recipient can respond to it.

Saving Choreography Sequences to your Spot

@@ -607,7 +612,7 @@

Animation APIAnimation protobuf.

The Animation can be uploaded to the robot using the UploadAnimatedMove RPC, which sends the animation to the robot. The choreography service validates and checks the structure of the animation to ensure it is fully specified and is feasible. If the animation does not pass this validation, the RPC responds with a failure status and a set of warning messages indicating which parts of the animation failed.

-

If the animation uploads successfully, it can be used within choreography sequences. The animation appears as a move option in Choreographer along with any parameters specified in the initial Animation protobuf message. The move type associated with the uploaded animation is “animation::” + the animation’s name. The animations persist on the robot until either the robot is powered off or an animation with exactly the same name is uploaded and overwrites the previous animation.

+

If the animation uploads successfully, it can be used within choreography sequences. The animation appears as a move option in Choreographer along with any parameters specified in the initial Animation protobuf message. The move type associated with the uploaded animation is “animation::” + the animation’s name. The animations persist on the robot until either the robot is powered off or an animation with exactly the same name is uploaded and overwrites the previous animation.

While animations can be written manually using protobuf in any application, we have also provided a way to create animations from human-readable text files.

  • Animation text file extension: *.cha

  • @@ -617,7 +622,7 @@

    Animation API

    Choreography logs API

    -

    The Choreography logs API defines a choreography log using the ChoreographyStateLog protobuf message. ChoreographyStateLog consists of a repeated series of timestamped key frames that contain:

    +

    The Choreography logs API defines a choreography log using the ChoreographyStateLog protobuf message. ChoreographyStateLog consists of a repeated series of timestamped key frames that contain:

    • The joint state of the entire robot

    • The foot contacts

    • @@ -655,17 +660,17 @@

      Config files

      MoveInfoConfig.txt

      -

      MoveInfoConfig can be parsed by a protobuf parser into each moves field of the ListAllMovesResponse proto. Each MoveInfo proto provides metadata about a particular move.

      +

      MoveInfoConfig can be parsed by a protobuf parser into each moves field of the ListAllMovesResponse proto. Each MoveInfo proto provides metadata about a particular move.

      The fields and their meanings are:

      • name: Name of this move.

      • move_length_slices: Default duration of this move in slices.

      • min_move_length_slices: Minimum number of slices this move can complete in.

      • -
      • is_extendable: Whether this move can be extended. If is_extendable is true, the desired duration can be specified in the requested_slices field in the MoveParams proto.

      • -
      • entrance_state: Which transition state the robot must be in prior to entering this move. Only applicable if controls_legs=true. Structure can support multiple allowed entry states, but all current moves only accept a single entry state.

      • -
      • exit_state: Which transition state the robot will be in after completing this move. Only applicable if controls_legs=true. The next legs-track move must have the same entrance_state.

      • -
      • min_time: Minimum move duration. When specified, moves may take more than the normal number of slices if the slice duration is very short (slices per minute is very high).

      • -
      • max_time: Maximum move duration. This applies to moves that are extendable but cannot be made arbitrarily long.

      • +
      • is_extendable: Whether this move can be extended. If is_extendable is true, the desired duration can be specified in the requested_slices field in the MoveParams proto.

      • +
      • entrance_state: Which transition state the robot must be in prior to entering this move. Only applicable if controls_legs=true. Structure can support multiple allowed entry states, but all current moves only accept a single entry state.

      • +
      • exit_state: Which transition state the robot will be in after completing this move. Only applicable if controls_legs=true. The next legs-track move must have the same entrance_state.

      • +
      • min_time: Minimum move duration. When specified, moves may take more than the normal number of slices if the slice duration is very short (slices per minute is very high).

      • +
      • max_time: Maximum move duration. This applies to moves that are extendable but cannot be made arbitrarily long.

      • controls_arm: Move requires the arm track.

      • controls_legs: Move requires the legs track.

      • controls_body: Move requires the body track.

      • @@ -675,7 +680,7 @@

        MoveInfoConfig.txt

        MoveParamsConfig.txt

        -

        MoveParamsConfig provides the default value for each move parameter. For moves that contain numerical parameters (for example, double, int32) the config file will also specify the minimum and maximum values.

        +

        MoveParamsConfig provides the default value for each move parameter. For moves that contain numerical parameters (for example, double, int32) the config file will also specify the minimum and maximum values.

        The config file is formatted as a block of text separated by empty lines for each available move.

        The first line of each block has two values:

        1. The names of the moves.

        2. -
        3. Which option in the oneof params field within the MoveParams proto this move uses to specify its parameters. For moves with no parameters, the second entry in the first line should say NONE. No further lines are used in that block of text

        4. +
        5. Which option in the oneof params field within the MoveParams proto this move uses to specify its parameters. For moves with no parameters, the second entry in the first line should say NONE. No further lines are used in that block of text

        The remaining lines describe the default (and possibly min/max) values for one parameter per line.

diff --git a/docs/html/docs/concepts/choreography/custom_gait.html b/docs/html/docs/concepts/choreography/custom_gait.html index 9969dc349..38c588f6f 100644 --- a/docs/html/docs/concepts/choreography/custom_gait.html +++ b/docs/html/docs/concepts/choreography/custom_gait.html @@ -4,7 +4,7 @@ - Custom Gait — Spot 4.0.3 documentation + Custom Gait — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
- 4.0.3 + 4.1.0
@@ -51,7 +51,8 @@ -
-

Choreography

+
+

Choreography

  • Added GetChoreographySequence RPC to request the full sequence proto with a given name from Spot.

  • Added ChoreographyTimeAdjust RPC to slightly modify the start time of the next ExecuteChoreography RPC request that will be received by the robot in the future.

  • @@ -749,26 +971,26 @@

    Choreography

    Added ResetSafetyStop RPC for Safety-Related Stopping Function (SRSF) compatible robots. Robots equipped with this feature will be listed as Safety-Related Stopping Function (SRSF) “Enabled” under the hardware information section found in the “About” page on the robot’s admin console.

-
-

GraphNav

+
+

GraphNav

New configuration options have been added to Area Callbacks to specify GraphNav’s behavior with respect to blockages, impairment, entities, and stopping poses for callback regions.

-
-

Bug Fixes and Improvements

+
+

Bug Fixes and Improvements

Clients are now configured with a default 5s keep-alive time, which triggers a faster reconnect with the service, when the network connection goes down.

Lease update change: ignore failed old leases in the case the wallet contains the new lease.

A new SystemState message that includes the temperature data for the robot’s motors has been added to the RobotState message. This new message is expected to expand in the future. The documentation for the Kinematic State message in robot_state.proto has been improved.

-

The SpotCam CompositorClient now sets both the coords (deprecated in v3.3) and meter fields for backwards compability purposes in the set_ir_meter_overlay and set_ir_meter_overlay_async methods.

+

The SpotCam CompositorClient now sets both the coords (deprecated in v3.3) and meter fields for backwards compatibility purposes in the set_ir_meter_overlay and set_ir_meter_overlay_async methods.

In the SpotCam PtzClient, focus_mode overrides distance in the set_ptz_focus_state and set_ptz_focus_state_async methods, so long as it is not set to None.

Two new helper functions have been added to the Vec3 class in math_helpers.py, namely to_numpy and from_numpy. These functions may be used to convert back and forth between Vec3 and numpy arrays.

The get_info method in the Mission Client now supports very large missions which would have previously exceeded the maximum protobuf size. If the robot software version is such that the GetInfoAsChunks RPC is unimplemented, get_info falls back to the GetInfo RPC instead.

For non-Core I/O payloads, it is now recommended to authenticate and register payloads by generating a payload credentials file with a unique GUID and secret. The read_or_create_payload_credentials and add_payload_credentials_file_argument helper functions assist with doing this. Core I/O Extensions should continue reading the existing on-disk file, located at /opt/payload_credentials/payload_guid_and_secret.

-

GraphNav will no longer restart an Area Callback in the middle of a region if it re-routes. It will instead call a new Area Callback RPC to inform the callback of the change.

-

Published robot state messages previously contained kinematic information for a non-existant HR0 joint on Spot’s arm, set to all zeros. This has been removed and the published kinematic information now only contains existing joints. The number of published joints will be one less than on releases < 4.0. Customers storing local copies of Spot URDF files may need to reacquire them from the robot after updating to 4.0.

+

GraphNav will no longer restart an Area Callback in the middle of a region if it re-routes. It will instead call a new Area Callback RPC to inform the callback of the change.

+

Published robot state messages previously contained kinematic information for a non-existent HR0 joint on Spot’s arm, set to all zeros. This has been removed and the published kinematic information now only contains existing joints. The number of published joints will be one less than on releases < 4.0. Customers storing local copies of Spot URDF files may need to reacquire them from the robot after updating to 4.0.

-
-

Deprecations

+
+

Deprecations

-
-

Orbit (formerly Scout)

+
+

Orbit (formerly Scout)

  • The package bosdyn-scout is deprecated and replaced with bosdyn-orbit, due to Scout being renamed to Orbit. As a result, the pre-existing examples in ../python/examples/scout/ are moved to ../python/examples/orbit/. All examples use bosdyn-orbit instead of bosdyn-scout.

  • The /login Orbit API endpoint is now deprecated. It has been functionally replaced by the /api_token/authenticate endpoint. This endpoint allows an admin user to generate an API Access Token with specific permissions for use against the Orbit API. A corresponding authenticate_with_api_token helper function in bosdyn-orbit’s client has replaced 3.3’s authenticate_with_password function.

  • @@ -789,31 +1012,31 @@

    Orbit (formerly Scout) -

    Known Issues

    +
    +

    Known Issues

    New in 4.0

    • There are circular imports between bosdyn/api/gps/registration.proto and bosdyn/api/world_object.proto. This may break proto code generation for some languages (e.g., Go).

    -
    -

    Preexisting, but undiscovered prior to 4.0

    +
    +

    Preexisting, but undiscovered prior to 4.0.0

    • The /v1/data-buffer/daq-data/ REST endpoint sometimes fails to return all of the requested data. Two workarounds are to (1) modify the query parameters such that a subset of data is returned or (2) use the new QueryStoredCaptures RPC.

    -
    -

    Preexisting

    +
    +

    Preexisting

    • Same as 3.3.2.

    -
    -

    Sample Code

    -
    -

    New

    +
    +

    Sample Code

    +
    +

    New

    • Arm Freeze : Command Spot’s end-effector to hold a pose expressed in the ODOM and BODY frames, demonstrating the differences of holding a pose relative to and expressed in fixed versus moving frames.

    • @@ -834,8 +1057,8 @@

      New<
    • Extensions: A couple of helper scripts have been introduced to help create CORE I/O and Scout Extensions. These can even be used to package any other Dockerized example into an Extension.

    -
    -

    Updated

    +
    +

    Updated

    • Area Callbacks: Updated to set the new callback configuration parameters.

    • Orbit Hello: Updated to use bosdyn-orbit instead of bosdyn-scout.

    • @@ -852,7 +1075,7 @@

      Updated
    • Ricoh Theta: The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. When no password argument is supplied, the default password for the Ricoh Theta now includes only the numeric portion of the Ricoh Theta SSID (as described in the Ricoh Theta documentation).

    • Custom Parameter Image Server: The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5.

    • Custom Parameter Network Compute Bridge Worker: The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included.

    • -
    • Detect and Follow: The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included.

    • +
    • Detect and Follow: The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included.

    • DAQ Plugin Tester: The plugin now tests for whether the DAQ plugin is publishing live data.

    • Fetch Tutorial: The example has been updated such that it no longer uses the trajectory_command method, which has been removed. The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5.

    • Self Registration: Updated to generate and read a unique GUID and secret from a payload credentials file, as is now recommended for payload authentication.

    • @@ -863,8 +1086,8 @@

      Updated

    -
    -

    3.3.1

    +
    +

    3.3.1

    Upcoming Removals

    Several protobuf fields or services are scheduled to be removed in the 4.0 release. Please ensure that they are no longer used within your code.

    @@ -876,8 +1099,8 @@

    Upcoming Removalsfoot_height_results and leg_pair_results

-
-

Bug Fixes and Improvements

+
+

Bug Fixes and Improvements

In the upcoming release 4.0, we plan to change the encoding for real-valued fields in local grids to RAW instead of RLE (Run-Length Encoded) and provide client helpers for decoding. Make sure your code handles the encoding field in LocalGridResponse correctly.

Updated Data Acquisition system diagram and Network Compute Bridge documentation.

Added LogStatus documentation in the list of robot services.

@@ -891,20 +1114,20 @@

Bug Fixes and Improvementsget_run_archives_by_id method in Scout client.

The Inverse Kinematics Service is now available on robots without arms. Only body-mounted tools are supported on such robots.

-
-

Known Issues

+
+

Known Issues

Same as 3.3.0

-
-

Sample Code

-
-

New

+
+

Sample Code

+
+

New

Log Status: Show how to query the log status service.

Scout Export Run Archives: Show how to export run archives from Scout for the recent completed missions.

Simple Alert Server: Additional Network Compute Bridge worker that generates responses with alerts.

-
-

Updated

+
+

Updated

Edit Autowalk: Fixed documentation and improved arguments accepted by the example application so the walk filename is not assumed to be autogenerated.

Fire Extinguisher Network Compute Bridge Worker: Added min_confidence parameter and fixed output images so they are displayed on the tablet.

Network Compute Bridge: Updated requirements files and docker instructions.

@@ -912,10 +1135,10 @@

Updated

-
-

3.3.0

-
-

Upcoming Removals

+
+

3.3.0

+
+

Upcoming Removals

Several protobuf fields or services are scheduled to be removed in the 4.0 release. Please ensure that they are no longer used within your code.

-
-

New Features

+
+

New Features

New Service - Inverse Kinematics

Users can make reachability and stance-selection queries for reaching to locations with the arm or pointing a body-mounted sensor. @@ -938,8 +1161,8 @@

New Service - Inverse Kinematics

Use the LogStatus service to start and terminate experiment or retro logs. These logs can be used with Boston Dynamics support to diagnose problems with the robot or its systems.

-
-

Service Customization

+
+

Service Customization

When writing a service to extend the capabilities of the robot, there are now additional fields and messages to allow the service to specify which and what kind of parameters that the service can accept with its requests. These parameters can be modified by end users via tablet operation or Scout. The services that support this customization are

- -
-

3.2.3

+
+

3.2.3

No changes from 3.2.2.

-
-

3.2.2

-
-

Bug Fixes and Improvements

+
+

3.2.2

+
+

Bug Fixes and Improvements

Improved CORE I/O documentation on passwords, user specifications in Spot Extensions, and ports for incoming traffic.

-

Updated Data Acquisition Tutorial documentation on udev rules to refrect changes on the automatic execution of udev rules during a Spot Extension installation.

+

Updated Data Acquisition Tutorial documentation on udev rules to reflect changes on the automatic execution of udev rules during a Spot Extension installation.

-
-

Known Issues

+
+

Known Issues

Same as 3.2.0

-
-

Sample Code

-
-

Updated

+
+

Sample Code

+
+

Updated

Updated Nvidia base docker image version in Dockerfile of the following:

-
-

3.2.1

-
-

Bug Fixes and Improvements

+
+

3.2.1

+
+

Bug Fixes and Improvements

Fixed issues relating to GraphNav Area Callbacks and loop closures where connections could be made in the middle of an Area Callback. These connections are now prohibited. Maps with incorrect connections must be re-recorded or reprocessed with the map processing service to re-create better loop closures.

Updated Fetch tutorial with information to run on CORE I/O payload.

-

Added Getting Started section in Scout documentation.

+

Added Getting Started section in Scout documentation.

Removed unused imports in the protobuf files protos/bosdyn/api/autowalk/walks.proto, protos/bosdyn/api/graph_nav/area_callback.proto, protos/bosdyn/api/graph_nav/graph_nav.proto, protos/bosdyn/api/mission/nodes.proto.

Autowalk missions:

-
-

Known Issues

+
+

Known Issues

Same as 3.2.0

-
-

Sample Code

-
-

Updated

+
+

Sample Code

+
+

Updated

Replay Mission: Updated example to point to correct mission file.

Velodyne Client: Fixed velodyne client PyQt dependency issue.

-
-

3.2.0

-
-

New Features

+
+

3.2.0

+
+

New Features

Autowalk Service

Enables API clients to specify high level autonomous behaviors for Spot using an easily editable format. The autowalk format is a list of actions and their associated locations. Using this service, users can program the robot to “go to location A, perform action A, go to location B, perform action B, etc.”. The autowalk service compiles the autowalk into a behavior tree that can then be uploaded to the robot and played using the mission service. Previously this feature was only available on the tablet, but now it is a service for all client applications.

@@ -1221,8 +1444,8 @@

Added Spot Extensions Documentationhere

-
-

Bug Fixes and Improvements

+
+

Bug Fixes and Improvements

API

Choreography API:

@@ -1240,7 +1463,7 @@

APIAdded full ImageRequest in data_acquisition request and deprecated image_source and image_format fields.

Docking:

    -
  • Added UpdateDockingParams in DockingCommandFeedbackRequest to update paramaters relating to the specified command ID.

  • +
  • Added UpdateDockingParams in DockingCommandFeedbackRequest to update parameters relating to the specified command ID.

  • Added STATUS_ERROR_STUCK in DockingCommandFeedbackResponse to flag the robot not making progress towards docking.

Added Matrixf, MatrixInt64, MatrixInt32 and Vector in geometry.proto.

@@ -1286,7 +1509,7 @@

API

Added respect_child_failure flag in mission Repeat nodes to control whether a repeat node will keep running its child regardless of whether or not the child succeeds or fails.

  • BosdynRecordEvent message:

      -
    • Added succed_early to control the wait for the RecordEvents RPC.

    • +
    • Added succeed_early to control the wait for the RecordEvents RPC.

    • Added additional_parameters to support runtime parameters.

  • @@ -1342,8 +1565,8 @@

    SDKAdded spot_cam/lights_helper.py with helper functionality to control SpotCAM lights.

    -
    -

    Deprecations

    +
    +

    Deprecations

    Deprecated Choreography API known_sequences; use new SequenceInfo instead.

    Deprecated image_source and image_format fields in DAQ requests and added full ImageRequest instead.

    The boolean field stair_hint is deprecated from MobilityParams and it has been replaced by the field stairs_mode.

    @@ -1352,14 +1575,14 @@

    Deprecations_should_send_app_token_on_each_request method in robot.py.

    Deprecated Spot CORE Documentation and moved to Pre-3.2 Spot CORE Documentation.

    -
    -

    Breaking Changes

    +
    +

    Breaking Changes

    -
    -

    Dependencies

    +
    +

    Dependencies

    -
    -

    Known Issues

    +
    +

    Known Issues

    When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

    If you write a custom data acquisition plugin or image service, do not change its DataAcquisitionCapability or ImageSource set once it is running and registered. New capabilities may not be detected, and old capabilities may still be listed as available in the Data Acquisition service. To change the capabilities of a service: unregister it from the directory, wait until its capabilities are no longer listed in the Data Acquisition service, and then re-register it. This waiting also applies to restarting a service if its capabilities will be different upon restart.

    If you write a custom data acquisition plugin without using our helper class, its GetStatus() RPC is expected to complete immediately. If it takes too long to complete it can cause timeouts when requesting GetStatus() of the data acquisition service.

    @@ -1379,21 +1602,21 @@

    Known Issues\n in the binary protobuf getting converted to ^M (CRLF) in Windows.

    -
    -

    Sample Code

    -
    -

    New

    +
    +

    Sample Code

    +
    +

    New

    Area Callback: Example with a Crosswalk Area Callback action

    Arm Impedance Control: Example for how to send arm impedance commands with the robot

    CORE I/O GPIO: Example to demonstrate how to use the CORE I/O GPIO pins to blink an LED

    Edit Autowalk: Example on how to edit and replay an Autowalk via the API

    Fan Commands: Example to provide a basic Python script to call and receive feedback on a fan command and provide a usable template for writing a callback that issues and blocks during a fan command.

    -
    -

    Updated

    +
    +

    Updated

    Docking: Added undock function.

    Fiducial Follow: Updated example for better lease usage.

    -

    GraphNava Command-Line: Fixed lease usage.

    +

    GraphNav Command-Line: Fixed lease usage.

    Mission Recorder: Added metadata for the recording session.

    Network Compute Bridge: Added configuration to create a Spot Extension with the example.

    Post Docking Callback: Added configuration to create a Spot Extension with the example.

    @@ -1405,49 +1628,49 @@

    Updated
  • Added spotcam ir meter example into command line.

  • Hardcoded dependency versions that work with Python 3.6.

  • -

    Spot Detect and Follow: Added configuration to create a Spot Extension with the example and various improvements.

    +

    Spot Detect and Follow: Added configuration to create a Spot Extension with the example and various improvements.

    Stitch Front Images: Add live viewer to example.

    -
    -

    3.1.2.1

    -
    -

    Dependencies

    +
    +

    3.1.2.1

    +
    +

    Dependencies

    The bosdyn-api and bosdyn-choreography-protos packages have been rebuilt to support the latest protobuf package. They now require a minimum protobuf version of 3.6.1.

    -
    -

    3.1.2

    -
    -

    Bug Fixes and Improvements

    +
    +

    3.1.2

    +
    +

    Bug Fixes and Improvements

    Added payloads and lidar transform in GraphNav’s WaypointSnapshot to help with:

    • Not getting lost when a big payload occluded the lidar.

    • Determine which payloads were used to record a map.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 3.1.0

    -
    -

    3.1.1

    -
    -

    Known Issues

    +
    +

    3.1.1

    +
    +

    Known Issues

    Same as 3.1.0

    -
    -

    Sample Code

    +
    +

    Sample Code

    Network Compute Bridge (updated) Modified server to use user confidence value as a threshold for returning detections

    -
    -

    3.1.0

    -
    -

    New Features

    +
    +

    3.1.0

    +
    +

    New Features

    Safely powering off on staircases.

    To improve safety when operating on stairs, the robot may now autonomously walk off staircases in scenarios where it may have previously entered a sit. In the event of communication loss, critically low battery state of charge, or a Safe Power Off Request, the robot will walk off the staircase before sitting and powering off. The direction of travel will generally be to descend the stairs unless the robot has already reached the top landing. This includes automatic sit-and-power-off cases such as from low battery or the E-stop SETTLE_THEN_CUT level, as well as any client SafePowerOff commands. It does not affect immediate power cut cases such the PowerOff command or the E-stop CUT level.
    To override this behavior for SafePowerOff commands, there is a new unsafe_action field in SafePowerOffCommand which can be set to UNSAFE_FORCE_COMMAND to force the command to take place immediately. To override this behavior for E-stop or battery power off, set the disable_stair_error_auto_descent field in the mobility params for the robot commands. @@ -1496,25 +1719,25 @@

    Python Helpersworld_object.draw_sphere() and world_object.draw_oriented_bounding_box() can be used to set objects in the world object service for debugging purposes.

    -
    -

    Choreography

    +
    +

    Choreography

    A new ListAllSequences RPC allows clients to list all of the available sequences that are known to the robot and can be executed.

    -
    -

    Missions

    +
    +

    Missions

    A new node type, ClearBehaviorFaults will allow a mission to autonomously clear behavior faults when desired.

    -
    -

    Bug Fixes and Improvements

    +
    +

    Bug Fixes and Improvements

    In the python client library the LeaseKeepAlive context manager continually sends RetainLease commands to the robot to keep ownership of a lease. It has been upgraded to support more complete lease management by acquiring the lease if it is not owned when created and an option to return it when it exits. To preserve backwards compatibility, the initial acquisition is allowed to fail, and it does not return it by default. There are two options that control this behavior: must_acquire=True means that any exceptions that are raised during acquisition are not caught and are raised to the code creating the keep-alive, and return_at_exit=True means that the lease will be returned when exiting or shutting down the keep-alive. Both of these options default to False currently.

    Arm joint trajectories now include self-collision avoidance to prevent hitting the body or payload with the arm.

    The DockProperties of the docks from the World Object Service have an additional from_prior field that can indicate when that particular object comes from prior map knowledge and was not directly detected. Docking Feedback includes a new failure case STATUS_ERROR_UNREFINED_PRIOR, for situations in which the dock prior could not be confirmed as a real dock.

    Certain commands may be unavailable when the robot is docked (such as rolling over to change the battery). In those cases, the command response will fail with the new STATUS_DOCKED.

    Many gRPC services on the robot have now enabled support gRPC compression, which will be used if the client gRPC library supports it.

    The bosdyn.client metrics command will print the metrics correctly again.

    -
    -

    Graph Nav

    +
    +

    Graph Nav

    When localizing to a graph nav map, the SetLocalization, UploadGraph, and UploadWaypointSnapshot RPCs can fail with the new STATUS_INCOMPATIBLE_SENSORS if the map was recorded using a different sensor setup than the robot currently has onboard. For example, if the map was recorded with a lidar scanner, and the robot does not currently have one equipped. For UploadWaypointSnapshot, the new status enum will not be known to clients using older versions of the SDK and thus they will not recognize it as an error. The new SensorCompatibilityStatus in the responses will report whether the map and/or robot have lidar data for these error cases.

    Clearing the map when in the middle of recording would break the recording process. Requesting to clear the map in this case will now return STATUS_RECORDING. Clients using older versions of the SDK will not know about this new status field and will not treat it as an error case.

    @@ -1524,8 +1747,8 @@

    Spot CheckSTATE_GRIPPER_CAL and STATE_SIT_DOWN_AFTER_RUN. It also has two extra error types it can detect and report: ERROR_GRIPPER_CAL_TIMEOUT as a top-level error and ERROR_INVALID_RANGE_OF_MOTION for joints.

    -
    -

    Deprecations

    +
    +

    Deprecations

    Automatic data buffer logging of gRPC messages is deprecated. The gRPC messages will continue to be available for download via HTTP in 3.1, but support will be removed in a future release.

    FollowArmCommand’s disable_walking is deprecated. To reproduce the robot’s behavior of disable_walking == true, issue a StandCommand setting the enable_body_yaw_assist_for_manipulation and enable_hip_height_assist_for_manipulation MobilityParams to true. Any combination of the enable_*_for_manipulation are accepted in stand giving finer control of the robot’s behavior.

    When commanding door opening, the options SWING_DIRECTION_INSWING and SWING_DIRECTION_OUTSWING have been renamed to SWING_DIRECTION_PULL and SWING_DIRECTION_PUSH.

    @@ -1541,8 +1764,8 @@

    Renamed functions and classesfrom_obj() methods on the math helper classes have been renamed to from_proto().

    -
    -

    Breaking Changes

    +
    +

    Breaking Changes

    Behavior change on lease timeout

    Because leases are no longer revoked when the owner fails to check in, there are two changes that must be accounted for:

    @@ -1560,17 +1783,17 @@

    Disallowed Commands -

    Data Acquisition

    +
    +

    Data Acquisition

    The DataAcquisitionStore service is queryable for the IDs of items that have been stored by it. It would previously track everything that had been stored since the last time that the robot had been restarted. As of 3.1, it will track only the last 10,000 items stored.

    -
    -

    Dependencies

    +
    +

    Dependencies

    The bosdyn-client package no longer depends on requests.

    -
    -

    Known Issues

    +
    +

    Known Issues

    When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

    Spot CAM LED illumination levels are not currently recorded or played back in Autowalk missions.

    If you write a custom data acquisition plugin or image service, do not change its DataAcquisitionCapability or ImageSource set once it is running and registered. New capabilities may not be detected, and old capabilities may still be listed as available in the Data Acquisition service. To change the capabilities of a service: unregister it from the directory, wait until its capabilities are no longer listed in the Data Acquisition service, and then re-register it. This waiting also applies to restarting a service if its capabilities will be different upon restart.

    @@ -1581,8 +1804,8 @@

    Known IssuesSE2VelocityLimit message requires the user to fully fill out all the fields, setting unlimited values to a large number, say 1e6.

    -
    -

    Sample Code

    +
    +

    Sample Code

    All examples have been changed to read the username and password from environment variables instead of taking --username and --password arguments.

    Additionally, most examples now use the LeaseKeepAlive for complete lease management by setting the must_acquire and return_at_exit arguments to True at construction. This helps ensure that the lease is properly returned when the example is complete.

    The arm and manipulation examples have been updated to use the new block_until_arm_arrives() helper instead of sleep() calls.

    @@ -1628,56 +1851,56 @@

    Sample Code -

    3.0.3

    -
    -

    Bug fixes and improvements

    +
    +

    3.0.3

    +
    +

    Bug fixes and improvements

    Reduced RPC calls to the Fault service in image_service_helpers.py.

    Example documentation cleanup and improvements.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 3.0.0

    -
    -

    3.0.2

    -
    -

    New Features

    +
    +

    3.0.2

    +
    +

    New Features

    Added GetSystemLog RPC in SpotCAM Health service to retrieve an encrypted log of system events, for factory diagnosis of possible issues.

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    Fixed UploadEdgeSnapshot typo in GraphNav client.

    Fixed usage of SE2Trajectory robot commands in mission service.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 3.0.0

    -
    -

    3.0.1

    -
    -

    New Features

    +
    +

    3.0.1

    +
    +

    New Features

    Added COLORMAP_INFERNO and COLORMAP_TURBO as SpotCAM IR color map options.

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    The new base_tform_sensor fields in SpotCAM protos have the transform in the right direction. The old base_tfrom_sensor fields, now deprecated, had the inverse transform.

    -
    -

    Deprecations

    +
    +

    Deprecations

    Deprecated field base_tfrom_sensor in SpotCAM camera proto and added field base_tform_sensor so it follows the intended naming convention.

    Deprecated field base_tfrom_sensor in SpotCAM logging proto and added field base_tform_sensor so it follows the intended naming convention.

    Deprecated the decode_token() and log_token_time_remaining() functions in bosdyn.client.sdk. The SDK no longer supports decoding tokens. If you need to decode one, use pyjwt directly.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 3.0.0

    -
    -

    Sample Code

    +
    +

    Sample Code

    Arm Constrained Manipulation (updated) Cleanup to clamp normalized velocity and also use normalized velocity for knob.

    GraphNav Command Line (updated) @@ -1686,12 +1909,12 @@

    Sample Code -

    3.0.0

    -
    -

    New Features

    -
    -

    Graph Nav

    +
    +

    3.0.0

    +
    +

    New Features

    +
    +

    Graph Nav

    Map Processing The new map processing service provides two ways to process the data in a graph nav map:

      @@ -1699,15 +1922,15 @@

      Graph NavGraph Nav documentation for more information.

    Auto Return

    Auto Return is a service which can be configured to take control of the robot in the event of a communication loss, and return it back along its recently traveled route to attempt to regain communications with its user. See the Auto Return documentation for more details.

    -
    -

    Choreography

    +
    +

    Choreography

    The Choreography API now provides ‘choreography logging’ which will capture timestamped data about the robot’s pose and joint state for either a user defined time period or for the duration of a dance. See the Choreography Service documentation for more details.

    Users can now create animated moves using timestamped keyframes; these can be built through common animation software (like Autodesk Maya), handwritten, or constructed from choreography log data. The animated moves can be uploaded to the robot and used within dances like the base moves. See the Animations Overview documentation for more details.

    @@ -1723,13 +1946,13 @@

    Pushbar Door OpeningSpotCam

    New SetPtzFocus and GetPtzFocus RPCs allow for control over the focus of the PTZ camera.

    -
    -

    Payloads

    +
    +

    Payloads

    Payload registration now supports mounting payloads to the wrist or gripper of the arm. The new MountFrameName enum contains the valid mounting locations.

    A new UpdatePayloadAttached RPC allows for attaching and detaching payloads while the robot is operating.

    -
    -

    Missions

    +
    +

    Missions

    Missions have a new STATUS_STOPPED state that can be triggered by the new StopMission RPC. This state differs from a paused mission in that it means that the mission is no longer running and cannot be resumed.

    New mission node types:

    -
    -

    Bug fixes and improvements

    -
    -

    Graph Nav

    +
    +

    Bug fixes and improvements

    +
    +

    Graph Nav

    For RPCs that can fail because the robot is impaired, the response message now includes a RobotImpairedState message providing details about the nature of the impairment.

    NavigationFeedbackStatus now includes body_movement_status to make it simple to determine when the body has come to rest after completing navigation.

    Directed exploration and alternate route finding can now be disabled using new fields in TravelParams.

    @@ -1763,8 +1986,8 @@

    Graph NavSTATUS_TOO_FAR_FROM_EXISTING_MAP.

    The RPC for creating a new waypoint can now be provided a list of world objects to include in that waypoint’s snapshot.

    -
    -

    Missions

    +
    +

    Missions

    For very large missions, a new RPC has been added to the mission service to stream the mission to the robot in chunks, rather than as a single message. The chunks should still deserialize to the same LoadMissionRequest message when assembled.

    When a mission node fails to compile, the resulting FailedNode message has a new string that lists the protobuf type of the node implementation.

    @@ -1793,13 +2016,13 @@

    Dockingprotobuf documentation for more details.

    The docking python client include a new docking_command_full() call which returns the full response instead of only the command id. Additionally a new docking_command_feedback_full() returns the full feedback instead of only the status.

    -
    -

    Network Compute Bridge

    +
    +

    Network Compute Bridge

    Models can now have a list of labels associated with them.

    When the image is requested to be rotated, the rotation angle will be returned in the response.

    -
    -

    Data Acquisition

    +
    +

    Data Acquisition

    DataAcquisitionCapabilities can now also report the plugin service name of the service that will be performing that acquisition.

    The DataAcquisitionClient has a new acquire_data_from_request() that takes a full request proto, instead of building it internally.

    The DataService client has been updated to have the correct service name.

    @@ -1827,8 +2050,8 @@

    Other Changesensure_secure_channel() directly will now result in max message sizes not being correctly.

    -
    -

    Breaking Changes

    +
    +

    Breaking Changes

    Invalid RobotCommands will no longer result in STATUS_INVALID_REQUEST in the RobotCommandResponse message, but will instead use the CODE_INVALID_REQUEST error in the common header, like other RPCs do. In the python client library, this will still raise the same InvalidRequestError as before.

    E-stops may not be unregistered from the estop service while the robot’s motors are powered. This prevents accidentally powering the robot off. A new STATUS_MOTORS_ON status will be returned in the response to indicate this error. To unregister an estop, first safely power off the robot.

    RPCs to the AuthService and PayloadRegistration service are now rate-limited to 5 and 10 requests/second respectively. Requesting more than that will result in an HTTP 429 error, or raising the TooManyRequestsError if using the python client.

    @@ -1836,24 +2059,24 @@

    Breaking Changesbosdyn.client.lease.test_active_lease previously took an optional make_sublease argument. That has been replaced with an optional sublease_name argument so that if a sublease is desired, it gets created with a client name correctly.

    The StraightStaircase message has been moved to bosdyn/api/stairs.proto so that it can be used in more places. This is compatible with existing serialized protobufs, but any code that is manually creating these messages will need to be updated.

    -
    -

    Deprecations

    -
    -

    Robot Control

    +
    +

    Deprecations

    +
    +

    Robot Control

    The enable_grated_floor field is superseded by the new grated_surfaces_mode which will auto-detect the need for grated surface handling.

    The safe_power_off() helper has been replaced by the less ambiguous safe_power_off_motors() helper.

    The docking_command_feedback() method of DockingClient incorrectly raised an exception if the docking command had encountered lease errors, and has been replaced by docking_command_feedback_full() which returns the full feedback response.

    -
    -

    Graph Nav

    +
    +

    Graph Nav

    For limiting the speed on an edge, use the vel_limit in mobility_params instead of the Edge annotation’s vel_limit.

    -
    -

    Missions

    +
    +

    Missions

    Docking nodes should not use the child node anymore. If a mission needs to react to docking results, it should use the responses written into the blackboard by the docking node.

    -
    -

    Payloads

    +
    +

    Payloads

    The guid and secret fields on payload registration RPCs have been replaced with a standardized PayloadCredentials message.

    @@ -1862,8 +2085,8 @@

    Writing servicesbosdyn.mission.server_util.set_response_header() has been moved to bosdyn.client.server_util.set_response_header(), so that it can be used by any service, not only those depending on missions.

    -
    -

    Known Issues

    +
    +

    Known Issues

    When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

    Spot CAM LED illumination levels are not currently recorded or played back in Autowalk missions.

    If you write a custom data acquisition plugin or image service, do not change its DataAcquisitionCapability or ImageSource set once it is running and registered. New capabilities may not be detected, and old capabilities may still be listed as available in the Data Acquisition service. To change the capabilities of a service: unregister it from the directory, wait until its capabilities are no longer listed in the Data Acquisition service, and then re-register it. This waiting also applies to restarting a service if its capabilities will be different upon restart.

    @@ -1874,8 +2097,8 @@

    Known IssuesSE2VelocityLimit message requires the user to fully fill out all the fields, setting unlimited values to a large number, say 1e6.

    -
    -

    Sample Code

    +
    +

    Sample Code

    Animation Recorder (new) Demonstrates recording motion made with the tablet and then playing it back with the choreographer service.

    Arm Constrained Manipulation (new) @@ -1924,10 +2147,10 @@

    Sample Code -

    2.3.5

    -
    -

    New Features

    +
    +

    2.3.5

    +
    +

    New Features

    Spot CAM

    Added InitializeLens RPC, which resets the PTZ autofocus without needing to power cycle the Spot CAM.

    @@ -1938,61 +2161,61 @@

    Data Bufferwrite_sync argument to the add_blob() and add_protobuf() methods of the DataBufferClient.

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    When running with a Spot CAM+ (PTZ) running 2.3.5, the SetPowerStatus and CyclePower endpoints will now return an error if the PTZ is specified. These endpoints could previously cause the WebRTC feed to crash. These RPCs are still safe to use for other devices, but due to hardware limitations, resetting the PTZ power can possibly cause the Spot CAM to require a reboot to regain the WebRTC stream.

    RetryableUnavailableError was raised in more cases than it should have been, and it is now more selectively raised.

    The EstopKeepAlive expected users to monitor its status by popping entries out of its status_queue. If the user did not do so, the queue would continue to grow without bound. The queue size is now bounded and old unchecked entries will be thrown away. The queue size is specified with the max_status_queue_size argument to the constructor.

    -
    -

    Breaking Changes

    +
    +

    Breaking Changes

    As stated above, the behavior of SetPowerStatus and CyclePower endpoints have been changed for Spot CAM+ units when attempting to change the power status of the PTZ. They now return an error instead of modifying the power status of the PTZ. They remain functional for the Spot CAM+IR. Clients using these SDK endpoints to reset the autofocus on the PTZ are recommended to use InitializeLens instead. Other clients are encouraged to seek alternative options.

    -
    -

    Deprecations

    +
    +

    Deprecations

    The ResponseContext helper class has been moved to the bosdyn-client package (from the bosdyn-mission package), so that it can be used for gRPC logging in data acquisition plugin services in addition to the mission service. The new import location will be from bosdyn.client.server_util, and the original import location of bosdyn.mission.server_util has been deprecated.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 2.3.0

    -
    -

    2.3.4

    -
    -

    New Features

    +
    +

    2.3.4

    +
    +

    New Features

    Power Control

    New options have been added to the Power Service to allow for power cycling the robot and powering the payload ports or wifi radios on or off. Additional fields have been added to the robot state message to check the payload and wifi power states. Support has also been added to the bosdyn.client command line interface for these commands.

    These new options will only work on some Enterprise Spot robots. Check the HardwareConfiguration message reported by a particular robot to see if it supports them.

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    Fixed an issue that could cause payload registration or directory registration keep-alive threads to exit early in certain cases.

    Fixed a couple issues with the webcam example: updated the Dockerfile to create a smaller container specifically with python 3.7, added new optional argument to specify the video codec, and programmatically prevent substring arguments other than the --device-name argument to avoid accidental confusion with the docker container’s --device argument.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 2.3.0

    -
    -

    Sample Code

    +
    +

    Sample Code

    A new tutorial has been added to walk through using machine learning, the Network Compute Bridge, and Manipulation API to play fetch with Spot.

    -
    -

    2.3.3

    -
    -

    New Features

    -
    -

    Graph Nav

    +
    +

    2.3.3

    +
    +

    New Features

    +
    +

    Graph Nav

    The python Graph Nav client now allows setting an offset to the destination, for navigating to a position relative to the final waypoint instead of exactly matching the final waypoint position and orientation.

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    Fixed issues where the data acquisition download helpers did not handle absolute paths on windows and did not clean filenames correctly. (Thanks David from Levatas!)

    Zip file names from the data download service no longer contain difficult characters.

    Fixed an issue where Graph Nav would sometimes report the robot was impaired on the first usage after restarting the robot.

    @@ -2000,26 +2223,26 @@

    Bug fixes and improvements -

    Breaking Changes

    +
    +

    Breaking Changes

    The estop service will now refuse to change configuration if the robot is already powered on, returning a status of STATUS_MOTORS_ON. This prevents accidentally cutting power while the robot is in operation.

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 2.3.0

    -
    -

    Sample Code

    +
    +

    Sample Code

    Network Compute Bridge Updated to provide appropriate error messages from the workers.

    -
    -

    2.3.2

    -
    -

    New Features

    -
    -

    SpotCAM

    +
    +

    2.3.2

    +
    +

    New Features

    +
    +

    SpotCAM

    The SpotCAM API has been expanded to support more use cases for the SpotCAM+IR (thermal PTZ variant). This includes the following new endpoints:

    -
    -

    Known Issues

    +
    +

    Known Issues

    Same as 2.3.0

    -
    -

    Sample Code

    +
    +

    Sample Code

    Get image (updated) Support for the new pixel format of IR images.

    Ricoh Theta (updated) @@ -2044,12 +2267,12 @@

    Sample Code -

    2.3.0

    -
    -

    New Features

    -
    -

    Arm and Gripper Control

    +
    +

    2.3.0

    +
    +

    New Features

    +
    +

    Arm and Gripper Control

    One of the main features of the 2.3 release is control and support of Spot’s arm and gripper. Arm and gripper commands are included in the SynchronizedCommand message, and can be commanded in addition to mobility commands. The RobotCommandBuilder in the SDK provides many new helpers for building new arm and gripper commands. The synchro command builder functions now have an optional build_on_command argument, which is used to build a mobility/arm/gripper command onto an existing command, merging them correctly. The arm and gripper state are reported in the new manipulator_state field of the robot state. The Python SDK Robot class now has a has_arm() helper to determine if the robot has an arm or not. For more information about controlling the arm, see the arm documentation.

    @@ -2060,8 +2283,8 @@

    Arm and Gripper Control -

    Network Compute Bridge

    +
    +

    Network Compute Bridge

    An interface for integrating real-time image processing and machine learning for identifying objects and aiding grasping. For more information, see the network compute bridge documentation.

    @@ -2069,8 +2292,8 @@

    Network Compute Bridge

    A new PayloadEstimationCommand is available to have Spot try to estimate the mass properties of a payload itself. After moving about to perform its estimation, the mass properties will be reported in the command feedback.

    -
    -

    SpotCAM

    +
    +

    SpotCAM

    Some SpotCAMs now include an IR camera. There are additional cameras and screens available for those versions, and a new pixel format PIXEL_FORMAT_GREYSCALE_U16 used to represent those IR images. There are additional RPCs used to set colormaps and overlays of the IR images for live display.

    Logpoint QUEUED status is now broken up further with the queue_status field, which differentiates between when the image has or has not been captured.

    @@ -2078,45 +2301,45 @@

    SpotCAMArm Support in Choreographer

    The new Choreographer executable now includes two new tracks, gripper and arm, and includes new dance moves which control the arm.

    -
    -

    Docking

    +
    +

    Docking

    A new PREP_POSE_UNDOCK command option can be used to undock a docked robot. It will return the new STATUS_ERROR_NOT_DOCKED if the robot was not already docked. When successful the status will be STATUS_AT_PREP_POSE.

    -
    -

    Graph Nav

    -

    When localizing the robot using FIDUICIAL_INIT_SPECIFIC, if the target waypoint does not contain a good measurement of the desired fiducial, nearby waypoints may be used to infer the robot’s location. This behavior can be disabled with the new restrict_fiducial_detections_to_target_waypoint field to only use the waypoint’s own data.

    +
    +

    Graph Nav

    +

    When localizing the robot using FIDUCIAL_INIT_SPECIFIC, if the target waypoint does not contain a good measurement of the desired fiducial, nearby waypoints may be used to infer the robot’s location. This behavior can be disabled with the new restrict_fiducial_detections_to_target_waypoint field to only use the waypoint’s own data.

    A new destination_waypoint_tform_body_goal is provided for the NavigateTo and NavigateRoute RPCs. This allows the user to specify a goal position that is offset from the destination waypoint, rather than exactly on the waypoint.

    A new command_id field can be specified on the NavigateTo and NavigateRoute RPCs. This is used to continue a previous command without needing to re-specify all the data. An important difference between specifying the command_id versus sending a new command is that if the robot has reported itself stuck, continuing a command will result in a STATUS_STUCK error, rather than trying again. A new STATUS_UNRECOGNIZED_COMMAND will be returned if the command_id does not match the currently executing command.

    The map representation now tracks the “source” of waypoints and edges. It is possible to override the cost of an edge used when planning paths and to disable the alternate route finding for a particular edge.

    -
    -

    Leases

    +
    +

    Leases

    Leases now include client names alongside the sequence number for help in debugging. If you are writing a custom client, make sure to append your client name any time that you create a sub-lease.

    ListLeases can optionally request to have the full lease information of the latest lease, rather than only the root lease information that was previously reported.

    -
    -

    Bug Fixes and Improvements

    +
    +

    Bug Fixes and Improvements

    In the seconds following modifications to the robot directory to the robot directories existing clients may experience a one time request failure. This failure is transient and can be resolved by retrying the request. This has been an expected failure case and a new error (RetryableUnavailableError) has been put in to better reflect the failure.

    SE3Pose and Quat math helpers have transform_vec3 members to simplify rotating vectors.

    There is a new get_self_ip() helper in common.py for determining the ip address your client will use to talk to the robot. This is useful for determining the correct registration information for a service, particularly on a machine with multiple network interfaces. This is also available via the python command line program python3 -m bosdyn.client <robot host> self-ip.

    When listing events from the python command line program, you can now filter by event level and by event type.

    -
    -

    Dependencies

    +
    +

    Dependencies

    The python SDK now depends on the Deprecated package, which is used to mark functions and classes that are deprecated and provide warnings, so that users are made aware that features that they are using may be removed in the future.

    -
    -

    Deprecations

    +
    +

    Deprecations

    The Deprecated package has been implemented across the SDK so that deprecated features will print out a warning when they are called. Documentation surrounding deprecated features has also been updated.

    -
    -

    Breaking Changes

    +
    +

    Breaking Changes

    Spot Check no longer computes the foot_height_results or leg_pair_results fields.

    All RPCs in the Python SDK have a default timeout of 30s. The global timeout can be changed by assigning a new value to bosdyn.client.common.DEFAULT_RPC_TIMEOUT, and individual RPC calls can still set their own timeout via a timeout=sec optional parameter at any call site.

    -
    -

    Known Issues

    +
    +

    Known Issues

    When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

    Spot CAM LED illumination levels are not currently recorded or played back in Autowalk missions.

    When capturing both a PTZ and Panoramic image in the same action, there may occasionally be two PTZ images captured along with the Panoramic image, rather than just one.

    @@ -2128,8 +2351,8 @@

    Known IssuesSE2VelocityLimit message requires the user to fully fill out all the fields, setting unlimited values to a large number, say 1e6.

    -
    -

    Sample Code

    +
    +

    Sample Code

    Arm and Mobility Command (new) Demonstrates how to issue both mobility and arm commands to the robot at the same time.

    Arm Door (new) @@ -2185,10 +2408,10 @@

    Sample Code -

    2.2.0

    -
    -

    New Features

    +
    +

    2.2.0

    +
    +

    New Features

    Docking (license dependent)

    Automated docking at charging stations is out of beta and available for enterprise customers. There have been a few updates to the protos regarding status reporting and handling “prep” poses.

    @@ -2208,8 +2431,8 @@

    Service and plugin developmentSE2TrajectoryCommand Feedback

    Added new status STATUS_NEAR_GOAL as well as a new BodyMovementStatus to help differentiate between different kinds of states the robot can be in at the end of its trajectory.

    -
    -

    Missions

    +
    +

    Missions

    The BosdynGraphNavLocalize node can now specify a full SetLocalizationRequest, rather than only localizing to the nearest fiducial.

    When comparing blackboard values, there is a new HandleStaleness option to specify what the node should do if the blackboard value is stale.

    @@ -2222,8 +2445,8 @@

    Other Helper Functions**

    -
    -

    Bug fixes and improvements

    +
    +

    Bug fixes and improvements

    Data Acquisition Data Acquisition Service on robots is now robust to port number changes. The previous workaround to this problem was to always specify the same port when starting/restarting a service. Now, the port argument for external api services can use the default, which will choose an available ephemeral port.

    Image Services @@ -2239,16 +2462,16 @@

    Bug fixes and improvements -

    Deprecations

    +
    +

    Deprecations

    BDDF code has moved to the bosdyn-core package, so that it can be used separately from the client code. The new import location is bosdyn.bddf. The old import path via bosdyn.client.bddf is deprecated.

    Dependency Changes

    bosdyn-client now depends on the requests library for making http requests to download data acquisition results and bddf logs.

    -
    -

    Known issues

    +
    +

    Known issues

    When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

    Spot CAM LED illumination levels are not currently recorded or played back in Autowalk missions.

    When capturing both a PTZ and Panoramic image in the same action, there may occasionally be two PTZ images captured along with the Panoramic image, rather than just one.

    @@ -2260,8 +2483,8 @@

    Known issuesSE2VelocityLimit message requires the user to fully fill out all the fields, setting unlimited values to a large number, say 1e6.

    -
    -

    Sample Code

    +
    +

    Sample Code

    Image service test program (new) A new tester program for image services is available to help with the development and debugging of new image service implementations.

    Docking (new) @@ -2276,10 +2499,10 @@

    Sample Codetester_programs directory.

    -
    -

    2.1.0

    -
    -

    New Features

    +
    +

    2.1.0

    +
    +

    New Features

    Spot I/O: Data Acquisition

    This release features a new system for acquiring, storing, and retrieving sensor data. It consists of several new services and their associated clients.

    @@ -2324,19 +2547,19 @@

    Data Logging

    Point cloud service definitions are provided for retrieving point cloud data from LiDAR sensors, such as from the EAP payload.

    -
    -

    Spot CAM

    +
    +

    Spot CAM

    Congestion control is now available for WebRTC streaming. External microphones supported, with control for selecting microphones and setting gain levels individually. Note: External microphone support only available on Spot CAM + IR.

    -
    -

    Graph Nav

    +
    +

    Graph Nav

    The localization data now includes a transform to a “seed” frame, providing a consistent global frame for use across multiple runs on the same map.

    Localization data can be requested relative to a particular waypoint, rather than only the waypoint that the robot is currently localized to.

    Additional control for determining whether the robot will navigate through areas with poor quality features.

    -
    -

    Missions

    +
    +

    Missions

    Additional mission nodes which support new functionality:

    • Point the Spot CAM PTZ to a specified orientation.

    • @@ -2354,8 +2577,8 @@

      Docking (Beta, License-dependent) -

      Bug Fixes and Improvements

      +
      +

      Bug Fixes and Improvements

      Graph Nav

      -
      -

      Breaking changes

      +
      +

      Breaking changes

      Robot Control

      A behavior fault (CAUSE_LEASE_TIMEOUT) is raised when the usage of a lease times out, and must be cleared before the robot can be commanded again. This should have minimal effect on current clients, as this happens near the same time that the robot powers off from comms loss (which clears behavior faults).

      Graph Nav

      @@ -2414,8 +2637,8 @@

      Breaking changesTick() on a mission callback service, it expects a quick response. In 2.0 it would wait up to 60 seconds for a response before retrying. This has been reduced to 10 seconds in version 2.1. Callbacks that do any significant work should be written to return with STATUS_RUNNING quickly, and then continue to do their work on another thread rather than trying to fit in all of their work before returning a response. The service can then base their response to subsequent Tick() requests on the status of that thread.

      -
      -

      Known Issues

      +
      +

      Known Issues

      When a network transport failure occurs, depending on the particular operating system and version of gRPC installed, the error from the python SDK may not always be the most specific error possible, such as UnknownDnsNameError. It may instead be raised as either a generic RpcError, or another generic failure type such as UnableToConnectToRobotError.

      Spot CAM LED illumination levels are not currently recorded or played back in Autowalk missions.

      When capturing both a PTZ and Panoramic image in the same action, there may occasionally be two PTZ images captured along with the Panoramic image, rather than just one.

      @@ -2429,8 +2652,8 @@

      Known IssuesSE2VelocityLimit message requires the user to fully fill out all the fields, setting unlimited values to a large number, say 1e6.

      -
      -

      Deprecations

      +
      +

      Deprecations

      The following services, fields, and functions will continue to work, but will be removed in a future version.

      Services

      @@ -2452,10 +2675,10 @@

      Client changesRobotCommand.

      -
      -

      Sample Code

      -
      -

      New

      +
      +

      Sample Code

      +
      +

      New

      Data acquisition (new)

      -
      -

      Updated

      +
      +

      Updated

      Fiducial follow (updated)

      • Uses the new SynchronizedCommand for robot commands.

      • @@ -2576,13 +2799,13 @@

        Removed -

        2.0.2

        -
        -

        New Features

        +
        +

        2.0.2

        +
        +

        New Features

        -
        -

        Bug Fixes and Improvements

        +
        +

        Bug Fixes and Improvements

        Power Command Exceptions

          @@ -2590,8 +2813,8 @@

          Power Command Exceptions -

          Known Issues

          +
          +

          Known Issues

          Release 2.0.2 contains the same issues as release 2.0.1, listed below.

          If you delete an object from the world object service, there is a chance that a ListWorldObjects call immediately afterward may still include that object.

            @@ -2611,10 +2834,10 @@

            Known Issues -

            2.0.1

            -
            -

            New Features

            +
            +

            2.0.1

            +
            +

            New Features

            License Changes

            App tokens are no longer required to authorize applications. Instead, each robot itself will be licensed itself. From a programming perspective, this means that it is no longer necessary to load app tokens into the sdk object, or to fill them out in GetAuthTokenRequest.

            @@ -2622,8 +2845,8 @@

            License Changes -

            Bug Fixes and Improvements

            +
            +

            Bug Fixes and Improvements

            Behavior Faults

              @@ -2638,8 +2861,8 @@

              Map Recording -

              Spot CAM

              +
              +

              Spot CAM

              • Added an option to the Spot CAM MediaLogService to retrieve the raw (unstitched) images for a log point.

              @@ -2658,8 +2881,8 @@

              Additional Fixes -

              Known Issues

              +
              +

              Known Issues

              Release 2.0.1 contains the same issues as release 2.0.0, listed below.

              If you delete an object from the world object service, there is a chance that a ListWorldObjects call immediately afterward may still include that object.

                @@ -2678,8 +2901,8 @@

                Known Issues -

                Sample Code

                +
                +

                Sample Code

                Ricoh Theta (new)

                • Example that utilizes the 360-degree Ricoh Theta camera during an Autowalk mission.

                • @@ -2712,10 +2935,10 @@

                  Sample Code -

                  2.0.0

                  -
                  -

                  New Features

                  +
                  +

                  2.0.0

                  +
                  +

                  New Features

                  Autonomous Navigation APIs

                  The APIs used by Autowalk are now accessible to developers.

                  @@ -2758,8 +2981,8 @@

                  Environmental APIs -

                  Bug Fixes and Improvements

                  +
                  +

                  Bug Fixes and Improvements

                  Expanded and improved documentation

                    @@ -2805,8 +3028,8 @@

                    bosdyn.client command line tool improvements -

                    Breaking changes

                    +
                    +

                    Breaking changes

                    Version 2.0 contains several breaking changes. While some clients and programs written for the version 1.* SDK may still work, expect some updates to be necessary for most programs.

                    Frame handling

                    @@ -2886,8 +3109,8 @@

                    Moved or Renamed -

                    Removed

                    +
                    +

                    Removed

                    • All Frame messages have been replaced by frame strings where applicable.

                    • AddLogAnnotationResponse does not have a status field anymore, errors are encoded in the message header information

                    • @@ -2903,8 +3126,8 @@

                      Miscellaneous -

                      Known issues

                      +
                      +

                      Known issues

                      If you delete an object from the world object service, there is a chance that a ListWorldObjects call immediately afterward may still include that object.

                      • Workaround: wait a short time before expecting the object to be gone.

                      • @@ -2922,8 +3145,8 @@

                        Known issues -

                        Sample Code

                        +
                        +

                        Sample Code

                        directory

                        • Register, update, and unregister a service.

                        • @@ -3005,38 +3228,38 @@

                          Sample Code -

                          1.1.2

                          -
                          -

                          New features

                          +
                          +

                          1.1.2

                          +
                          +

                          New features

                          • Missions API Beta and Callbacks When an Autowalk Mission is created with a “Callback” event, a client can detect that change using a beta version of the Mission API, then tell the robot to continue or abort the Mission. Example uses include a sensor payload that detects Callback events and captures sensor information before advancing the mission, and a desktop UI which waits for the user to push a button before advancing the mission.

                          • External Forces Beta. Mobility commands can specify how to handle external forces. Examples of external forces could include an object that Spot is towing, or an object Spot is pushing. The default behavior is to do nothing, but clients can specify whether Spot should estimate external forces and compensate for it, or explicitly specify what the external forces are.

                          -
                          -

                          Bug fixes and improvements

                          +
                          +

                          Bug fixes and improvements

                          • Depth image extrinsics are fixed. In earlier 1.1.x releases, the extrinsics were incorrectly the same as the fisheye cameras.

                          • App Token expiration logging. The Python SDK object logs if the app token will expire in the next 30 days.

                          -
                          -

                          Sample Code

                          +
                          +

                          Sample Code

                          • mission_question_answerer demonstrates how to build a client which responds to Mission Callbacks.

                          -
                          -

                          1.1.1

                          +
                          +

                          1.1.1

                          1.1.1 has no SDK-related changes.

                          -
                          -

                          1.1.0

                          +
                          +

                          1.1.0

                          The 1.1.0 SDK software is published under a new software license which can be found in the LICENSE file at the top of the SDK directory.

                          -
                          -

                          New features

                          +
                          +

                          New features

                          @@ -10878,6 +10990,72 @@

                          StoreMetadataResponse +

                          +

                          +
                          +

                          StoreStreamRequest

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          headerRequestHeaderCommon request header.
                          data_idDataIdentifierData identifier of the data.
                          file_extensionstringFile extension to use when writing the data to file.
                          chunkDataChunkThe piece of the data to store.

                          +
                          +
                          +

                          StoreStreamResponse

                          + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          headerResponseHeaderCommon response header.
                          iduint64

                          @@ -10905,6 +11083,39 @@

                          StoredCapturedData

                          +

                          +
                          +

                          StoredLargeCapturedData

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          chunkDataChunkData related to capture.
                          offsetuint64Start index of resulting bytes.
                          file_extensionstringFile extension to use for writing the data to a file.

                          @@ -10975,6 +11186,12 @@

                          DataAcquisitionStoreServiceStoreStreamRequest stream +StoreStreamResponse +Store arbitrary data associated with a DataIdentifier through a stream. Supports files > 100
                          MB and below the Data Acquisition Store capacity. + + ListStoredImages ListStoredImagesRequest ListStoredImagesResponse @@ -13461,7 +13678,7 @@

                          ListServiceEntriesRequest

                          ListServiceEntriesResponse

                          The ListServiceEntries response message returns all known services at the time the request -was recieved.

                          +was received.

                          @@ -13588,8 +13805,8 @@

                          bosdyn/api/directory_registration.proto

                          RegisterServiceRequest

                          -

                          The RegisterService request message sends the service’s entry and endpoint to the robot’s directory. -This Request serves as a heartbeat to the Directory.

                          +

                          The RegisterService request message sends the service’s entry and endpoint to the robot’s +directory. This Request serves as a heartbeat to the Directory.

                          @@ -13623,7 +13840,8 @@

                          RegisterServiceRequest

                          RegisterServiceResponse

                          -

                          The RegisterService response message has information of whether the service was registered correctly.

                          +

                          The RegisterService response message has information of whether the service was registered +correctly.

                          @@ -13707,8 +13925,8 @@

                          UnregisterServiceResponse

                          UpdateServiceRequest

                          -

                          The UpdateService request message will update a service based on name to include the new endpoint and service entry. -This Request serves as a heartbeat to the Directory.

                          +

                          The UpdateService request message will update a service based on name to include the new endpoint +and service entry. This Request serves as a heartbeat to the Directory.

                          @@ -13782,7 +14000,7 @@

                          RegisterServiceResponse.Status

                          DockingCommandFeedbackResponse

                          -

                          Response to a DockingCommandFeedbackRequest for a particualar docking command ID

                          +

                          Response to a DockingCommandFeedbackRequest for a particular docking command ID

                          @@ -14434,7 +14652,7 @@

                          DockingCommandFeedbackResponse.StatusResponseHeader

                          - + @@ -15388,7 +15606,8 @@

                          EstopService

                          @@ -15822,11 +16041,45 @@

                          CircleDimensions in m from center_pt. +

                          Common resonse header.Common response header.
                          request

                          +

                          +
                          +

                          CircleWithFrame

                          +

                          Geometric primitive to describe a 2D circle in a specific frame.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          circleCircleThe circle is specified with a radius and center point in x-y coordinates.
                          frame_namestringThe pose of the circle is in 'frame_name'.
                          frame_name_tform_circleSE3PoseThe transformation of the circle into the desired frame
                          (specified above).

                          CylindricalCoordinate

                          -

                          Cylindrical coordinates are a generalization of polar coordiates, adding a +

                          Cylindrical coordinates are a generalization of polar coordinates, adding a height axis. See (http://mathworld.wolfram.com/CylindricalCoordinates.html) for more details.

                          @@ -15856,7 +16109,7 @@

                          CylindricalCoordinatez double -Vertical coordiante +Vertical coordinate

                          @@ -15895,8 +16148,8 @@

                          FrameTreeSnapshot

                          +

                          +
                          +

                          OrientedBox2

                          +

                          Two-dimensional box with an angle

                          + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          boxBox2
                          anglefloat

                          @@ -17347,7 +17628,7 @@

                          GpsStatebosdyn.api.Vec3 -Estimate of where the robot's body is in the ECEF frame given this measurement. Note this must be a position
                          and not a pose because of the lack of orientation data. +Estimate of where the robot's body is in the ECEF frame given this measurement. Note this
                          must be a position and not a pose because of the lack of orientation data. historical_data @@ -17522,7 +17803,7 @@

                          bosdyn/api/gps/registration_service.proto

                          RegistrationService

                          The RegistrationService consumes data sent to the Gps/AggregatorService. -It calculates where the robot is in the world, and the transfroms from +It calculates where the robot is in the world, and the transforms from the robots internal frames to the world frame.

                          @@ -17749,7 +18030,7 @@

                          BeginCallbackRequestrecorded_data

                          - + @@ -17757,6 +18038,12 @@

                          BeginCallbackRequest

                          + + + + + +
                          AreaCallbackData Configuration data associated with this area callback regionDeprecated. Deprecated in 4.1, the relevant data is set in custom_params and config_data instead.
                          Configuration data associated with this area callback region
                          custom_paramsAny other custom parameters to the callback.
                          config_datagoogle.protobuf.AnyCustom config data used by the service to do its job.

                          @@ -17950,6 +18237,12 @@

                          RegionInformationbool + +Flag that indicates that the robot is already inside the callback region at the beginning of
                          the callback, rather than starting from the edge of the region as usual. This can happen in
                          some cases when the robot gets stuck inside the region, and restarts with a new navigation
                          command. +

                          @@ -18750,6 +19043,12 @@

                          AreaCallbackDatabosdyn.api.DictParam +Deprecated. Deprecated in 4.1, use param_collection instead so that the
                          parameter specs are available for building editors.
                          Any other custom parameters to the callback. This will be copied into
                          custom_params inside the BeginCallback RPC if it exists. + + +parameters +bosdyn.api.CustomParamCollection + Any other custom parameters to the callback. This will be copied into
                          custom_params inside the BeginCallback RPC if it exists. @@ -18854,7 +19153,7 @@

                          GPSLocalizationbosdyn.api.SE3Pose -Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the time
                          of localization. +Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the
                          time of localization. latitude_longitude_height @@ -18940,7 +19239,7 @@

                          bosdyn/api/graph_nav/graph_nav.proto

                          AreaCallbackServiceError

                          -

                          Information about problems Area Callback services specifified in a map or on a route.

                          +

                          Information about problems Area Callback services specified in a map or on a route.

                          @@ -19153,6 +19452,34 @@

                          DownloadGraphResponseThe structure of the graph.

                          +

                          +
                          +
                          +

                          DownloadGraphStreamingResponse

                          +

                          Streaming version of the DownloadGraphResponse.

                          + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          headerbosdyn.api.ResponseHeaderCommon response header.
                          chunkbosdyn.api.DataChunkChunk of data to download. Responses are sent in sequence until the
                          data chunk is complete. After receiving all chunks, concatenate them
                          into a single byte string. Then, deserialize the byte string into a
                          DownloadGraphResponse object.

                          @@ -19269,13 +19596,13 @@

                          GPSNavigationParamsgoogle.protobuf.DoubleValue -Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve at the goal. This is a bearing
                          around the "up" axis such that East points to zero yaw, and West is pi radians yaw. If not provided, the robot will try to
                          achieve any allowable orientation at the goal. +Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve
                          at the goal. This is a bearing around the "up" axis such that East points to zero yaw, and
                          West is pi radians yaw. If not provided, the robot will try to achieve any allowable
                          orientation at the goal. max_distance_from_map google.protobuf.DoubleValue -The maximum distance we are willing to accept for the LLH coordinate from the mapped data in meters. This
                          is a 2 dimensional measurement (height is not considered). If not filled out, Spot will decide based on
                          internal defaults. +The maximum distance we are willing to accept for the LLH coordinate from the mapped data in
                          meters. This is a 2 dimensional measurement (height is not considered). If not filled out,
                          Spot will decide based on internal defaults.

                          @@ -19329,7 +19656,7 @@

                          GetLocalizationStateRequestbool -If true, reqeuest the live world objects at the time of localization. +If true, request the live world objects at the time of localization. request_live_robot_state @@ -19354,8 +19681,8 @@

                          GetLocalizationStateRequest

                          GetLocalizationStateResponse

                          -

                          The GetLocalizationState response message returns the current localization and robot state, as well -as any requested live data information.

                          +

                          The GetLocalizationState response message returns the current localization and robot state, as +well as any requested live data information.

                          @@ -19376,7 +19703,7 @@

                          GetLocalizationStateResponseLocalization

                          - + @@ -19406,7 +19733,7 @@

                          GetLocalizationStateResponseGPSLocalization

                          - +
                          Where the robot currently is. If a waypoint_id was specified in the request, this localization
                          will be relative to that waypoint.
                          Where the robot currently is. If a waypoint_id was specified in the request, this
                          localization will be relative to that waypoint.
                          robot_kinematicsIf the robot has GPS capability and the map was recorded with GPS, this message will show graph nav's estimate of
                          the robot location in earth-centered frames. To see the raw GPS data, look at the WorldObject list.
                          If the robot has GPS capability and the map was recorded with GPS, this message will show
                          graph nav's estimate of the robot location in earth-centered frames. To see the raw GPS data,
                          look at the WorldObject list.

                          @@ -19433,7 +19760,101 @@

                          LostDetectorStatebool -Whether or not the robot is currently lost. If this is true, graph nav will reject
                          NavigateTo or NavigateRoute RPC's. +Whether or not the robot is currently lost. If this is true, graph nav will reject
                          NavigateTo or NavigateRoute RPCs. + + +total_num_accepted_localizations +int32 + +The lost detector either accepts or rejects localizations based on a scoring criteria.
                          This is the total number of localizations that have been accepted since the last
                          SetLocalization RPC. + + +total_num_rejected_localizations +int32 + +This is the total number of localizations that have been rejected since the last
                          SetLocalization RPC. + + +num_rejected_localizations_since_accepted +int32 + +This is the total number of localizations that have been rejected by the lost detector since
                          either a localization was accepted, or a SetLocalization RPC. + + +distance_traveled_with_rejected_localization +float + +This is the number of meters (3d translation of the robot body) the lost detector believes
                          the robot to have traveled since it had a rejected localization. + + +last_accepted_localization +Localization + +This is the most recent localization the lost detector accepted. + + +last_rejected_localization +Localization + +This is the most recent localization that the lost detector rejected. + + +num_consecutive_bad_edges +int32 + +The number of edges the LostDetector believes the robot has crossed without first getting an
                          accepted localization. + + +params +LostDetectorState.Params + +Parameters the lost detector is using. + + +

                          +

                          +
                          +

                          LostDetectorState.Params

                          +

                          Parameters for the lost detector which control when it determines that we are lost. +In general, when we start seeing “bad” localizations, (based on sensor data and map data +agreement) we start counting the amount of time and distance the robot has traveled before we +see a “good” localization. If this distance exceeds a threshold, we then start counting the +number of edges that the robot has crossed with a “bad” localization. Once a number of edges +crosses a threshold, we then declare the robot lost. Note that these thresholds are +hierarchical; so we first start counting time, then distance, then number of edges.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          max_time_with_bad_localizationdoubleMaximum time (seconds) that the robot can walk with a bad localization before we start
                          counting distance/edges with bad localization.
                          max_distance_with_bad_localizationdoubleThe maximum distance the robot can walk (m) with a bad localization before we start
                          counting the number of edges with bad localization.
                          max_num_edges_with_bad_localizationint32The maximum number of edges the robot can walk with a bad localization before we declare
                          the robot to be lost.
                          strictnessLostDetectorStrictnessDetermines how "strict" the lost detector is about declaring lost. This value is used to
                          set the other thresholds.

                          @@ -19475,8 +19896,9 @@

                          ModifyNavigationResponse

                          A NavigateRoute request message specifies a route of waypoints/edges and parameters about how to get there. Like NavigateTo, this command returns immediately upon -processing and provides a command_id that the user can use along with a NavigationFeedbackRequest RPC to -poll the system for feedback on this command. The RPC does not block until the route is completed.

                          +processing and provides a command_id that the user can use along with a NavigationFeedbackRequest +RPC to poll the system for feedback on this command. The RPC does not block until the route is +completed.

                          @@ -19539,15 +19961,16 @@

                          NavigateRouteRequestcommand_id

                          - +
                          uint32 Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation
                          of an existing command.
                          Unique identifier for the command. If 0, this is a new command, otherwise it is a
                          continuation of an existing command.

                          @@ -20511,7 +20959,7 @@

                          UploadEdgeSnapshotRequestbosdyn.api.DataChunk -Serialized bytes of a EdgeSnapshot message, restricted to a chunk no larger than 4MB in size.
                          To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects.
                          The chunks will be concatenated together on the server, and deserialized +Serialized bytes of a EdgeSnapshot message, restricted to a chunk no larger than 4MB in size.
                          To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as
                          DataChunk objects. The chunks will be concatenated together on the server, and deserialized lease @@ -20599,7 +21047,7 @@

                          UploadGraphRequestbool -If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be returned. This is false by
                          default. +If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be
                          returned. This is false by default.

                          @@ -20690,7 +21138,7 @@

                          UploadGraphResponseUploadGraphResponse.ValidationStatus -If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about why the
                          graph was invalid. Note that some graph validation errors are warnings and the robot will be able to navigate
                          on the graph even when they are present. +If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about
                          why the graph was invalid. Note that some graph validation errors are warnings and the robot
                          will be able to navigate on the graph even when they are present.

                          @@ -20725,55 +21173,55 @@

                          UploadGraphResponse.ValidationStatusEdge.Id repeated -One or more edges had an invalid from_tform_to transform. These are the edge IDs uploaded
                          that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                          This is a warning. Edges with invalid transforms will be fixed on upload. +One or more edges had an invalid from_tform_to transform. These are the edge IDs uploaded
                          that have an invalid transform. Valid transforms have quaternion rotations that are
                          normalized. This is a warning. Edges with invalid transforms will be fixed on upload. waypoint_anchors_invalid_transform string repeated -One or more waypoint anchors in the anchoring have an invalid transform. These are the waypoint IDs
                          that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                          This is a warning. Anchors with invalid transforms will be fixed on upload. +One or more waypoint anchors in the anchoring have an invalid transform. These are the
                          waypoint IDs that have an invalid transform. Valid transforms have quaternion rotations
                          that are normalized. This is a warning. Anchors with invalid transforms will be fixed on
                          upload. object_anchors_invalid_transform string repeated -One or more of the object achors in the anchoring have an invalid transform. These are the object IDs
                          that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                          This is a warning. Anchors with invalid transforms will be fixed on upload. +One or more of the object anchors in the anchoring have an invalid transform. These are
                          the object IDs that have an invalid transform. Valid transforms have quaternion rotations
                          that are normalized. This is a warning. Anchors with invalid transforms will be fixed on
                          upload. duplicate_waypoint_ids string repeated -The Graph in the UploadGraph request contained more than one waypoint with the same ID. These are the
                          waypoint IDs which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list
                          the same number of times they are duplicated in the request.
                          This is an error. Fix the graph and re-upload. +The Graph in the UploadGraph request contained more than one waypoint with the same ID.
                          These are the waypoint IDs which occur in the UploadGraph request more than once. Note
                          that IDs are duplicated in this list the same number of times they are duplicated in the
                          request. This is an error. Fix the graph and re-upload. duplicate_waypoint_anchor_ids string repeated -The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are duplicated in this list
                          the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. +The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are
                          duplicated in this list the same number of times they are duplicated in the request. This
                          is a warning. Only the first anchor will be used. duplicate_object_anchor_ids string repeated -The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs are duplicated in this list
                          the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. +The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs
                          are duplicated in this list the same number of times they are duplicated in the request.
                          This is a warning. Only the first anchor will be used. duplicate_edge_ids Edge.Id repeated -The Graph in the UploadGraph request contained more than one edge with the equivalent ID. These are the edge IDs
                          which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list the same number
                          of times that they are duplicated in the request. Note that edges are not directional, and it is impossible
                          to have both a->b and b->a in the same map. This is an error. Fix the graph and re-upload. +The Graph in the UploadGraph request contained more than one edge with the equivalent ID.
                          These are the edge IDs which occur in the UploadGraph request more than once. Note that
                          IDs are duplicated in this list the same number of times that they are duplicated in the
                          request. Note that edges are not directional, and it is impossible to have both a->b
                          and b->a in the same map. This is an error. Fix the graph and re-upload. invalid_waypoint_ids_self_edges string repeated -Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint IDs which have self
                          edges in the UploadGraph request. This is an error. Fix the graph and re-upload. +Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint
                          IDs which have self edges in the UploadGraph request. This is an error. Fix the graph and
                          re-upload. has_empty_waypoint_ids bool -At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and re-upload. +At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and
                          re-upload. has_empty_edge_ids @@ -20785,19 +21233,47 @@

                          UploadGraphResponse.ValidationStatusbool -At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. +At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty
                          anchors will be ignored. has_empty_object_anchor_ids bool -At least one object anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. +At least one object anchor in the anchoring has an empty ID. This is a warning. Empty
                          anchors will be ignored. malformed_staircase_edge_ids Edge.Id repeated -One or more edges had a malformed staircase annotation. This is an error. Remove, rerecord, or fix the annotation. +One or more edges had a malformed staircase annotation. This is an error. Remove,
                          rerecord, or fix the annotation. + + +

                          +

                          +
                          +

                          UploadGraphStreamingRequest

                          +

                          This is a streaming version of the UploadGraph request.

                          + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          headerbosdyn.api.RequestHeaderCommon request header.
                          chunkbosdyn.api.DataChunkSerialized bytes of a UploadGraphRequest message, restricted to a chunk no larger than 4MB in
                          size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in
                          order as DataChunk objects. The chunks will be concatenated together on the server, and
                          deserialized.

                          @@ -20828,7 +21304,7 @@

                          UploadWaypointSnapshotRequestbosdyn.api.DataChunk -Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in size.
                          To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects.
                          The chunks will be concatenated together on the server, and deserialized. +Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in
                          size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in
                          order as DataChunk objects. The chunks will be concatenated together on the server, and
                          deserialized. lease @@ -21124,7 +21600,7 @@

                          NavigateRouteResponse.Status

                          @@ -21219,12 +21695,12 @@

                          NavigateToAnchorResponse.GPSStatus

                          @@ -21298,7 +21774,7 @@

                          NavigateToAnchorResponse.Status

                          @@ -21402,7 +21878,7 @@

                          NavigateToResponse.Status

                          @@ -21463,8 +21939,9 @@

                          NavigationFeedbackResponse.ActiveRegionInformation.AreaCallbackStatus
                          @@ -21983,7 +22500,7 @@

                          UploadGraphResponse.Status

                          GraphNavService

                          -

                          The GraphNav service service is a place-based localization and locomotion service. The service can -be used to get/set the localization, upload and download the current graph nav maps, and send navigation -requests to move around the map.

                          +

                          The GraphNav service service is a place-based localization and locomotion service. The service +can be used to get/set the localization, upload and download the current graph nav maps, and send +navigation requests to move around the map.

                          @@ -22124,10 +22641,22 @@

                          GraphNavServiceDownloadGraphRequest +

                          + + + - + + + + + + + @@ -22145,7 +22674,7 @@

                          GraphNavServiceDownloadWaypointSnapshotRequest

                          - + @@ -22157,10 +22686,54 @@

                          GraphNavServiceValidateGraphRequest

                          - + + + +
                          DownloadGraphStreamingResponse streamThis is a streaming version of the DownloadGraph RPC.
                          UploadGraph UploadGraphRequest UploadGraphResponseUpload the full list of waypoint IDs, graph topology and other small info.Upload the full list of waypoint IDs, graph topology and other small info.
                          Note: if multiple clients/RPCs are attempting to upload a graph at the same time, uploads
                          will be performed synchronously in the order in which they are received, and the later
                          UploadGraph request will block until the earlier completes.
                          UploadGraphStreamingUploadGraphStreamingRequest streamUploadGraphResponseThis is a streaming version of UploadGraph to allow uploading larger graphs.
                          Note: as with UploadWaypointSnapshot, this streaming process involves serializing a full
                          UploadGraph message from chunks. After all the chunks have been uploaded, a regular
                          UploadGraph RPC will be performed internally, so UploadGraphStreaming has the same semantics
                          as UploadGraph when it completes. That is, UploadGraphStreaming is not to be used for
                          incrementally uploading graph data as the robot is navigating -- this is merely a streaming
                          wrapper around UploadGraph.
                          UploadWaypointSnapshotDownloadWaypointSnapshotResponse streamDownload waypoint data from the server. If the snapshot exists in disk cache, it will be loaded.Download waypoint data from the server. If the snapshot exists in disk cache, it will be
                          loaded.
                          DownloadEdgeSnapshotValidateGraphResponseVerify that the graph is still valid and all required external services are still available.
                          A map that was valid at upload time may not still be valid if required services are no longer running.
                          Verify that the graph is still valid and all required external services are still available.
                          A map that was valid at upload time may not still be valid if required services are no longer
                          running.

                          +

                          Top

                          +

                          +
                          +

                          bosdyn/api/graph_nav/lost_detection.proto

                          +

                          +
                          +

                          LostDetectorStrictness

                          +

                          Determines how “strict” the lost detector is about declaring lost.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
                          NameNumberDescription
                          LOST_DETECTOR_STRICTNESS_UNKNOWN0Unset (defaults to STRICTNESS_DEFAULT).
                          LOST_DETECTOR_STRICTNESS_DISABLED1Never declares lost.
                          LOST_DETECTOR_STRICTNESS_PERMISSIVE2Declares lost less readily than default.
                          LOST_DETECTOR_STRICTNESS_DEFAULT3Default lost detector strictness.
                          LOST_DETECTOR_STRICTNESS_STRICT4Declares lost more readily than default.

                          +

                          Top

                          @@ -22406,7 +22979,7 @@

                          Edge.Annotationsgoogle.protobuf.BoolValue -Deprecated. If true, the edge crosses flat ground and the robot shouldn't try to climb over
                          obstacles.
                          DEPRECATED as of 3.3. Replaced by ground_clutter_mode. +Deprecated. If true, the edge crosses flat ground and the robot shouldn't try to climb over
                          obstacles.
                          DEPRECATED as of 3.3. Replaced by ground_clutter_mode.
                          As of 4.1, no longer functional. override_mobility_params @@ -22445,6 +23018,12 @@

                          Edge.Annotationsdouble + +Max distance from the recorded edge that the robot is allowed to travel when avoiding
                          obstacles or optimized its path. This is half of the full width of the corridor the robot
                          may walk within. If this value is not set, the robot will choose a default corridor
                          width. + + disable_directed_exploration bool @@ -22810,6 +23389,82 @@

                          MapStats.Stat

                          +

                          +
                          +

                          Region

                          +

                          Defines a region in a map. Regions are shapes, commonly they are boxes. Many waypoints may share +the same regions. Regions do not need to cover the waypoint itself. A common use for such regions +is to define certain parts of the point cloud as being unreliable for localization. Note that +this is a different concept than the LocalizeRegion, which is used to determine where the robot’s +body must be relative to the waypoint for it to localize – the RegionWithFrame instead can be +used to label data near the waypoint. Regions and Reference Frames – regions are stored inside +waypoint annotations as “RegionWithFrames”. These consist of a region and a named reference frame +relative to the waypoint (such as “odom” or “seed”, or “waypoint” etc).

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          region_idstringUnique identifier of the region within a map. This will be used to deduplicate
                          regions that many waypoints may reference. Note that the transform of the region is
                          defined with respect to this waypoint's KO frame, so the same region may exist in several
                          waypoints while having different transforms in each case. Regions with the same ID are not
                          guaranteed to be unique. Graph Nav will use whatever regions exist in the current waypoint
                          only, and will ignore all other regions; so if you want Graph Nav to use a region in multiple
                          waypoints, you must duplicate the region into each waypoint in which it is to be used.
                          bounding_boxbosdyn.api.Box3Oriented bounding box defining the region. The axes are defined relative to the "base
                          frame" for this region. See RegionWithFrame for how this frame may be defined.
                          data_filterRegion.DataFilterHow (if at all) the region affects data filtering for scan matching.

                          +
                          +
                          +

                          RegionWithFrame

                          +

                          Defines a region and a transform near a specific waypoint. Regions will only be used if they are +attached to waypoint annotations. Regions may be duplicated over many waypoints.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          regionRegionThe region attached to this waypoint.
                          base_frame_namestringReference frame that the region's transform is defined with respect to. For example,
                          "waypoint" for the waypoint's reference frame, or "odom" for the odometry frame at the time
                          of waypoint recording.
                          base_frame_tform_regionbosdyn.api.SE3PoseTransform of the region in the base frame.

                          @@ -22914,13 +23569,25 @@

                          Waypoint.Annotations Optional GPS navigation settings for this waypoint. + +regions +RegionWithFrame +repeated +Regions may be defined around the waypoint which affect how scan matching or other
                          parameters work. + + +lost_detector_strictness +LostDetectorStrictness + +Strictness of the lost detector to use while traversing this waypoint. If unset, the
                          default strictness will be used. +

                          Waypoint.Annotations.GPSSettings

                          -

                          Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) frame, which -can aid in localization.

                          +

                          Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) +frame, which can aid in localization.

                          @@ -22935,7 +23602,7 @@

                          Waypoint.Annotations.GPSSettingsAnnotationState

                          - + @@ -22947,7 +23614,7 @@

                          Waypoint.Annotations.GPSSettingsbool

                          - +
                          If the annotation state is set, the GPS settings will be applied. Otherwise, they will be ignored.
                          If ignored, GPS will only be used at this waypoint if data from a GPS exists in the waypoint snapshot, and the
                          robot has a GPS payload installed and running. Set the annotation state to override this behavior.
                          If the annotation state is set, the GPS settings will be applied. Otherwise, they
                          will be ignored. If ignored, GPS will only be used at this waypoint if data from a
                          GPS exists in the waypoint snapshot, and the robot has a GPS payload installed and
                          running. Set the annotation state to override this behavior.
                          ecef_tform_waypointIf true, GPS localization will be disabled at this waypoint. If false, the robot will use GPS when available
                          to localize to this waypoint.
                          If true, GPS localization will be disabled at this waypoint. If false, the robot will
                          use GPS when available to localize to this waypoint.

                          @@ -23378,6 +24045,48 @@

                          Edge.EdgeSourceof type EDGE_SOURCE_LOCALIZATION. +

                          +

                          +
                          +

                          Region.DataFilter

                          +

                          Defines how scan match data is filtered near this waypoint. Data filters are logical set +operators expressed on sets of data near the waypoint. Notes on interactions: If there are +multiple regions marked as INCLUDE_ONLY, data that falls within any of these regions will be +used, that is the operation of many DATA_FILTER_INCLUDE_ONLY regions is a logical set union. +Conversely, DATA_FILTER_IGNORE operators override DATA_FILTER_INCLUDE_ONLY. +For example, if there are 3 regions, A, B and C; and region A is marked as INCLUDE_ONLY, B is +marked as INCLUDE_ONLY, and C is marked as IGNORE, the data that will be used for scan +matching is: (A u B) ~ C (that is, union(A, B) excluding C).

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          NameNumberDescription
                          DATA_FILTER_UNKNOWN0Defaults to DATA_FILTER_NONE.
                          DATA_FILTER_NONE1No special considerations for scan matching in this region.
                          DATA_FILTER_IGNORE2No scan match data falling within this region will be used.
                          DATA_FILTER_INCLUDE_ONLY3Only data from within this region will be used.

                          @@ -23420,7 +24129,8 @@

                          bosdyn/api/graph_nav/map_processing.proto

                          AnchorHintUncertainty

                          -

                          Controls how certain the user is of an anchor’s pose. If left empty, a reasonable default will be chosen.

                          +

                          Controls how certain the user is of an anchor’s pose. If left empty, a reasonable default will be +chosen.

                          @@ -23448,8 +24158,8 @@

                          AnchorHintUncertainty

                          AnchoringHint

                          -

                          The user may assign a number of world objects and waypoints a guess at where they are in the seed frame. -These hints will be respected by the ProcessAnchoringRequest.

                          +

                          The user may assign a number of world objects and waypoints a guess at where they are in the seed +frame. These hints will be respected by the ProcessAnchoringRequest.

                          @@ -23521,9 +24231,10 @@

                          PoseBounds

                          ProcessAnchoringRequest

                          -

                          Causes the server to optimize an existing anchoring, or generate a new anchoring for the map using the given parameters. -In general, if parameters are not provided, reasonable defaults will be used. -The new anchoring will be streamed back to the client, or modified on the server if desired.

                          +

                          Causes the server to optimize an existing anchoring, or generate a new anchoring for the map +using the given parameters. In general, if parameters are not provided, reasonable defaults will +be used. The new anchoring will be streamed back to the client, or modified on the server if +desired.

                          @@ -23568,14 +24279,14 @@

                          ProcessAnchoringRequestapply_gps_result_to_waypoints_on_server

                          - +
                          bool If true, the GPSSettings inside waypoint annotations will be modified based on the optimization.
                          Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint applied form this
                          optimization. To get these results, call the DownloadGraph RPC. Alternatively, the ecef_tform_waypoint
                          can be found using: response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id].
                          Note that after this operation completes successfully, all waypoints in the graph can be used to navigate
                          using GPS, even if they didn't have GPS data in their waypoint snapshots.
                          If true, the GPSSettings inside waypoint annotations will be modified based on the
                          optimization. Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint
                          applied form this optimization. To get these results, call the DownloadGraph RPC.
                          Alternatively, the ecef_tform_waypoint can be found using:
                          response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id]. Note that after this
                          operation completes successfully, all waypoints in the graph can be used to navigate using
                          GPS, even if they didn't have GPS data in their waypoint snapshots.

                          ProcessAnchoringRequest.Params

                          -

                          Parameters for procesing an anchoring.

                          +

                          Parameters for processing an anchoring.

                          @@ -23621,7 +24332,7 @@

                          ProcessAnchoringRequest.Params

                          ProcessAnchoringRequest.Params.MeasurementParams

                          -

                          Parameters which affect the measurements the optimzier uses to process the anchoring.

                          +

                          Parameters which affect the measurements the optimizer uses to process the anchoring.

                          @@ -23701,9 +24412,9 @@

                          ProcessAnchoringRequest.Params.OptimizerParams

                          ProcessAnchoringRequest.Params.Weights

                          -

                          Relative weights to use for each of the optimizer’s terms. These can be any positive value. -If set to zero, a reasonable default will be used. In general, the higher the weight, the more -the optimizer will care about that particular measurement.

                          +

                          Relative weights to use for each of the optimizer’s terms. These can be any positive +value. If set to zero, a reasonable default will be used. In general, the higher the +weight, the more the optimizer will care about that particular measurement.

                          @@ -23761,8 +24472,8 @@

                          ProcessAnchoringRequest.Params.Weights

                          ProcessAnchoringResponse

                          -

                          Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is complete. -New anchorings will be streamed as they become available.

                          +

                          Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is +complete. New anchorings will be streamed as they become available.

                          @@ -23801,7 +24512,7 @@

                          ProcessAnchoringResponsebool

                          - + @@ -23855,13 +24566,13 @@

                          ProcessAnchoringResponseEdge.Id

                          - + - +
                          If modify_anchoring_on_server was set to true in the request, then the anchoring currently on the server
                          was modified using map processing. If this is set to false, then either an error occurred during
                          processing, or modify_anchoring_on_server was set to false in the request.
                          When anchoring_on_server_was_modified is set to false, the client is expected to upload the results
                          back to the server to commit the changes.
                          If modify_anchoring_on_server was set to true in the request, then the anchoring currently on
                          the server was modified using map processing. If this is set to false, then either an error
                          occurred during processing, or modify_anchoring_on_server was set to false in the request.
                          When anchoring_on_server_was_modified is set to false, the client is expected to upload the
                          results back to the server to commit the changes.
                          iterationrepeatedList of edges that are inconsistent with the optimized result. This can happen when incorrect
                          loop closures have been made before optimization, when inconsistent anchoring hints were passed in,
                          or because the optmizer ended up in a local minimum.
                          List of edges that are inconsistent with the optimized result. This can happen when incorrect
                          loop closures have been made before optimization, when inconsistent anchoring hints were
                          passed in, or because the optimizer ended up in a local minimum.
                          gps_result ProcessAnchoringResponse.GPSResult If GPS embedding optimzation was enabled, this is the result of that process.If GPS embedding optimization was enabled, this is the result of that process.

                          @@ -23888,7 +24599,7 @@

                          ProcessAnchoringResponse.GPSResultbosdyn.api.SE3Pose -Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF) frame.
                          This can be used to estimate the pose of every waypoint in the ECEF frame via:
                          ecef_tform_waypoint = ecef_tform_seed * anchoring.waypoints[waypoint_id].seed_tform_waypoint +Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF)
                          frame. This can be used to estimate the pose of every waypoint in the ECEF frame via:
                          ecef_tform_waypoint = ecef_tform_seed *
                          anchoring.waypoints[waypoint_id].seed_tform_waypoint num_measurements_used @@ -23973,6 +24684,28 @@

                          ProcessTopologyRequest.CollisionCheckingParams

                          +

                          +
                          +

                          ProcessTopologyRequest.FeatureMatchingParams

                          +

                          Parameters to control point cloud sparse feature matching.

                          + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          do_feature_matchinggoogle.protobuf.BoolValueIf true, feature matching will be performed. If both ICP and Feature matching are used,
                          feature matching
                          will be performed first for a coarse alignment, followed by ICP for a local refinement.

                          @@ -24028,7 +24761,8 @@

                          ProcessTopologyRequest.FiducialLoopClosureParams

                          ProcessTopologyRequest.ICPParams

                          Parameters for how to refine loop closure edges using iterative -closest point matching.

                          +closest point matching. If both ICP and Feature matching are used, feature matching +will be performed first for a coarse alignment, followed by ICP for a local refinement.

                          @@ -24161,7 +24895,13 @@

                          ProcessTopologyRequest.Paramsdouble

                          - + + + + + + +
                          Causes the processing to time out after this many seconds. If not set, a default of 45 seconds
                          will be used. If this timeout occurs before the overall RPC timeout, a partial result will be
                          returned with ProcessTopologyResponse.timed_out set to true. Processing can be continued by
                          calling ProcessTopology again.
                          Causes the processing to time out after this many seconds. If not set, a default of 45
                          seconds will be used. If this timeout occurs before the overall RPC timeout, a partial
                          result will be returned with ProcessTopologyResponse.timed_out set to true. Processing
                          can be continued by calling ProcessTopology again.
                          feature_matching_paramsProcessTopologyRequest.FeatureMatchingParamsControls whether and how the service performs sparse feature matching.

                          @@ -24202,7 +24942,7 @@

                          ProcessTopologyResponsemap_on_server_was_modified bool -If modify_map_on_server was set to true in the request, then the map currently on the server
                          was modified using map processing. If this is set to false, then either an error occurred during
                          processing, or modify_map_on_server was set to false in the request.
                          When map_on_server_was_modified is set to false, the client is expected to upload the results
                          back to the server to commit the changes. +If modify_map_on_server was set to true in the request, then the map currently on the server
                          was modified using map processing. If this is set to false, then either an error occurred
                          during processing, or modify_map_on_server was set to false in the request. When
                          map_on_server_was_modified is set to false, the client is expected to upload the results back
                          to the server to commit the changes. missing_snapshot_ids @@ -24220,7 +24960,7 @@

                          ProcessTopologyResponsetimed_out bool -If true, the processing timed out. Note that this is not considered an error. Run topology processing again
                          to continue adding edges. +If true, the processing timed out. Note that this is not considered an error. Run topology
                          processing again to continue adding edges.

                          @@ -24229,11 +24969,11 @@

                          ProcessTopologyResponseWaypointAnchorHint

                          Waypoints may be anchored to a particular seed frame. The user may request that a waypoint be anchored in a particular place with some Gaussian uncertainty. -Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -the orientation of the waypoint is correct with respect to gravity. By convention, waypoints’ orientation -is defined as: Z up, X forward, Y left. So, if the robot is flat on the ground, the waypoint’s z axis should -align with the seed frame’s z axis. +Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +default, the orientation of the seed frame assumes gravity is pointing in the negative z +direction. Take care to ensure that the orientation of the waypoint is correct with respect to +gravity. By convention, waypoints’ orientation is defined as: Z up, X forward, Y left. So, if the +robot is flat on the ground, the waypoint’s z axis should align with the seed frame’s z axis. z z ^ ^ | | @@ -24267,21 +25007,21 @@

                          WaypointAnchorHintPoseBounds -Normally, the optimizer will move the anchorings of waypoints based on context, to minimize the
                          overall cost of the optimization problem. By providing a constraint on pose, the user can ensure
                          that the anchors stay within a certain region in the seed frame.
                          Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. +Normally, the optimizer will move the anchorings of waypoints based on context, to minimize
                          the overall cost of the optimization problem. By providing a constraint on pose, the user can
                          ensure that the anchors stay within a certain region in the seed frame. Leaving this empty
                          will allow the optimizer to move the anchoring from the hint as far as it likes.

                          WorldObjectAnchorHint

                          -

                          World objects (such as fiducials) may be anchored to a particular seed frame. The user may request that an object -be anchored in a particular place with some Gaussian uncertainty. -Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -the orientation of the world object is correct with respect to gravity. By convention, fiducials’ orientation -is defined as: Z out of the page, X up and Y left (when looking at the fiducial). So, if a fiducial is mounted -perfectly flat against a wall, its orientation w.r.t the seed frame would have the top of the fiducial facing -positive Z. +

                          World objects (such as fiducials) may be anchored to a particular seed frame. The user may +request that an object be anchored in a particular place with some Gaussian uncertainty. Note on +gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +default, the orientation of the seed frame assumes gravity is pointing in the negative z +direction. Take care to ensure that the orientation of the world object is correct with respect +to gravity. By convention, fiducials’ orientation is defined as: Z out of the page, X up and Y +left (when looking at the fiducial). So, if a fiducial is mounted perfectly flat against a wall, +its orientation w.r.t the seed frame would have the top of the fiducial facing positive Z. +———–+ z | ^x | ^ | | | | @@ -24317,7 +25057,7 @@

                          WorldObjectAnchorHintseed_tform_object_constraint PoseBounds -Normally, the optimizer will move the anchorings of object based on context, to minimize the
                          overall cost of the optimization problem. By providing a constraint on pose, the user can ensure
                          that the anchors stay within a certain region in the seed frame.
                          Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. +Normally, the optimizer will move the anchorings of object based on context, to minimize the
                          overall cost of the optimization problem. By providing a constraint on pose, the user can
                          ensure that the anchors stay within a certain region in the seed frame. Leaving this empty
                          will allow the optimizer to move the anchoring from the hint as far as it likes.

                          @@ -24381,17 +25121,17 @@

                          ProcessAnchoringResponse.Status

                          @@ -24455,12 +25195,12 @@

                          ProcessTopologyResponse.Status

                          @@ -24861,7 +25601,7 @@

                          GetRecordStatusRequest

                          GetRecordStatusResponse

                          The GetRecordStatus response message returns whether the service is currently recording and what -the persistent recording environment is at the time the request was recieved.

                          +the persistent recording environment is at the time the request was received.

                          @@ -25064,14 +25804,14 @@

                          StartRecordingRequestsession_start_time

                          - +
                          google.protobuf.Timestamp If provided, this timestamp will be used in every waypoint snapshot as the
                          "started_recording_on" timestamp. Otherwise, a new timestmap will be generated
                          after "StartRecording" is called. This is to allow association between waypoint
                          snapshots based on recording session time.
                          If provided, this timestamp will be used in every waypoint snapshot as the
                          "started_recording_on" timestamp. Otherwise, a new timestamp will be generated
                          after "StartRecording" is called. This is to allow association between waypoint
                          snapshots based on recording session time.

                          StartRecordingResponse

                          -

                          The StartRecording response messge returns the first created waypoint, which is made at the +

                          The StartRecording response message returns the first created waypoint, which is made at the location the robot was standing when the request was made, in addition to any status information.

                          @@ -25516,7 +26256,7 @@

                          GraphNavRecordingService @@ -25551,7 +26291,7 @@

                          GraphNavRecordingServiceSetRecordingEnvironmentRequest

                          - + @@ -25563,10 +26303,389 @@

                          GraphNavRecordingServiceGetRecordStatusRequest

                          - + + + +
                          SetRecordingEnvironmentResponseSet the environmnent and name prefix to use for the recording.Set the environment and name prefix to use for the recording.
                          CreateEdgeGetRecordStatusResponseTells the client the internal state of the record service, and the structure of the map that has been recorded
                          so far.
                          Tells the client the internal state of the record service, and the structure of the map that
                          has been recorded so far.

                          +

                          Top

                          +

                          +
                          +

                          bosdyn/api/graph_nav/visual_features.proto

                          +

                          +
                          +

                          DirectionWithCovariance

                          +

                          A 3D direction with a covariance estimate.

                          + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          directionbosdyn.api.Vec3The vector is to be interpreted as a 3D normalized direction in a frame.
                          covariancebosdyn.api.Matrixf2x2 covariance matrix representing uncertainty in the direction (in a local tangent frame).

                          +
                          +
                          +

                          GenericDescriptor

                          +

                          Generic sparse visual descriptor with a byte blob and a descriptor name.

                          + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          namestringName of the descriptor which identifies how it is to be interpreted.
                          databytesBinary blob representing the descriptor.

                          +
                          +
                          +

                          LandmarkObservationIndex

                          +

                          Indexes an observation of a landmark at a particular bundle, keyframe and keypoint. +Waypoint snapshots have bundles of keyframes, each keyframe has a number of extracted keypoints. +Observations are structured as: +bundle_0 … +bundle_1 +…. keyframe_0 +…. keyframe_1 +…….. keypoint_0 +…….. keypoint_1 +…….. … +…….. keypoint_J +…. … +…. keyframe_K +… +bundle_N

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          bundle_idint32The bundle from within the waypoint snapshot that this
                          landmark observation came from.
                          keyframe_idint32The keyframe from within the bundle that this observation came from.
                          keypoint_idint32The keypoint within the keyframe that this observation came from.
                          timestampgoogle.protobuf.TimestampTime of the camera image which observed this landmark.

                          +
                          +
                          +

                          PositionWithCovariance

                          +

                          A 3D position with a covariance estimate.

                          + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          positionbosdyn.api.Vec3The vector is to be interpreted as a 3D position in a frame.
                          covariancebosdyn.api.Matrixf3x3 covariance matrix representing uncertainty in the position.

                          +
                          +
                          +

                          VisualDescriptor

                          +

                          Represents a visual descriptor of a feature, usually a sparse visual feature.

                          + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          orbbytesOriented Brief (ORB) sparse visual feature.
                          otherGenericDescriptorPlace to put other descriptors not explicitly captured above.

                          +
                          +
                          +

                          VisualKeyFrame

                          +

                          Represents a set of visual features collected at a particular time from a particular camera +source. Associates an image geometry + pixel data with visual features extracted there.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          keypointsVisualKeypointrepeatedThe visual features extracted at the camera image.
                          image_capture_and_sourcebosdyn.api.ImageCaptureAndSourceContains the actual data in the image capture (may be compressed), and information
                          about the source. Note that the raw data may be omitted if visual features are already
                          extracted.
                          bundle_tform_imagebosdyn.api.SE3PoseTransformation from a bundle frame to the image. Depending on the context,
                          the bundle frame may be the body, odometry, etc.

                          +
                          +
                          +

                          VisualKeyFrameBundle

                          +

                          Represents a bundle of visual KeyFrames taken around the same time. For example, if the robot has +many cameras, this represents all of the cameras captured at around the same time/location.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          key_framesVisualKeyFramerepeatedA number of key frames, possibly from different sources.
                          bundle_frame_namestringReference frame that the keyframes' poses are expressed in.
                          frame_tree_snapshotbosdyn.api.FrameTreeSnapshotFrame tree snapshot mapping common poses at record time (odom, body, etc.) to each other and
                          the bundle frame.

                          +
                          +
                          +

                          VisualKeypoint

                          +

                          Represents a 2d (pixel-based) detection of a feature in an image.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          visual_descriptorVisualDescriptorThe descriptor of the sparse feature, used to match it to other features.
                          positionbosdyn.api.Vec2Position (pixels) in the image.
                          size_pixelsfloatSize of the feature in pixels. If the feature is circular, this is the radius of the circle.
                          If the feature is square, this is the side length of the square.
                          orientationfloatOrientation of the feature in the image plane, radians. Counterclockwise.
                          depth_measurementgoogle.protobuf.DoubleValueThe depth (in meters) from the camera if it exists, or empty otherwise.
                          position_covariancebosdyn.api.Matrixf2x2 Covariance matrix of the position measurement's uncertainty.
                          depth_variancegoogle.protobuf.DoubleValueExpected variance of the depth measurement, if it exists.

                          +
                          +
                          +

                          VisualLandmark

                          +

                          Represents a 3D landmark that has some visual descriptor attached to it.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          idint64Unique ID of the landmark. Ids of landmarks are unique only in a particular instance of a
                          graph nav map. Ids of landmarks may change as maps update.
                          position_with_covariancePositionWithCovarianceThe landmark may either be a full 3D landmark (in which case it is a point), or an
                          orientation-only landmark (in which case it is a normalized direction). The frame of the
                          landmark is left ambiguous here; generally the container of the landmark will specify which
                          frame it is in. Note that landmarks may have both position and direction. A 3D position
                          with covariance.
                          direction_with_covarianceDirectionWithCovarianceThe vector is to be interpreted as a normalized 3D direction in the landmark frame. This
                          represents the direction "into" the landmark from where it was first observed.
                          visual_descriptorVisualDescriptorThe canonical descriptor associated with this landmark. If a landmark looks different from
                          different angles, then multiple landmarks are likely to be created for it. This will be set
                          whenever the first observation is made of a landmark to create it.
                          landmark_observationsLandmarkObservationIndexrepeatedIndices of the observations that support this landmark.

                          +
                          +
                          +

                          VisualLandmarks

                          +

                          A group of 3D landmarks. These landmarks may be associated with a single waypoint, or with groups +of waypoints.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + -
                          FieldTypeLabelDescription
                          landmarksVisualLandmarkrepeatedUnorganized 3d landmark cloud.
                          landmark_framestringName of the reference frame that the landmarks are in.
                          frame_tree_snapshotbosdyn.api.FrameTreeSnapshotThe frame tree must contain, at minimum, the landmark_frame and some other frame that the
                          waypoint or current robot body knows about (for example, "odom" or "vision").

                          +

                          Top

                          @@ -25714,7 +26833,7 @@

                          GripperCameraParamsgoogle.protobuf.FloatValue -Set the image gain level.
                          This paramater is only effective when manual exposure is used.
                          Min 0, max 1 +Set the image gain level.
                          This parameter is only effective when manual exposure is used.
                          Min 0, max 1 exposure_auto @@ -25792,7 +26911,7 @@

                          GripperCameraParamsgoogle.protobuf.FloatValue -Manually set the white balance focus. This value is only used if white_balance_temperature_auto is false.
                          Min 0, max 1
                          0 corresponds to focus at infinity, 1 corresponds to a focal point close to the camera. +Manually set the white balance focus. This value is only used if
                          white_balance_temperature_auto is false. Min 0, max 1 0 corresponds to focus at infinity, 1
                          corresponds to a focal point close to the camera. sharpness @@ -26564,13 +27683,13 @@

                          ImageCaptureFrameTreeSnapshot -A tree-based collection of transformations, which will include the transformations to each image's
                          sensor in addition to transformations to the common frames ("vision", "body", "odom").
                          All transforms within the snapshot are at the acquistion time of the image. +A tree-based collection of transformations, which will include the transformations to each
                          image's sensor in addition to transformations to the common frames ("vision", "body",
                          "odom"). All transforms within the snapshot are at the acquisition time of the image. frame_name_image_sensor string -The frame name for the image's sensor source. This will be included in the transform snapshot. +The frame name for the image's sensor source. This will be included in the transform
                          snapshot. image @@ -26614,17 +27733,115 @@

                          ImageCaptureAndSourceThe source describes general information about the camera source the image data was collected
                          from. -image_service -
                          string +image_service +string + +Image service. If blank, it is assumed to be the robot's default image service. + + +

                          +

                          +
                          +

                          ImageRequest

                          +

                          The image request specifying the image source and data format desired.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          image_source_namestringThe string name of the image source to get image data from.
                          quality_percentdoubleImage quality: a number from 0 (worst) to 100 (highest).
                          Note that jpeg quality 100 is still lossy.
                          image_formatImage.FormatSpecify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g.
                          FORMAT_UNKNOWN), the image service will choose the best format for the data.
                          resize_ratiodoubleOptional specification of the desired image dimensions.
                          If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size
                          1280x720 The range is clipped to [0.01, 1] while maintaining the original aspect ratio. For
                          backwards compatibility, a value of 0 means no resizing. Note: this field is not supported by
                          the robot body cameras image service (image).
                          pixel_formatImage.PixelFormatSpecify the desired pixel format (e.g. GREYSCALE_U8, RGB_U8). If no format is specified
                          (e.g. PIXEL_FORMAT_UNKNOWN), the image service will choose the best format for the data.
                          fallback_formatsImage.PixelFormatrepeatedSpecify a pixel format that will be used if the format specified in the pixel_format field is
                          invalid. If multiple formats are specified the valid format with the lowest index will be
                          preferred.
                          custom_paramsDictParamParameters unique to the servicer that do not match any of the above fields.
                          Whether or not these are valid may depend on the values of the above fields.

                          +
                          +
                          +

                          ImageResponse

                          +

                          The image response for each request, that includes image data and image source information.

                          + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + -
                          FieldTypeLabelDescription
                          shotImageCaptureThe image capture contains the image data and information about the state of the camera and
                          robot at the time the image was collected.
                          sourceImageSourceThe source describes general information about the camera source the image data was collected
                          from.
                          statusImageResponse.Status Image service. If blank, it is assumed to be the robot's default image service.Return status of the request.
                          custom_param_errorCustomParamErrorFilled out if status is STATUS_CUSTOM_PARAMS_ERROR.

                          +

                          -
                          -

                          ImageRequest

                          -

                          The image request specifying the image source and data format desired.

                          +
                          +

                          ImageSource

                          +

                          Proto for a description of an image source on the robot.

                          @@ -26636,47 +27853,81 @@

                          ImageRequeststring

                          - + - - + + - + - - + + - + - + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + -
                          The string name of the image source to get image data from.The name of this image source used to get images.
                          quality_percentdoublecolsint32 Image quality: a number from 0 (worst) to 100 (highest).
                          Note that jpeg quality 100 is still lossy.
                          Number of columns in the image (in pixels).
                          image_formatImage.Formatrowsint32 Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g. FORMAT_UNKNOWN), the image
                          service will choose the best format for the data.
                          Number of rows in the image (in pixels).
                          resize_ratiodepth_scale double Optional specification of the desired image dimensions.
                          If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size 1280x720
                          The range is clipped to [0.01, 1] while maintaining the original aspect ratio.
                          For backwards compatibliity, a value of 0 means no resizing.
                          Note: this field is not supported by the robot body cameras image service (image).
                          For depth images, the pixel value that represents a depth of one meter.
                          Depth in meters can be computed by dividing the raw pixel value by this scale factor.
                          pixel_formatImage.PixelFormatpinholeImageSource.PinholeModel Specify the desired pixel format (e.g. GREYSCALE_U8, RGB_U8). If no format is specified
                          (e.g. PIXEL_FORMAT_UNKNOWN), the image service will choose the best format for the data.
                          Rectilinear camera model.
                          pinhole_brown_conradyImageSource.PinholeBrownConradyThe pinhole camera model with the 5 parameter brown Conrady distortion model.
                          kannala_brandtImageSource.KannalaBrandtModelThe Kannala-Brandt camera model for modeling fisheye lenses.
                          image_typeImageSource.ImageTypeThe kind of images returned by this image source.
                          pixel_formatsImage.PixelFormatrepeatedThe pixel formats a specific image source supports.
                          image_formatsImage.FormatrepeatedThe image formats a specific image source supports.
                          custom_paramsDictParamDictParam.Spec Parameters unique to the servicer that do not match any of the above fields.
                          Whether or not these are valid may depend on the values of the above fields.
                          ImageRequest parameters unique to this source that do not match any of the above fields.

                          +

                          -
                          -

                          ImageResponse

                          -

                          The image response for each request, that includes image data and image source information.

                          +
                          +

                          ImageSource.KannalaBrandtModel

                          +

                          The Kannala-Brandt camera model, also called the fisheye camera model in OpenCV +(https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html) and the equidistant +distortion model (https://github.com/ethz-asl/kalibr/wiki/supported-models), fits cameras +with fisheye lenses well. The projection and un-projection equations for this model can be +found at: https://arxiv.org/pdf/1807.08957.pdf.

                          @@ -26688,35 +27939,66 @@

                          ImageResponseImageCapture +

                          + - + + +
                          intrinsicsImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics The image capture contains the image data and information about the state of the camera and robot
                          at the time the image was collected.
                          The camera intrinsics are necessary for describing the KB4 camera matrix.

                          +
                          +
                          +

                          ImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics

                          + + - - + + + + + + + + + + - + - - + + - + - - + + + + + + + + + + + + + + + - -
                          sourceImageSourceFieldTypeLabelDescription
                          pinhole_intrinsicsImageSource.PinholeModel.CameraIntrinsics The source describes general information about the camera source the image data was collected from.Pinhole intrinsics of the camera.
                          statusImageResponse.Statusk1float Return status of the request.The Kannala-Brandt distortion coefficients for the camera.
                          custom_param_errorCustomParamErrork2float
                          k3float
                          k4float Filled out if status is STATUS_CUSTOM_PARAMS_ERROR.

                          +

                          -
                          -

                          ImageSource

                          -

                          Proto for a description of an image source on the robot.

                          +
                          +

                          ImageSource.PinholeBrownConrady

                          +

                          The 5 parameter Brown-Conrady or “radtan” model is used to correct radial and +tangential distortions. Original paper: +http://close-range.com/docs/Decentering_Distortion_of_Lenses_Brown_1966_may_444-462.pdf +We use the opencv convention for naming the distortion coefficients: k1, k2, p1, p2, k3. Here +k1, k2, and k3 are radial distortion terms. p1 and p2 are tangential terms.

                          @@ -26728,58 +28010,61 @@

                          ImageSourcestring +

                          + - + + +
                          intrinsicsImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics The name of this image source used to get images.The camera intrinsics are necessary for describing the KB4 camera matrix.

                          +
                          +
                          +

                          ImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics

                          + + - - - - + + + + + + - - + + - + - - + + - + - - + + - - - - - - - - - - + + + + - - - - + + + + - - + + + -
                          colsint32Number of columns in the image (in pixels).FieldTypeLabelDescription
                          rowsint32pinhole_intrinsicsImageSource.PinholeModel.CameraIntrinsics Number of rows in the image (in pixels).Pinhole intrinsics of the camera.
                          depth_scaledoublek1float For depth images, the pixel value that represents a depth of one meter.
                          Depth in meters can be computed by dividing the raw pixel value by this scale factor.
                          The Brown-Conrady distortion coefficients for the camera.
                          pinholeImageSource.PinholeModelk2float Rectilinear camera model.
                          image_typeImageSource.ImageType The kind of images returned by this image source.
                          pixel_formatsImage.PixelFormatrepeatedThe pixel formats a specific image source supports.p1float
                          image_formatsImage.FormatrepeatedThe image formats a specific image source supports.p2float
                          custom_paramsDictParam.Speck3float ImageRequest parameters unique to this source that do not match any of the above fields.

                          @@ -26805,7 +28090,7 @@

                          ImageSource.PinholeModelImageSource.PinholeModel.CameraIntrinsics -The camera intrinsics are necessary for descrbing the pinhole camera matrix. +The camera intrinsics are necessary for describing the pinhole camera matrix.

                          @@ -27011,7 +28296,7 @@

                          ImageResponse.Status STATUS_UNSUPPORTED_IMAGE_FORMAT_REQUESTED 5 -The requested image format is unsupported for the image-source named. The image data will
                          not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should choose the
                          best format to provide the data in. +The requested image format is unsupported for the image-source named. The image data will
                          not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should
                          choose the best format to provide the data in. STATUS_UNSUPPORTED_PIXEL_FORMAT_REQUESTED @@ -27926,7 +29211,7 @@

                          Lease client_names string repeated -The set of different clients which have sent/receieved the lease. +The set of different clients which have sent/received the lease.

                          @@ -27961,7 +29246,7 @@

                          LeaseOwner

                          LeaseResource

                          -

                          Describes all information about a sepcific lease: including the resource it covers, the +

                          Describes all information about a specific lease: including the resource it covers, the active lease, and which application is the owner of a lease.

                          @@ -28820,7 +30105,7 @@

                          LicenseServiceGetFeatureEnabledRequest

                          - +
                          GetFeatureEnabledResponseCheck if specific features (identified by string names) are enabled under the currently loaded
                          license for this robot.
                          Check if specific features (identified by string names) are enabled under the currently
                          loaded license for this robot.

                          @@ -28853,7 +30138,8 @@

                          GetLocalGridTypesRequest

                          GetLocalGridTypesResponse

                          -

                          The GetLocalGridTypes response message returns to get all known string names for local grid types.

                          +

                          The GetLocalGridTypes response message returns to get all known string names for local grid +types.

                          @@ -28881,7 +30167,8 @@

                          GetLocalGridTypesResponse

                          GetLocalGridsRequest

                          -

                          The GetLocalGrid request message can request for multiple different types of local grids at one time.

                          +

                          The GetLocalGrid request message can request for multiple different types of local grids at one +time.

                          @@ -28909,8 +30196,9 @@

                          GetLocalGridsRequest

                          GetLocalGridsResponse

                          -

                          The GetLocalGrid response message replies with all of the local grid data for the requested types, and -a numerical count representing the amount of status errors that occurred when getting this data.

                          +

                          The GetLocalGrid response message replies with all of the local grid data for the requested +types, and a numerical count representing the amount of status errors that occurred when getting +this data.

                          @@ -28972,13 +30260,13 @@

                          LocalGridFrameTreeSnapshot

                          - + - + @@ -29002,7 +30290,7 @@

                          LocalGridbytes

                          - + @@ -29020,7 +30308,13 @@

                          LocalGriddouble

                          - + + + + + + +
                          A tree-based collection of transformations, which will include the transformations to each of
                          the returned local grids in addition to transformations to the common frames ("vision", "body", "odom").
                          All transforms within the snapshot are at the acquistion time of the local grid.
                          A tree-based collection of transformations, which will include the transformations to each of
                          the returned local grids in addition to transformations to the common frames ("vision",
                          "body", "odom"). All transforms within the snapshot are at the acquisition time of the local
                          grid.
                          frame_name_local_grid_data string The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such that
                          the map data is in the +x, +y quadrant.
                          The cell data is packed in x-y order, so the cell at:
                          data[xi + extent.num_cells_x * yj]
                          has its center at position:
                          {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}.
                          The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such
                          that the map data is in the +x, +y quadrant. The cell data is packed in x-y order, so the
                          cell at:
                          data[xi + extent.num_cells_x * yj]
                          has its center at position:
                          {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}.
                          extentThe encoded local grid representation.
                          Cells are encoded according to the encoding enum, and are stored in in row-major order (x-major).
                          This means that the data field has data entered row by row. The grid cell located at (i, j) will be
                          at the (index = i * num_cells_x + j) within the data array.
                          The encoded local grid representation.
                          Cells are encoded according to the encoding enum, and are stored in in row-major order
                          (x-major). This means that the data field has data entered row by row. The grid cell located
                          at (i, j) will be at the (index = i * num_cells_x + j) within the data array.
                          rle_countsA fixed value offset that is applied to each value of the cell data.
                          Actual values in local grid are: (({value from data} * cell_value_scale) + cell_value_offset).
                          A fixed value offset that is applied to each value of the cell data.
                          Actual values in local grid are: (({value from data} * cell_value_scale) +
                          cell_value_offset).
                          unknown_cellsbytesMap of unknown cells.
                          If unknown_cells[i] = 0, then data[i] is known. If unknown_cells[i] = 1, then data[i] is
                          unknown. Each cell is encoded as a uint8_t. Cells are stored in row-major order (x-major).
                          This means that the data field has data entered row by row. The grid cell located at (i, j)
                          will be at the (index = i * num_cells_x + j) within the data array.

                          @@ -29055,7 +30349,7 @@

                          LocalGridExtentint32 -Number of cells along y extent of local grid (number of rows in local grid).
                          Note, that the (num_cells_x)x(num_cells_y) represents the totla number of grid
                          cells in the local grid. +Number of cells along y extent of local grid (number of rows in local grid).
                          Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid
                          cells in the local grid.

                          @@ -30006,7 +31300,7 @@

                          LogStatusServiceStartRetroLogRequest StartRetroLogResponse -Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime, t_rpc],
                          where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception,
                          and t_buffer = time of first log on the buffer. +Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime,
                          t_rpc], where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception, and
                          t_buffer = time of first log on the buffer. StartExperimentLog @@ -30455,7 +31749,7 @@

                          PickObjectInImageFrameTreeSnapshot -A tree-based collection of transformations, which will include the transformations to each
                          image's sensor in addition to transformations to the common frames ("vision", "body",
                          "odom"). All transforms within the snapshot are at the acquistion time of the image. +A tree-based collection of transformations, which will include the transformations to each
                          image's sensor in addition to transformations to the common frames ("vision", "body",
                          "odom"). All transforms within the snapshot are at the acquisition time of the image. frame_name_image_sensor @@ -31097,7 +32391,7 @@

                          GetAbsoluteMetricSnapshotResponseSignedProto repeated -Signed AbsoluteMetricsSnapshot messages corresponding to the request timestamps.
                          The robot will exclude snapshots if:
                          * They don't exist on the robot
                          * If included, the snapshot would push the total response message size over the GRPC limit. +Signed AbsoluteMetricsSnapshot messages corresponding to the request timestamps.
                          The robot will exclude snapshots if:
                          * They don't exist on the robot
                          * If included, the snapshot would push the total response message size over the GRPC
                          limit.

                          @@ -31276,12 +32570,12 @@

                          SignedProto @@ -31342,7 +32636,7 @@

                          AnswerQuestionRequestcustom_params bosdyn.api.DictParam -The answers for the Question corresponding to custom_params specification from the Question. +The answers for the Question corresponding to custom_params specification from the
                          Question.

                          @@ -31627,8 +32921,8 @@

                          LoadMissionRequest

                          LoadMissionResponse

                          -

                          The LoadMission response returns the mission info generated by the service if successfully loaded, and -a status and other inforamtion if the request fails.

                          +

                          The LoadMission response returns the mission info generated by the service if successfully +loaded, and a status and other information if the request fails.

                          @@ -31742,7 +33036,8 @@

                          NodeInfo

                          PauseMissionRequest

                          -

                          The PauseMission request message will pause the mission that is currently executing, if there is one.

                          +

                          The PauseMission request message will pause the mission that is currently executing, if there is +one.

                          @@ -31921,6 +33216,12 @@

                          PlaySettingsbosdyn.api.graph_nav.TravelParams.PathPlannerMode +

                          + +
                          Specify the path planner mode.

                          @@ -31977,7 +33278,7 @@

                          Questionbosdyn.api.AlertData.SeverityLevel -Severity for this question. See comment in Prompt message in nodes.proto for a better understanding
                          of what levels mean. +Severity for this question. See comment in Prompt message in nodes.proto for a better
                          understanding of what levels mean.

                          @@ -32117,6 +33418,12 @@

                          State The mission's ID.
                          -1 indicates no mission has been loaded. + +active_mission_text +
                          MissionText +repeated +MissionText which is currently active. +

                          @@ -32580,7 +33887,8 @@

                          bosdyn/api/mission/mission_service.proto

                          MissionService

                          -

                          The MissionService can be used to specify high level autonomous behaviors for Spot using behavior trees.

                          +

                          The MissionService can be used to specify high level autonomous behaviors for Spot using behavior +trees.

                          @@ -32601,7 +33909,7 @@

                          MissionService.bosdyn.api.DataChunk stream

                          - + @@ -32643,13 +33951,13 @@

                          MissionServiceGetInfoRequest

                          - + - + @@ -32752,7 +34060,7 @@

                          BosdynGraphNavLocalizeallow_bad_quality

                          - + @@ -32760,6 +34068,12 @@

                          BosdynGraphNavLocalize

                          + + + + + +
                          LoadMissionResponseThis RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead. Non-preferred
                          method for loading large missions to the robot because only the request is a streaming RPC. The data
                          chunks are deserialized into a LoadMissionRequest. NOTE: LoadMissionAsChunks may fail for large missions
                          because the response may exceed the maximum message size.
                          This RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead.
                          Non-preferred method for loading large missions to the robot because only the request is a
                          streaming RPC. The data chunks are deserialized into a LoadMissionRequest. NOTE:
                          LoadMissionAsChunks may fail for large missions because the response may exceed the maximum
                          message size.
                          LoadMissionAsChunks2GetInfoResponseRPCs for getting static information regarding the mission. Used to interpret mission state.
                          NOTE: GetInfo may fail for large missions because the response may exceed the maximum message size.
                          Use GetInfoAsChunks instead.
                          RPCs for getting static information regarding the mission. Used to interpret mission state.
                          NOTE: GetInfo may fail for large missions because the response may exceed the maximum message
                          size. Use GetInfoAsChunks instead.
                          GetInfoAsChunks GetInfoRequest .bosdyn.api.DataChunk streamPreferred RPC for getting the status of large missions from the robot because the response is a streaming
                          streaming RPC, allowing you to break the message up into multiple streamed messages. THe data chunks are
                          deserialized into a GetInfoResponse.
                          Preferred RPC for getting the status of large missions from the robot because the response is
                          a streaming streaming RPC, allowing you to break the message up into multiple streamed
                          messages. THe data chunks are deserialized into a GetInfoResponse.
                          GetMissionbool If true, a poor quality check will not result in the node returning FAILURE.
                          If false, the localization will be checked for quality by comparing agains the map data, and
                          if the localization is poor quality, the node returns FAILURE.
                          If true, a poor quality check will not result in the node returning FAILURE.
                          If false, the localization will be checked for quality by comparing against the map data, and
                          if the localization is poor quality, the node returns FAILURE.
                          response_bb_keyIf non-empty, the blackboard variable with this name will contain the response of the
                          graph nav SetLocalization request after this node receives it.
                          localization_request_bb_keystringIf specified, the value of this blackboard variable will be merged with the
                          localization_request. The value of this variable must be a
                          bosdyn.api.graph_nav.SetLocalizationRequest proto.

                          @@ -32789,69 +34103,133 @@

                          BosdynGraphNavStateNode +child +Node + +Child node. Children will have access to the state gathered by this node. + + +state_name +string + +Name of the bosdyn.api.GetLocalizationStateResponse object in the blackboard. For example,
                          if this is set to "nav", children can look up "nav.localization.waypoint_id" in the
                          blackboard to get the waypoint the robot is localized to. + + +waypoint_id +string + +Id of the waypoint that we want the localization to be relative to.
                          If this is empty, the localization will be relative to the waypoint that the
                          robot is currently localized to. + + +

                          +

                          +
                          +

                          BosdynGripperCameraParamsState

                          +

                          Get the state of the gripper camera params from the robot.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          service_namestringName of the service to use.
                          hoststringHost machine the service is running on.
                          childNodeChild node. Children will have access to the state gathered by this node.
                          state_namestringName of the bosdyn.api.GripperCameraParams object in the blackboard. For example, if this is
                          set to "gripper_params", children can look up "gripper_params.camera_mode" in the blackboard.

                          +
                          +
                          +

                          BosdynNavigateRoute

                          +

                          Tell the robot to navigate a route.

                          + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - - - -
                          FieldTypeLabelDescription
                          service_namestringName of the service to use.
                          hoststringHost machine the service is running on.
                          routebosdyn.api.graph_nav.Route Child node. Children will have access to the state gathered by this node.A route for the robot to follow.
                          state_namestringroute_follow_paramsbosdyn.api.graph_nav.RouteFollowingParams Name of the bosdyn.api.GetLocalizationStateResponse object in the blackboard. For example,
                          if this is set to "nav", children can look up "nav.localization.waypoint_id" in the
                          blackboard to get the waypoint the robot is localized to.
                          What should the robot do if it is not at the expected point in the route, or the route is
                          blocked.
                          waypoint_idstringtravel_paramsbosdyn.api.graph_nav.TravelParams Id of the waypoint that we want the localization to be relative to.
                          If this is empty, the localization will be relative to the waypoint that the
                          robot is currently localized to.

                          -
                          -
                          -

                          BosdynGripperCameraParamsState

                          -

                          Get the state of the gripper camera params from the robot.

                          - - - - - - - + - - - + - + - + - - - - - - - + - + - + -
                          FieldTypeLabelDescriptionParameters that define how to traverse and end the route.
                          service_namenavigation_feedback_response_blackboard_key string Name of the service to use.If provided, this will write the last NavigationFeedbackResponse message
                          to a blackboard variable with this name.
                          hostnavigate_route_response_blackboard_key string Host machine the service is running on.
                          childNodeChild node. Children will have access to the state gathered by this node.If provided, this will write the last NavigateRouteResponse message to
                          a blackboard variable with this name.
                          state_namenavigate_route_request_blackboard_key string Name of the bosdyn.api.GripperCameraParams object in the blackboard. For example, if this is
                          set to "gripper_params", children can look up "gripper_params.camera_mode" in the blackboard.
                          If provided, parameters from this request will be merged with the other parameters defined in
                          the node and be used in the NavigateRoute RPC.

                          +

                          -
                          -

                          BosdynNavigateRoute

                          -

                          Tell the robot to navigate a route.

                          +
                          +

                          BosdynNavigateTo

                          +

                          Tell the robot to navigate to a waypoint.

                          @@ -32875,16 +34253,16 @@

                          BosdynNavigateRoutebosdyn.api.graph_nav.Route +

                          + - + - - + + - + @@ -32899,17 +34277,23 @@

                          BosdynNavigateRoutestring

                          - + + + + + + + -
                          destination_waypoint_idstring A route for the robot to follow.ID of the waypoint to go to.
                          route_follow_paramsbosdyn.api.graph_nav.RouteFollowingParamsroute_gen_paramsbosdyn.api.graph_nav.RouteGenParams What should the robot do if it is not at the expected point in the route, or the route is
                          blocked.
                          Preferences on how to pick the route.
                          travel_paramsIf provided, this will write the last NavigateRouteResponse message to
                          a blackboard variable with this name.
                          If provided, this will write the last NavigateToResponse message to
                          a blackboard variable with this name.
                          route_blocked_behaviorbosdyn.api.graph_nav.RouteFollowingParams.RouteBlockedBehaviorDefines robot behavior when route is blocked. Defaults to reroute when route is blocked.

                          +

                          -
                          -

                          BosdynNavigateTo

                          -

                          Tell the robot to navigate to a waypoint.

                          +
                          +

                          BosdynPowerRequest

                          +

                          Make a robot power request

                          @@ -32933,47 +34317,64 @@

                          BosdynNavigateTostring +

                          + - + + +
                          requestbosdyn.api.PowerCommandRequest.Request ID of the waypoint to go to.The request to make. See the PowerCommandRequest documentation for details.

                          +
                          +
                          +

                          BosdynQueryStoredCaptures

                          +

                          Write the QueryStoredCapturesResponse for a given QueryParameters message to the blackboard.

                          + + - - - - + + + + + + - - + + - + - + - + - + - + - - + + - + + + + + + + -
                          route_gen_paramsbosdyn.api.graph_nav.RouteGenParamsPreferences on how to pick the route.FieldTypeLabelDescription
                          travel_paramsbosdyn.api.graph_nav.TravelParamsservice_namestring Parameters that define how to traverse and end the route.Name of the service to use.
                          navigation_feedback_response_blackboard_keyhost string If provided, this will write the last NavigationFeedbackResponse message
                          to a blackboard variable with this name.
                          Host machine of the directory server that the data acquisition service is registered with.
                          navigate_to_response_blackboard_keykey string If provided, this will write the last NavigateToResponse message to
                          a blackboard variable with this name.
                          The key of the variable that the QueryStoredCapturesResponse will be written to.
                          route_blocked_behaviorbosdyn.api.graph_nav.RouteFollowingParams.RouteBlockedBehaviorquery_paramsbosdyn.api.QueryParameters Defines robot behavior when route is blocked. Defaults to reroute when route is blocked.The QueryParameters message for the QueryStoredCapturesRequest that will be made.
                          capture_action_ids_formatBosdynQueryStoredCaptures.CaptureActionIdFormatrepeatedIf specified, these CaptureActionIds will be added to the QueryParameters at runtime.

                          +

                          -
                          -

                          BosdynPowerRequest

                          -

                          Make a robot power request

                          +
                          +

                          BosdynQueryStoredCaptures.CaptureActionIdFormat

                          +

                          Format strings that will be used together with the blackboard to generate +a CaptureActionId.

                          @@ -32985,22 +34386,16 @@

                          BosdynPowerRequeststring

                          - + - + - - - - - -
                          Name of the service to use.
                          hostgroup_name_format string Host machine the service is running on.
                          requestbosdyn.api.PowerCommandRequest.Request The request to make. See the PowerCommandRequest documentation for details.

                          @@ -33299,6 +34694,42 @@

                          ConstantResult

                          +

                          +
                          +

                          CreateMissionText

                          +

                          Creates a message, puts it in the current tick state messages, then ticks the child node. +The MissionText will remain active while the node is ticked and RUNNING. +Clients can retrieve active mission text through the GetState RPC.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          mission_textstringThe mission text to create. The mission text may contain blackboard variable formatting.
                          severitybosdyn.api.AlertData.SeverityLevelSeverity level of the text message.
                          Here are guidelines for severity as it pertains to missions:
                          INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to
                          download.
                          WARN: Something went wrong, but the mission will try to recover autonomously.
                          ERROR: Something went wrong, and the mission can't recover without human intervention.
                          Intervention is not time sensitive and can be resolved when convenient.
                          CRITICAL: Something went wrong, and the mission can't recover without human intervention.
                          Human needs to rescue the robot before battery runs out because it's not charging.
                          childNodeChild to tick after creating the mission text
                          The MissionText will be active as long as the child is ticked and RUNNING.

                          @@ -33342,7 +34773,7 @@

                          DataAcquisitionstring -Define a format string that will be used together with the blackboard to generate
                          a group_name. If a value is specified in this field, it will override the group_name value
                          specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard will
                          replace the keys in braces {}.
                          Example: "telop-{date}", where "date" is a blackboard variable.
                          Example: "{date}loop{loop_counter}", where "loop_counter" is a blackboard variable from a
                          Repeat node. +Define a format string that will be used together with the blackboard to generate
                          a group_name. If a value is specified in this field, it will override the group_name value
                          specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard will
                          replace the keys in braces {}.
                          Example: "teleop-{date}", where "date" is a blackboard variable.
                          Example: "{date}loop{loop_counter}", where "loop_counter" is a blackboard variable from a
                          Repeat node. request_name_in_blackboard @@ -33366,7 +34797,7 @@

                          DataAcquisitionbool -If set to false (default), this node will cancel an outgoing AcquireDataRequest when the node
                          is paused / stopped. When the node is resumed, it will restart the AcquireDataRequest.

                          If set to true, this node will NOT cancel outgoing AcquireDataRequest's when the node is
                          paused / stopped. When the node is resumed, it will check feedback on the original outgoing
                          AcquireDataReqeust. +If set to false (default), this node will cancel an outgoing AcquireDataRequest when the node
                          is paused / stopped. When the node is resumed, it will restart the AcquireDataRequest.

                          If set to true, this node will NOT cancel outgoing AcquireDataRequest's when the node is
                          paused / stopped. When the node is resumed, it will check feedback on the original outgoing
                          AcquireDataRequest. format_metadata @@ -33380,7 +34811,7 @@

                          DataAcquisition

                          DataAcquisitionOnInterruption

                          Send an AcquireDataRequest to the data acquisition service when the mission is interrupted. -Interuptions are anything that causes the mission to stop ticking automatically.

                          +Interruptions are anything that causes the mission to stop ticking automatically.

                          @@ -33431,7 +34862,7 @@

                          DataAcquisitionOnInterruptionbosdyn.api.Metadata

                          - + @@ -33506,7 +34937,7 @@

                          DefineBlackboardKeyValue

                          - + @@ -33545,7 +34976,13 @@

                          Dock<

                          - + + + + + + + @@ -33648,7 +35085,13 @@

                          ForDurationgoogle.protobuf.Duration

                          - + + + + + + + @@ -33694,7 +35137,7 @@

                          FormatBlackboardstring

                          - +
                          Interruption reason: Lease use error occured.Interruption reason: Lease use error occurred.
                          play_mission_timeout_metadatarepeatedThe list of variables that should be defined for this subtree,
                          with initial values.
                          The list of variables that should be defined for this subtree,
                          with initial values.

                          Note: Currently the mission service supports blackboard variable keys that contain ".", "[]",
                          and "()". In a future release, this will no longer be supported. Boston Dynamics recommends
                          using letters, numbers, and underscores for blackboard keys.
                          childdocking_station_id uint32 ID of docking station to dock at.
                          docking_station_id_blackboard_keystringBlackboard variable key that contains the docking station id.
                          childMaximum duration of mission execution time.
                          duration_name_in_blackboardstringBlackboard variable name that specifies duration. The value of this variable should be of
                          type google.protobuf.Duration.
                          childDefine a format string that will be used together with the blackboard to generate
                          string value. Values from the blackboard will replace the keys in braces {}, i.e.
                          {blackboard_variable_name}. We also allow some string formatting options, namely:

                          1) Floating point decimal places: {float_variable:.2f}
                          2) TBD

                          Select examples:

                          Format String: "telop-{date}"
                          Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                          Output: "teleop-2021-05-13"

                          Format String: "{date}loop{loop_counter}"
                          Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                          Blackboard: "loop_counter" is a blackboard variable with integer value: "3"
                          Output: "2021-05-13_loop_3"

                          Format String: "battery charge is: {state.power_state.locomotion_charge_percentage.value}"
                          Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                          the power_state submessage has a charge percentage of 30.2148320923085
                          Output: "battery charge is: 30.2158320923085"

                          Format String: "battery charge is:
                          {state.power_state.locomotion_charge_percentage.value:.2f}"
                          Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                          the power_state submessage has a charge percentage of 30.2148320923085
                          Output: "battery charge is: 30.21"

                          Format String: "the value is {x:.0f}"
                          Blackboard: "x" is a blackboard variable with float value: "2.71828"
                          Output: "the value is 3"
                          Define a format string that will be used together with the blackboard to generate
                          string value. Values from the blackboard will replace the keys in braces {}, i.e.
                          {blackboard_variable_name}. We also allow some string formatting options, namely:

                          1) Floating point decimal places: {float_variable:.2f}
                          2) TBD

                          Select examples:

                          Format String: "teleop-{date}"
                          Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                          Output: "teleop-2021-05-13"

                          Format String: "{date}loop{loop_counter}"
                          Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                          Blackboard: "loop_counter" is a blackboard variable with integer value: "3"
                          Output: "2021-05-13_loop_3"

                          Format String: "battery charge is: {state.power_state.locomotion_charge_percentage.value}"
                          Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                          the power_state submessage has a charge percentage of 30.2148320923085
                          Output: "battery charge is: 30.2158320923085"

                          Format String: "battery charge is:
                          {state.power_state.locomotion_charge_percentage.value:.2f}"
                          Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                          the power_state submessage has a charge percentage of 30.2148320923085
                          Output: "battery charge is: 30.21"

                          Format String: "the value is {x:.0f}"
                          Blackboard: "x" is a blackboard variable with float value: "2.71828"
                          Output: "the value is 3"

                          @@ -34042,6 +35485,18 @@

                          Node +create_mission_text +CreateMissionText + + + + +bosdyn_query_stored_captures +BosdynQueryStoredCaptures + + + + parameter_values KeyValue repeated @@ -34136,6 +35591,12 @@

                          PromptThe set of options that can be chosen for this prompt. +options_list_in_blackboard +string + +Key to an OptionsList protobuf object on the blackboard. The variable is only read when
                          the node starts meaning options cannot change while the node is running. + + custom_params bosdyn.api.DictParam.Spec @@ -34264,7 +35725,7 @@

                          RemoteGrpcstring -Define a format string that will be used together with the blackboard to generate
                          a group_name. If a value is specified in this field, it will override the group_name value
                          specified in the group_name of the TickRequest. Values from the blackboard will
                          replace the keys in braces {}.
                          Example: "telop-{date}", where "date" is a blackboard variable.
                          Example: "{date}loop{loop_counter}", where "loop_counter" is a blackboard variable from a
                          Repeat node. +Define a format string that will be used together with the blackboard to generate
                          a group_name. If a value is specified in this field, it will override the group_name value
                          specified in the group_name of the TickRequest. Values from the blackboard will
                          replace the keys in braces {}.
                          Example: "teleop-{date}", where "date" is a blackboard variable.
                          Example: "{date}loop{loop_counter}", where "loop_counter" is a blackboard variable from a
                          Repeat node. params @@ -34476,7 +35937,7 @@

                          SetBlackboardKeyValue repeated -The key of the KeyValue is the name of the blackboard variable.
                          The value will be dereferenced and converted into a value type at runtime
                          inside this node's tick function. For example, if the value is a runtime
                          variable, that variable will be evaluated at tick time, and then stored into
                          the blackboard. If the value is another blackboard variable, that blackboard
                          variable's value will be copied into the variable specified by the key. +The key of the KeyValue is the name of the blackboard variable.
                          The value will be dereferenced and converted into a value type at runtime
                          inside this node's tick function. For example, if the value is a runtime
                          variable, that variable will be evaluated at tick time, and then stored into
                          the blackboard. If the value is another blackboard variable, that blackboard
                          variable's value will be copied into the variable specified by the key.

                          Note: Currently the mission service supports blackboard variable keys that contain ".", "[]",
                          and "()". In a future release, this will no longer be supported. Boston Dynamics recommends
                          using letters, numbers, and underscores for blackboard keys.

                          @@ -34610,6 +36071,12 @@

                          Sleep Number of seconds to sleep for. +duration_name_in_blackboard +string + +Blackboard variable name that specifies duration. The value of this variable should be of
                          type google.protobuf.Duration. + + restart_after_stop bool @@ -34915,16 +36382,16 @@

                          StoreMetadata

                          Switch

                          Run a specific child based on a specified pivot_value.

                          -

                          This node exists because of a subtle implmentation detail in Selector(always_restart = true). +

                          This node exists because of a subtle implementation detail in Selector(always_restart = true). The astute reader might believe that they can construct a switch node by using a selector with sequences & conditions as children. This is ALMOST true, EXCEPT that a selector (with always_restart = true) can leave multiple children in the running state IF:

                          • A later selector child was RUNNING last tick

                          • -
                          • An eariler selector child returns RUNNING this tick

                          • +
                          • An earlier selector child returns RUNNING this tick

                          Even though the later selector child won’t be ticked, it will still be left in the running state -and not restart when the selector advances to it again later. Sometimes this is desireable, +and not restart when the selector advances to it again later. Sometimes this is desirable, sometimes it isn’t. Switch is constrained to only have one child running, and if the switch ever switches children and return to a previously running child, that child will be restarted.

                          @@ -35747,6 +37214,40 @@

                          KeyValue

                          + +
                          +

                          MissionText

                          +

                          Nodes can pass arbitrary text back through the mission state.

                          +

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          textstringThe text of the message.
                          severitybosdyn.api.AlertData.SeverityLevelSeverity level of the text message.
                          Here are guidelines for severity as it pertains to missions:
                          INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to
                          download.
                          WARN: Something went wrong, but the mission will try to recover autonomously.
                          ERROR: Something went wrong, and the mission can't recover without human intervention.
                          Intervention is not time sensitive and can be resolved when convenient.
                          CRITICAL: Something went wrong, and the mission can't recover without human intervention.
                          Human needs to rescue the robot before battery runs out because it's not charging.
                          node_idint64The node which produced the update message.

                          @@ -36121,7 +37622,7 @@

                          ComputeParametersImageCaptureAndSource repeated -For some computer vision operations a number of reference images are required along with the
                          input image. These images might have been taken months ago, not neccessarilly taken right
                          now. +For some computer vision operations a number of reference images are required along with the
                          input image. These images might have been taken months ago, not necessarily taken right
                          now. custom_params @@ -36962,7 +38463,7 @@

                          NetworkComputeBridge

                          NetworkComputeBridgeWorker

                          -

                          Set of RPCs for workers of the network compute bridge. This is seperate from the RPCs for the +

                          Set of RPCs for workers of the network compute bridge. This is separate from the RPCs for the on-robot network compute bridge so that if they need to diverge in the future it is possible to do so.

                          @@ -37389,7 +38890,7 @@

                          ListPayloadsResponse

                          MomentOfIntertia

                          -

                          Structure describing the moment of intertia of a body. The xx, yy, zz fields +

                          Structure describing the moment of inertia of a body. The xx, yy, zz fields are the diagonal of the MOI tensor, and the xy, xz, and yz fields are the off diagonal terms.

                          @@ -37820,7 +39321,7 @@

                          PayloadEstimationCommand.Feedback.Status

                          @@ -38163,12 +39664,12 @@

                          GetPayloadAuthTokenResponse.Status

                          @@ -38260,7 +39761,7 @@

                          UpdatePayloadAttachedResponse.Status

                          @@ -38456,7 +39957,8 @@

                          ListPointCloudSourcesRequest

                          ListPointCloudSourcesResponse

                          -

                          The GetPointCloud response message which returns any point cloud data associated with that service.

                          +

                          The GetPointCloud response message which returns any point cloud data associated with that +service.

                          @@ -38477,7 +39979,7 @@

                          ListPointCloudSourcesResponsePointCloudSource

                          - +
                          repeatedThe set of PointCloudSources available from this service.
                          May be empty if the service serves no point clouds (e.g., if no sensors were found on startup).
                          The set of PointCloudSources available from this service.
                          May be empty if the service serves no point clouds (e.g., if no sensors were found on
                          startup).

                          @@ -38645,7 +40147,7 @@

                          PointCloudSourcestring -The name of the point cloud source. This is intended to be unique accross all point cloud sources,
                          and should be human readable. +The name of the point cloud source. This is intended to be unique across all point cloud
                          sources, and should be human readable. frame_name_sensor @@ -38688,7 +40190,7 @@

                          PointCloud.EncodingListPointCloudSourcesRequest ListPointCloudSourcesResponse -Obtain the list of PointCloudSources for this given service.
                          Note that there may be multiple PointCloudServices running, each with their own set of sources
                          The name field keys access to individual point clouds when calling GetPointCloud. +Obtain the list of PointCloudSources for this given service.
                          Note that there may be multiple PointCloudServices running, each with their own set of
                          sources The name field keys access to individual point clouds when calling GetPointCloud. GetPointCloud @@ -38838,7 +40340,7 @@

                          FanPowerCommandFeedbackResponsegoogle.protobuf.Timestamp -Based on duration, the time that this command was intended to stop being in effect. If
                          stopped/overriden prematurely, early_stop_time will reflect the actual time the command
                          stopped being in effect +Based on duration, the time that this command was intended to stop being in effect. If
                          stopped/overridden prematurely, early_stop_time will reflect the actual time the command
                          stopped being in effect early_stop_time @@ -39209,7 +40711,7 @@

                          FanPowerCommandResponse.Statusint32 -Signficant changes to software. +Significant changes to software. minor_version @@ -40600,7 +42102,7 @@

                          BatteryState

                          BehaviorFault

                          -

                          The details of what the behavior fault consistents of, and the id for the fault. The unique +

                          The details of what the behavior fault consists of, and the id for the fault. The unique behavior_fault_id can be used to clear the fault in robot command service ClearBehaviorFault rpc.

                          @@ -40641,7 +42143,7 @@

                          BehaviorFault

                          BehaviorFaultState

                          -

                          This describes any current behaviror faults on the robot, which would block any robot commands +

                          This describes any current behavior faults on the robot, which would block any robot commands from going through. These can be cleared using the ClearBehaviorFault rpc in the robot command service.

                          @@ -40661,6 +42163,28 @@

                          BehaviorFaultState

                          + +
                          +

                          BehaviorState

                          +

                          The current state of the behavior

                          +

                          + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          stateBehaviorState.State

                          @@ -40685,7 +42209,7 @@

                          CombinedJointStatesfloat repeated -The ordering of joints in these repeated fields are the same as (TODO where) +The ordering of joints in these repeated fields follows the order defined by the
                          bosdyn.api.spot.JointIndex enum. velocity @@ -41092,7 +42616,7 @@

                          KinematicStateFrameTreeSnapshot -A tree-based collection of transformations. See
                          https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual
                          documentation on frames. The snapshop will include the following frames:
                          “odom”: An inertial frame that estimates the fixed location in the world (relative to where
                          the robot is booted up) using the kinematics of the robot.

                          “vision”: An inertial frame that estimates the fixed location in the world (relative to where
                          the robot is booted up), and is calculated using visual analysis of the world and the robot’s
                          odometry.

                          “body”: A frame describing the robot body’s position and orientation. The frame’s origin is
                          at the geometric center of the hips with the x-axis pointing from the hip center to the
                          middle of the front hips.

                          “flat_body”: A gravity-aligned frame describing the robot body’s position and orientation.
                          The position is at the robot’s center, and the x/y-axes lie flat in the “odom” frame x-y
                          plane. Specifically, the x-axis is the normalized projection of the robot’s “body” frame
                          x-axis to the “odom” x-y plane.

                          "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be
                          converted into a plane (a point and normal).

                          For robots with a SpotArm attached, see
                          https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual
                          documentation on SpotArm specific frames. The snaphot will also include the following frames:
                          "hand": The hand frame is used by many of the ArmCommand requests available in the API. The
                          origin is slightly in front of the gripper's palm plate and its oreination is aligned with
                          'arm0.link_wr1'.

                          "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation.
                          The origin of the frame is at the end of the link on its rotational axis. It's x-axis is
                          aligned with the rotational axis.

                          All transforms within the snapshot are at the acquisition time of kinematic state. +A tree-based collection of transformations. See
                          https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual
                          documentation on frames. The snapshot will include the following frames:
                          “odom”: An inertial frame that estimates the fixed location in the world (relative to where
                          the robot is booted up) using the kinematics of the robot.

                          “vision”: An inertial frame that estimates the fixed location in the world (relative to where
                          the robot is booted up), and is calculated using visual analysis of the world and the robot’s
                          odometry.

                          “body”: A frame describing the robot body’s position and orientation. The frame’s origin is
                          at the geometric center of the hips with the x-axis pointing from the hip center to the
                          middle of the front hips.

                          “flat_body”: A gravity-aligned frame describing the robot body’s position and orientation.
                          The position is at the robot’s center, and the x/y-axes lie flat in the “odom” frame x-y
                          plane. Specifically, the x-axis is the normalized projection of the robot’s “body” frame
                          x-axis to the “odom” x-y plane.

                          "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be
                          converted into a plane (a point and normal).

                          “feet_center”: A gravity-aligned frame representing the robot's footprint. The position is at
                          the geometric center of the robot's feet. The x-axis is aligned such that it points from the
                          center of the rear feet to the center of the front feet in the x-y plane.

                          For robots with a SpotArm attached, see
                          https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual
                          documentation on SpotArm specific frames. The snapshot will also include the following
                          frames: "hand": The hand frame is used by many of the ArmCommand requests available in the
                          API. The origin is slightly in front of the gripper's palm plate and its orientation is
                          aligned with 'arm0.link_wr1'.

                          "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation.
                          The origin of the frame is at the end of the link on its rotational axis. It's x-axis is
                          aligned with the rotational axis.

                          All transforms within the snapshot are at the acquisition time of kinematic state. velocity_of_body_in_vision @@ -41376,14 +42900,14 @@

                          RobotLinkModelRequestlink_name string -The link name of which the OBJ file shoould represent. +The link name of which the OBJ file should represent.

                          RobotLinkModelResponse

                          -

                          The RobotLinkModel response message returns the OBJ file for a specifc robot link.

                          +

                          The RobotLinkModel response message returns the OBJ file for a specific robot link.

                          @@ -41573,6 +43097,12 @@

                          RobotStateBehaviorState +

                          + +
                          Robot behavior states

                          @@ -42223,6 +43753,45 @@

                          BehaviorFault.StatusFault is currently not clearable +

                          +

                          +
                          +

                          BehaviorState.State

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          NameNumberDescription
                          STATE_UNKNOWN0Unknown behavior state
                          STATE_NOT_READY1The robot is not ready to move
                          STATE_TRANSITION2The robot is in transition from sit to stand or from stand to sit
                          STATE_STANDING3The robot is standing in place
                          STATE_STEPPING4The robot is stepping

                          @@ -42757,7 +44326,7 @@

                          RobotStateServiceRobotLinkModelRequest RobotLinkModelResponse -Returns the OBJ file for a specifc robot link. Intended to be called after
                          GetRobotHardwareConfiguration, using the link names returned by that call. +Returns the OBJ file for a specific robot link. Intended to be called after
                          GetRobotHardwareConfiguration, using the link names returned by that call.

                          @@ -42910,7 +44479,7 @@

                          CustomParam.SpecDictParam.Spec -This parameter is actually a set of sub-parameters.
                          Useful for setting up a paramter hierarchy, e.g.
                          param A
                          / \
                          / \
                          param A.B param A.C +This parameter is actually a set of sub-parameters.
                          Useful for setting up a parameter hierarchy, e.g.
                          param A
                          / \
                          / \
                          param A.B param A.C list_spec @@ -43330,10 +44899,10 @@

                          OneOfParamRegionOfInterestParam.ServiceAndSource -Sometimes, which image the ROI will reference is obvious:
                          - Image services
                          - Network compute bridge workers that accept a single image

                          Othertimes, it might not be clear which image an ROI is supposed to reference. In those
                          cases, the Spec for the ROI can advertise which image it wants. +Sometimes, which image the ROI will reference is obvious:
                          - Image services
                          - Network compute bridge workers that accept a single image

                          Other times, it might not be clear which image an ROI is supposed to reference. In those
                          cases, the Spec for the ROI can advertise which image it wants. default_area @@ -43567,7 +45136,7 @@

                          RegionOfInterestParam.Specbool -Area may eventually contain many shape primatives. In that case, services can constrain
                          which primatives they accept. These will be opt in, so that adding new primative types
                          won't be automatically advertised by older services. +Area may eventually contain many shape primitives. In that case, services can constrain
                          which primitives they accept. These will be opt in, so that adding new primitive types
                          won't be automatically advertised by older services.

                          @@ -43644,7 +45213,7 @@

                          UserInterfaceInfostring -This string is an optional display name for the UI. If left unset, UI will use the
                          DictParam key to label the corresponding UI element. DictParam key is meant to be
                          machine readable, and shouldn't change accross releases. display_name is meant to be
                          human readable, and can change from release to release if needed. +This string is an optional display name for the UI. If left unset, UI will use the
                          DictParam key to label the corresponding UI element. DictParam key is meant to be
                          machine readable, and shouldn't change across releases. display_name is meant to be
                          human readable, and can change from release to release if needed. description @@ -43820,7 +45389,7 @@

                          ServiceFaultServiceFault.Severity -The severity level will have some indication of the potential breakage
                          resulting from the fault. For example, a fault associated with payload
                          X and severity level SEVERITY_INFO may indicate the payload is in an
                          unexpected state but still operational. However, a fault with serverity
                          level SEVERITY_CRITICAL may indicate the payload is no
                          longer operational. +The severity level will have some indication of the potential breakage
                          resulting from the fault. For example, a fault associated with payload
                          X and severity level SEVERITY_INFO may indicate the payload is in an
                          unexpected state but still operational. However, a fault with severity
                          level SEVERITY_CRITICAL may indicate the payload is no
                          longer operational. onset_timestamp @@ -43841,7 +45410,7 @@

                          ServiceFault

                          Information necessary to uniquely specify a service fault. A service fault typically is associated with a service running on the robot or a -payload. Occassionally, the fault may pertain to a payload but no specific service +payload. Occasionally, the fault may pertain to a payload but no specific service on the payload. In that situation, no service_name should not be specified and instead a payload_guid should be specified. Otherwise, in the standard case of a service originating fault, only the service_name should be specified and the payload_guid @@ -44017,7 +45586,7 @@

                          TriggerServiceFaultResponse.Statusgoogle.protobuf.BoolValue + + + + +enable_body_motion +google.protobuf.BoolValue + + + + +body_x_multiplier +google.protobuf.DoubleValue + + + + +body_y_multiplier +google.protobuf.DoubleValue + + + + +body_z_multiplier +google.protobuf.DoubleValue + + + + +body_roll_multiplier +google.protobuf.DoubleValue + + + + +body_pitch_multiplier +google.protobuf.DoubleValue + + + + +body_yaw_multiplier +google.protobuf.DoubleValue + + + + +enable_swings_xy +google.protobuf.BoolValue + + +

                          @@ -44859,6 +46482,45 @@

                          ButtCircleParams

                          +

                          +
                          +

                          BuzzerNoteParams

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          noteBuzzerNoteParams.Note
                          sharpgoogle.protobuf.BoolValue
                          flatgoogle.protobuf.BoolValue
                          octavegoogle.protobuf.Int32Value

                          @@ -45204,7 +46866,7 @@

                          CustomGaitParamsgoogle.protobuf.DoubleValue -Constant posture.
                          For a phase-dependent posture, combine with a Body move. +Constant posture.
                          For a phase-dependent posture, combine with a Body move.
                          Actually hip height regardless of payload configuration. body_translation_offset @@ -45351,10 +47013,16 @@

                          CustomGaitParamsgoogle.protobuf.BoolValue + +Using an animated cycle to define the gait style + + animated_cycle_params AnimatedCycleParams -Using an animated cycle to define the gait style +

                          @@ -45726,10 +47394,16 @@

                          GotoParamsgoogle.protobuf.BoolValue + +If true, motion is specified relative to location at move start.
                          If false, motion is specified in the dance frame. + + absolute_position bosdyn.api.Vec2Value - +Ignored if absolute = false. absolute_yaw @@ -45738,6 +47412,18 @@

                          GotoParamsbosdyn.api.Vec2Value + +Ignored if absolute = true; + + +relative_yaw +google.protobuf.DoubleValue + + + + step_position_stiffness google.protobuf.DoubleValue @@ -46489,6 +48175,144 @@

                          RunningManParams

                          +

                          +
                          +

                          SetAllColorParams

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          front_center_colorColor
                          all_same_as_centergoogle.protobuf.BoolValue
                          status_left_colorColor
                          status_right_colorColor
                          front_left_colorColor
                          front_right_colorColor
                          back_left_colorColor
                          back_right_colorColor
                          fade_in_slicesgoogle.protobuf.DoubleValue
                          fade_out_slicesgoogle.protobuf.DoubleValue

                          +
                          +
                          +

                          SetAudioVisualColorParams

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          FieldTypeLabelDescription
                          front_center_colorColor
                          all_same_as_centergoogle.protobuf.BoolValue
                          front_left_colorColor
                          front_right_colorColor
                          back_left_colorColor
                          back_right_colorColor
                          fade_in_slicesgoogle.protobuf.DoubleValue
                          fade_out_slicesgoogle.protobuf.DoubleValue

                          @@ -46637,7 +48461,7 @@

                          StepParamsbosdyn.api.Vec3Value -Where should the swing foot go? This vector should be described in a gravity-aligned body
                          frame relative to the centerpoint of the swing. If set to {0,0,0}, uses the default swing
                          path. +Where should the swing foot go? This vector should be described in a gravity-aligned body
                          frame relative to the center-point of the swing. If set to {0,0,0}, uses the default swing
                          path. swing_height @@ -47028,6 +48852,60 @@

                          ArmMoveFrame

                          +

                          +
                          +

                          BuzzerNoteParams.Note

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          NameNumberDescription
                          NOTE_UNKNOWN0
                          NOTE_C1
                          NOTE_D2
                          NOTE_E3
                          NOTE_F4
                          NOTE_G5
                          NOTE_A6
                          NOTE_B7

                          @@ -49337,7 +51215,7 @@

                          MoveInfobool - +Controls the face (status) lights. controls_annotations @@ -49346,6 +51224,18 @@

                          MoveInfobool + + + + +controls_audio_visual_buzzer +bool + + + + is_looping bool @@ -49602,6 +51492,24 @@

                          MoveParamsSetAudioVisualColorParams + + + + +set_all_color_params +SetAllColorParams + + + + +buzzer_note_params +BuzzerNoteParams + + + + leg_joint_params LegJointParams @@ -50053,6 +51961,16 @@

                          ChoreographerDisplayInfo.Category

                          @@ -50706,13 +52624,13 @@

                          ChoreographyServiceDeleteSequenceRequest DeleteSequenceResponse -Delete a retained choreography sequence from the collection of user uploaded
                          choreography sequences. +Delete a retained choreography sequence from the collection of user uploaded
                          choreography sequences. SaveSequence SaveSequenceRequest SaveSequenceResponse -Save a user uploaded choreography sequence to the robots collection of
                          retained choreography sequences. +Save a user uploaded choreography sequence to the robots collection of
                          retained choreography sequences. ModifyChoreographyInfo @@ -51759,7 +53677,7 @@

                          BodyControlParamsbosdyn.api.SE3Trajectory -Desired base offset relative to the footprint pseudo-frame.
                          The footprint pseudo-frame is a gravity aligned frame with its origin located at the
                          geometric center of the feet in the X-Y axis, and at the nominal height of the hips in
                          the Z axis. The yaw of the frame (wrt the world) is calcuated by the average foot
                          locations, and is aligned with the feet. +Desired base offset relative to the footprint pseudo-frame.
                          The footprint pseudo-frame is a gravity aligned frame with its origin located at the
                          geometric center of the feet in the X-Y axis, and at the nominal height of the hips in
                          the Z axis. The yaw of the frame (wrt the world) is calculated by the average foot
                          locations, and is aligned with the feet. body_assist_for_manipulation @@ -51785,7 +53703,7 @@

                          BodyControlParams

                          BodyControlParams.BodyAssistForManipulation

                          Instead of directly specify the base offset trajectory, these options allow the robot to -calcuate offsets based on the hand’s location. If the robot does not have a SpotArm +calculate offsets based on the hand’s location. If the robot does not have a SpotArm attached, sending this request will have no effect.

                          @@ -51972,6 +53890,12 @@

                          MobilityParamsMobilityParams.HazardDetectionMode +

                          + +
                          The selected option for hazard detection.

                          @@ -52044,7 +53968,7 @@

                          TerrainParamsgoogle.protobuf.DoubleValue -Terrain coefficient of friction user hint. This value must be postive and will clamped if
                          necessary on the robot side. Best suggested values lie in the range between 0.4 and 0.8
                          (which is the robot's default.) +Terrain coefficient of friction user hint. This value must be positive and will be clamped if
                          necessary on the robot side. Best suggested values lie in the range between 0.4 and 0.8
                          (which is the robot's default.) enable_grated_floor @@ -52200,6 +54124,46 @@

                          LocomotionHint

                          +

                          +
                          +

                          MobilityParams.HazardDetectionMode

                          +

                          Semantic hazard detection can detect and classify objects or regions in the world as +obstacles or areas to avoid that would not normally be classified as such. Obstacle avoidance +still needs to be on for the robot to avoid these additional hazards. A CORE I/O is necessary +for semantic hazard detection. Using HAZARD_DETECTION_MODE_COST will prevent detected hazards +from becoming blocking obstacles, and instead add areas to try and avoid when navigating +autonomously.

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          NameNumberDescription
                          HAZARD_DETECTION_MODE_UNKNOWN0
                          HAZARD_DETECTION_MODE_OFF1
                          HAZARD_DETECTION_MODE_ON2
                          HAZARD_DETECTION_MODE_COST3

                          @@ -52233,7 +54197,12 @@

                          MobilityParams.StairsMode

                          @@ -52273,7 +54242,7 @@

                          SwingHeight

                          @@ -52492,130 +54461,6 @@

                          FootHeightCheckResultThe difference between foot height and mean feet height (m). -

                          -

                          -
                          -

                          GripperCameraCalibrationCommandRequest

                          -

                          Request for the GripperCameraCalibrationCommand service.

                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          FieldTypeLabelDescription
                          headerbosdyn.api.RequestHeaderCommon request header.
                          leasebosdyn.api.LeaseThe Lease to show ownership of the robot. Lease required to issue any
                          GripperCameraCalibration command.
                          commandGripperCameraCalibrationCommandRequest.CommandThe command describing what the GripperCameraCalibration service should do.

                          -
                          -
                          -

                          GripperCameraCalibrationCommandResponse

                          -

                          Response for the GripperCameraCalibrationCommand service.

                          - - - - - - - - - - - - - - - - - - - - - - - -
                          FieldTypeLabelDescription
                          headerbosdyn.api.ResponseHeaderCommon response header.
                          lease_use_resultbosdyn.api.LeaseUseResultDetails about how the lease was used.

                          -
                          -
                          -

                          GripperCameraCalibrationFeedbackRequest

                          -

                          Request for the GripperCameraCalibrationFeedback service.

                          - - - - - - - - - - - - - - - - - -
                          FieldTypeLabelDescription
                          headerbosdyn.api.RequestHeaderCommon request header.

                          -
                          -
                          -

                          GripperCameraCalibrationFeedbackResponse

                          -

                          Response for the GripperCameraCalibrationFeedback service.

                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          FieldTypeLabelDescription
                          headerbosdyn.api.ResponseHeaderCommon response header.
                          statusGripperCameraCalibrationFeedbackResponse.StatusStatus of camera calibration procedure.
                          progressfloatThe approximate progress of the calibration routine, range [0-1].
                          Status takes precedence over progress value.
                          lease_use_resultbosdyn.api.LeaseUseResultDetails about how the lease was used.

                          @@ -53273,124 +55118,6 @@

                          FootHeightCheckResult.Status

                          -

                          -
                          -

                          GripperCameraCalibrationCommandRequest.Command

                          - - - - - - - - - - - - - - - - - - - - - - - - - -
                          NameNumberDescription
                          COMMAND_UNKNOWN0Unused enum.
                          COMMAND_START1Start calibration routine.
                          COMMAND_CANCEL2Cancel calibration routine.

                          -
                          -
                          -

                          GripperCameraCalibrationFeedbackResponse.Status

                          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          NameNumberDescription
                          STATUS_UNKNOWN0Unused enum.
                          STATUS_PROCESSING1The robot is actively running calibration routine.
                          STATUS_SUCCESS2The robot successfully ran calibration routine and
                          is ready to use again.
                          STATUS_NEVER_RUN3Calibration routine has never been run. No feedback to give.
                          STATUS_USER_CANCELED4Calibration routine has been canceled mid-routine.
                          STATUS_POWER_ERROR5The robot is not powered on.
                          STATUS_LEASE_ERROR6Ownership error during calibration.
                          STATUS_CALIBRATION_ERROR8Calibration procedure produced an invalid result.
                          This may occur in poor lighting conditions or if
                          calibration target moved during calibration
                          procedure.
                          STATUS_INITIALIZATION_ERROR9Something went wrong during initialization. Try running the command again or, if it
                          persists, restarting the robot.
                          STATUS_INTERNAL_ERROR10Something extraordinary happened. Try power cycling robot or contact BD.
                          STATUS_TARGET_NOT_CENTERED11Target partially, but not fully, in view when starting calibration.
                          STATUS_TARGET_NOT_IN_VIEW12Target not visible when starting calibration.
                          STATUS_TARGET_NOT_GRAVITY_ALIGNED13Target not aligned with gravity when starting calibration.
                          STATUS_TARGET_UPSIDE_DOWN14Target upside down when starting calibration.
                          STATUS_STUCK15The robot took too long to reach the goal pose.

                          @@ -53463,7 +55190,7 @@

                          JointKinematicCheckResult.Error

                          @@ -53620,7 +55347,7 @@

                          SpotCheckCommandResponse.Status

                          @@ -53857,18 +55584,6 @@

                          SpotCheckServiceCameraCalibrationFeedbackResponse Check the status of the camera calibration procedure. - -GripperCameraCalibrationCommand -GripperCameraCalibrationCommandRequest -GripperCameraCalibrationCommandResponse -Send a command to the GripperCameraCalibration service. - - -GripperCameraCalibrationFeedback -GripperCameraCalibrationFeedbackRequest -GripperCameraCalibrationFeedbackResponse -Check the status of the GripperCameraCalibration procedure. -

                          Top

                          @@ -54850,7 +56565,7 @@

                          Camera.PinholeIntrinsicsfloat -The following 4 parameters are radial distortion coefficeints to 4 orders.
                          See: https://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction
                          If all 4 of these values are 0, do not apply any correction. +The following 4 parameters are radial distortion coefficients to 4 orders.
                          See: https://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction
                          If all 4 of these values are 0, do not apply any correction. k2 @@ -55429,7 +57144,7 @@

                          ScreenDescriptionstring -Unique identifer for a screen. +Unique identifier for a screen.

                          @@ -55620,7 +57335,7 @@

                          IrColorMap.ColorMap

                          @@ -55765,7 +57480,7 @@

                          GetBITStatusResponse

                          GetBITStatusResponse.Degradation

                          -

                          Degredations are not necessesarily faults; a unit +

                          Degradations are not necessarily faults; a unit with no installed mechanical PTZ will behave differently, but nothing’s actually wrong.

                          @@ -55919,7 +57634,7 @@

                          Temperature

                          GetBITStatusResponse.Degradation.DegradationType

                          -

                          Systems that can experience performance degredations.

                          +

                          Systems that can experience performance degradations.

                          @@ -57213,7 +58928,7 @@

                          CyclePowerRequestPowerStatus

                          - +
                          status indicates the devices for which cycle-power is requested
                          'true' for cycle-power, else no effect
                          power cycle will not be performed on a given device if its state is power-off prior to this call
                          status indicates the devices for which cycle-power is requested
                          'true' for cycle-power, else no effect
                          power cycle will not be performed on a given device if its state is power-off prior to this
                          call

                          @@ -58049,7 +59764,7 @@

                          AudioServiceLoadSoundRequest stream LoadSoundResponse -LoadSound loads a sound effect into the system's sound table. The stream must contain a wav
                          file, with a RIFF header describing it. The arguement is a stream, to allow for sounds that
                          are bigger then the MTU of the network; in this case, the complete stream must contain the
                          entire sound. If the stream ends early, an error will be returned. The header and sound
                          fields of the entire stream must be the same. +LoadSound loads a sound effect into the system's sound table. The stream must contain a wav
                          file, with a RIFF header describing it. The argument is a stream, to allow for sounds that
                          are bigger then the MTU of the network; in this case, the complete stream must contain the
                          entire sound. If the stream ends early, an error will be returned. The header and sound
                          fields of the entire stream must be the same. DeleteSound @@ -58189,7 +59904,7 @@

                          HealthServiceGetBITStatusRequest GetBITStatusResponse -GetBitStatus returns two lists; a list of system events, and a list of ways that the system
                          is degraded; for instance, a degredation may include a missing PTZ unit, or a missing USB
                          storage device. +GetBitStatus returns two lists; a list of system events, and a list of ways that the system
                          is degraded; for instance, a degradation may include a missing PTZ unit, or a missing USB
                          storage device. ClearBITEvents @@ -58269,7 +59984,7 @@

                          MediaLogServiceDebugRequest DebugResponse -EnableDebug starts the periodic logging of health data to the database; this increases disk
                          utilization, but will record data that is useful post-mortum +EnableDebug starts the periodic logging of health data to the database; this increases disk
                          utilization, but will record data that is useful post-mortem ListCameras @@ -59805,7 +61520,7 @@

                          SE3TrajectoryPointSE3Velocity -Optional velocity (linear and angular) the robot will try and achieve. +Optional velocity (linear and angular) the robot will try and achieve.
                          Linear and angular velocity is expressed with respect to the base frame of the pose. time_since_reference @@ -60896,7 +62611,7 @@

                          MutateWorldObjectResponse

                          NoGoRegionProperties

                          -

                          A box no-go region

                          +

                          A box or circle no-go region

                          @@ -60914,6 +62629,12 @@

                          NoGoRegionProperties

                          + + + + + + @@ -61075,7 +62796,7 @@

                          WorldObjectStaircaseProperties

                          - + diff --git a/docs/html/py-modindex.html b/docs/html/py-modindex.html index 634b35df5..8da1a4842 100644 --- a/docs/html/py-modindex.html +++ b/docs/html/py-modindex.html @@ -3,7 +3,7 @@ - Python Module Index — Spot 4.0.3 documentation + Python Module Index — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                          - 4.0.3 + 4.1.0
                          @@ -51,7 +51,8 @@
                          • Concepts diff --git a/docs/html/python/README.html b/docs/html/python/README.html index 78435a16e..300f8e18d 100644 --- a/docs/html/python/README.html +++ b/docs/html/python/README.html @@ -4,7 +4,7 @@ - Boston Dynamics Python Reference Guide — Spot 4.0.3 documentation + Boston Dynamics Python Reference Guide — Spot 4.1.0 documentation @@ -22,7 +22,7 @@ - + @@ -38,7 +38,7 @@
                            - 4.0.3 + 4.1.0
                            @@ -51,7 +51,8 @@
                            • Concepts diff --git a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.html b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.html index a47590475..5234072b2 100644 --- a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.html +++ b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.html @@ -4,7 +4,7 @@ - Python Choreography Client — Spot 4.0.3 documentation + Python Choreography Client — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                              - 4.0.3 + 4.1.0
                              @@ -51,7 +51,8 @@
                              • Concepts diff --git a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.html b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.html index 96020caa1..e9fe1a21b 100644 --- a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.html +++ b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.html @@ -4,7 +4,7 @@ - Animation File Conversion Helpers — Spot 4.0.3 documentation + Animation File Conversion Helpers — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                - 4.0.3 + 4.1.0
                                @@ -51,7 +51,8 @@
                                • Concepts diff --git a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.html b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.html index 614c10eab..b6a05fd7f 100644 --- a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.html +++ b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.html @@ -4,7 +4,7 @@ - Animation File To Proto — Spot 4.0.3 documentation + Animation File To Proto — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                  - 4.0.3 + 4.1.0
                                  @@ -51,7 +51,8 @@
                                  • Concepts @@ -619,7 +624,8 @@
                                    Parameters:
                                    • animated_file (string) – The filepath to the animation text file.

                                    • -
                                    • animate_move_params_file (string) – [Optional] The filepath to a default set of move parameters.

                                    • +
                                    • animate_move_params_file (string) – [Required if needing default param values. Otherwise optional] +The filepath to a default set of move parameters or move parameters as a string.

                                    Returns:
                                    diff --git a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.html b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.html index 2adc2ec96..122f8568e 100644 --- a/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.html +++ b/docs/html/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.html @@ -4,7 +4,7 @@ - Choreography — Spot 4.0.3 documentation + Choreography — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                    - 4.0.3 + 4.1.0
                                    @@ -51,7 +51,8 @@
                                    • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/README.html b/docs/html/python/bosdyn-client/src/bosdyn/client/README.html index 85fb276e4..ed04a8477 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/README.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/README.html @@ -4,7 +4,7 @@ - Python Client — Spot 4.0.3 documentation + Python Client — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                      - 4.0.3 + 4.1.0
                                      @@ -51,7 +51,8 @@
                                      • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback.html b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback.html index c306a2ffd..dcaf84400 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback.html @@ -4,7 +4,7 @@ - Area Callback — Spot 4.0.3 documentation + Area Callback — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                        - 4.0.3 + 4.1.0
                                        @@ -51,7 +51,8 @@
                                        • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.html b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.html index 8b7dcb34b..4870d67af 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.html @@ -4,7 +4,7 @@ - Area Callback Region Handler Base — Spot 4.0.3 documentation + Area Callback Region Handler Base — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                          - 4.0.3 + 4.1.0
                                          @@ -51,7 +51,8 @@
                                          • Concepts @@ -574,7 +579,7 @@
                                            -begin(request: BeginCallbackRequest) <google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper object at 0x7f2560f40580>[source]
                                            +begin(request: BeginCallbackRequest) <google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper object at 0x7f7777d187f0>[source]

                                            Validates that configuration passed to BeginCallback is valid.

                                            Parameters:
                                            @@ -790,7 +795,7 @@
                                            -internal_set_stage(stage: <google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper object at 0x7f2560f404c0>)[source]
                                            +internal_set_stage(stage: <google.protobuf.internal.enum_type_wrapper.EnumTypeWrapper object at 0x7f7777d1abc0>)[source]

                                            Update the stage via an incoming UpdateCallbackRequest.

                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.html b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.html index d534d77f6..43191cb9e 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.html @@ -4,7 +4,7 @@ - Area Callback Service Runner — Spot 4.0.3 documentation + Area Callback Service Runner — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                            - 4.0.3 + 4.1.0
                                            @@ -51,7 +51,8 @@
                                            +
                                            +
                                            +class bosdyn.client.command_line.EstopCommands(subparsers, command_dict)[source]
                                            +

                                            Bases: Subcommands

                                            +

                                            Commands for interacting with robot estop service.

                                            +
                                            +
                                            +NAME = 'estop'
                                            +
                                            + +
                                            + +
                                            +
                                            +class bosdyn.client.command_line.GetEstopConfigCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: Command

                                            +

                                            Get estop config of estop service.

                                            +
                                            +
                                            +NAME = 'config'
                                            +
                                            + +
                                            + +
                                            +
                                            +class bosdyn.client.command_line.GetEstopStatusCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: Command

                                            +

                                            Get estop status of estop service.

                                            +
                                            +
                                            +NAME = 'status'
                                            +
                                            + +
                                            +
                                            class bosdyn.client.command_line.BecomeEstopCommand(subparsers, command_dict)[source]
                                            @@ -1049,6 +1090,27 @@
                                            +
                                            +
                                            +class bosdyn.client.command_line.OldBecomeEstopCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: BecomeEstopCommand

                                            +

                                            Old version of BecomeEstopCommand.

                                            +
                                            +
                                            +run(robot, options)[source]
                                            +

                                            Invoke the command.

                                            +
                                            +
                                            Parameters:
                                            +
                                              +
                                            • robot – Robot object on which to run the command.

                                            • +
                                            • options – Parsed command-line arguments.

                                            • +
                                            +
                                            +
                                            +
                                            + +
                                            +
                                            class bosdyn.client.command_line.ImageCommands(subparsers, command_dict)[source]
                                            @@ -1211,6 +1273,48 @@
                                            +
                                            +
                                            +class bosdyn.client.command_line.KeepaliveCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: Subcommands

                                            +

                                            Send keepalive commands to the robot.

                                            +
                                            +
                                            +NAME = 'keepalive'
                                            +
                                            + +
                                            + +
                                            +
                                            +bosdyn.client.command_line.lease_details(leases)[source]
                                            +

                                            Returns list of <resource_name>:<sequence>, …N.

                                            +
                                            + +
                                            +
                                            +class bosdyn.client.command_line.KeepaliveGetStatusCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: Command

                                            +

                                            Get status of keepalive service.

                                            +
                                            +
                                            +NAME = 'status'
                                            +
                                            + +
                                            + +
                                            +
                                            +class bosdyn.client.command_line.KeepaliveRemovePoliciesCommand(subparsers, command_dict)[source]
                                            +

                                            Bases: Command

                                            +

                                            Remove keepalive policies.

                                            +
                                            +
                                            +NAME = 'remove'
                                            +
                                            + +
                                            +
                                            class bosdyn.client.command_line.PowerRobotCommand(subparsers, command_dict)[source]
                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/common.html b/docs/html/python/bosdyn-client/src/bosdyn/client/common.html index be1cb50f4..823a4a9ce 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/common.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/common.html @@ -4,7 +4,7 @@ - Common — Spot 4.0.3 documentation + Common — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                            - 4.0.3 + 4.1.0
                                            +
                                            +
                                            +bosdyn.client.common.handle_license_errors(func)[source]
                                            +

                                            Decorate “error from response” functions to handle typical license errors.

                                            +
                                            + +
                                            +
                                            +bosdyn.client.common.handle_license_errors_if_present(func)[source]
                                            +

                                            Decorate “error from response” functions to handle typical license errors. +Does not raise an error for STATUS_UNKNOWN. +Use for responses that may only sometimes fill out the license status.

                                            +
                                            + +
                                            +
                                            +bosdyn.client.common.common_license_errors(response, allow_unset=False)[source]
                                            +
                                            +
                                            bosdyn.client.common.maybe_raise(exc)[source]
                                            @@ -689,7 +713,16 @@ call_async(rpc_method, request, value_from_response=None, error_from_response=None, copy_request=True, **kwargs)[source]

                                            Returns a Future for rpc_method(request, kwargs) after running processors.

                                            value_from_response and error_from_response should not raise their own exceptions!

                                            -

                                            Asynchronous calls cannot be done with streaming rpcs right now.

                                            +

                                            call_async does not accept streaming rpcs, see ‘call_async_streaming’.

                                            +
                                            + +
                                            +
                                            +call_async_streaming(rpc_method, request, value_from_response=None, error_from_response=None, assemble_type=None, copy_request=False, **kwargs)[source]
                                            +

                                            Returns a Future for rpc_method(request, kwargs) after running processors.

                                            +

                                            value_from_response and error_from_response should not raise their own exceptions.

                                            +

                                            A version of ‘call_async’ for streaming rpcs. True async streaming calls are not supported by +python grpc. Instead, this call creates a thread that runs the synchronous ‘call’ function.

                                            @@ -711,7 +744,7 @@
                                            -class bosdyn.client.common.FutureWrapper(future, value_from_response, error_from_response)[source]
                                            +class bosdyn.client.common.FutureWrapper(future, value_from_response, error_from_response, is_streaming=False)[source]

                                            Bases: object

                                            Wraps a Future to aid more complicated clients’ async calls.

                                            @@ -741,7 +774,7 @@
                                            -add_done_callback(cb)[source]
                                            +add_done_callback(cb, assemble_type=None)[source]

                                            Add callback executed on FutureWrapper when future is done.

                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition.html b/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition.html index b946a6c80..94cea8730 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition.html @@ -4,7 +4,7 @@ - Data Acquisition — Spot 4.0.3 documentation + Data Acquisition — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                            - 4.0.3 + 4.1.0
                                            @@ -51,7 +51,8 @@
                                            +
                                            +
                                            +store_data_as_chunks(message, data_id, file_extension=None)[source]
                                            +

                                            Store a data message by streaming with the data acquisition store service.

                                            +
                                            +
                                            Parameters:
                                            +
                                              +
                                            • message (bytes) – Data to store.

                                            • +
                                            • data_id (bosdyn.api.DataIdentifier) – Data identifier to use for storing this data.

                                            • +
                                            • file_extension (string) – File extension to use for writing the data to a file.

                                            • +
                                            +
                                            +
                                            Raises:
                                            +

                                            RPCError – Problem communicating with the robot.

                                            +
                                            +
                                            +
                                            + +
                                            +
                                            +store_file(file_path, data_id, file_extension=None)[source]
                                            +

                                            Store a file with the data acquisition store service.

                                            +
                                            +
                                            Parameters:
                                            +
                                              +
                                            • file_path (string) – Path to the file to store.

                                            • +
                                            • data_id (bosdyn.api.DataIdentifier) – Data identifier to use for storing this file.

                                            • +
                                            • file_extension (string) – File extension to use for writing the data to the file.

                                            • +
                                            +
                                            +
                                            Raises:
                                            +

                                            RPCError – Problem communicating with the robot.

                                            +
                                            +
                                            +
                                            +
                                            cancel_check()[source]
                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.html b/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.html index e44f3568a..b47eba373 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.html @@ -4,7 +4,7 @@ - Data Acquisition Store — Spot 4.0.3 documentation + Data Acquisition Store — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                            - 4.0.3 + 4.1.0
                                            +
                                            +
                                            +store_data_as_chunks(data, data_id, file_extension=None, **kwargs)[source]
                                            +

                                            Store data using streaming, supports storing of large data that is too large for a single store_data rpc. Note: using this rpc means that the data must be loaded into memory.

                                            +
                                            +
                                            Parameters:
                                            +
                                              +
                                            • data (bytes) – Arbitrary data to store.

                                            • +
                                            • data_id (bosdyn.api.DataIdentifier) – Data identifier to use for storing this data.

                                            • +
                                            • file_extension (string) – File extension to use for writing the data to a file.

                                            • +
                                            +
                                            +
                                            Returns:
                                            +

                                            StoreDataResponse final successful response or first failed response.

                                            +
                                            +
                                            +
                                            + +
                                            +
                                            +store_data_as_chunks_async(data, data_id, file_extension=None, **kwargs)[source]
                                            +

                                            Async version of the store_data_as_chunks() RPC.

                                            +
                                            + +
                                            +
                                            +store_file(file_path, data_id, file_extension=None, **kwargs)[source]
                                            +

                                            Store file using file path, supports storing of large files that are too large for a single store_data rpc.

                                            +
                                            +
                                            Parameters:
                                            +
                                              +
                                            • file_path (string) – File path to arbitrary data to store.

                                            • +
                                            • data_id (bosdyn.api.DataIdentifier) – Data identifier to use for storing this data.

                                            • +
                                            • file_extension (string) – File extension to use for writing the data to a file.

                                            • +
                                            +
                                            +
                                            Returns:
                                            +

                                            StoreDataResponse final successful response or first failed response.

                                            +
                                            +
                                            +
                                            + +
                                            +
                                            +store_file_async(file_path, data_id, file_extension=None, **kwargs)[source]
                                            +

                                            Async version of the store_file() RPC.

                                            +
                                            +
                                            query_stored_captures(query=None, **kwargs)[source]

                                            Query stored captures from the robot.

                                            Parameters:
                                            -

                                            query (bosdyn.api.DataQueryParams) – Query parameters.

                                            +

                                            query (bosdyn.api.QueryParameters) – Query parameters.

                                            Raises:

                                            RpcError – Problem communicating with the robot.

                                            @@ -738,6 +791,12 @@
                                            +
                                            +
                                            +query_stored_captures_async(query=None, **kwargs)[source]
                                            +

                                            Async version of the query_stored_captures() RPC.

                                            +
                                            +
                                            query_max_capture_id(**kwargs)[source]
                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/data_buffer.html b/docs/html/python/bosdyn-client/src/bosdyn/client/data_buffer.html index 6a29e14d4..342baf2c1 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/data_buffer.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/data_buffer.html @@ -4,7 +4,7 @@ - Data Buffer — Spot 4.0.3 documentation + Data Buffer — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                            - 4.0.3 + 4.1.0
                                            @@ -51,7 +51,8 @@
                                            • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/data_chunk.html b/docs/html/python/bosdyn-client/src/bosdyn/client/data_chunk.html index 7c982332b..a95c30570 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/data_chunk.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/data_chunk.html @@ -4,7 +4,7 @@ - Data Chunk — Spot 4.0.3 documentation + Data Chunk — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                              - 4.0.3 + 4.1.0
                                              @@ -51,7 +51,8 @@
                                              • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/data_service.html b/docs/html/python/bosdyn-client/src/bosdyn/client/data_service.html index ec2dfc4d2..c91af65bb 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/data_service.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/data_service.html @@ -4,7 +4,7 @@ - Data Service — Spot 4.0.3 documentation + Data Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                - 4.0.3 + 4.1.0
                                                @@ -51,7 +51,8 @@
                                                • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/directory.html b/docs/html/python/bosdyn-client/src/bosdyn/client/directory.html index 0ac2906c6..1c50961d4 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/directory.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/directory.html @@ -4,7 +4,7 @@ - Directory — Spot 4.0.3 documentation + Directory — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                  - 4.0.3 + 4.1.0
                                                  @@ -51,7 +51,8 @@
                                                  • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/directory_registration.html b/docs/html/python/bosdyn-client/src/bosdyn/client/directory_registration.html index 9eb79df53..4346a515d 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/directory_registration.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/directory_registration.html @@ -4,7 +4,7 @@ - Directory Registration — Spot 4.0.3 documentation + Directory Registration — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                    - 4.0.3 + 4.1.0
                                                    @@ -51,7 +51,8 @@
                                                    • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/docking.html b/docs/html/python/bosdyn-client/src/bosdyn/client/docking.html index b184e38bc..6c95544ce 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/docking.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/docking.html @@ -4,7 +4,7 @@ - Docking — Spot 4.0.3 documentation + Docking — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                      - 4.0.3 + 4.1.0
                                                      @@ -51,7 +51,8 @@
                                                      • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/door.html b/docs/html/python/bosdyn-client/src/bosdyn/client/door.html index 1de886c8c..e8e880ac3 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/door.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/door.html @@ -4,7 +4,7 @@ - Door — Spot 4.0.3 documentation + Door — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                        - 4.0.3 + 4.1.0
                                                        @@ -51,7 +51,8 @@
                                                        • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/estop.html b/docs/html/python/bosdyn-client/src/bosdyn/client/estop.html index 04c58eb86..50c3282be 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/estop.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/estop.html @@ -4,7 +4,7 @@ - Estop — Spot 4.0.3 documentation + Estop — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                          - 4.0.3 + 4.1.0
                                                          @@ -51,7 +51,8 @@
                                                          • Concepts @@ -589,7 +594,7 @@
                                                            -class bosdyn.client.estop.EstopClient(name='EstopClient - PID: 36')[source]
                                                            +class bosdyn.client.estop.EstopClient(name='EstopClient - PID: 39')[source]

                                                            Bases: BaseClient

                                                            Client to the estop service.

                                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/exceptions.html b/docs/html/python/bosdyn-client/src/bosdyn/client/exceptions.html index ad9c602d3..cf8f75946 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/exceptions.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/exceptions.html @@ -4,7 +4,7 @@ - Exceptions — Spot 4.0.3 documentation + Exceptions — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                            - 4.0.3 + 4.1.0
                                                            @@ -51,7 +51,8 @@
                                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/gripper_camera_param.html b/docs/html/python/bosdyn-client/src/bosdyn/client/gripper_camera_param.html index 76e4edd2a..754a08eaf 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/gripper_camera_param.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/gripper_camera_param.html @@ -4,7 +4,7 @@ - Gripper Camera Param — Spot 4.0.3 documentation + Gripper Camera Param — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                            - 4.0.3 + 4.1.0
                                                            @@ -51,7 +51,8 @@
                                                            Returns:
                                                            diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/image_service_helpers.html b/docs/html/python/bosdyn-client/src/bosdyn/client/image_service_helpers.html index e9f5757fd..3c4e62438 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/image_service_helpers.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/image_service_helpers.html @@ -4,7 +4,7 @@ - Image Service Helpers — Spot 4.0.3 documentation + Image Service Helpers — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                            - 4.0.3 + 4.1.0
                                                            @@ -51,7 +51,8 @@
                                                            • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/inverse_kinematics.html b/docs/html/python/bosdyn-client/src/bosdyn/client/inverse_kinematics.html index 01976e55f..137e9fd5a 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/inverse_kinematics.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/inverse_kinematics.html @@ -4,7 +4,7 @@ - Inverse Kinematics — Spot 4.0.3 documentation + Inverse Kinematics — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                              - 4.0.3 + 4.1.0
                                                              @@ -51,7 +51,8 @@
                                                              • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/ir_enable_disable.html b/docs/html/python/bosdyn-client/src/bosdyn/client/ir_enable_disable.html index 384dbd30f..0724e9fd3 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/ir_enable_disable.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/ir_enable_disable.html @@ -4,7 +4,7 @@ - Ir Enable Disable — Spot 4.0.3 documentation + Ir Enable Disable — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                - 4.0.3 + 4.1.0
                                                                @@ -51,7 +51,8 @@
                                                                • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/keepalive.html b/docs/html/python/bosdyn-client/src/bosdyn/client/keepalive.html index 790d6328c..d793cf94b 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/keepalive.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/keepalive.html @@ -4,7 +4,7 @@ - Keepalive — Spot 4.0.3 documentation + Keepalive — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                  - 4.0.3 + 4.1.0
                                                                  @@ -51,7 +51,8 @@
                                                                  • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/lease.html b/docs/html/python/bosdyn-client/src/bosdyn/client/lease.html index 7570ac2cb..1a23321f9 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/lease.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/lease.html @@ -4,7 +4,7 @@ - Lease — Spot 4.0.3 documentation + Lease — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                    - 4.0.3 + 4.1.0
                                                                    @@ -51,7 +51,8 @@
                                                                    • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.html b/docs/html/python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.html index d8840b9e8..0351c2cd3 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.html @@ -4,7 +4,7 @@ - Lease Resource Hierarchy — Spot 4.0.3 documentation + Lease Resource Hierarchy — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                      - 4.0.3 + 4.1.0
                                                                      @@ -51,7 +51,8 @@
                                                                      • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/lease_validator.html b/docs/html/python/bosdyn-client/src/bosdyn/client/lease_validator.html index 3f6536959..b144626ab 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/lease_validator.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/lease_validator.html @@ -4,7 +4,7 @@ - Lease Validator — Spot 4.0.3 documentation + Lease Validator — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                        - 4.0.3 + 4.1.0
                                                                        @@ -51,7 +51,8 @@
                                                                        • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/license.html b/docs/html/python/bosdyn-client/src/bosdyn/client/license.html index 8ec041057..04b203447 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/license.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/license.html @@ -4,7 +4,7 @@ - License — Spot 4.0.3 documentation + License — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                          - 4.0.3 + 4.1.0
                                                                          @@ -51,7 +51,8 @@
                                                                          • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/local_grid.html b/docs/html/python/bosdyn-client/src/bosdyn/client/local_grid.html index b7a487a16..eace20736 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/local_grid.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/local_grid.html @@ -4,7 +4,7 @@ - Local Grid — Spot 4.0.3 documentation + Local Grid — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                            - 4.0.3 + 4.1.0
                                                                            @@ -51,7 +51,8 @@
                                                                            • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/log_status.html b/docs/html/python/bosdyn-client/src/bosdyn/client/log_status.html index 4aead6762..4023b9f8f 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/log_status.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/log_status.html @@ -4,7 +4,7 @@ - Log Status — Spot 4.0.3 documentation + Log Status — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                              - 4.0.3 + 4.1.0
                                                                              @@ -51,7 +51,8 @@
                                                                              • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/manipulation_api_client.html b/docs/html/python/bosdyn-client/src/bosdyn/client/manipulation_api_client.html index 35e412ae3..15697062f 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/manipulation_api_client.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/manipulation_api_client.html @@ -4,7 +4,7 @@ - Manipulation Api Client — Spot 4.0.3 documentation + Manipulation Api Client — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                - 4.0.3 + 4.1.0
                                                                                @@ -51,7 +51,8 @@
                                                                                • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/map_processing.html b/docs/html/python/bosdyn-client/src/bosdyn/client/map_processing.html index b0b05fef0..3cb208a55 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/map_processing.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/map_processing.html @@ -4,7 +4,7 @@ - Map Processing — Spot 4.0.3 documentation + Map Processing — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                  - 4.0.3 + 4.1.0
                                                                                  @@ -51,7 +51,8 @@
                                                                                  • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/math_helpers.html b/docs/html/python/bosdyn-client/src/bosdyn/client/math_helpers.html index 9e6a0cb53..500659de8 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/math_helpers.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/math_helpers.html @@ -4,7 +4,7 @@ - Math Helpers — Spot 4.0.3 documentation + Math Helpers — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                    - 4.0.3 + 4.1.0
                                                                                    @@ -51,7 +51,8 @@
                                                                                    • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/metrics_logging.html b/docs/html/python/bosdyn-client/src/bosdyn/client/metrics_logging.html index aeb98c93f..78846d8ea 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/metrics_logging.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/metrics_logging.html @@ -4,7 +4,7 @@ - Metrics Logging — Spot 4.0.3 documentation + Metrics Logging — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                      - 4.0.3 + 4.1.0
                                                                                      @@ -51,7 +51,8 @@
                                                                                      • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.html b/docs/html/python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.html index 4d40ae802..efc367627 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.html @@ -4,7 +4,7 @@ - Network Compute Bridge Client — Spot 4.0.3 documentation + Network Compute Bridge Client — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                        - 4.0.3 + 4.1.0
                                                                                        @@ -51,7 +51,8 @@
                                                                                        • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/payload.html b/docs/html/python/bosdyn-client/src/bosdyn/client/payload.html index fe19301b8..33e472ab1 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/payload.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/payload.html @@ -4,7 +4,7 @@ - Payload — Spot 4.0.3 documentation + Payload — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                          - 4.0.3 + 4.1.0
                                                                                          @@ -51,7 +51,8 @@
                                                                                          • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/payload_registration.html b/docs/html/python/bosdyn-client/src/bosdyn/client/payload_registration.html index c6307293d..22fd931af 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/payload_registration.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/payload_registration.html @@ -4,7 +4,7 @@ - Payload Registration — Spot 4.0.3 documentation + Payload Registration — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                            - 4.0.3 + 4.1.0
                                                                                            @@ -51,7 +51,8 @@
                                                                                            • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/point_cloud.html b/docs/html/python/bosdyn-client/src/bosdyn/client/point_cloud.html index 3cdcb46c3..52ad35e0a 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/point_cloud.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/point_cloud.html @@ -4,7 +4,7 @@ - Point Cloud — Spot 4.0.3 documentation + Point Cloud — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                              - 4.0.3 + 4.1.0
                                                                                              @@ -51,7 +51,8 @@
                                                                                              • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/power.html b/docs/html/python/bosdyn-client/src/bosdyn/client/power.html index 44d5618b6..c399e8e9a 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/power.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/power.html @@ -4,7 +4,7 @@ - Power — Spot 4.0.3 documentation + Power — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                - 4.0.3 + 4.1.0
                                                                                                @@ -51,7 +51,8 @@
                                                                                                • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/processors.html b/docs/html/python/bosdyn-client/src/bosdyn/client/processors.html index 3527430ff..8a8cbe6b1 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/processors.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/processors.html @@ -4,7 +4,7 @@ - Processors — Spot 4.0.3 documentation + Processors — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                  - 4.0.3 + 4.1.0
                                                                                                  @@ -51,7 +51,8 @@
                                                                                                  • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/ray_cast.html b/docs/html/python/bosdyn-client/src/bosdyn/client/ray_cast.html index a5a5d39d3..5f4c016dd 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/ray_cast.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/ray_cast.html @@ -4,7 +4,7 @@ - Ray Cast — Spot 4.0.3 documentation + Ray Cast — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                    - 4.0.3 + 4.1.0
                                                                                                    @@ -51,7 +51,8 @@
                                                                                                    • Concepts diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/recording.html b/docs/html/python/bosdyn-client/src/bosdyn/client/recording.html index 2cd2831a4..a748484a2 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/recording.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/recording.html @@ -4,7 +4,7 @@ - Recording — Spot 4.0.3 documentation + Recording — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                      - 4.0.3 + 4.1.0
                                                                                                      @@ -51,7 +51,8 @@ diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/robot.html b/docs/html/python/bosdyn-client/src/bosdyn/client/robot.html index b95e0d90a..f92c76c4f 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/robot.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/robot.html @@ -4,7 +4,7 @@ - Robot — Spot 4.0.3 documentation + Robot — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                      - 4.0.3 + 4.1.0
                                                                                                      @@ -51,7 +51,8 @@
                                                                                                      • Concepts @@ -597,7 +602,7 @@
                                                                                                        -get_cached_robot_id()[source]
                                                                                                        +get_cached_robot_id(timeout=None)[source]

                                                                                                        Return the RobotId proto for this robot, querying it from the robot if not yet cached.

                                                                                                        Raises:
                                                                                                        @@ -608,7 +613,7 @@
                                                                                                        -get_cached_hardware_hardware_configuration()[source]
                                                                                                        +get_cached_hardware_hardware_configuration(timeout=None)[source]

                                                                                                        Return the HardwareConfiguration proto for this robot, querying it from the robot if not yet cached.

                                                                                                        diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/robot_command.html b/docs/html/python/bosdyn-client/src/bosdyn/client/robot_command.html index 1e42429d2..12ececd69 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/robot_command.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/robot_command.html @@ -4,7 +4,7 @@ - Robot Command — Spot 4.0.3 documentation + Robot Command — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        @@ -51,7 +51,8 @@
                                                                                                        diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/time_sync.html b/docs/html/python/bosdyn-client/src/bosdyn/client/time_sync.html index 096c17df8..4f2501ffa 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/time_sync.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/time_sync.html @@ -4,7 +4,7 @@ - Time Sync — Spot 4.0.3 documentation + Time Sync — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        +
                                                                                                        +
                                                                                                        +bosdyn.client.time_sync.update_time_filter(client, timestamp, timesync_endpoint)[source]
                                                                                                        +

                                                                                                        Set or convert fields of the proto that need timestamps in the robot’s clock.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • timestamp (float) – Client time, such as from time.time().

                                                                                                        • +
                                                                                                        • timesync_endpoint (TimeSyncEndpoint) – A timesync endpoint associated with the robot object.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +

                                                                                                        bosdyn.client.robot_command.NoTimeSyncError – Could not find the timesync endpoint for the robot to convert the time.

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +bosdyn.client.time_sync.update_timestamp_filter(client, timestamp, timesync_endpoint)[source]
                                                                                                        +

                                                                                                        Set or convert fields of the proto that need timestamps in the robot’s clock.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • timestamp (google.protobuf.Timestamp) – Client time.

                                                                                                        • +
                                                                                                        • timesync_endpoint (TimeSyncEndpoint) – A timesync endpoint associated with the robot object.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +

                                                                                                        bosdyn.client.robot_command.NoTimeSyncError – Could not find the timesync endpoint for the robot to convert the time.

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        class bosdyn.client.time_sync.TimeSyncEndpoint(time_sync_client)[source]
                                                                                                        diff --git a/docs/html/python/bosdyn-client/src/bosdyn/client/token_cache.html b/docs/html/python/bosdyn-client/src/bosdyn/client/token_cache.html index 0f1039b85..b69e54dd7 100644 --- a/docs/html/python/bosdyn-client/src/bosdyn/client/token_cache.html +++ b/docs/html/python/bosdyn-client/src/bosdyn/client/token_cache.html @@ -4,7 +4,7 @@ - Token Cache — Spot 4.0.3 documentation + Token Cache — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        @@ -51,7 +51,8 @@
                                                                                                        @@ -527,22 +532,22 @@
                                                                                                        get_resource(path: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Base function for getting a resource in /api/v0/

                                                                                                        +

                                                                                                        Base function for getting a resource in /api/v0/.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • path – the path appended to /api/v0/

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • path – the path appended to /api/v0/.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -553,22 +558,45 @@
                                                                                                        post_resource(path: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Base function for posting a resource in /api/v0/

                                                                                                        +

                                                                                                        Base function for posting a resource in /api/v0/.

                                                                                                        Parameters:
                                                                                                        • path – the path appended to /api/v0/

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        The response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +patch_resource(path: str, **kwargs) Response[source]
                                                                                                        +

                                                                                                        Base function for patching a resource in /api/v0/

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • path – the path appended to /api/v0/

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the patch request

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                          +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        The response associated with the patch request.

                                                                                                        @@ -576,18 +604,18 @@
                                                                                                        delete_resource(path: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Base function for deleting a resource in /api/v0/

                                                                                                        +

                                                                                                        Base function for deleting a resource in /api/v0/.

                                                                                                        Parameters:
                                                                                                        • path – the path appended to /api/v0/

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        @@ -602,16 +630,16 @@

                                                                                                        Retrieves version info.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -625,16 +653,16 @@

                                                                                                        Returns the current system time.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -648,16 +676,16 @@

                                                                                                        Returns robots on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -672,18 +700,18 @@
                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • hostname – the IP address associated with the desired robot on the instance

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • hostname – the IP address associated with the desired robot on the instance.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -694,19 +722,19 @@
                                                                                                        get_site_walks(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Returns site walks on the specified instance

                                                                                                        +

                                                                                                        Returns site walks on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -717,16 +745,39 @@
                                                                                                        get_site_walk_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a site walk uuid, returns a site walk on the specified instance

                                                                                                        +

                                                                                                        Given a SiteWalk uuid, returns a SiteWalk on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the site walk

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the SiteWalk.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        +
                                                                                                        +
                                                                                                        Return type:
                                                                                                        +

                                                                                                        requests.Response

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +get_site_walk_archive_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        +

                                                                                                        Returns SiteWalk as a zip archive which represents a collection of graph and mission data

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        @@ -743,19 +794,19 @@
                                                                                                        get_site_elements(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Returns site elements on the specified instance

                                                                                                        +

                                                                                                        Returns site elements on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -766,22 +817,22 @@
                                                                                                        get_site_element_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a site element uuid, returns a site element on the specified instance

                                                                                                        +

                                                                                                        Given a SiteElement uuid, returns a SiteElement on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the site element

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the SiteElement.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -792,19 +843,19 @@
                                                                                                        get_site_docks(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Returns site docks on the specified instance

                                                                                                        +

                                                                                                        Returns site docks on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -815,22 +866,22 @@
                                                                                                        get_site_dock_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a site dock uuid, returns a site dock on the specified instance

                                                                                                        +

                                                                                                        Given a SiteDock uuid, returns a SiteDock on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the site dock

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the SiteDock

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -841,19 +892,19 @@
                                                                                                        get_calendar(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Returns calendar events on the specified instance

                                                                                                        +

                                                                                                        Returns calendar events on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -864,19 +915,19 @@
                                                                                                        get_run_events(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a dictionary of query params, returns run events

                                                                                                        +

                                                                                                        Given a dictionary of query params, returns run events.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -887,22 +938,22 @@
                                                                                                        get_run_event_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a runEventUuid, returns a run event

                                                                                                        +

                                                                                                        Given a runEventUuid, returns a run event.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the run event

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the run event.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -913,19 +964,19 @@
                                                                                                        get_run_captures(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a dictionary of query params, returns run captures

                                                                                                        +

                                                                                                        Given a dictionary of query params, returns run captures.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -936,22 +987,22 @@
                                                                                                        get_run_capture_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a runCaptureUuid, returns a run capture

                                                                                                        +

                                                                                                        Given a runCaptureUuid, returns a run capture.

                                                                                                        Parameters:
                                                                                                        • uuid – the ID associated with the run capture

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -962,19 +1013,19 @@
                                                                                                        get_runs(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a dictionary of query params, returns runs

                                                                                                        +

                                                                                                        Given a dictionary of query params, returns runs.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -985,22 +1036,22 @@
                                                                                                        get_run_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a runUuid, returns a run

                                                                                                        +

                                                                                                        Given a runUuid, returns a run.

                                                                                                        Parameters:
                                                                                                        • uuid – the ID associated with the run

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1011,22 +1062,22 @@
                                                                                                        get_run_archives_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a runUuid, returns run archives

                                                                                                        +

                                                                                                        Given a runUuid, returns run archives.

                                                                                                        Parameters:
                                                                                                        • uuid – the ID associated with the run

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1037,18 +1088,18 @@
                                                                                                        get_image(url: str, **kwargs) urllib3.response.HTTPResponse[source]
                                                                                                        -

                                                                                                        Given a data capture url, returns a decoded image

                                                                                                        +

                                                                                                        Given a data capture url, returns a decoded image.

                                                                                                        Parameters:
                                                                                                        • url – the url associated with the data capture in the form of https://hostname + RunCapture[“dataUrl”].

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        @@ -1063,18 +1114,18 @@
                                                                                                        get_image_response(url: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a data capture url, returns an image response

                                                                                                        +

                                                                                                        Given a data capture url, returns an image response.

                                                                                                        Parameters:
                                                                                                        • url – the url associated with the data capture in the form of https://hostname + RunCapture[“dataUrl”]

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        @@ -1089,19 +1140,19 @@
                                                                                                        get_webhook(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Returns webhook on the specified instance

                                                                                                        +

                                                                                                        Returns webhook on the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the get request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1112,22 +1163,22 @@
                                                                                                        get_webhook_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a uuid, returns a specific webhook instance

                                                                                                        +

                                                                                                        Given a uuid, returns a specific webhook instance.

                                                                                                        Parameters:
                                                                                                        • uuid – the ID associated with the webhook

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the get request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1138,22 +1189,22 @@
                                                                                                        get_robot_info(robot_nickname: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a robot nickname, returns information about the robot

                                                                                                        +

                                                                                                        Given a robot nickname, returns information about the robot.

                                                                                                        Parameters:
                                                                                                        • robot_nickname – the nickname of the robot

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1164,22 +1215,22 @@
                                                                                                        post_export_as_walk(site_walk_uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a site walk uuid, it exports the walks_pb2.Walk equivalent

                                                                                                        +

                                                                                                        Given a SiteWalk uuid, it exports the walks_pb2.Walk equivalent.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • site_walk_uuid – the ID associated with the site walk

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the get request

                                                                                                        • +
                                                                                                        • site_walk_uuid – the ID associated with the SiteWalk.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1190,19 +1241,19 @@
                                                                                                        post_import_from_walk(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a walk data, imports it to the specified instance

                                                                                                        +

                                                                                                        Given a walk data, imports it to the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1213,19 +1264,19 @@
                                                                                                        post_site_element(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Create a site element. It also updates a pre-existing Site Element using the associated UUID.

                                                                                                        +

                                                                                                        Create a SiteElement. It also updates a pre-existing SiteElement using the associated UUID.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1236,19 +1287,19 @@
                                                                                                        post_site_walk(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Create a site walk. It also updates a pre-existing Site Walk using the associated UUID.

                                                                                                        +

                                                                                                        Create a SiteWalk. It also updates a pre-existing SiteWalk using the associated UUID.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1259,19 +1310,19 @@
                                                                                                        post_site_dock(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Create a site element. It also updates a pre-existing Site Dock using the associated UUID.

                                                                                                        +

                                                                                                        Create a SiteElement. It also updates a pre-existing SiteDock using the associated UUID.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1282,19 +1333,19 @@
                                                                                                        post_robot(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Add a robot to the specified instance

                                                                                                        +

                                                                                                        Add a robot to the specified instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1313,31 +1364,31 @@
                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • nickname – the name associated with the robot

                                                                                                        • -
                                                                                                        • time_ms – the first kickoff time in terms of milliseconds since epoch

                                                                                                        • -
                                                                                                        • repeat_ms – the delay time in milliseconds for repeating calendar events

                                                                                                        • -
                                                                                                        • mission_id – the UUID associated with the mission( also known as Site Walk)

                                                                                                        • -
                                                                                                        • force_acquire_estop – instructs the system to force acquire the estop when the mission kicks off

                                                                                                        • -
                                                                                                        • require_docked – determines whether the event will require the robot to be docked to start

                                                                                                        • -
                                                                                                        • schedule_name – the desired name of the calendar event

                                                                                                        • +
                                                                                                        • nickname – the name associated with the robot.

                                                                                                        • +
                                                                                                        • time_ms – the first kickoff time in terms of milliseconds since epoch.

                                                                                                        • +
                                                                                                        • repeat_ms – the delay time in milliseconds for repeating calendar events.

                                                                                                        • +
                                                                                                        • mission_id – the UUID associated with the mission( also known as SiteWalk).

                                                                                                        • +
                                                                                                        • force_acquire_estop – instructs the system to force acquire the estop when the mission kicks off.

                                                                                                        • +
                                                                                                        • require_docked – determines whether the event will require the robot to be docked to start.

                                                                                                        • +
                                                                                                        • schedule_name – the desired name of the calendar event.

                                                                                                        • blackout_times – a specification for a time period over the course of a week when a schedule should not run specified as list of a dictionary defined as {“startMs”: <int>, “endMs” : <int>} with startMs (inclusive) being the millisecond offset from the beginning of the week (Sunday) when this blackout period starts -and endMs (exclusive) being the millisecond offset from beginning of the week(Sunday) when this blackout period ends

                                                                                                        • -
                                                                                                        • disable_reason – (optional) a reason for disabling the calendar event

                                                                                                        • +and endMs (exclusive) being the millisecond offset from beginning of the week(Sunday) when this blackout period ends.

                                                                                                          +
                                                                                                        • disable_reason – (optional) a reason for disabling the calendar event.

                                                                                                        • event_id – the auto-generated ID for a calendar event that is already posted on the instance. This is only useful when editing a pre-existing calendar event.

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1348,22 +1399,22 @@
                                                                                                        post_calendar_events_disable_all(disable_reason: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Disable all scheduled missions

                                                                                                        +

                                                                                                        Disable all scheduled missions.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • disable_reason – Reason for disabling all scheduled missions

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • disable_reason – Reason for disabling all scheduled missions.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1374,23 +1425,23 @@
                                                                                                        post_calendar_event_disable_by_id(event_id: str, disable_reason: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Disable specific scheduled mission by event ID

                                                                                                        +

                                                                                                        Disable specific scheduled mission by event ID.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • event_id – eventId associated with a mission to disable

                                                                                                        • -
                                                                                                        • disable_reason – Reason for disabling a scheduled mission

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • event_id – eventId associated with a mission to disable.

                                                                                                        • +
                                                                                                        • disable_reason – Reason for disabling a scheduled mission.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1401,19 +1452,19 @@
                                                                                                        post_calendar_events_enable_all(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Enable all scheduled missions

                                                                                                        +

                                                                                                        Enable all scheduled missions.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1424,22 +1475,22 @@
                                                                                                        post_calendar_event_enable_by_id(event_id: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Enable specific scheduled mission by event ID

                                                                                                        +

                                                                                                        Enable specific scheduled mission by event ID.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • event_id – eventId associated with a mission to enable

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • event_id – eventId associated with a mission to enable.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1450,19 +1501,19 @@
                                                                                                        post_webhook(**kwargs) Response[source]
                                                                                                        -

                                                                                                        Create a webhook instance

                                                                                                        +

                                                                                                        Create a webhook instance.

                                                                                                        Parameters:
                                                                                                        -

                                                                                                        kwargs – a variable number of keyword arguments for the post request

                                                                                                        +

                                                                                                        kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1473,22 +1524,22 @@
                                                                                                        post_webhook_by_id(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Update an existing webhook instance

                                                                                                        +

                                                                                                        Update an existing webhook instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the desired webhook instance

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the desired webhook instance.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1499,23 +1550,23 @@
                                                                                                        post_return_to_dock_mission(robot_nickname: str, site_dock_uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Generate a mission to send the robot back to the dock

                                                                                                        +

                                                                                                        Generate a mission to send the robot back to the dock.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • robot_nickname – the nickname of the robot

                                                                                                        • -
                                                                                                        • site_dock_uuid – the uuid of the dock to send robot to

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • robot_nickname – the nickname of the robot.

                                                                                                        • +
                                                                                                        • site_dock_uuid – the uuid of the dock to send robot to.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1525,27 +1576,108 @@
                                                                                                        -post_dispatch_mission_to_robot(robot_nickname: str, driver_id: str, mission_uuid: str, delete_mission: bool, force_acquire_estop: bool, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Dispatch the robot to a mission given a mission uuid

                                                                                                        +post_dispatch_mission_to_robot(robot_nickname: str, driver_id: str, mission_uuid: str, delete_mission: bool, force_acquire_estop: bool, skip_initialization: bool, **kwargs) Response[source] +

                                                                                                        Dispatch the robot to a mission given a mission uuid.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • robot_nickname – the nickname of the robot

                                                                                                        • -
                                                                                                        • driver_id – the current driver ID of the mission

                                                                                                        • -
                                                                                                        • mission_uuid – uuid of the mission(also known as Site Walk) to dispatch

                                                                                                        • -
                                                                                                        • delete_mission – whether to delete the mission after playback

                                                                                                        • -
                                                                                                        • force_acquire_estop – whether to force acquire E-stop from the previous client

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the post request

                                                                                                        • +
                                                                                                        • robot_nickname – the nickname of the robot.

                                                                                                        • +
                                                                                                        • driver_id – the current driver ID of the mission.

                                                                                                        • +
                                                                                                        • mission_uuid – uuid of the mission(also known as SiteWalk) to dispatch.

                                                                                                        • +
                                                                                                        • delete_mission – whether to delete the mission after playback.

                                                                                                        • +
                                                                                                        • force_acquire_estop – whether to force acquire E-stop from the previous client.

                                                                                                        • +
                                                                                                        • skip_initialization – whether to skip initialization when starting the return to dock mission.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the post request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        The response associated with the post request.

                                                                                                        +
                                                                                                        +
                                                                                                        Return type:
                                                                                                        +

                                                                                                        requests.Response

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +post_backup_task(include_missions: bool, include_captures: bool, **kwargs) Response[source]
                                                                                                        +

                                                                                                        Starts creating a backup zip file.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • include_missions – Specifies whether to include missions and maps in the backup.

                                                                                                        • +
                                                                                                        • include_captures – Specifies whether to include all inspection data captures in the backup.

                                                                                                        • +
                                                                                                        • **kwargs – Additional keyword arguments for the backup request.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                          +
                                                                                                        • RequestExceptions – Exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – Indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the post request

                                                                                                        +

                                                                                                        The response associated with the backup request.

                                                                                                        +
                                                                                                        +
                                                                                                        Return type:
                                                                                                        +

                                                                                                        requests.Response

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +patch_bulk_close_anomalies(element_ids: list[str], **kwargs) Response[source]
                                                                                                        +

                                                                                                        Bulk close Anomalies by Element ID.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • element_ids – the element ids of each anomaly to be closed.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the patch request.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                          +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        The response associated with the patch request.

                                                                                                        +
                                                                                                        +
                                                                                                        Return type:
                                                                                                        +

                                                                                                        requests.Response

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +patch_anomaly_by_id(anomaly_uuid: str, patched_fields: dict, **kwargs) Response[source]
                                                                                                        +

                                                                                                        Patch an Anomaly by uuid.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • anomaly_uuid – The uuid of the anomaly to patch fields in.

                                                                                                        • +
                                                                                                        • patched_fields – A dictionary of fields and new values to change in the specified anomaly.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the patch request.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                          +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        The response associated with the patch request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1556,22 +1688,22 @@
                                                                                                        delete_site_walk(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Given a site walk uuid, deletes the site walk associated with the uuid on the specified instance

                                                                                                        +

                                                                                                        Given a SiteWalk uuid, deletes the SiteWalk associated with the uuid on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the desired site walk

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the desired SiteWalk

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the delete request

                                                                                                        +

                                                                                                        the response associated with the delete request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1586,18 +1718,18 @@
                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • robot_hostname – the IP address associated with the robot

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request

                                                                                                        • +
                                                                                                        • robot_hostname – the IP address associated with the robot.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the delete request

                                                                                                        +

                                                                                                        the response associated with the delete request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1608,22 +1740,22 @@
                                                                                                        delete_calendar_event(event_id: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Delete the specified calendar event on the specified instance

                                                                                                        +

                                                                                                        Delete the specified calendar event on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • event_id (string) – the ID associated with the calendar event

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request

                                                                                                        • +
                                                                                                        • event_id (string) – the ID associated with the calendar event.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the delete request

                                                                                                        +

                                                                                                        the response associated with the delete request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        @@ -1634,22 +1766,48 @@
                                                                                                        delete_webhook(uuid: str, **kwargs) Response[source]
                                                                                                        -

                                                                                                        Delete the specified webhook instance on the specified instance

                                                                                                        +

                                                                                                        Delete the specified webhook instance on the specified instance.

                                                                                                        Parameters:
                                                                                                          -
                                                                                                        • uuid – the ID associated with the desired webhook

                                                                                                        • -
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request

                                                                                                        • +
                                                                                                        • uuid – the ID associated with the desired webhook.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the delete request.

                                                                                                        Raises:
                                                                                                          -
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        • +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        the response associated with the delete request.

                                                                                                        +
                                                                                                        +
                                                                                                        Return type:
                                                                                                        +

                                                                                                        requests.Response

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        +delete_backup(task_id: str, **kwargs)[source]
                                                                                                        +

                                                                                                        Deletes the backup zip file from the Orbit instance.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +
                                                                                                          +
                                                                                                        • hostname – the IP address associated with the desired robot on the instance.

                                                                                                        • +
                                                                                                        • kwargs – a variable number of keyword arguments for the get request.

                                                                                                        • +
                                                                                                        +
                                                                                                        +
                                                                                                        Raises:
                                                                                                        +
                                                                                                          +
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library.

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly.

                                                                                                        Returns:
                                                                                                        -

                                                                                                        the response associated with the delete request

                                                                                                        +

                                                                                                        the response associated with the get request.

                                                                                                        Return type:

                                                                                                        requests.Response

                                                                                                        diff --git a/docs/html/python/bosdyn-orbit/src/bosdyn/orbit/exceptions.html b/docs/html/python/bosdyn-orbit/src/bosdyn/orbit/exceptions.html index ac9b201c9..7b0d353f4 100644 --- a/docs/html/python/bosdyn-orbit/src/bosdyn/orbit/exceptions.html +++ b/docs/html/python/bosdyn-orbit/src/bosdyn/orbit/exceptions.html @@ -4,7 +4,7 @@ - Exceptions — Spot 4.0.3 documentation + Exceptions — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        @@ -51,7 +51,8 @@
                                                                                                        +
                                                                                                        +
                                                                                                        +bosdyn.orbit.utils.print_json_response(response: requests.Response) bool[source]
                                                                                                        +

                                                                                                        A helper function to print the json response.

                                                                                                        +
                                                                                                        +
                                                                                                        Parameters:
                                                                                                        +

                                                                                                        options (Namespace) – parsed args used for configuration options.

                                                                                                        +
                                                                                                        +
                                                                                                        Returns:
                                                                                                        +

                                                                                                        Boolean that indicates the response is okay with status code 200.

                                                                                                        +
                                                                                                        +
                                                                                                        +
                                                                                                        + diff --git a/docs/html/python/bosdyn-scout/src/bosdyn/scout/README.html b/docs/html/python/bosdyn-scout/src/bosdyn/scout/README.html index 88660379d..7921a72ab 100644 --- a/docs/html/python/bosdyn-scout/src/bosdyn/scout/README.html +++ b/docs/html/python/bosdyn-scout/src/bosdyn/scout/README.html @@ -4,7 +4,7 @@ - Python Scout — Spot 4.0.3 documentation + Python Scout — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        @@ -51,7 +51,8 @@
                                                                                                        Raises:
                                                                                                        • RequestExceptions – exceptions thrown by the Requests library

                                                                                                        • -
                                                                                                        • UnauthenticatedScoutClientError – indicates that the scout client is not authenticated properly

                                                                                                        • +
                                                                                                        • UnauthenticatedClientError – indicates that the client is not authenticated properly

                                                                                                        Returns:
                                                                                                        diff --git a/docs/html/python/bosdyn-scout/src/bosdyn/scout/exceptions.html b/docs/html/python/bosdyn-scout/src/bosdyn/scout/exceptions.html index c77bc4c80..141ef607e 100644 --- a/docs/html/python/bosdyn-scout/src/bosdyn/scout/exceptions.html +++ b/docs/html/python/bosdyn-scout/src/bosdyn/scout/exceptions.html @@ -4,7 +4,7 @@ - Exceptions — Spot 4.0.3 documentation + Exceptions — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                        - 4.0.3 + 4.1.0
                                                                                                        @@ -51,7 +51,8 @@
                                                                                                        • Concepts diff --git a/docs/html/python/bosdyn-scout/src/bosdyn/scout/utils.html b/docs/html/python/bosdyn-scout/src/bosdyn/scout/utils.html index 508c8c999..d50bfb670 100644 --- a/docs/html/python/bosdyn-scout/src/bosdyn/scout/utils.html +++ b/docs/html/python/bosdyn-scout/src/bosdyn/scout/utils.html @@ -4,7 +4,7 @@ - Utils — Spot 4.0.3 documentation + Utils — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                          - 4.0.3 + 4.1.0
                                                                                                          @@ -51,7 +51,8 @@
                                                                                                          • Concepts diff --git a/docs/html/python/examples/README.html b/docs/html/python/examples/README.html index 2a5005939..56c051a41 100644 --- a/docs/html/python/examples/README.html +++ b/docs/html/python/examples/README.html @@ -4,7 +4,7 @@ - Python Examples — Spot 4.0.3 documentation + Python Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                            - 4.0.3 + 4.1.0
                                                                                                            @@ -51,7 +51,8 @@
                                                                                                            • Concepts @@ -534,7 +539,6 @@

                                                                                                              Intermediate Examples

                                                                                                              Advanced Examples

                                                                                                              diff --git a/docs/html/python/examples/animation_recorder/README.html b/docs/html/python/examples/animation_recorder/README.html index 13a429ab5..6c603618f 100644 --- a/docs/html/python/examples/animation_recorder/README.html +++ b/docs/html/python/examples/animation_recorder/README.html @@ -4,7 +4,7 @@ - Animation Recorder — Spot 4.0.3 documentation + Animation Recorder — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                              - 4.0.3 + 4.1.0
                                                                                                              @@ -51,7 +51,8 @@
                                                                                                              • Concepts diff --git a/docs/html/python/examples/area_callback/README.html b/docs/html/python/examples/area_callback/README.html index a86cb1491..571a28ebe 100644 --- a/docs/html/python/examples/area_callback/README.html +++ b/docs/html/python/examples/area_callback/README.html @@ -4,7 +4,7 @@ - Area Callback Tutorial — Spot 4.0.3 documentation + Area Callback Tutorial — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                • Concepts diff --git a/docs/html/python/examples/arm_and_mobility_command/README.html b/docs/html/python/examples/arm_and_mobility_command/README.html index 0f023b5ef..8e24b9513 100644 --- a/docs/html/python/examples/arm_and_mobility_command/README.html +++ b/docs/html/python/examples/arm_and_mobility_command/README.html @@ -4,7 +4,7 @@ - Arm and Mobility — Spot 4.0.3 documentation + Arm and Mobility — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                  • Concepts diff --git a/docs/html/python/examples/arm_constrained_manipulation/README.html b/docs/html/python/examples/arm_constrained_manipulation/README.html index 6a56cfe00..a1037f107 100644 --- a/docs/html/python/examples/arm_constrained_manipulation/README.html +++ b/docs/html/python/examples/arm_constrained_manipulation/README.html @@ -4,7 +4,7 @@ - Constrained Manipulation — Spot 4.0.3 documentation + Constrained Manipulation — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                    • Concepts diff --git a/docs/html/python/examples/arm_door/README.html b/docs/html/python/examples/arm_door/README.html index c1469abf6..d1bc32dcd 100644 --- a/docs/html/python/examples/arm_door/README.html +++ b/docs/html/python/examples/arm_door/README.html @@ -4,7 +4,7 @@ - Arm Door Command — Spot 4.0.3 documentation + Arm Door Command — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                      • Concepts diff --git a/docs/html/python/examples/arm_force_control/README.html b/docs/html/python/examples/arm_force_control/README.html index 1ca1bf7d3..3c0e28f4b 100644 --- a/docs/html/python/examples/arm_force_control/README.html +++ b/docs/html/python/examples/arm_force_control/README.html @@ -4,7 +4,7 @@ - Force Command — Spot 4.0.3 documentation + Force Command — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                        • Concepts diff --git a/docs/html/python/examples/arm_freeze/README.html b/docs/html/python/examples/arm_freeze/README.html index 0beda0952..035c1655a 100644 --- a/docs/html/python/examples/arm_freeze/README.html +++ b/docs/html/python/examples/arm_freeze/README.html @@ -4,7 +4,7 @@ - Arm Freeze Hand in Body / World — Spot 4.0.3 documentation + Arm Freeze Hand in Body / World — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                          • Concepts diff --git a/docs/html/python/examples/arm_gaze/README.html b/docs/html/python/examples/arm_gaze/README.html index dc0cf98ef..6a42f0bd6 100644 --- a/docs/html/python/examples/arm_gaze/README.html +++ b/docs/html/python/examples/arm_gaze/README.html @@ -4,7 +4,7 @@ - Arm Gaze Command — Spot 4.0.3 documentation + Arm Gaze Command — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                            • Concepts diff --git a/docs/html/python/examples/arm_gcode/README.html b/docs/html/python/examples/arm_gcode/README.html index fb460e530..d157df09e 100644 --- a/docs/html/python/examples/arm_gcode/README.html +++ b/docs/html/python/examples/arm_gcode/README.html @@ -4,7 +4,7 @@ - GCODE Drawing — Spot 4.0.3 documentation + GCODE Drawing — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                              • Concepts @@ -528,7 +533,7 @@

                                                                                                                                GCODE Drawing

                                                                                                                                Drawing with Chalk

                                                                                                                                To draw with chalk, we recommend a very large piece of chalk. The image below was drawn with a -stick of chalk 1.5 inches in diameter and 5 inches long. We taped the chalk to the gripper using gaffers tape.

                                                                                                                                +stick of chalk 1.5 inches in diameter and 5 inches long. We taped the chalk to the gripper using gaffer’s tape. A tool_length value can be set in gcode.cfg to account for the length of chalk held by the gripper.

                                                                                                                                Chalk Drawing of Boston Dynamics Logo

                                                                                                                                diff --git a/docs/html/python/examples/arm_grasp/README.html b/docs/html/python/examples/arm_grasp/README.html index 835bada0e..9e8aaa135 100644 --- a/docs/html/python/examples/arm_grasp/README.html +++ b/docs/html/python/examples/arm_grasp/README.html @@ -4,7 +4,7 @@ - Grasping — Spot 4.0.3 documentation + Grasping — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                diff --git a/docs/html/python/examples/core_io_gpio/README.html b/docs/html/python/examples/core_io_gpio/README.html index 95bd0193f..745882a01 100644 --- a/docs/html/python/examples/core_io_gpio/README.html +++ b/docs/html/python/examples/core_io_gpio/README.html @@ -4,7 +4,7 @@ - CORE I/O GPIO — Spot 4.0.3 documentation + CORE I/O GPIO — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                • Concepts diff --git a/docs/html/python/examples/data_acquisition_service/README.html b/docs/html/python/examples/data_acquisition_service/README.html index 5ad257924..cfbe33eb3 100644 --- a/docs/html/python/examples/data_acquisition_service/README.html +++ b/docs/html/python/examples/data_acquisition_service/README.html @@ -4,7 +4,7 @@ - Data Acquisition Plugin Services — Spot 4.0.3 documentation + Data Acquisition Plugin Services — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                  • Concepts @@ -589,8 +594,14 @@

                                                                                                                                    Communicating with the Data Acquisition Service

                                                                                                                                    Downloading from the Data Acquisition Store

                                                                                                                                    -

                                                                                                                                    The data acquisition download script allows users to download data from the DataAcquisitionStore service using REST calls. The script supports only time-based queries for filtering which data is downloaded and saved locally. The following command is an example of a time-based query and download. The timestamps are specified in RFC 3339 date string format (YYYY-MM-DDTHH:MM::SS.SZ, Y:year, M:month, D:day, H:hours, M:minutes, S:seconds as double, Z:zulu timezone)

                                                                                                                                    -
                                                                                                                                    python3 data_acquisition_download.py {ROBOT_IP} --query-from-timestamp 2020-09-01T00:00:00.0Z --query-to-timestamp 2020-09-04T00:00:00.0Z
                                                                                                                                    +

                                                                                                                                    The data acquisition download script allows users to download data from the DataAcquisitionStore service.

                                                                                                                                    +

                                                                                                                                    There are two different methods in which the data is downloaded from the DataAcquisitionStore service:

                                                                                                                                    + +

                                                                                                                                    The script supports only time-based queries for filtering which data is downloaded and saved locally, though the “data” command can be modified to filter based on other fields listed in QueryParameters in data_acquisition_store.proto. The following command is an example of a time-based query and download. The timestamps are specified in RFC 3339 date string format (YYYY-MM-DDTHH:MM::SS.SZ, Y:year, M:month, D:day, H:hours, M:minutes, S:seconds as double, Z:zulu timezone). Zulu clock time is the same as UTC time (UTC+0).

                                                                                                                                    +
                                                                                                                                    python3 data_acquisition_download.py --query-from-timestamp 2020-09-01T00:00:00.0Z --query-to-timestamp 2020-09-04T00:00:00.0Z {ROBOT_IP} {rest,grpc}
                                                                                                                                     

                                                                                                                                    Note, by default, the download script will save the data to the current directory, however the --destination-folder argument can be used to change where the downloaded data is saved.

                                                                                                                                    diff --git a/docs/html/python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.html b/docs/html/python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.html index 2c5427ff6..440fe9345 100644 --- a/docs/html/python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.html +++ b/docs/html/python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.html @@ -4,7 +4,7 @@ - Modem Signals — Spot 4.0.3 documentation + Modem Signals — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/data_buffer/README.html b/docs/html/python/examples/data_buffer/README.html index 591a0292b..198839215 100644 --- a/docs/html/python/examples/data_buffer/README.html +++ b/docs/html/python/examples/data_buffer/README.html @@ -4,7 +4,7 @@ - Using the Data Buffer service — Spot 4.0.3 documentation + Using the Data Buffer service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/data_service/README.html b/docs/html/python/examples/data_service/README.html index 4c9583b48..0854b34d0 100644 --- a/docs/html/python/examples/data_service/README.html +++ b/docs/html/python/examples/data_service/README.html @@ -4,7 +4,7 @@ - Using the Robot Data Service — Spot 4.0.3 documentation + Using the Robot Data Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/directory/README.html b/docs/html/python/examples/directory/README.html index fbb349cb0..4dbae70c1 100644 --- a/docs/html/python/examples/directory/README.html +++ b/docs/html/python/examples/directory/README.html @@ -4,7 +4,7 @@ - Manipulating Spot Service Configurations in Directory — Spot 4.0.3 documentation + Manipulating Spot Service Configurations in Directory — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                          • Concepts diff --git a/docs/html/python/examples/disable_ir_emission/README.html b/docs/html/python/examples/disable_ir_emission/README.html index 58c09e26f..ddaed5074 100644 --- a/docs/html/python/examples/disable_ir_emission/README.html +++ b/docs/html/python/examples/disable_ir_emission/README.html @@ -4,7 +4,7 @@ - Disable IR Emission — Spot 4.0.3 documentation + Disable IR Emission — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                            • Concepts diff --git a/docs/html/python/examples/docking/README.html b/docs/html/python/examples/docking/README.html index b61cce0f3..3798a7dfe 100644 --- a/docs/html/python/examples/docking/README.html +++ b/docs/html/python/examples/docking/README.html @@ -4,7 +4,7 @@ - Robot Docking — Spot 4.0.3 documentation + Robot Docking — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                              • Concepts diff --git a/docs/html/python/examples/docs/arm_examples.html b/docs/html/python/examples/docs/arm_examples.html index 8e4eee47b..83e3b8f83 100644 --- a/docs/html/python/examples/docs/arm_examples.html +++ b/docs/html/python/examples/docs/arm_examples.html @@ -4,7 +4,7 @@ - Arm Examples — Spot 4.0.3 documentation + Arm Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                                • Concepts diff --git a/docs/html/python/examples/docs/autonomy_and_missions_examples.html b/docs/html/python/examples/docs/autonomy_and_missions_examples.html index 18cff5146..0406d75c2 100644 --- a/docs/html/python/examples/docs/autonomy_and_missions_examples.html +++ b/docs/html/python/examples/docs/autonomy_and_missions_examples.html @@ -4,7 +4,7 @@ - Autonomy and Missions Examples — Spot 4.0.3 documentation + Autonomy and Missions Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/docs/basic_service_examples.html b/docs/html/python/examples/docs/basic_service_examples.html index 64b9820ec..c8707d448 100644 --- a/docs/html/python/examples/docs/basic_service_examples.html +++ b/docs/html/python/examples/docs/basic_service_examples.html @@ -4,7 +4,7 @@ - Basic Service Examples — Spot 4.0.3 documentation + Basic Service Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/docs/data_acquisition_examples.html b/docs/html/python/examples/docs/data_acquisition_examples.html index 9f53cca6a..c13fad795 100644 --- a/docs/html/python/examples/docs/data_acquisition_examples.html +++ b/docs/html/python/examples/docs/data_acquisition_examples.html @@ -4,7 +4,7 @@ - Data Acquisition Examples — Spot 4.0.3 documentation + Data Acquisition Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/docs/joint_control_examples.html b/docs/html/python/examples/docs/joint_control_examples.html index 0484482e6..11b42dbaa 100644 --- a/docs/html/python/examples/docs/joint_control_examples.html +++ b/docs/html/python/examples/docs/joint_control_examples.html @@ -4,7 +4,7 @@ - Joint Control API Examples — Spot 4.0.3 documentation + Joint Control API Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/docs/logging_examples.html b/docs/html/python/examples/docs/logging_examples.html index e345c6437..102082aac 100644 --- a/docs/html/python/examples/docs/logging_examples.html +++ b/docs/html/python/examples/docs/logging_examples.html @@ -4,7 +4,7 @@ - Logging and Data Retrieval Examples — Spot 4.0.3 documentation + Logging and Data Retrieval Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                                          • Concepts diff --git a/docs/html/python/examples/docs/orbit.html b/docs/html/python/examples/docs/orbit.html index 3090f5d8d..b4d3ffeb3 100644 --- a/docs/html/python/examples/docs/orbit.html +++ b/docs/html/python/examples/docs/orbit.html @@ -4,7 +4,7 @@ - Orbit Examples — Spot 4.0.3 documentation + Orbit Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                            diff --git a/docs/html/python/examples/docs/payloads_examples.html b/docs/html/python/examples/docs/payloads_examples.html index 8b3230e13..e347e369c 100644 --- a/docs/html/python/examples/docs/payloads_examples.html +++ b/docs/html/python/examples/docs/payloads_examples.html @@ -4,7 +4,7 @@ - Payload Examples — Spot 4.0.3 documentation + Payload Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                            • Concepts diff --git a/docs/html/python/examples/docs/perception_world_objects_examples.html b/docs/html/python/examples/docs/perception_world_objects_examples.html index 95e58ddf3..81af6548e 100644 --- a/docs/html/python/examples/docs/perception_world_objects_examples.html +++ b/docs/html/python/examples/docs/perception_world_objects_examples.html @@ -4,7 +4,7 @@ - Perception & World Objects Examples — Spot 4.0.3 documentation + Perception & World Objects Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                                              • Concepts @@ -526,7 +531,6 @@

                                                                                                                                                                ContentsProject Depth Data on Visual Images

                                                                                                                                                              • Custom Parameter Image Server
                                                                                                                                                              • Fiducial Follow
                                                                                                                                                              • -
                                                                                                                                                              • Spot Detect and Follow
                                                                                                                                                              • Tensorflow Detector
                                                                                                                                                              • Custom Parameter Tensorflow Detector
                                                                                                                                                              • Machine Learning with the Network Compute Bridge
                                                                                                                                                              • diff --git a/docs/html/python/examples/docs/robot_behavior_examples.html b/docs/html/python/examples/docs/robot_behavior_examples.html index c2ff83c52..96f57a971 100644 --- a/docs/html/python/examples/docs/robot_behavior_examples.html +++ b/docs/html/python/examples/docs/robot_behavior_examples.html @@ -4,7 +4,7 @@ - Robot Behavior and Commands Examples — Spot 4.0.3 documentation + Robot Behavior and Commands Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                                                • Concepts diff --git a/docs/html/python/examples/edit_autowalk/README.html b/docs/html/python/examples/edit_autowalk/README.html index cd9f4dbea..d65510cf5 100644 --- a/docs/html/python/examples/edit_autowalk/README.html +++ b/docs/html/python/examples/edit_autowalk/README.html @@ -4,7 +4,7 @@ - Edit Autowalk — Spot 4.0.3 documentation + Edit Autowalk — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/estop/README.html b/docs/html/python/examples/estop/README.html index 1e8767625..67c3c6d9f 100644 --- a/docs/html/python/examples/estop/README.html +++ b/docs/html/python/examples/estop/README.html @@ -4,7 +4,7 @@ - Creating an E-Stop endpoint — Spot 4.0.3 documentation + Creating an E-Stop endpoint — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/extensions/README.html b/docs/html/python/examples/extensions/README.html index 45c29caf5..732311843 100644 --- a/docs/html/python/examples/extensions/README.html +++ b/docs/html/python/examples/extensions/README.html @@ -4,7 +4,7 @@ - Spot Extensions Build Script — Spot 4.0.3 documentation + Spot Extensions Build Script — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                                      • Concepts @@ -585,6 +590,7 @@

                                                                                                                                                                        Arguments:[--extra-image-tags {extra_image:tag}] \ --image-archive {images_tarball.tar.gz} \ --icon {icon.png} \ + --udev-rule {udev_rule.rule} \ --package-dir {/path/to/assets} \ --spx {/path/to/output/extension.spx} \ [--additional-files {file1.txt} {file2.jpg}] diff --git a/docs/html/python/examples/extract_images_from_walk/README.html b/docs/html/python/examples/extract_images_from_walk/README.html index 56326e1e9..fd18174ba 100644 --- a/docs/html/python/examples/extract_images_from_walk/README.html +++ b/docs/html/python/examples/extract_images_from_walk/README.html @@ -4,7 +4,7 @@ - Extract Images from Walk File Example — Spot 4.0.3 documentation + Extract Images from Walk File Example — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/fan_command/README.html b/docs/html/python/examples/fan_command/README.html index f165f8024..cb40cd16a 100644 --- a/docs/html/python/examples/fan_command/README.html +++ b/docs/html/python/examples/fan_command/README.html @@ -4,7 +4,7 @@ - Fan Power Commands with the Python SDK — Spot 4.0.3 documentation + Fan Power Commands with the Python SDK — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                                                          • Concepts @@ -558,7 +563,7 @@

                                                                                                                                                                            Basic Fan Command Example

                                                                                                                                                                            Fan Remote Mission Service

                                                                                                                                                                            -

                                                                                                                                                                            This is an example remote mission service that allows a tablet user to issue a fan command during an Autowalk that (in the out-of-the-box configuration) will turn the fans off for 10 seconds. This is heavily modeled off of the existing “power_off_mission_service” in the Remote Mission Service Examples.

                                                                                                                                                                            +

                                                                                                                                                                            This is an example remote mission service that allows a tablet user to issue a fan command during an Autowalk that (in the out-of-the-box configuration) will turn the fans off for 10 seconds. To learn more about remote mission services, refer to the remote mission service examples.

                                                                                                                                                                            As with the other remote mission service examples, you will need a connection between a robot and the computer running the examples.

                                                                                                                                                                            python3 fan_control_mission_service.py --host-ip {ENDPOINT_IP} ROBOT_IP
                                                                                                                                                                             
                                                                                                                                                                            diff --git a/docs/html/python/examples/fiducial_follow/README.html b/docs/html/python/examples/fiducial_follow/README.html index 1eafa41d3..20928c423 100644 --- a/docs/html/python/examples/fiducial_follow/README.html +++ b/docs/html/python/examples/fiducial_follow/README.html @@ -4,7 +4,7 @@ - Follow a Fiducial — Spot 4.0.3 documentation + Follow a Fiducial — Spot 4.1.0 documentation @@ -21,7 +21,7 @@ - + @@ -38,7 +38,7 @@
                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                            • Concepts diff --git a/docs/html/python/examples/frame_trajectory_command/README.html b/docs/html/python/examples/frame_trajectory_command/README.html index bb13672fb..56f39398b 100644 --- a/docs/html/python/examples/frame_trajectory_command/README.html +++ b/docs/html/python/examples/frame_trajectory_command/README.html @@ -4,7 +4,7 @@ - Frame Trajectory Commands — Spot 4.0.3 documentation + Frame Trajectory Commands — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                                                              • Concepts diff --git a/docs/html/python/examples/get_depth_plus_visual_image/README.html b/docs/html/python/examples/get_depth_plus_visual_image/README.html index 705edb1bf..37b4497a8 100644 --- a/docs/html/python/examples/get_depth_plus_visual_image/README.html +++ b/docs/html/python/examples/get_depth_plus_visual_image/README.html @@ -4,7 +4,7 @@ - API Example - Visualize Depth in Visual Image — Spot 4.0.3 documentation + API Example - Visualize Depth in Visual Image — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                                                                • Concepts diff --git a/docs/html/python/examples/get_image/README.html b/docs/html/python/examples/get_image/README.html index 60bfdf02a..ba74f4a76 100644 --- a/docs/html/python/examples/get_image/README.html +++ b/docs/html/python/examples/get_image/README.html @@ -4,7 +4,7 @@ - Using the Image Service — Spot 4.0.3 documentation + Using the Image Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/get_mission_state/README.html b/docs/html/python/examples/get_mission_state/README.html index 60c7fb933..ef53f2b04 100644 --- a/docs/html/python/examples/get_mission_state/README.html +++ b/docs/html/python/examples/get_mission_state/README.html @@ -4,7 +4,7 @@ - Retrieving Mission state — Spot 4.0.3 documentation + Retrieving Mission state — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/get_robot_state/README.html b/docs/html/python/examples/get_robot_state/README.html index f944b2a17..aaf908442 100644 --- a/docs/html/python/examples/get_robot_state/README.html +++ b/docs/html/python/examples/get_robot_state/README.html @@ -4,7 +4,7 @@ - Using the Robot State Service — Spot 4.0.3 documentation + Using the Robot State Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/get_robot_state_async/README.html b/docs/html/python/examples/get_robot_state_async/README.html index d87618f7f..83814fac7 100644 --- a/docs/html/python/examples/get_robot_state_async/README.html +++ b/docs/html/python/examples/get_robot_state_async/README.html @@ -4,7 +4,7 @@ - Performing Asynchronous State Queries on Spot — Spot 4.0.3 documentation + Performing Asynchronous State Queries on Spot — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/get_world_objects/README.html b/docs/html/python/examples/get_world_objects/README.html index f7cacafc3..1a5e3d555 100644 --- a/docs/html/python/examples/get_world_objects/README.html +++ b/docs/html/python/examples/get_world_objects/README.html @@ -4,7 +4,7 @@ - Using the World Object Service — Spot 4.0.3 documentation + Using the World Object Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                                                                          • Concepts diff --git a/docs/html/python/examples/gps_service/README.html b/docs/html/python/examples/gps_service/README.html index b7884323f..b08baece2 100644 --- a/docs/html/python/examples/gps_service/README.html +++ b/docs/html/python/examples/gps_service/README.html @@ -4,7 +4,7 @@ - GPS Listener — Spot 4.0.3 documentation + GPS Listener — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                                            • Concepts @@ -509,7 +514,7 @@ Development Kit License (20191101-BDSDK-SL). -->

                                                                                                                                                                                              GPS Listener

                                                                                                                                                                                              -

                                                                                                                                                                                              This is an example program for consuming GPS data from a device and making it available through the Spot API. Data can be provided in one of three ways, through a TCP server, a UDP client, or a USB serial connection. Two example GPS device configurations are provided for the Trimble SPS986 and the Leica GA03 demonstrating TCP and Serial connections respectively.

                                                                                                                                                                                              +

                                                                                                                                                                                              This is an example program for consuming GPS data from a device and making it available through the Spot API. GPS devices can provide data in one of three ways, through a TCP server, a UDP client, or a serial connection. Two example GPS device configurations are provided for the Trimble SPS986 and the Leica GA03 demonstrating TCP and Serial connections respectively.

                                                                                                                                                                                              The GPS devices must output data in the NMEA-0183 format. GGA messages are required, but for best performance it is highly recommended to use devices which provide GST and ZDA messages as well.

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              @@ -520,21 +525,21 @@

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              Running the Example

                                                                                                                                                                                              -

                                                                                                                                                                                              Before running the example, you must register the GPS payload with the Spot payload system. See here for more details.

                                                                                                                                                                                              +

                                                                                                                                                                                              Before running the example, you must either register the GPS payload with the Spot payload system using the Web UI or specify the payload configuration as part of the arguments to this example. See here for more details about payload registration. Take care in specifying the correct values for the position of the GPS payload and antenna. Errors in the specified mounting position will negatively affect the quality of localization solutions which use the GPS data.

                                                                                                                                                                                              The GPS Listener requires that the following arguments be provided:

                                                                                                                                                                                                -
                                                                                                                                                                                              • The name of the registered GPS payload

                                                                                                                                                                                              • -
                                                                                                                                                                                              • The transformation from the payload coordinate frame to the antenna

                                                                                                                                                                                              • -
                                                                                                                                                                                              • The payload credentials

                                                                                                                                                                                              • -
                                                                                                                                                                                              • The communication protocol

                                                                                                                                                                                                +
                                                                                                                                                                                              • The name of the registered GPS payload.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • The transformation from the payload coordinate frame to the antenna.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • The payload credentials.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • The communication protocol.

                                                                                                                                                                                                  -
                                                                                                                                                                                                • Each communication protocol has its own additional options, see the help

                                                                                                                                                                                                • +
                                                                                                                                                                                                • Each communication protocol has its own additional options, see the help.

                                                                                                                                                                                              The transformation from the GPS payload frame to the GPS antenna includes a translation and a rotation as a Quaternion and takes the following form: x y z qw qx qy qz.

                                                                                                                                                                                              An example using the Trimble SPS986:

                                                                                                                                                                                              -
                                                                                                                                                                                              python3 gps_listener.py --name "Trimble SPS986" --payload_tform_gps 0 0 0.4 1 0 0 0 --payload-credentials-file PAYLOAD_GUID_AND_SECRET_FILE ROBOT_HOSTNAME tcp --gps_host 192.168.144.1 --gps_port 5018
                                                                                                                                                                                              +
                                                                                                                                                                                              python3 gps_listener.py --name "Trimble SPS986" --payload-tform-gps 0 0 0.4 1 0 0 0 --payload-credentials-file PAYLOAD_GUID_AND_SECRET_FILE ROBOT_HOSTNAME tcp --gps-host 192.168.144.1 --gps-port 5018
                                                                                                                                                                                               

                                                                                                                                                                                              For more information, see the gps_listener.py help page:

                                                                                                                                                                                              @@ -549,7 +554,7 @@

                                                                                                                                                                                              Running the Example

                                                                                                                                                                                              Building the Core IO extensions

                                                                                                                                                                                              The Trimble SPS986 and Leica GA03 examples are intended to be run as ARM architecture Core IO extensions. To build these extensions on an x86/AMD development environment, first run the commands in the section about “creating docker images on a development environment for a different architecture” here. After this one-time setup, you can use the build_extension.py script to create the Docker image via the command below, with further instructions here.

                                                                                                                                                                                              -
                                                                                                                                                                                              python3 build_extension.py --dockerfile-paths ../gps_service/Dockerfile --build-image-tags gps_listener:trimble_sps986 --image-archive gps_listener_image_arm64.tgz --package-dir ../gps_service/extensions/trimble_sps986/ --spx trimble_listener.spx
                                                                                                                                                                                              +
                                                                                                                                                                                              python3 build_extension.py --dockerfile-paths ../gps_service/Dockerfile --build-image-tags gps_listener_image_arm64:latest --image-archive gps_listener_image_arm64.tgz --package-dir ../gps_service/extensions/trimble_sps986/ --spx trimble_listener.spx
                                                                                                                                                                                               

                                                                                                                                                                                              The trimble_listener.spx file can then be uploaded to the Core IO through its webpage.

                                                                                                                                                                                              @@ -564,7 +569,17 @@

                                                                                                                                                                                              Understanding the Examplerobot = create_robot(creds, options) # Create a Fault Client for errors. -fault_client = create_fault_client(robot, options) +fault_client = create_fault_client(robot) +

                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              Optionally, the GPS Listener example can self-register the GPS device as a payload on Spot. This is useful if the GPS payload will be swapped on and off the robot often and the user does not want to use the Web UI to register and authorize the payload every time the device is mounted. The payload configuration given to the GPS Listener must be valid, or a fault will be thrown. The user can fix the offending configuration value in the Web UI and authorize the payload manually to get around a bad configuration, but be sure to fix the code after.

                                                                                                                                                                                              +
                                                                                                                                                                                              # Register the Payload
                                                                                                                                                                                              +if options.register_payload:
                                                                                                                                                                                              +    # The user can modify and correct the payload configuration in the web UI, so it is
                                                                                                                                                                                              +    # possible that this will eventually succeed even though the programmed configuration is
                                                                                                                                                                                              +    # wrong.
                                                                                                                                                                                              +    while not register_payload(robot, fault_client, creds, options):
                                                                                                                                                                                              +        time.sleep(SECS_PER_ATTEMPT)
                                                                                                                                                                                               

                                                                                                                                                                                              The next step is to connect to the GPS device. There are three supported communication protocols: TCP, UDP, and USB Serial. The code used to connect to the device depends on which option is provided through the command line arguments. Once opened, the data stream is made available through a Python IO Stream. If the device cannot be connected to, a fault will be triggered and the connection will be retried at a frequency of 1Hz.

                                                                                                                                                                                              @@ -579,24 +594,24 @@

                                                                                                                                                                                              Understanding the Exampletime_converter = robot.time_sync.get_robot_time_converter()

                                                                                                                                                                                              -

                                                                                                                                                                                              With the data stream opened and the required system information collected, the data is ready to be provided to Spot. The GPS Listener reads data from the data stream, applies the required spatial and temporal transformations, and uses the Spot API to provide the data to the robot. Namely, the Aggregator service accepts GPS data in the form of a NewGpsDataRequest GRPC request.

                                                                                                                                                                                              -

                                                                                                                                                                                              As the robot moves, it builds a trajectory of positions using its odometry and GPS measurements. The pose of the robot with respect to the Earth can be calculated by registering the GPS trajectory to the odometry trajectory. This registration can be queried using Spot’s Registration service.

                                                                                                                                                                                              +

                                                                                                                                                                                              With the data stream opened and the required system information collected, the data is ready to be provided to Spot. The GPS Listener reads data from the data stream, applies the required spatial and temporal transformations, and uses the Spot API to provide the data to the robot. Namely, the Aggregator service accepts GPS data in the form of a NewGpsDataRequest gRPC request.

                                                                                                                                                                                              +

                                                                                                                                                                                              As the robot moves, it builds a trajectory of positions using its odometry and GPS measurements. The pose of the robot with respect to the Earth can be calculated by registering the GPS trajectory to the odometry trajectory. This registration can be queried using Spot’s Registration service.

                                                                                                                                                                                              python3 get_location.py ROBOT_HOSTNAME
                                                                                                                                                                                               
                                                                                                                                                                                              -

                                                                                                                                                                                              The returned GetLocationResponse has a status enumeration with the following values:

                                                                                                                                                                                              +

                                                                                                                                                                                              The returned GetLocationResponse has a status enumeration with the following values:

                                                                                                                                                                                                -
                                                                                                                                                                                              • STATUS_UNKNOWN: An unknown error occurred getting the robot’s location.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_OK: A (maybe invalid) Registration was retrieved.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_NEED_DEVICE: Could not get a Registration because no GPS device is connected.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_UNKNOWN: An unknown error occurred getting the robot’s location.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_OK: A (maybe invalid) Registration was retrieved.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_NEED_DEVICE: Could not get a Registration because no GPS device is connected.

                                                                                                                                                                                              -

                                                                                                                                                                                              If the request is successful, the response will contain a Registration message. The Registration has a Status enumeration with the following values:

                                                                                                                                                                                              +

                                                                                                                                                                                              If the request is successful, the response will contain a Registration message. The registration has a Status enumeration with the following values:

                                                                                                                                                                                                -
                                                                                                                                                                                              • STATUS_UNKNOWN: There is no registration.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_OK: A registration between the robot’s odometry and GPS trajectories has been found.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_NEED_DATA: The robot has not received any GPS data to use for the registration.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_NEED_MORE_DATA: The robot has not moved far enough to calculate a registration.

                                                                                                                                                                                              • -
                                                                                                                                                                                              • STATUS_STALE: The data used to calculate the registration is too old.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_UNKNOWN: There is no registration.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_OK: A registration between the robot’s odometry and GPS trajectories has been found.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_NEED_DATA: The robot has not received any GPS data to use for the registration.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_NEED_MORE_DATA: The robot has not moved far enough to calculate a registration.

                                                                                                                                                                                              • +
                                                                                                                                                                                              • STATUS_STALE: The data used to calculate the registration is too old.

                                                                                                                                                                                              diff --git a/docs/html/python/examples/graph_nav_anchoring_optimization/README.html b/docs/html/python/examples/graph_nav_anchoring_optimization/README.html index 0894b8ca0..d7830b290 100644 --- a/docs/html/python/examples/graph_nav_anchoring_optimization/README.html +++ b/docs/html/python/examples/graph_nav_anchoring_optimization/README.html @@ -4,7 +4,7 @@ - Graph Nav Anchoring Optimization Example — Spot 4.0.3 documentation + Graph Nav Anchoring Optimization Example — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                              @@ -51,7 +51,8 @@

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              diff --git a/docs/html/python/examples/orbit/export_site_walk_archives/README.html b/docs/html/python/examples/orbit/export_site_walk_archives/README.html new file mode 100644 index 000000000..9a97ccdba --- /dev/null +++ b/docs/html/python/examples/orbit/export_site_walk_archives/README.html @@ -0,0 +1,582 @@ + + + + + + + Export Sitewalk Archives - Mission Data — Spot 4.1.0 documentation + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                              + + +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +

                                                                                                                                                                                              Export Sitewalk Archives - Mission Data

                                                                                                                                                                                              +

                                                                                                                                                                                              A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation.

                                                                                                                                                                                              +

                                                                                                                                                                                              This example program is the introductory programming example for the Orbit client, which uses the Orbit web API. It demonstrates how to initialize the Orbit client, authenticate with an API token, and finally export SiteWalk archives from Orbit.

                                                                                                                                                                                              +

                                                                                                                                                                                              A SiteWalk archive contains a compressed filepath to an Autowalk .walk folder that contains edge_snapshots, waypoint_snapshots, missions, and a graph.

                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              Understanding Orbit Web API

                                                                                                                                                                                              +

                                                                                                                                                                                              Please begin with the Quickstart Guide to get your Python programming environment set up properly. Then, specifically for this example, look at the Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              +

                                                                                                                                                                                              See the requirements.txt file for a list of python dependencies which can be installed with pip using the command:

                                                                                                                                                                                              +
                                                                                                                                                                                              python3 -m pip install -r requirements.txt
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              Run the Example

                                                                                                                                                                                              +

                                                                                                                                                                                              To run the example for local development and testing, run the following command with verify set to False. When set to False, requests will skip server’s TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle.

                                                                                                                                                                                              +
                                                                                                                                                                                              python3 export_site_walk_archive.py --hostname ORBIT_IP --verify False
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              The above command prompts you to provide the API token obtained from the Orbit admin settings page. Alternatively, you can set the environment variable BOSDYN_ORBIT_CLIENT_API_TOKEN to the API token obtained from Orbit admin settings page.

                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + + + + + + + \ No newline at end of file diff --git a/docs/html/python/examples/orbit/hello_orbit/README.html b/docs/html/python/examples/orbit/hello_orbit/README.html index 70ebb3c37..ed0fc39a6 100644 --- a/docs/html/python/examples/orbit/hello_orbit/README.html +++ b/docs/html/python/examples/orbit/hello_orbit/README.html @@ -4,7 +4,7 @@ - Hello Orbit — Spot 4.0.3 documentation + Hello Orbit — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                              @@ -51,7 +51,8 @@

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              diff --git a/docs/html/python/examples/orbit/runs_response/README.html b/docs/html/python/examples/orbit/runs_response/README.html index 8cd0f1224..960ec431d 100644 --- a/docs/html/python/examples/orbit/runs_response/README.html +++ b/docs/html/python/examples/orbit/runs_response/README.html @@ -4,7 +4,7 @@ - Runs Response — Spot 4.0.3 documentation + Runs Response — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                              @@ -51,7 +51,8 @@

                                                                                                                                                                                              Setup Dependencies

                                                                                                                                                                                              diff --git a/docs/html/python/examples/orbit/schedule_mission/README.html b/docs/html/python/examples/orbit/schedule_mission/README.html index 8bd15b0f9..afd8f2a70 100644 --- a/docs/html/python/examples/orbit/schedule_mission/README.html +++ b/docs/html/python/examples/orbit/schedule_mission/README.html @@ -4,7 +4,7 @@ - Create, Edit, and Delete Scheduled Missions on Orbit — Spot 4.0.3 documentation + Create, Edit, and Delete Scheduled Missions on Orbit — Spot 4.1.0 documentation @@ -22,7 +22,7 @@ - + @@ -38,7 +38,7 @@
                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                                                                              • Concepts @@ -512,7 +517,7 @@

                                                                                                                                                                                                Create, Edit, and Delete Scheduled Missions on OrbitThis tutorial is a programming example for the Orbit client, which uses the Orbit web API. It demonstrates how to interact with the Orbit calendar using Orbit client API calls. The example code can be run directly to create, edit, or delete a calendar event.

                                                                                                                                                                                                Understanding Orbit Web API

                                                                                                                                                                                                -

                                                                                                                                                                                                Please begin with the Quickstart Guide to get your Python programming environment set up properly. Additional useful information can be found in Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                                +

                                                                                                                                                                                                Please begin with the Quickstart Guide to get your Python programming environment set up properly. Additional useful information can be found in Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                                Setup Dependencies

                                                                                                                                                                                                diff --git a/docs/html/python/examples/orbit/send_robot_back_to_dock/README.html b/docs/html/python/examples/orbit/send_robot_back_to_dock/README.html index 8a7d09583..536687f41 100644 --- a/docs/html/python/examples/orbit/send_robot_back_to_dock/README.html +++ b/docs/html/python/examples/orbit/send_robot_back_to_dock/README.html @@ -4,7 +4,7 @@ - Send robot back to the dock during a mission playback — Spot 4.0.3 documentation + Send robot back to the dock during a mission playback — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                                                                                • Concepts @@ -517,7 +522,7 @@

                                                                                                                                                                                                  Send robot back to the dock during a mission playback

                                                                                                                                                                                                  Understanding Orbit Web API

                                                                                                                                                                                                  -

                                                                                                                                                                                                  Please begin with the Quickstart Guide to get your Python programming environment set up properly. Then, specifically for this example, look at the Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Please begin with the Quickstart Guide to get your Python programming environment set up properly. Then, specifically for this example, look at the Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                                  Setup Dependencies

                                                                                                                                                                                                  diff --git a/docs/html/python/examples/orbit/toggle_mission_based_on_weather/README.html b/docs/html/python/examples/orbit/toggle_mission_based_on_weather/README.html index f68f392b1..9d36e1a2a 100644 --- a/docs/html/python/examples/orbit/toggle_mission_based_on_weather/README.html +++ b/docs/html/python/examples/orbit/toggle_mission_based_on_weather/README.html @@ -4,7 +4,7 @@ - Enable - disable Orbit missions based on weather forcast — Spot 4.0.3 documentation + Enable - disable Orbit missions based on weather forcast — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                                  @@ -51,7 +51,8 @@

                                                                                                                                                                                                  Setup Dependencies

                                                                                                                                                                                                  diff --git a/docs/html/python/examples/orbit/webhook/README.html b/docs/html/python/examples/orbit/webhook/README.html index 8196834dc..3ffb52dd2 100644 --- a/docs/html/python/examples/orbit/webhook/README.html +++ b/docs/html/python/examples/orbit/webhook/README.html @@ -4,7 +4,7 @@ - Hello Webhooks — Spot 4.0.3 documentation + Hello Webhooks — Spot 4.1.0 documentation @@ -21,7 +21,7 @@ - + @@ -38,7 +38,7 @@
                                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                                  @@ -51,7 +51,8 @@

                                                                                                                                                                                                  Setup Dependencies

                                                                                                                                                                                                  diff --git a/docs/html/python/examples/orbit/webhook_integration/README.html b/docs/html/python/examples/orbit/webhook_integration/README.html new file mode 100644 index 000000000..4a0754284 --- /dev/null +++ b/docs/html/python/examples/orbit/webhook_integration/README.html @@ -0,0 +1,630 @@ + + + + + + + Webhook Integrations — Spot 4.1.0 documentation + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                  + + +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Webhook Integrations

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Getting Started

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Please begin with the Quickstart Guide to get your Python programming environment set up properly. Then, specifically for this example, look at the Orbit API Docs. For a complete list of resources and their methods, see the Orbit API Reference.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Example Overview

                                                                                                                                                                                                  +

                                                                                                                                                                                                  In case you missed it in our quickstart guide, a webhook is a mechanism or method of communication used in web development and API integration. It allows one application or service to automatically send data to another application or service when specific events occur, rather than requiring continuous polling for updates.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  This example program builds upon the “hello_webhook.py” introductory programming example under the webhook folder. +“hello_webhook.py” shows how to use webhooks as part of the Orbit client, which uses the Orbit web API. It demonstrates how to initialize the Orbit client, authenticate with an API token, and create, update, list, and delete webhooks instance.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  This example takes this one step further to provide an example to create a docker image of this a webhook listener, listen for webhooks, perform some data manipulation and send it on to a further backend system.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Setup Dependencies

                                                                                                                                                                                                  +

                                                                                                                                                                                                  See the requirements.txt file for a list of Python dependencies which can be installed with pip using the command:

                                                                                                                                                                                                  +
                                                                                                                                                                                                  python3 -m pip install -r docker-requirements.txt
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Key Vocabulary

                                                                                                                                                                                                  +

                                                                                                                                                                                                  API Token: Orbit API token. This is created in the API token sub section of the settings menu. This acts as the method of authentication with Orbit. +Webhook Secret: Secret associated with the webhook endpoint. Security feature sent along with the inspection webhook to ensure the data is coming from the correct source. +Webhook URL: Listener URL the webhook JSON will be sent to. +Webhook Port: Port where the webhook listener will be listening at. +Hostname: Orbit IP or Hostname. +Backend or Integration URL: May be the same as the webhook URL. This is the ultimate endpoint the listener will send the finally JSON data package to.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Run the Example Locally

                                                                                                                                                                                                  +

                                                                                                                                                                                                  To run the example for local development and testing, run the following command from the project directory with verify set to False. When set to False, requests will skip server’s TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  python3 webhook_integration.py --hostname "YOUR_ORBIT_IP" --verify False --webhook-host "YOUR_COMPUTER'S IP" --webhook-port 5000
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Run the Example On Sitehub-Hosted Orbit

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Step 1: Set Environment Variables & Create Webhooks

                                                                                                                                                                                                  +

                                                                                                                                                                                                  There are a few environment variables that need to be set in order to properly host the extension on your Orbit instance. The main two that are required to start are

                                                                                                                                                                                                  +

                                                                                                                                                                                                  .env

                                                                                                                                                                                                  +
                                                                                                                                                                                                    +
                                                                                                                                                                                                  1. Integration URL: URL of the integration server to send the webhook data

                                                                                                                                                                                                  2. +
                                                                                                                                                                                                  3. API Key: API Key created within the Orbit instance. This can be found in the settings menu and should be copied over upon creation.

                                                                                                                                                                                                  4. +
                                                                                                                                                                                                  5. Webhook Secret: This can be grabbed after the first time the extension is ran and it builds the webhook or configured ahead of time after building a webhook to send to url http://0.0.0.0:21600.

                                                                                                                                                                                                  6. +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Dockerfile

                                                                                                                                                                                                  +
                                                                                                                                                                                                    +
                                                                                                                                                                                                  1. Desired Port: Desired port to host on within Orbit’s supported range. This needs to be updated in the Dockerfile and docker-compose. By default this is set to 21800.

                                                                                                                                                                                                  2. +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Run the Example On Cloud Orbit

                                                                                                                                                                                                  +

                                                                                                                                                                                                  To run on a cloud instance, the docker container will need to be hosted within the cloud service or on a local device. Please reach out to support@bostondynamics.com for further questions regarding hosting cloud base extensions.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Allowed Port Ranges

                                                                                                                                                                                                  +

                                                                                                                                                                                                  The following port ranges are what are reserved for extension hosting on Spot. The extension is preconfigured to use port ‘21600’ but this is not required. If changing this, be sure to update with the DockerFile.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  TCP: 21000-22000 (except 21443 on CORE I/O which is reserved for an internal use case) +UDP: 21000-22000

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Step 2: Build the Extension - we recommend utilizing the build extension helper function in the Spot Python Examples library

                                                                                                                                                                                                  +
                                                                                                                                                                                                  python3 ../../extensions/build_extension.py --amd64  --dockerfile-paths Dockerfile --build-image-tags webhook_integration:latest --image-archive webhook_integration.tar.gz --icon ./extension/image.png --package-dir ./extension/ --spx ./webhook_integration.spx
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Step 3. Check integration fields and networking

                                                                                                                                                                                                  +
                                                                                                                                                                                                    +
                                                                                                                                                                                                  1. Ensure all actions desired for integration have Asset IDs, metadata for fields or other connecting variables between desired systems.

                                                                                                                                                                                                  2. +
                                                                                                                                                                                                  3. Ensure Orbit IP and port will be able to reach Integration URL. This often requires firewall rules put in place.

                                                                                                                                                                                                  4. +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Step 4. Load Extension

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Load extension to Orbit through the extensions webpage. Ensure no errors are within the logging page and verify it is working utilizing the test payload functionality in the webhook page found in settings.

                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + + + + + + + \ No newline at end of file diff --git a/docs/html/python/examples/payloads/README.html b/docs/html/python/examples/payloads/README.html index 4b367a3bc..d265562c6 100644 --- a/docs/html/python/examples/payloads/README.html +++ b/docs/html/python/examples/payloads/README.html @@ -4,7 +4,7 @@ - Using the Payload Service — Spot 4.0.3 documentation + Using the Payload Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/post_docking_callbacks/README.html b/docs/html/python/examples/post_docking_callbacks/README.html index d395da109..d3681d8d1 100644 --- a/docs/html/python/examples/post_docking_callbacks/README.html +++ b/docs/html/python/examples/post_docking_callbacks/README.html @@ -4,7 +4,7 @@ - Post Docking Callback Examples — Spot 4.0.3 documentation + Post Docking Callback Examples — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/ray_cast/README.html b/docs/html/python/examples/ray_cast/README.html index fc3c860d6..4bc716f6f 100644 --- a/docs/html/python/examples/ray_cast/README.html +++ b/docs/html/python/examples/ray_cast/README.html @@ -4,7 +4,7 @@ - Ray Cast Example — Spot 4.0.3 documentation + Ray Cast Example — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/record_autowalk/README.html b/docs/html/python/examples/record_autowalk/README.html index 2791a904c..7fe496c2b 100644 --- a/docs/html/python/examples/record_autowalk/README.html +++ b/docs/html/python/examples/record_autowalk/README.html @@ -4,7 +4,7 @@ - Recording an Autowalk with a Keyboard — Spot 4.0.3 documentation + Recording an Autowalk with a Keyboard — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/remote_mission_service/README.html b/docs/html/python/examples/remote_mission_service/README.html index 03e2597ee..bd0d70e04 100644 --- a/docs/html/python/examples/remote_mission_service/README.html +++ b/docs/html/python/examples/remote_mission_service/README.html @@ -4,7 +4,7 @@ - Run and Interact with a RemoteMissionService. — Spot 4.0.3 documentation + Run and Interact with a RemoteMissionService. — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                                                                                          • Concepts @@ -561,8 +566,8 @@

                                                                                                                                                                                                            Running without a robot

                                                                                                                                                                                                            Running with a robot

                                                                                                                                                                                                            -

                                                                                                                                                                                                            There is another example servicer that will power the robot down safely. To run this example, you will need a connection between a robot and the computer running the examples.

                                                                                                                                                                                                            -
                                                                                                                                                                                                            python3 power_off_mission_service.py ROBOT_IP --port {PORT} --host-ip {ENDPOINT_IP}
                                                                                                                                                                                                            +

                                                                                                                                                                                                            There is another example servicer that will command the robot to perform preset stand in-place movements for a duration. To run this example, you will need a connection between a robot and the computer running the examples.

                                                                                                                                                                                                            +
                                                                                                                                                                                                            python3 robot_command_mission_service.py {ROBOT_IP} --port {PORT} --host-ip {ENDPOINT_IP}
                                                                                                                                                                                                             

                                                                                                                                                                                                            A port number for the service can be specified using the –port argument. It is possible to bypass the port argument and allow a random port number to be selected, but it is discouraged since restarts may result in unexpected changes to a services listening port. This port number will be used with the host-ip (”ENDPOINT_IP”) to fully specify where the service is running. The port must be open and cannot be blocked by a local firewall. If the port is blocked, the service will be unreachable from the robot and the directory registration service.

                                                                                                                                                                                                            @@ -572,20 +577,14 @@

                                                                                                                                                                                                            Running with a robot

                                                                                                                                                                                                            The other IP address is the traditional robot hostname (”ROBOT_IP”) argument, which describes the IP address of the robot hosting the directory service.

                                                                                                                                                                                                            Now if you run the example client with:

                                                                                                                                                                                                            -
                                                                                                                                                                                                            python3 remote_mission_client.py --power-off robot ROBOT_IP
                                                                                                                                                                                                            +
                                                                                                                                                                                                            python3 remote_mission_client.py --robot-command robot {ROBOT_IP}
                                                                                                                                                                                                             
                                                                                                                                                                                                            -

                                                                                                                                                                                                            The robot should shut down and you will see this output from the client:

                                                                                                                                                                                                            +

                                                                                                                                                                                                            The robot should perform the “wiggle” movement and you will see this output from the client:

                                                                                                                                                                                                            Servicer stopped with status STATUS_SUCCESS
                                                                                                                                                                                                             
                                                                                                                                                                                                            -

                                                                                                                                                                                                            To see the servicer actually power the robot off, you will have to perform the following steps:

                                                                                                                                                                                                            -
                                                                                                                                                                                                              -
                                                                                                                                                                                                            1. Use the wasd example to power the robot on and stand it up.

                                                                                                                                                                                                            2. -
                                                                                                                                                                                                            3. Return wasd’s lease with the [l] key.

                                                                                                                                                                                                            4. -
                                                                                                                                                                                                            5. Run the client.

                                                                                                                                                                                                            6. -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            You must run the client within 3 seconds of returning wasd’s lease, otherwise the normal comms loss policy will kick in. To avoid Lease errors when triggering the callback via the tablet, select the “3rd Party” option before confirming the action.

                                                                                                                                                                                                            +

                                                                                                                                                                                                            To avoid lease errors when triggering the callback via the tablet, select the Robot Body Control -> No Control option before confirming the action.

                                                                                                                                                                                                            Incorporating Service Customization

                                                                                                                                                                                                            diff --git a/docs/html/python/examples/replay_mission/README.html b/docs/html/python/examples/replay_mission/README.html index 017ea3eac..4cac15a99 100644 --- a/docs/html/python/examples/replay_mission/README.html +++ b/docs/html/python/examples/replay_mission/README.html @@ -4,7 +4,7 @@ - Replaying a Mission — Spot 4.0.3 documentation + Replaying a Mission — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                                                            diff --git a/docs/html/python/examples/spot_detect_and_follow/README.html b/docs/html/python/examples/spot_detect_and_follow/README.html deleted file mode 100644 index 75f587992..000000000 --- a/docs/html/python/examples/spot_detect_and_follow/README.html +++ /dev/null @@ -1,653 +0,0 @@ - - - - - - - Spot Detect and Follow — Spot 4.0.3 documentation - - - - - - - - - - - - - - - - - - - -
                                                                                                                                                                                                            - - -
                                                                                                                                                                                                            - -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            - -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            - -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Spot Detect and Follow

                                                                                                                                                                                                            -

                                                                                                                                                                                                            The Spot Detect and Follow example collects images from the two front Spot cameras and performs object detection on a specified class. This detection uses Tensorflow via the tensorflow_object_detector from the Spot Tensorflow Detector example. It accepts any Tensorflow model, and it allows the user to specify a subset of detection classes included in the model. It performs this set of operations for a predefined number of iterations, blocking for a predefined amount of time between each iteration. The example then determines the location of the highest confidence detection of the specified class and walks towards the object. The walking has a built-in buffer of about 3 meters.

                                                                                                                                                                                                            -

                                                                                                                                                                                                            IF USING THIS EXAMPLE TO FOLLOW A PERSON, FOLLOW ALL SAFETY PROTOCOLS. KEEP AWAY FROM ALL STAIRCASES.

                                                                                                                                                                                                            -

                                                                                                                                                                                                            The program is organized as three sets of Python processes communicating with the Spot robot. The process diagram is shown below. The main process communicates with the Spot robot over GRPC and constantly receives images. These images are pushed into the RAW_IMAGES_QUEUE and read by the Tensorflow processes. Those processes detect objects in the images and pushes the location onto PROCESSED_BOXES_QUEUE. The main thread then determines the location of the object and issues commands to the robot to walk towards the object.

                                                                                                                                                                                                            -Process Diagram
                                                                                                                                                                                                            -

                                                                                                                                                                                                            User Guide

                                                                                                                                                                                                            -

                                                                                                                                                                                                            This example depends on a Tensorflow model. As an example, the faster_rcnn_inception_v2_coco Tensorflow model pre-trained on COCO dataset can be obtained here. That model is not supported on Windows or MacOS. -The pre-trained models may not be good at detecting some classes when using the robot’s cameras, as the fisheye distortion, low resolution, and black and white images affect image quality. For example, pre-trained models may not perform well at detecting “sports balls” due to the lack of color. The ssd_mobilenet_v2_coco and faster_rcnn_inception_v2_coco have been tested to work well at detecting humans.

                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Installation (Only if you want to run without Docker)

                                                                                                                                                                                                            -

                                                                                                                                                                                                            To install this example on Ubuntu 18.04, follow these instructions:

                                                                                                                                                                                                            -
                                                                                                                                                                                                              -
                                                                                                                                                                                                            • Install python3: sudo apt-get install python3.10

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Install pip3: sudo apt-get install python3-pip

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Install virtualenv: python3 -m pip install virtualenv

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Change into example directory: cd spot_detect_and_follow

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Create virtual environment (one time operation): virtualenv -p {PATH_TO_PYTHON3_EXECUTABLE} venv. The path to the executable is the output of which python3 command, usually set to /usr/bin/python3.

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Start virtual environment: source venv/bin/activate

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Install dependencies: python3 -m pip install -r requirements.txt

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Add the tensorflow detector module to your PYTHONPATH: export PYTHONPATH=/path/to/examples/spot_tensorflow_detector:$PYTHONPATH

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Run python3 -m pip install -r requirements.txt within the spot_tensorflow_detector directory

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • Run the example using instructions in the next section

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • To exit the virtual environment, run deactivate

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Execution

                                                                                                                                                                                                            -

                                                                                                                                                                                                            Prior to running the example, you will need to acquire estop access from another source such as from a connected laptop or tablet. This allows you to emergency stop the robot since this application does not have a GUI. -This example follows the common pattern for expected arguments. It needs the common arguments used to configure the SDK and connect to a Spot:

                                                                                                                                                                                                            -
                                                                                                                                                                                                              -
                                                                                                                                                                                                            • robot IP passed as the last argument

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • username and password should be set in the environment variables BOSDYN_CLIENT_USERNAME and BOSDYN_CLIENT_PASSWORD.

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            On top of those arguments, it also needs the following arguments:

                                                                                                                                                                                                            -
                                                                                                                                                                                                              -
                                                                                                                                                                                                            • –model-path (required) argument that specifies the path of the Tensorflow model (a file in .pb format)

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • –detection-class (required) argument that specifies the detection class from the Tensorflow model to follow (a list of class codes can be found in COCO_CLASS_DICT in spot_detect_and_follow.py)

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • –detection-threshold (optional) argument that specifies the confidence threshold (0-1) to use to consider the Tensorflow detections as real detections. Lower values increase false positives. Higher values may lower detection rate; defaults to 0.7

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • –number-tensorflow-processes (optional) argument that specifies the number of Tensorflow processes to start. When running with the GPU, 1 process is enough since the GPU takes care of parallelization; defaults to 1

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • –sleep-between-capture (optional) argument that specifies the amount to sleep in seconds between each image capture iteration. Increasing the value of this argument reduces the size of the queues, but also reduces the rate of command updates at the end of the pipeline; defaults to 1.0.

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            • –max-processing-delay (optional) argument that specifies max delay in seconds allowed for each image before being processed; images with greater latency will not be processed; defaults to 7.0.

                                                                                                                                                                                                            • -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            The simple command to run with the default values is:

                                                                                                                                                                                                            -
                                                                                                                                                                                                            python3 spot_detect_and_follow.py --model-path <path_to_pb> --detection-class <integer class id> ROBOT_IP
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            For example, run the example with --model-path pointing to the frozen_inference_graph.pb file in the faster_rcnn_inception_v2_coco_2018_01_28 folder created from untar-ing the model file downloaded from the instructions above, and with --detection-classes argument set to 1 to detect people in the camera images.

                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Running in Docker

                                                                                                                                                                                                            -

                                                                                                                                                                                                            Please refer to this document for general instructions on how to run software applications on SpotCORE as docker containers.

                                                                                                                                                                                                            -

                                                                                                                                                                                                            This example provides a Dockerfile for running in a container. This requires installing Nvidia Docker. -You can follow the instructions at https://github.com/NVIDIA/nvidia-docker to install Nvidia Docker. -Nvidia Docker is preinstalled on the CORE I/O.

                                                                                                                                                                                                            -

                                                                                                                                                                                                            To build the image, you’ll need to first copy over the tensorflow detector file first:

                                                                                                                                                                                                            -
                                                                                                                                                                                                            cp ../spot_tensorflow_detector/tensorflow_object_detection.py .
                                                                                                                                                                                                            -sudo docker build -t spot_detect_and_follow:x64 -f Dockerfile.x64 .
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            If you are building for the CORE I/O, run this instead:

                                                                                                                                                                                                            -
                                                                                                                                                                                                            # If you are building on an x64 machine
                                                                                                                                                                                                            -sudo apt-get install qemu binfmt-support qemu-user-static # Install the qemu packages
                                                                                                                                                                                                            -sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # This step will execute the registering scripts
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -# Build the Docker image for L4T
                                                                                                                                                                                                            -cp ../spot_tensorflow_detector/tensorflow_object_detection.py .
                                                                                                                                                                                                            -sudo docker build -t spot_detect_and_follow:l4t -f Dockerfile.l4t .
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            To run a container, replace ROBOT_IP and <absolute_path_to_pb> with the full path to the pb model file in the command below:

                                                                                                                                                                                                            -
                                                                                                                                                                                                            sudo docker run -it --network=host spot_detect_and_follow ROBOT_IP
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            On CORE I/O (using the GPU):

                                                                                                                                                                                                            -
                                                                                                                                                                                                            sudo docker run --gpus all -it --network=host spot_detect_and_follow:l4t ROBOT_IP
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Running as a Spot Extension on CORE I/O

                                                                                                                                                                                                            -

                                                                                                                                                                                                            This example can also be built into a Spot Extension using a provided convenience script

                                                                                                                                                                                                            -
                                                                                                                                                                                                            cd {/path/to/python/examples/spot_detect_and_follow/}
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -cp ../spot_tensorflow_detector/tensorflow_object_detection.py .
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -python3 ../extensions/build_extension.py \
                                                                                                                                                                                                            -    --dockerfile-paths Dockerfile.l4t \
                                                                                                                                                                                                            -    --build-image-tags spot_detect_and_follow \
                                                                                                                                                                                                            -    -i spot_detect_and_follow.tar.gz \
                                                                                                                                                                                                            -    --package-dir . \
                                                                                                                                                                                                            -    --spx spot_detect_and_follow.spx
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -

                                                                                                                                                                                                            Troubleshooting

                                                                                                                                                                                                            -

                                                                                                                                                                                                            Depending upon the robot’s surroundings and what other Spot Extensions are consuming resources on the CoreIO, you may find it necessary to adjust some of the command line arguments. You can either (1) SSH into the CoreIO and edit the docker-compose.yml directly (in /data/.extensions/spot_detect_and_follow/) or (2) edit the docker-compose.yml locally, create a new Spot Extension, and upload it to the CoreIO.

                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            - - -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            - -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            -
                                                                                                                                                                                                            - - - - - - - \ No newline at end of file diff --git a/docs/html/python/examples/spot_light/README.html b/docs/html/python/examples/spot_light/README.html index ed98b13f5..4aa68bd9f 100644 --- a/docs/html/python/examples/spot_light/README.html +++ b/docs/html/python/examples/spot_light/README.html @@ -4,7 +4,7 @@ - Responding to User Interaction via Light — Spot 4.0.3 documentation + Responding to User Interaction via Light — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                                                            • Concepts diff --git a/docs/html/python/examples/spot_tensorflow_detector/README.html b/docs/html/python/examples/spot_tensorflow_detector/README.html index 8618984f3..8916b20cc 100644 --- a/docs/html/python/examples/spot_tensorflow_detector/README.html +++ b/docs/html/python/examples/spot_tensorflow_detector/README.html @@ -4,7 +4,7 @@ - Spot Tensorflow Object Detection — Spot 4.0.3 documentation + Spot Tensorflow Object Detection — Spot 4.1.0 documentation @@ -22,7 +22,7 @@ - + @@ -38,7 +38,7 @@
                                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                                                                                              • Concepts @@ -528,7 +533,7 @@

                                                                                                                                                                                                                InstallationQuickstart Guide found in the SDK’s docs/python directory. That will help you get your Python programming environment setup properly.

                                                                                                                                                                                                                -

                                                                                                                                                                                                                To install this example on Ubuntu 18.04, follow these instructions:

                                                                                                                                                                                                                +

                                                                                                                                                                                                                To install this example on Ubuntu, follow these instructions:

                                                                                                                                                                                                                • Create virtual environment as described in this Quickstart Guide virtualenv section

                                                                                                                                                                                                                • diff --git a/docs/html/python/examples/stance/README.html b/docs/html/python/examples/stance/README.html index f5ce90568..2377398db 100644 --- a/docs/html/python/examples/stance/README.html +++ b/docs/html/python/examples/stance/README.html @@ -4,7 +4,7 @@ - Adjusting Robot Stance In Place — Spot 4.0.3 documentation + Adjusting Robot Stance In Place — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/stitch_front_images/README.html b/docs/html/python/examples/stitch_front_images/README.html index c7b8a85a2..f066ac30f 100644 --- a/docs/html/python/examples/stitch_front_images/README.html +++ b/docs/html/python/examples/stitch_front_images/README.html @@ -4,7 +4,7 @@ - Stitch Front Spot Images Together — Spot 4.0.3 documentation + Stitch Front Spot Images Together — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/tester_programs/README.html b/docs/html/python/examples/tester_programs/README.html index 29e734b9a..92df25a79 100644 --- a/docs/html/python/examples/tester_programs/README.html +++ b/docs/html/python/examples/tester_programs/README.html @@ -4,7 +4,7 @@ - Tester Programs — Spot 4.0.3 documentation + Tester Programs — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/time_sync/README.html b/docs/html/python/examples/time_sync/README.html index 325480b5a..92ead5a4a 100644 --- a/docs/html/python/examples/time_sync/README.html +++ b/docs/html/python/examples/time_sync/README.html @@ -4,7 +4,7 @@ - Using the Timesync Service — Spot 4.0.3 documentation + Using the Timesync Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                                                                                        • Concepts diff --git a/docs/html/python/examples/upload_choreographed_sequence/README.html b/docs/html/python/examples/upload_choreographed_sequence/README.html index 59d955abe..6b8b226e8 100644 --- a/docs/html/python/examples/upload_choreographed_sequence/README.html +++ b/docs/html/python/examples/upload_choreographed_sequence/README.html @@ -4,7 +4,7 @@ - Upload and Execute Choreography Sequence — Spot 4.0.3 documentation + Upload and Execute Choreography Sequence — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                          - 4.0.3 + 4.1.0
                                                                                                                                                                                                                          @@ -51,7 +51,8 @@
                                                                                                                                                                                                                          • Concepts diff --git a/docs/html/python/examples/user_nogo_regions/README.html b/docs/html/python/examples/user_nogo_regions/README.html index 911d067e1..9db5f5080 100644 --- a/docs/html/python/examples/user_nogo_regions/README.html +++ b/docs/html/python/examples/user_nogo_regions/README.html @@ -4,7 +4,7 @@ - Setting user no-go regions for locomotion — Spot 4.0.3 documentation + Setting user no-go regions for locomotion — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                                                                            • Concepts diff --git a/docs/html/python/examples/velodyne_client/README.html b/docs/html/python/examples/velodyne_client/README.html index 9a79f2ed6..fa87229f8 100644 --- a/docs/html/python/examples/velodyne_client/README.html +++ b/docs/html/python/examples/velodyne_client/README.html @@ -4,7 +4,7 @@ - Using the Velodyne Point Cloud Service — Spot 4.0.3 documentation + Using the Velodyne Point Cloud Service — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                              - 4.0.3 + 4.1.0
                                                                                                                                                                                                                              @@ -51,7 +51,8 @@
                                                                                                                                                                                                                              • Concepts diff --git a/docs/html/python/examples/visualizer/README.html b/docs/html/python/examples/visualizer/README.html index 19a1d0e46..46f9d6173 100644 --- a/docs/html/python/examples/visualizer/README.html +++ b/docs/html/python/examples/visualizer/README.html @@ -4,7 +4,7 @@ - Basic Streaming Visualizer for API Messages — Spot 4.0.3 documentation + Basic Streaming Visualizer for API Messages — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                • Concepts diff --git a/docs/html/python/examples/wasd/README.html b/docs/html/python/examples/wasd/README.html index 4ce543660..ec072fcda 100644 --- a/docs/html/python/examples/wasd/README.html +++ b/docs/html/python/examples/wasd/README.html @@ -4,7 +4,7 @@ - Controlling the Robot with a Keyboard — Spot 4.0.3 documentation + Controlling the Robot with a Keyboard — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                  - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                  @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                  • Concepts diff --git a/docs/html/python/examples/world_object_mutations/README.html b/docs/html/python/examples/world_object_mutations/README.html index df6d61d64..fcec1eba5 100644 --- a/docs/html/python/examples/world_object_mutations/README.html +++ b/docs/html/python/examples/world_object_mutations/README.html @@ -4,7 +4,7 @@ - World Object Mutations — Spot 4.0.3 documentation + World Object Mutations — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                    - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                    @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                    • Concepts diff --git a/docs/html/python/examples/world_object_with_image_coordinates/README.html b/docs/html/python/examples/world_object_with_image_coordinates/README.html index be0ed3c81..183b3f03c 100644 --- a/docs/html/python/examples/world_object_with_image_coordinates/README.html +++ b/docs/html/python/examples/world_object_with_image_coordinates/README.html @@ -4,7 +4,7 @@ - Using World Object Service with Image Coordinates — Spot 4.0.3 documentation + Using World Object Service with Image Coordinates — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                      - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                      @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                      • Concepts diff --git a/docs/html/python/examples/xbox_controller/README.html b/docs/html/python/examples/xbox_controller/README.html index f0ed67ca2..d85f294e0 100644 --- a/docs/html/python/examples/xbox_controller/README.html +++ b/docs/html/python/examples/xbox_controller/README.html @@ -4,7 +4,7 @@ - Controlling the Robot with an Xbox Controller — Spot 4.0.3 documentation + Controlling the Robot with an Xbox Controller — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                        - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                        @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                        • Concepts @@ -645,7 +650,7 @@

                                                                                                                                                                                                                                          OS-Specific Dependencies

                                                                                                                                                                                                                                          Installation Instructions

                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                          To install this example on Ubuntu 18.04 and Windows, follow these instructions:

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          To install this example on Ubuntu and Windows, follow these instructions:

                                                                                                                                                                                                                                          • Create virtual environment as described in this Quickstart Guide virtualenv section

                                                                                                                                                                                                                                          • diff --git a/docs/html/search.html b/docs/html/search.html index b6a467c38..873768cff 100644 --- a/docs/html/search.html +++ b/docs/html/search.html @@ -3,7 +3,7 @@ - Search — Spot 4.0.3 documentation + Search — Spot 4.1.0 documentation @@ -38,7 +38,7 @@
                                                                                                                                                                                                                                            - 4.0.3 + 4.1.0
                                                                                                                                                                                                                                            @@ -51,7 +51,8 @@
                                                                                                                                                                                                                                            • Concepts diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js index 639b09613..afa66a445 100644 --- a/docs/html/searchindex.js +++ b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["README", "docs/concepts/README", "docs/concepts/about_orbit", "docs/concepts/about_spot", "docs/concepts/arm/README", "docs/concepts/arm/arm_concepts", "docs/concepts/arm/arm_services", "docs/concepts/arm/arm_specification", "docs/concepts/autonomy/README", "docs/concepts/autonomy/auto_return", "docs/concepts/autonomy/autonomous_navigation_code_examples", "docs/concepts/autonomy/autonomous_navigation_services", "docs/concepts/autonomy/autowalk_service", "docs/concepts/autonomy/components_of_autonomous_navigation", "docs/concepts/autonomy/directed_exploration", "docs/concepts/autonomy/docking", "docs/concepts/autonomy/gps", "docs/concepts/autonomy/graphnav_and_robot_locomotion", "docs/concepts/autonomy/graphnav_area_callbacks", "docs/concepts/autonomy/graphnav_map_structure", "docs/concepts/autonomy/graphnav_service", "docs/concepts/autonomy/graphnav_tech_summary", "docs/concepts/autonomy/initialization", "docs/concepts/autonomy/localization", "docs/concepts/autonomy/missions_service", "docs/concepts/autonomy/typical_autonomous_navigation_use_case", "docs/concepts/base_services", "docs/concepts/bddf", "docs/concepts/choreography/README", "docs/concepts/choreography/animation_file_specification", "docs/concepts/choreography/animations_in_choreographer", "docs/concepts/choreography/choreographer", "docs/concepts/choreography/choreographer_setup", "docs/concepts/choreography/choreography_in_autowalk", "docs/concepts/choreography/choreography_in_tablet", "docs/concepts/choreography/choreography_service", "docs/concepts/choreography/custom_gait", "docs/concepts/choreography/move_reference", "docs/concepts/choreography/robot_controls_in_choreographer", "docs/concepts/data", "docs/concepts/data_acquisition_output", "docs/concepts/data_acquisition_overview", "docs/concepts/data_acquisition_thermal_raw", "docs/concepts/data_buffer_overview", "docs/concepts/developing_api_services", "docs/concepts/estop_service", "docs/concepts/faults", "docs/concepts/geometry_and_frames", "docs/concepts/joint_control/README", "docs/concepts/joint_control/knee_torque_limits", "docs/concepts/joint_control/supplemental_data", "docs/concepts/keepalive_service", "docs/concepts/lease_service", "docs/concepts/network_compute_bridge", "docs/concepts/networking", "docs/concepts/robot_services", "docs/concepts/service_customization", "docs/concepts/writing_services_for_data_acquisition", "docs/payload/README", "docs/payload/configuring_payload_software", "docs/payload/coreio_documentation", "docs/payload/coreio_openvpn_extension", "docs/payload/docker_containers", "docs/payload/guidelines_for_robust_payload_design", "docs/payload/mechanical_interfaces", "docs/payload/payload_configuration_requirements", "docs/payload/robot_electrical_interface", "docs/payload/robot_mounting_rails", "docs/payload/spot_core_cockpit", "docs/payload/spot_core_documentation", "docs/payload/spot_core_portainer", "docs/payload/spot_core_vnc", "docs/protos/README", "docs/protos/style_guide", "docs/python/README", "docs/python/daq_tutorial/daq1", "docs/python/daq_tutorial/daq2", "docs/python/daq_tutorial/daq3", "docs/python/daq_tutorial/daq4", "docs/python/daq_tutorial/daq5", "docs/python/daq_tutorial/daq6", "docs/python/fetch_tutorial/fetch1", "docs/python/fetch_tutorial/fetch2", "docs/python/fetch_tutorial/fetch3", "docs/python/fetch_tutorial/fetch4", "docs/python/fetch_tutorial/fetch5", "docs/python/fetch_tutorial/fetch6", "docs/python/quickstart", "docs/python/understanding_spot_programming", "docs/release_notes", "protos/bosdyn/api/README", "protos/bosdyn/api/proto_reference", "python/README", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/README", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography", "python/bosdyn-client/src/bosdyn/client/README", "python/bosdyn-client/src/bosdyn/client/area_callback", "python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base", "python/bosdyn-client/src/bosdyn/client/area_callback_service_runner", "python/bosdyn-client/src/bosdyn/client/area_callback_service_servicer", "python/bosdyn-client/src/bosdyn/client/area_callback_service_utils", "python/bosdyn-client/src/bosdyn/client/arm_surface_contact", "python/bosdyn-client/src/bosdyn/client/async_tasks", "python/bosdyn-client/src/bosdyn/client/auth", "python/bosdyn-client/src/bosdyn/client/auto_return", "python/bosdyn-client/src/bosdyn/client/autowalk", "python/bosdyn-client/src/bosdyn/client/bddf", "python/bosdyn-client/src/bosdyn/client/bddf_download", "python/bosdyn-client/src/bosdyn/client/channel", "python/bosdyn-client/src/bosdyn/client/command_line", "python/bosdyn-client/src/bosdyn/client/common", "python/bosdyn-client/src/bosdyn/client/data_acquisition", "python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service", "python/bosdyn-client/src/bosdyn/client/data_acquisition_store", "python/bosdyn-client/src/bosdyn/client/data_buffer", "python/bosdyn-client/src/bosdyn/client/data_chunk", "python/bosdyn-client/src/bosdyn/client/data_service", "python/bosdyn-client/src/bosdyn/client/directory", "python/bosdyn-client/src/bosdyn/client/directory_registration", "python/bosdyn-client/src/bosdyn/client/docking", "python/bosdyn-client/src/bosdyn/client/door", "python/bosdyn-client/src/bosdyn/client/estop", "python/bosdyn-client/src/bosdyn/client/exceptions", "python/bosdyn-client/src/bosdyn/client/fault", "python/bosdyn-client/src/bosdyn/client/frame_helpers", "python/bosdyn-client/src/bosdyn/client/gps/NMEAParser", "python/bosdyn-client/src/bosdyn/client/gps/README", "python/bosdyn-client/src/bosdyn/client/gps/aggregator_client", "python/bosdyn-client/src/bosdyn/client/gps/gps_listener", "python/bosdyn-client/src/bosdyn/client/gps/registration_client", "python/bosdyn-client/src/bosdyn/client/graph_nav", "python/bosdyn-client/src/bosdyn/client/gripper_camera_param", "python/bosdyn-client/src/bosdyn/client/image", "python/bosdyn-client/src/bosdyn/client/image_service_helpers", "python/bosdyn-client/src/bosdyn/client/inverse_kinematics", "python/bosdyn-client/src/bosdyn/client/ir_enable_disable", "python/bosdyn-client/src/bosdyn/client/keepalive", "python/bosdyn-client/src/bosdyn/client/lease", "python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy", "python/bosdyn-client/src/bosdyn/client/lease_validator", "python/bosdyn-client/src/bosdyn/client/license", "python/bosdyn-client/src/bosdyn/client/local_grid", "python/bosdyn-client/src/bosdyn/client/log_status", "python/bosdyn-client/src/bosdyn/client/manipulation_api_client", "python/bosdyn-client/src/bosdyn/client/map_processing", "python/bosdyn-client/src/bosdyn/client/math_helpers", "python/bosdyn-client/src/bosdyn/client/metrics_logging", "python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client", "python/bosdyn-client/src/bosdyn/client/payload", "python/bosdyn-client/src/bosdyn/client/payload_registration", "python/bosdyn-client/src/bosdyn/client/point_cloud", "python/bosdyn-client/src/bosdyn/client/power", "python/bosdyn-client/src/bosdyn/client/processors", "python/bosdyn-client/src/bosdyn/client/ray_cast", "python/bosdyn-client/src/bosdyn/client/recording", "python/bosdyn-client/src/bosdyn/client/robot", "python/bosdyn-client/src/bosdyn/client/robot_command", "python/bosdyn-client/src/bosdyn/client/robot_id", "python/bosdyn-client/src/bosdyn/client/robot_state", "python/bosdyn-client/src/bosdyn/client/sdk", "python/bosdyn-client/src/bosdyn/client/server_util", "python/bosdyn-client/src/bosdyn/client/service_customization_helpers", "python/bosdyn-client/src/bosdyn/client/signals_helpers", "python/bosdyn-client/src/bosdyn/client/spot_cam/README", "python/bosdyn-client/src/bosdyn/client/spot_cam/audio", "python/bosdyn-client/src/bosdyn/client/spot_cam/compositor", "python/bosdyn-client/src/bosdyn/client/spot_cam/health", "python/bosdyn-client/src/bosdyn/client/spot_cam/lighting", "python/bosdyn-client/src/bosdyn/client/spot_cam/lights_helper", "python/bosdyn-client/src/bosdyn/client/spot_cam/media_log", "python/bosdyn-client/src/bosdyn/client/spot_cam/network", "python/bosdyn-client/src/bosdyn/client/spot_cam/power", "python/bosdyn-client/src/bosdyn/client/spot_cam/ptz", "python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality", "python/bosdyn-client/src/bosdyn/client/spot_cam/version", "python/bosdyn-client/src/bosdyn/client/spot_check", "python/bosdyn-client/src/bosdyn/client/time_sync", "python/bosdyn-client/src/bosdyn/client/token_cache", "python/bosdyn-client/src/bosdyn/client/token_manager", "python/bosdyn-client/src/bosdyn/client/units_helpers", "python/bosdyn-client/src/bosdyn/client/util", "python/bosdyn-client/src/bosdyn/client/world_object", "python/bosdyn-core/src/bosdyn/README", "python/bosdyn-core/src/bosdyn/bddf/README", "python/bosdyn-core/src/bosdyn/bddf/base_data_reader", "python/bosdyn-core/src/bosdyn/bddf/block_writer", "python/bosdyn-core/src/bosdyn/bddf/bosdyn", "python/bosdyn-core/src/bosdyn/bddf/common", "python/bosdyn-core/src/bosdyn/bddf/data_reader", "python/bosdyn-core/src/bosdyn/bddf/data_writer", "python/bosdyn-core/src/bosdyn/bddf/file_indexer", "python/bosdyn-core/src/bosdyn/bddf/grpc_proto_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_writer", "python/bosdyn-core/src/bosdyn/bddf/message_reader", "python/bosdyn-core/src/bosdyn/bddf/pod_series_reader", "python/bosdyn-core/src/bosdyn/bddf/pod_series_writer", "python/bosdyn-core/src/bosdyn/bddf/protobuf_channel_reader", "python/bosdyn-core/src/bosdyn/bddf/protobuf_reader", "python/bosdyn-core/src/bosdyn/bddf/protobuf_series_writer", "python/bosdyn-core/src/bosdyn/bddf/stream_data_reader", "python/bosdyn-core/src/bosdyn/deprecated", "python/bosdyn-core/src/bosdyn/geometry", "python/bosdyn-core/src/bosdyn/util", "python/bosdyn-mission/src/bosdyn/mission/README", "python/bosdyn-mission/src/bosdyn/mission/client", "python/bosdyn-mission/src/bosdyn/mission/constants", "python/bosdyn-mission/src/bosdyn/mission/exceptions", "python/bosdyn-mission/src/bosdyn/mission/remote_client", "python/bosdyn-mission/src/bosdyn/mission/server_util", "python/bosdyn-mission/src/bosdyn/mission/util", "python/bosdyn-orbit/src/bosdyn/orbit/README", "python/bosdyn-orbit/src/bosdyn/orbit/client", "python/bosdyn-orbit/src/bosdyn/orbit/exceptions", "python/bosdyn-orbit/src/bosdyn/orbit/utils", "python/bosdyn-scout/src/bosdyn/scout/README", "python/bosdyn-scout/src/bosdyn/scout/client", "python/bosdyn-scout/src/bosdyn/scout/exceptions", "python/bosdyn-scout/src/bosdyn/scout/utils", "python/examples/README", "python/examples/animation_recorder/README", "python/examples/area_callback/README", "python/examples/arm_and_mobility_command/README", "python/examples/arm_constrained_manipulation/README", "python/examples/arm_door/README", "python/examples/arm_force_control/README", "python/examples/arm_freeze/README", "python/examples/arm_gaze/README", "python/examples/arm_gcode/README", "python/examples/arm_grasp/README", "python/examples/arm_grasp_carry_overrides/README", "python/examples/arm_impedance_control/README", "python/examples/arm_joint_move/README", "python/examples/arm_simple/README", "python/examples/arm_stow_unstow/README", "python/examples/arm_surface_contact/README", "python/examples/arm_trajectory/README", "python/examples/arm_walk_to_object/README", "python/examples/arm_wasd/README", "python/examples/arm_with_body_follow/README", "python/examples/auto_return/README", "python/examples/bddf_download/README", "python/examples/cloud_upload/README", "python/examples/comms_mapping/README", "python/examples/comms_test/README", "python/examples/core_io_gpio/README", "python/examples/data_acquisition_service/README", "python/examples/data_acquisition_service/signals_coreio_modem_plugin/README", "python/examples/data_buffer/README", "python/examples/data_service/README", "python/examples/directory/README", "python/examples/disable_ir_emission/README", "python/examples/docking/README", "python/examples/docs/arm_examples", "python/examples/docs/autonomy_and_missions_examples", "python/examples/docs/basic_service_examples", "python/examples/docs/data_acquisition_examples", "python/examples/docs/joint_control_examples", "python/examples/docs/logging_examples", "python/examples/docs/orbit", "python/examples/docs/payloads_examples", "python/examples/docs/perception_world_objects_examples", "python/examples/docs/robot_behavior_examples", "python/examples/edit_autowalk/README", "python/examples/estop/README", "python/examples/extensions/README", "python/examples/extract_images_from_walk/README", "python/examples/fan_command/README", "python/examples/fiducial_follow/README", "python/examples/frame_trajectory_command/README", "python/examples/get_depth_plus_visual_image/README", "python/examples/get_image/README", "python/examples/get_mission_state/README", "python/examples/get_robot_state/README", "python/examples/get_robot_state_async/README", "python/examples/get_world_objects/README", "python/examples/gps_service/README", "python/examples/graph_nav_anchoring_optimization/README", "python/examples/graph_nav_command_line/README", "python/examples/graph_nav_extract_point_cloud/README", "python/examples/graph_nav_view_gps/README", "python/examples/graph_nav_view_map/README", "python/examples/gripper_camera_params/README", "python/examples/hello_spot/README", "python/examples/inverse_kinematics/README", "python/examples/joint_control/README", "python/examples/log_status/README", "python/examples/logging/README", "python/examples/metrics_over_coreio/README", "python/examples/mission_question_answerer/README", "python/examples/mission_recorder/README", "python/examples/network_compute_bridge/README", "python/examples/network_compute_bridge/fire_extinguisher_server/README", "python/examples/network_request_callback/README", "python/examples/orbit/export_run_archives/README", "python/examples/orbit/hello_orbit/README", "python/examples/orbit/runs_response/README", "python/examples/orbit/schedule_mission/README", "python/examples/orbit/send_robot_back_to_dock/README", "python/examples/orbit/toggle_mission_based_on_weather/README", "python/examples/orbit/webhook/README", "python/examples/payloads/README", "python/examples/post_docking_callbacks/README", "python/examples/ray_cast/README", "python/examples/record_autowalk/README", "python/examples/remote_mission_service/README", "python/examples/replay_mission/README", "python/examples/reset_safety_stop/README", "python/examples/ricoh_theta/README", "python/examples/self_registration/README", "python/examples/service_customization/custom_parameter_image_server/README", "python/examples/service_customization/custom_parameter_ncb_worker/README", "python/examples/service_customization/custom_parameters_data_acquisition/README", "python/examples/service_faults/README", "python/examples/spot_cam/README", "python/examples/spot_detect_and_follow/README", "python/examples/spot_light/README", "python/examples/spot_tensorflow_detector/README", "python/examples/stance/README", "python/examples/stitch_front_images/README", "python/examples/tester_programs/README", "python/examples/time_sync/README", "python/examples/upload_choreographed_sequence/README", "python/examples/user_nogo_regions/README", "python/examples/velodyne_client/README", "python/examples/visualizer/README", "python/examples/wasd/README", "python/examples/world_object_mutations/README", "python/examples/world_object_with_image_coordinates/README", "python/examples/xbox_controller/README"], "filenames": ["README.md", "docs/concepts/README.md", "docs/concepts/about_orbit.md", "docs/concepts/about_spot.md", "docs/concepts/arm/README.md", "docs/concepts/arm/arm_concepts.md", "docs/concepts/arm/arm_services.md", "docs/concepts/arm/arm_specification.md", "docs/concepts/autonomy/README.md", "docs/concepts/autonomy/auto_return.md", "docs/concepts/autonomy/autonomous_navigation_code_examples.md", "docs/concepts/autonomy/autonomous_navigation_services.md", "docs/concepts/autonomy/autowalk_service.md", "docs/concepts/autonomy/components_of_autonomous_navigation.md", "docs/concepts/autonomy/directed_exploration.md", "docs/concepts/autonomy/docking.md", "docs/concepts/autonomy/gps.md", "docs/concepts/autonomy/graphnav_and_robot_locomotion.md", "docs/concepts/autonomy/graphnav_area_callbacks.md", "docs/concepts/autonomy/graphnav_map_structure.md", "docs/concepts/autonomy/graphnav_service.md", "docs/concepts/autonomy/graphnav_tech_summary.md", "docs/concepts/autonomy/initialization.md", "docs/concepts/autonomy/localization.md", "docs/concepts/autonomy/missions_service.md", "docs/concepts/autonomy/typical_autonomous_navigation_use_case.md", "docs/concepts/base_services.md", "docs/concepts/bddf.md", "docs/concepts/choreography/README.md", "docs/concepts/choreography/animation_file_specification.md", "docs/concepts/choreography/animations_in_choreographer.md", "docs/concepts/choreography/choreographer.md", "docs/concepts/choreography/choreographer_setup.md", "docs/concepts/choreography/choreography_in_autowalk.md", "docs/concepts/choreography/choreography_in_tablet.md", "docs/concepts/choreography/choreography_service.md", "docs/concepts/choreography/custom_gait.md", "docs/concepts/choreography/move_reference.md", "docs/concepts/choreography/robot_controls_in_choreographer.md", "docs/concepts/data.md", "docs/concepts/data_acquisition_output.md", "docs/concepts/data_acquisition_overview.md", "docs/concepts/data_acquisition_thermal_raw.md", "docs/concepts/data_buffer_overview.md", "docs/concepts/developing_api_services.md", "docs/concepts/estop_service.md", "docs/concepts/faults.md", "docs/concepts/geometry_and_frames.md", "docs/concepts/joint_control/README.md", "docs/concepts/joint_control/knee_torque_limits.md", "docs/concepts/joint_control/supplemental_data.md", "docs/concepts/keepalive_service.md", "docs/concepts/lease_service.md", "docs/concepts/network_compute_bridge.md", "docs/concepts/networking.md", "docs/concepts/robot_services.md", "docs/concepts/service_customization.md", "docs/concepts/writing_services_for_data_acquisition.md", "docs/payload/README.md", "docs/payload/configuring_payload_software.md", "docs/payload/coreio_documentation.md", "docs/payload/coreio_openvpn_extension.md", "docs/payload/docker_containers.md", "docs/payload/guidelines_for_robust_payload_design.md", "docs/payload/mechanical_interfaces.md", "docs/payload/payload_configuration_requirements.md", "docs/payload/robot_electrical_interface.md", "docs/payload/robot_mounting_rails.md", "docs/payload/spot_core_cockpit.md", "docs/payload/spot_core_documentation.md", "docs/payload/spot_core_portainer.md", "docs/payload/spot_core_vnc.md", "docs/protos/README.md", "docs/protos/style_guide.md", "docs/python/README.md", "docs/python/daq_tutorial/daq1.md", "docs/python/daq_tutorial/daq2.md", "docs/python/daq_tutorial/daq3.md", "docs/python/daq_tutorial/daq4.md", "docs/python/daq_tutorial/daq5.md", "docs/python/daq_tutorial/daq6.md", "docs/python/fetch_tutorial/fetch1.md", "docs/python/fetch_tutorial/fetch2.md", "docs/python/fetch_tutorial/fetch3.md", "docs/python/fetch_tutorial/fetch4.md", "docs/python/fetch_tutorial/fetch5.md", "docs/python/fetch_tutorial/fetch6.md", "docs/python/quickstart.md", "docs/python/understanding_spot_programming.md", "docs/release_notes.md", "protos/bosdyn/api/README.md", "protos/bosdyn/api/proto_reference.md", "python/README.md", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.md", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.rst", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.rst", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.rst", "python/bosdyn-client/src/bosdyn/client/README.md", "python/bosdyn-client/src/bosdyn/client/area_callback.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_servicer.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_utils.rst", "python/bosdyn-client/src/bosdyn/client/arm_surface_contact.rst", "python/bosdyn-client/src/bosdyn/client/async_tasks.rst", "python/bosdyn-client/src/bosdyn/client/auth.rst", "python/bosdyn-client/src/bosdyn/client/auto_return.rst", "python/bosdyn-client/src/bosdyn/client/autowalk.rst", "python/bosdyn-client/src/bosdyn/client/bddf.rst", "python/bosdyn-client/src/bosdyn/client/bddf_download.rst", "python/bosdyn-client/src/bosdyn/client/channel.rst", "python/bosdyn-client/src/bosdyn/client/command_line.rst", "python/bosdyn-client/src/bosdyn/client/common.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_store.rst", "python/bosdyn-client/src/bosdyn/client/data_buffer.rst", "python/bosdyn-client/src/bosdyn/client/data_chunk.rst", "python/bosdyn-client/src/bosdyn/client/data_service.rst", "python/bosdyn-client/src/bosdyn/client/directory.rst", "python/bosdyn-client/src/bosdyn/client/directory_registration.rst", "python/bosdyn-client/src/bosdyn/client/docking.rst", "python/bosdyn-client/src/bosdyn/client/door.rst", "python/bosdyn-client/src/bosdyn/client/estop.rst", "python/bosdyn-client/src/bosdyn/client/exceptions.rst", "python/bosdyn-client/src/bosdyn/client/fault.rst", "python/bosdyn-client/src/bosdyn/client/frame_helpers.rst", "python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.rst", "python/bosdyn-client/src/bosdyn/client/gps/README.md", "python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.rst", "python/bosdyn-client/src/bosdyn/client/gps/gps_listener.rst", "python/bosdyn-client/src/bosdyn/client/gps/registration_client.rst", "python/bosdyn-client/src/bosdyn/client/graph_nav.rst", "python/bosdyn-client/src/bosdyn/client/gripper_camera_param.rst", "python/bosdyn-client/src/bosdyn/client/image.rst", "python/bosdyn-client/src/bosdyn/client/image_service_helpers.rst", "python/bosdyn-client/src/bosdyn/client/inverse_kinematics.rst", "python/bosdyn-client/src/bosdyn/client/ir_enable_disable.rst", "python/bosdyn-client/src/bosdyn/client/keepalive.rst", "python/bosdyn-client/src/bosdyn/client/lease.rst", "python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.rst", "python/bosdyn-client/src/bosdyn/client/lease_validator.rst", "python/bosdyn-client/src/bosdyn/client/license.rst", "python/bosdyn-client/src/bosdyn/client/local_grid.rst", "python/bosdyn-client/src/bosdyn/client/log_status.rst", "python/bosdyn-client/src/bosdyn/client/manipulation_api_client.rst", "python/bosdyn-client/src/bosdyn/client/map_processing.rst", "python/bosdyn-client/src/bosdyn/client/math_helpers.rst", "python/bosdyn-client/src/bosdyn/client/metrics_logging.rst", "python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.rst", "python/bosdyn-client/src/bosdyn/client/payload.rst", "python/bosdyn-client/src/bosdyn/client/payload_registration.rst", "python/bosdyn-client/src/bosdyn/client/point_cloud.rst", "python/bosdyn-client/src/bosdyn/client/power.rst", "python/bosdyn-client/src/bosdyn/client/processors.rst", "python/bosdyn-client/src/bosdyn/client/ray_cast.rst", "python/bosdyn-client/src/bosdyn/client/recording.rst", "python/bosdyn-client/src/bosdyn/client/robot.rst", "python/bosdyn-client/src/bosdyn/client/robot_command.rst", "python/bosdyn-client/src/bosdyn/client/robot_id.rst", "python/bosdyn-client/src/bosdyn/client/robot_state.rst", "python/bosdyn-client/src/bosdyn/client/sdk.rst", "python/bosdyn-client/src/bosdyn/client/server_util.rst", "python/bosdyn-client/src/bosdyn/client/service_customization_helpers.rst", "python/bosdyn-client/src/bosdyn/client/signals_helpers.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/README.md", "python/bosdyn-client/src/bosdyn/client/spot_cam/audio.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/compositor.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/health.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/lighting.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/lights_helper.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/media_log.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/network.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/power.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/ptz.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/version.rst", "python/bosdyn-client/src/bosdyn/client/spot_check.rst", "python/bosdyn-client/src/bosdyn/client/time_sync.rst", "python/bosdyn-client/src/bosdyn/client/token_cache.rst", "python/bosdyn-client/src/bosdyn/client/token_manager.rst", "python/bosdyn-client/src/bosdyn/client/units_helpers.rst", "python/bosdyn-client/src/bosdyn/client/util.rst", "python/bosdyn-client/src/bosdyn/client/world_object.rst", "python/bosdyn-core/src/bosdyn/README.md", "python/bosdyn-core/src/bosdyn/bddf/README.md", "python/bosdyn-core/src/bosdyn/bddf/base_data_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/block_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/bosdyn.rst", "python/bosdyn-core/src/bosdyn/bddf/common.rst", "python/bosdyn-core/src/bosdyn/bddf/data_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/data_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/file_indexer.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_proto_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/message_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/pod_series_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/pod_series_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_channel_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_series_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/stream_data_reader.rst", "python/bosdyn-core/src/bosdyn/deprecated.rst", "python/bosdyn-core/src/bosdyn/geometry.rst", "python/bosdyn-core/src/bosdyn/util.rst", "python/bosdyn-mission/src/bosdyn/mission/README.md", "python/bosdyn-mission/src/bosdyn/mission/client.rst", "python/bosdyn-mission/src/bosdyn/mission/constants.rst", "python/bosdyn-mission/src/bosdyn/mission/exceptions.rst", "python/bosdyn-mission/src/bosdyn/mission/remote_client.rst", "python/bosdyn-mission/src/bosdyn/mission/server_util.rst", "python/bosdyn-mission/src/bosdyn/mission/util.rst", "python/bosdyn-orbit/src/bosdyn/orbit/README.md", "python/bosdyn-orbit/src/bosdyn/orbit/client.rst", "python/bosdyn-orbit/src/bosdyn/orbit/exceptions.rst", "python/bosdyn-orbit/src/bosdyn/orbit/utils.rst", "python/bosdyn-scout/src/bosdyn/scout/README.md", "python/bosdyn-scout/src/bosdyn/scout/client.rst", "python/bosdyn-scout/src/bosdyn/scout/exceptions.rst", "python/bosdyn-scout/src/bosdyn/scout/utils.rst", "python/examples/README.md", "python/examples/animation_recorder/README.md", "python/examples/area_callback/README.md", "python/examples/arm_and_mobility_command/README.md", "python/examples/arm_constrained_manipulation/README.md", "python/examples/arm_door/README.md", "python/examples/arm_force_control/README.md", "python/examples/arm_freeze/README.md", "python/examples/arm_gaze/README.md", "python/examples/arm_gcode/README.md", "python/examples/arm_grasp/README.md", "python/examples/arm_grasp_carry_overrides/README.md", "python/examples/arm_impedance_control/README.md", "python/examples/arm_joint_move/README.md", "python/examples/arm_simple/README.md", "python/examples/arm_stow_unstow/README.md", "python/examples/arm_surface_contact/README.md", "python/examples/arm_trajectory/README.md", "python/examples/arm_walk_to_object/README.md", "python/examples/arm_wasd/README.md", "python/examples/arm_with_body_follow/README.md", "python/examples/auto_return/README.md", "python/examples/bddf_download/README.md", "python/examples/cloud_upload/README.md", "python/examples/comms_mapping/README.md", "python/examples/comms_test/README.md", "python/examples/core_io_gpio/README.md", "python/examples/data_acquisition_service/README.md", "python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.md", "python/examples/data_buffer/README.md", "python/examples/data_service/README.md", "python/examples/directory/README.md", "python/examples/disable_ir_emission/README.md", "python/examples/docking/README.md", "python/examples/docs/arm_examples.md", "python/examples/docs/autonomy_and_missions_examples.md", "python/examples/docs/basic_service_examples.md", "python/examples/docs/data_acquisition_examples.md", "python/examples/docs/joint_control_examples.md", "python/examples/docs/logging_examples.md", "python/examples/docs/orbit.md", "python/examples/docs/payloads_examples.md", "python/examples/docs/perception_world_objects_examples.md", "python/examples/docs/robot_behavior_examples.md", "python/examples/edit_autowalk/README.md", "python/examples/estop/README.md", "python/examples/extensions/README.md", "python/examples/extract_images_from_walk/README.md", "python/examples/fan_command/README.md", "python/examples/fiducial_follow/README.md", "python/examples/frame_trajectory_command/README.md", "python/examples/get_depth_plus_visual_image/README.md", "python/examples/get_image/README.md", "python/examples/get_mission_state/README.md", "python/examples/get_robot_state/README.md", "python/examples/get_robot_state_async/README.md", "python/examples/get_world_objects/README.md", "python/examples/gps_service/README.md", "python/examples/graph_nav_anchoring_optimization/README.md", "python/examples/graph_nav_command_line/README.md", "python/examples/graph_nav_extract_point_cloud/README.md", "python/examples/graph_nav_view_gps/README.md", "python/examples/graph_nav_view_map/README.md", "python/examples/gripper_camera_params/README.md", "python/examples/hello_spot/README.md", "python/examples/inverse_kinematics/README.md", "python/examples/joint_control/README.md", "python/examples/log_status/README.md", "python/examples/logging/README.md", "python/examples/metrics_over_coreio/README.md", "python/examples/mission_question_answerer/README.md", "python/examples/mission_recorder/README.md", "python/examples/network_compute_bridge/README.md", "python/examples/network_compute_bridge/fire_extinguisher_server/README.md", "python/examples/network_request_callback/README.md", "python/examples/orbit/export_run_archives/README.md", "python/examples/orbit/hello_orbit/README.md", "python/examples/orbit/runs_response/README.md", "python/examples/orbit/schedule_mission/README.md", "python/examples/orbit/send_robot_back_to_dock/README.md", "python/examples/orbit/toggle_mission_based_on_weather/README.md", "python/examples/orbit/webhook/README.md", "python/examples/payloads/README.md", "python/examples/post_docking_callbacks/README.md", "python/examples/ray_cast/README.md", "python/examples/record_autowalk/README.md", "python/examples/remote_mission_service/README.md", "python/examples/replay_mission/README.md", "python/examples/reset_safety_stop/README.md", "python/examples/ricoh_theta/README.md", "python/examples/self_registration/README.md", "python/examples/service_customization/custom_parameter_image_server/README.md", "python/examples/service_customization/custom_parameter_ncb_worker/README.md", "python/examples/service_customization/custom_parameters_data_acquisition/README.md", "python/examples/service_faults/README.md", "python/examples/spot_cam/README.md", "python/examples/spot_detect_and_follow/README.md", "python/examples/spot_light/README.md", "python/examples/spot_tensorflow_detector/README.md", "python/examples/stance/README.md", "python/examples/stitch_front_images/README.md", "python/examples/tester_programs/README.md", "python/examples/time_sync/README.md", "python/examples/upload_choreographed_sequence/README.md", "python/examples/user_nogo_regions/README.md", "python/examples/velodyne_client/README.md", "python/examples/visualizer/README.md", "python/examples/wasd/README.md", "python/examples/world_object_mutations/README.md", "python/examples/world_object_with_image_coordinates/README.md", "python/examples/xbox_controller/README.md"], "titles": ["Spot SDK", "Concepts", "About Orbit (formerly Scout)", "About Spot", "Spot Arm and Gripper", "Arm Concepts", "Arm Services", "Arm and gripper specifications", "Autonomy", "AutoReturn Service", "Autonomous navigation code examples", "Navigation Services", "Autowalk Service", "Components of Navigation", "Directed Exploration", "Docking", "GPS on Spot", "GraphNav and Robot Locomotion", "GraphNav Area Callbacks", "GraphNav Map Structure", "GraphNav Service", "Autonomy Technical Summary", "GraphNav Initialization", "GraphNav Localization", "Mission Service", "Typical Autonomous Use Case", "Base Services", "BDDF data format", "Spot Choreography SDK", "Animation files for Choreographer", "Animations in Choreography", "Boston Dynamics Choreographer Developer Guide", "Install Choreographer", "Choreography in Autowalk", "Boston Dynamics Choreography tablet UI", "Choreography service", "Custom Gait", "Choreography moves reference", "Connecting robots to Choreographer", "Spot Data", "Data Acquisition Output", "Data Acquisition Overview", "Thermal Raw Data", "Data Buffer Overview", "Developing API Services", "E-Stop Service", "Faults", "Geometry and Frames", "Joint Control API (Beta)", "Knee Torque Limits", "Supplemental Data", "Keepalive Service (BETA)", "Lease Service", "Machine Learning Bridge and External Compute", "Networking", "Robot Services", "Service Customization", "Integrate a Payload with the Data Acquisition Pipeline", "Payload Developer Guide", "Payload Software Interface", "CORE I/O Documentation", "CORE I/O OpenVPN Extension Documentation", "Running Custom Applications with Spot", "Guidelines for Robust Payload Design", "Mechanical Interfaces", "Configuration Requirements", "Electrical Interface", "Mounting Rails", "Spot CORE Cockpit - System Management Tool", "Pre-3.2 Spot CORE Documentation", "Manage Docker Containers in Spot CORE", "Spot CORE VNC", "API Protocol", "Boston Dynamics API Protobuf Guidelines", "Python Library", "Tutorial: Data Collection", "Part 2: Capturing Images", "Part 3: Capturing Other Data", "Part 4: Deploying to the CORE I/O", "Part 5: Collecting Data", "Part 6: Processing Collected Data", "Tutorial: Playing Fetch with Spot", "Fetch Part 2: Training the Model", "Fetch Part 3: Evaluating the Model", "Fetch Part 4: Autonomous Pick Up", "Fetch Part 5: Detecting People and Playing Fetch", "Fetch Part 6: Running the model on CORE I/O", "QuickStart", "Understanding Spot Programming", "Spot Release Notes", "Basic Proto Definitions", "Protocol Documentation", "Boston Dynamics Python Reference Guide", "Python Choreography Client", "Animation File Conversion Helpers", "Animation File To Proto", "Choreography", "Python Client", "Area Callback", "Area Callback Region Handler Base", "Area Callback Service Runner", "Area Callback Service Servicer", "Area Callback Service Utils", "Arm Surface Contact", "Async Tasks", "Auth", "Auto Return", "Autowalk", "Bddf", "Bddf Download", "Channel", "Command Line", "Common", "Data Acquisition", "Data Acquisition Helpers", "Data Acquisition Plugin", "Data Acquisition Plugin Service", "Data Acquisition Store", "Data Buffer", "Data Chunk", "Data Service", "Directory", "Directory Registration", "Docking", "Door", "Estop", "Exceptions", "Fault", "Frame Helpers", "Nmeaparser", "GPS clients and helpers", "Aggregator Client", "Gps Listener", "Registration Client", "Graph Nav", "Gripper Camera Param", "Image", "Image Service Helpers", "Inverse Kinematics", "Ir Enable Disable", "Keepalive", "Lease", "Lease Resource Hierarchy", "Lease Validator", "License", "Local Grid", "Log Status", "Manipulation Api Client", "Map Processing", "Math Helpers", "Metrics Logging", "Network Compute Bridge Client", "Payload", "Payload Registration", "Point Cloud", "Power", "Processors", "Ray Cast", "Recording", "Robot", "Robot Command", "Robot Id", "Robot State", "Sdk", "Server Util", "Service Customization Helpers", "Signals Helpers", "SpotCAM Python Client", "Audio", "Compositor", "Health", "Lighting", "Lights Helper", "Media Log", "Network", "Power", "Ptz", "Streamquality", "Version", "Spot Check", "Time Sync", "Token Cache", "Token Manager", "Units Helpers", "Util", "World Object", "Python Core", "BDDF Python", "Base Data Reader", "Block Writer", "Bosdyn", "Common", "Data Reader", "Data Writer", "File Indexer", "Grpc Proto Reader", "Grpc Reader", "Grpc Service Reader", "Grpc Service Writer", "Message Reader", "Pod Series Reader", "Pod Series Writer", "Protobuf Channel Reader", "Protobuf Reader", "Protobuf Series Writer", "Stream Data Reader", "Deprecated", "Geometry", "Util", "Python Mission", "Client", "Constants", "Exceptions", "Remote Client", "Server Util", "Util", "Python Orbit", "Client", "Exceptions", "Utils", "Python Scout", "Client", "Exceptions", "Utils", "Python Examples", "Animation Recorder", "Area Callback Tutorial", "Arm and Mobility", "Constrained Manipulation", "Arm Door Command", "Force Command", "Arm Freeze Hand in Body / World", "Arm Gaze Command", "GCODE Drawing", "Grasping", "Setting Spot Arm grasp state and carry overrides", "Arm Impedance Command", "Arm JointMove Command", "Arm Simple", "Arm Deploy and Stow", "Arm Surface Contact", "Arm Trajectory", "Walking to an Object", "Controlling the Arm with a Keyboard", "Arm and Mobility Follow", "Auto Return Example", "BDDF data download", "Cloud Upload Example", "Comms image service", "Comms Testing", "CORE I/O GPIO", "Data Acquisition Plugin Services", "Modem Signals", "Using the Data Buffer service", "Using the Robot Data Service", "Manipulating Spot Service Configurations in Directory", "Disable IR Emission", "Robot Docking", "Arm Examples", "Autonomy and Missions Examples", "Basic Service Examples", "Data Acquisition Examples", "Joint Control API Examples", "Logging and Data Retrieval Examples", "Orbit Examples", "Payload Examples", "Perception & World Objects Examples", "Robot Behavior and Commands Examples", "Edit Autowalk", "Creating an E-Stop endpoint", "Spot Extensions Build Script", "Extract Images from Walk File Example", "Fan Power Commands with the Python SDK", "Follow a Fiducial", "Frame Trajectory Commands", "API Example - Visualize Depth in Visual Image", "Using the Image Service", "Retrieving Mission state", "Using the Robot State Service", "Performing Asynchronous State Queries on Spot", "Using the World Object Service", "GPS Listener", "Graph Nav Anchoring Optimization Example", "GraphNav and Recording Service Command Line Interfaces", "GraphNav Point Cloud Extractor", "GraphNav GPS Viewer", "GraphNav Map Viewer", "Gripper Camera Parameter Examples", "Hello Spot", "Inverse Kinematics Service", "Joint Control", "Using the Log Status Service", "Logging Through the API", "Overview", "Answering a Mission Question", "Mission Recorder", "Network Compute Bridge", "Fire Extinguisher Detector Server", "Network Request Callback", "Export Run Archives - Mission Data", "Hello Orbit", "Runs Response", "Create, Edit, and Delete Scheduled Missions on Orbit", "Send robot back to the dock during a mission playback", "Enable - disable Orbit missions based on weather forcast", "Hello Webhooks", "Using the Payload Service", "Post Docking Callback Examples", "Ray Cast Example", "Recording an Autowalk with a Keyboard", "Run and Interact with a RemoteMissionService.", "Replaying a Mission", "Reset Safety Stop Command with the Python SDK", "Interacting with a Ricoh Theta Camera", "Payload & Service Initialization", "Custom Parameter Image Service for a Web Cam", "Network Compute Bridge", "Custom Parameter Data Acquisition", "Handling Service Faults", "Spot CAM Services", "Spot Detect and Follow", "Responding to User Interaction via Light", "Spot Tensorflow Object Detection", "Adjusting Robot Stance In Place", "Stitch Front Spot Images Together", "Tester Programs", "Using the Timesync Service", "Upload and Execute Choreography Sequence", "Setting user no-go regions for locomotion", "Using the Velodyne Point Cloud Service", "Basic Streaming Visualizer for API Messages", "Controlling the Robot with a Keyboard", "World Object Mutations", "Using World Object Service with Image Coordinates", "Controlling the Robot with an Xbox Controller"], "terms": {"The": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 110, 112, 113, 114, 115, 116, 118, 121, 122, 123, 124, 125, 126, 127, 128, 131, 134, 135, 136, 137, 138, 140, 141, 142, 143, 146, 147, 148, 149, 150, 151, 153, 154, 155, 157, 158, 159, 160, 162, 164, 165, 166, 177, 179, 180, 182, 184, 185, 191, 192, 204, 208, 209, 210, 212, 214, 215, 216, 217, 218, 219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, 251, 253, 254, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 273, 276, 281, 282, 283, 284, 285, 286, 288, 289, 290, 293, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 319, 320, 321, 322, 325, 327, 330, 333, 334], "document": [0, 1, 2, 16, 19, 22, 23, 26, 28, 31, 33, 35, 38, 41, 43, 44, 45, 48, 53, 55, 57, 58, 59, 62, 71, 72, 73, 74, 76, 77, 78, 82, 85, 86, 87, 88, 105, 179, 226, 231, 248, 250, 251, 254, 258, 260, 262, 266, 267, 268, 269, 273, 274, 283, 284, 285, 286, 288, 296, 298, 307, 311, 313, 314, 315, 316, 318, 320, 327], "i": [0, 1, 3, 5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 81, 82, 83, 84, 85, 87, 88, 91, 96, 99, 104, 105, 109, 110, 112, 113, 114, 115, 116, 117, 118, 122, 123, 125, 126, 128, 134, 136, 137, 140, 141, 142, 143, 146, 148, 149, 150, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 169, 172, 174, 175, 176, 177, 179, 180, 182, 184, 185, 188, 191, 192, 193, 194, 196, 198, 199, 200, 201, 203, 204, 205, 207, 208, 210, 215, 217, 218, 219, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 249, 251, 252, 253, 254, 265, 268, 269, 270, 271, 272, 273, 274, 276, 279, 281, 282, 283, 285, 286, 288, 289, 290, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 316, 317, 319, 322, 324, 325, 327, 329, 330, 331, 333, 334], "best": [0, 1, 16, 18, 19, 21, 22, 34, 57, 58, 72, 74, 82, 84, 89, 91, 180, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 265, 281, 285, 287, 288, 289, 308, 313, 322, 334], "view": [0, 1, 3, 6, 10, 29, 31, 34, 35, 36, 38, 42, 46, 53, 57, 58, 62, 70, 71, 72, 74, 76, 79, 81, 83, 84, 89, 91, 169, 224, 259, 268, 273, 283, 284, 285, 286, 295, 311, 315, 316, 330], "via": [0, 1, 2, 6, 13, 16, 18, 19, 22, 30, 36, 38, 43, 44, 46, 47, 48, 51, 54, 58, 59, 66, 68, 72, 74, 76, 77, 83, 84, 86, 87, 88, 89, 91, 96, 99, 153, 160, 173, 184, 185, 210, 226, 250, 253, 254, 262, 268, 270, 272, 281, 283, 293, 296, 306, 310, 311, 313, 314, 315, 316, 320, 324], "our": [0, 1, 5, 24, 55, 56, 58, 68, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 118, 160, 282, 285], "develop": [0, 1, 2, 8, 10, 12, 16, 21, 28, 43, 46, 48, 50, 54, 55, 56, 57, 59, 61, 62, 63, 65, 68, 72, 73, 74, 76, 77, 78, 87, 91, 141, 160, 163, 224, 250, 251, 281, 293, 299, 300, 301, 302, 303, 304, 305, 315, 317, 325], "site": [0, 1, 2, 19, 20, 23, 58, 70, 72, 74, 88, 89, 217, 221, 250, 273, 329], "dev": [0, 1, 58, 60, 61, 71, 72, 74, 75, 76, 78, 89, 91, 315], "bostondynam": [0, 1, 58, 64, 65, 72, 74, 87, 89, 91, 293], "com": [0, 1, 2, 29, 36, 58, 60, 64, 65, 68, 72, 74, 76, 77, 87, 88, 89, 91, 273, 293, 296, 316, 320], "applic": [0, 1, 2, 11, 12, 13, 20, 21, 25, 26, 28, 29, 31, 32, 33, 34, 35, 38, 41, 42, 46, 47, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 68, 69, 70, 71, 72, 74, 76, 83, 88, 89, 91, 110, 115, 125, 141, 158, 159, 184, 247, 251, 266, 269, 271, 273, 281, 282, 283, 292, 299, 300, 301, 302, 303, 304, 305, 307, 310, 311, 313, 315, 320, 321, 333], "payload": [0, 1, 5, 16, 22, 23, 24, 26, 35, 39, 41, 42, 46, 53, 54, 55, 60, 64, 67, 68, 69, 70, 72, 74, 78, 86, 97, 111, 122, 127, 137, 155, 159, 160, 184, 219, 224, 248, 251, 281, 283, 285, 296, 297, 298, 307, 313, 315, 316, 317, 318, 325], "us": [0, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 58, 59, 60, 61, 63, 65, 66, 68, 70, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 94, 95, 96, 99, 100, 101, 104, 105, 106, 107, 108, 110, 112, 113, 114, 115, 116, 117, 118, 120, 122, 123, 125, 126, 127, 128, 131, 134, 136, 137, 140, 141, 143, 145, 149, 150, 153, 154, 158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 172, 174, 175, 179, 180, 183, 184, 185, 188, 193, 194, 196, 197, 199, 208, 210, 213, 214, 215, 217, 221, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 249, 250, 252, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 273, 274, 275, 277, 279, 281, 282, 284, 285, 286, 287, 288, 289, 290, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 308, 309, 311, 314, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 327, 328, 330, 331, 332, 334], "boston": [0, 16, 21, 22, 27, 32, 35, 48, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 68, 76, 77, 87, 88, 89, 90, 91, 93, 97, 112, 141, 167, 186, 187, 190, 216, 220, 224, 246, 260, 281, 313, 325], "dynam": [0, 16, 21, 22, 24, 27, 32, 35, 38, 47, 48, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 68, 76, 77, 86, 87, 88, 89, 90, 91, 93, 97, 112, 141, 167, 186, 187, 190, 216, 220, 224, 246, 260, 281, 313, 325], "consist": [0, 13, 19, 21, 23, 24, 26, 27, 28, 29, 31, 35, 41, 50, 57, 73, 87, 91, 96, 104, 148, 160, 284, 286, 330], "conceptu": [0, 73, 89], "These": [0, 2, 5, 12, 13, 16, 17, 18, 19, 26, 27, 30, 31, 34, 35, 41, 43, 44, 46, 47, 48, 51, 52, 53, 54, 55, 57, 59, 62, 68, 76, 77, 78, 82, 88, 89, 90, 91, 96, 149, 160, 226, 228, 245, 246, 250, 251, 254, 255, 257, 268, 271, 273, 280, 281, 282, 283, 284, 287, 290, 296, 298, 306, 311, 313, 314, 319, 320, 322, 323, 328, 332, 333], "explain": [0, 21, 27, 88, 89, 91, 165], "kei": [0, 26, 27, 29, 30, 31, 35, 38, 48, 54, 56, 60, 74, 80, 81, 82, 83, 88, 89, 91, 95, 96, 112, 113, 115, 117, 118, 120, 123, 134, 150, 155, 165, 174, 181, 185, 188, 190, 191, 193, 194, 201, 210, 213, 215, 295, 296, 298, 304, 307, 310, 334], "abstract": [0, 2, 12, 54, 76, 91, 111, 137], "api": [0, 5, 6, 8, 10, 11, 12, 13, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 36, 39, 43, 46, 47, 53, 54, 55, 56, 57, 62, 66, 75, 80, 81, 82, 83, 84, 86, 87, 88, 90, 93, 96, 97, 98, 99, 101, 103, 105, 106, 107, 109, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 131, 133, 134, 135, 136, 138, 139, 140, 141, 144, 145, 146, 148, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 167, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 185, 186, 187, 188, 208, 210, 213, 215, 216, 217, 219, 220, 221, 223, 224, 227, 228, 229, 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, 241, 243, 244, 246, 250, 251, 253, 254, 255, 256, 257, 258, 260, 264, 265, 268, 270, 273, 276, 278, 279, 281, 282, 283, 287, 289, 290, 291, 293, 296, 298, 306, 308, 311, 313, 315, 316, 317, 318, 323, 325, 327], "python": [0, 10, 11, 12, 18, 24, 26, 28, 29, 32, 44, 45, 46, 48, 54, 56, 57, 59, 60, 62, 73, 76, 77, 78, 80, 81, 82, 83, 84, 86, 91, 112, 118, 158, 208, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 251, 256, 268, 269, 270, 273, 277, 281, 283, 284, 285, 286, 287, 288, 289, 290, 292, 293, 294, 296, 297, 299, 300, 301, 302, 303, 304, 305, 307, 308, 310, 313, 314, 316, 319, 320, 321, 322, 324, 329, 330, 334], "client": [0, 1, 2, 8, 11, 12, 13, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 41, 43, 44, 45, 46, 47, 48, 51, 52, 54, 55, 56, 57, 59, 60, 61, 62, 71, 72, 73, 74, 75, 76, 77, 81, 83, 84, 85, 86, 87, 88, 91, 92, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 214, 216, 218, 219, 220, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, 241, 243, 244, 249, 251, 253, 254, 255, 256, 257, 260, 265, 272, 273, 275, 276, 278, 279, 281, 282, 283, 287, 289, 290, 291, 293, 299, 300, 301, 302, 303, 304, 305, 306, 308, 310, 312, 313, 315, 316, 317, 318, 323, 325, 329, 330], "librari": [0, 8, 26, 34, 35, 44, 45, 52, 54, 62, 73, 84, 86, 87, 88, 89, 91, 92, 96, 217, 219, 221, 223, 285, 319], "can": [0, 1, 2, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 65, 66, 67, 68, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 91, 95, 96, 99, 101, 105, 112, 113, 115, 116, 118, 122, 123, 126, 128, 134, 136, 137, 141, 146, 149, 153, 157, 158, 159, 160, 161, 164, 165, 175, 177, 179, 184, 185, 194, 210, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 261, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 330, 331, 332, 333], "control": [0, 1, 4, 5, 6, 8, 9, 13, 15, 20, 21, 24, 25, 26, 30, 35, 36, 37, 41, 50, 51, 52, 53, 54, 55, 56, 57, 60, 62, 63, 71, 72, 74, 75, 76, 84, 85, 86, 87, 88, 91, 99, 101, 105, 111, 123, 140, 141, 160, 165, 169, 177, 224, 225, 226, 227, 228, 230, 234, 236, 248, 249, 258, 267, 269, 272, 273, 282, 283, 295, 297, 309, 319, 321], "read": [0, 1, 2, 5, 12, 24, 27, 31, 35, 42, 43, 52, 54, 59, 60, 61, 72, 73, 74, 76, 77, 86, 87, 89, 91, 94, 95, 96, 99, 111, 125, 132, 141, 152, 154, 163, 181, 184, 188, 192, 194, 195, 196, 199, 200, 202, 203, 205, 212, 251, 252, 262, 281, 313, 320, 322], "sensor": [0, 1, 5, 7, 14, 16, 19, 20, 21, 22, 23, 24, 26, 41, 43, 44, 47, 55, 57, 59, 60, 72, 74, 75, 76, 77, 84, 89, 91, 134, 136, 137, 139, 251, 256, 276, 283, 306, 317, 319], "health": [0, 31, 55, 59, 89, 167, 173, 179], "inform": [0, 1, 2, 3, 6, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 26, 27, 29, 31, 34, 35, 37, 40, 41, 43, 44, 46, 48, 50, 52, 53, 54, 55, 57, 58, 59, 60, 68, 71, 72, 73, 74, 76, 77, 78, 87, 88, 89, 91, 95, 96, 113, 115, 116, 121, 122, 134, 137, 141, 149, 158, 159, 160, 163, 164, 165, 178, 180, 192, 210, 213, 217, 221, 224, 225, 226, 247, 251, 252, 254, 255, 260, 268, 269, 271, 272, 277, 281, 282, 298, 302, 306, 310, 312, 313, 314, 315, 318, 325, 333], "from": [0, 1, 2, 3, 5, 6, 7, 9, 10, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 67, 68, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 94, 95, 96, 99, 101, 103, 105, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 132, 134, 135, 136, 137, 140, 141, 143, 145, 147, 148, 149, 150, 152, 153, 154, 155, 158, 159, 160, 161, 163, 164, 172, 173, 174, 177, 179, 180, 181, 184, 185, 188, 189, 192, 194, 195, 196, 199, 200, 202, 203, 205, 208, 210, 213, 215, 217, 219, 221, 223, 224, 226, 228, 229, 234, 242, 246, 249, 252, 253, 254, 257, 259, 268, 270, 272, 273, 276, 281, 282, 283, 284, 285, 286, 288, 290, 293, 294, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 319, 320, 321, 322, 323, 324, 325, 327], "A": [0, 2, 3, 6, 9, 12, 13, 14, 15, 16, 17, 19, 21, 23, 24, 25, 26, 27, 30, 31, 34, 35, 36, 37, 38, 43, 44, 45, 46, 47, 48, 51, 52, 54, 55, 56, 57, 58, 59, 60, 62, 64, 65, 66, 68, 71, 73, 75, 76, 77, 78, 80, 81, 82, 83, 86, 87, 88, 89, 91, 94, 95, 96, 98, 99, 105, 106, 110, 112, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 125, 126, 128, 134, 136, 137, 138, 139, 140, 141, 143, 145, 146, 149, 150, 152, 153, 154, 155, 157, 158, 159, 160, 162, 163, 164, 165, 166, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 184, 185, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 208, 213, 215, 219, 223, 230, 233, 241, 246, 247, 251, 252, 254, 272, 281, 282, 283, 286, 293, 305, 306, 310, 312, 313, 314, 315, 317, 320, 322, 334], "wide": [0, 12, 16, 31, 35, 65, 83, 88, 89, 91], "varieti": [0, 1, 21, 26, 31, 32, 35, 37, 54, 62, 78, 81, 83, 88, 89, 91, 216, 220], "exampl": [0, 1, 2, 3, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 20, 21, 22, 23, 26, 27, 29, 31, 32, 40, 41, 45, 47, 51, 52, 54, 55, 60, 62, 63, 68, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 87, 88, 89, 91, 95, 116, 118, 125, 134, 136, 140, 141, 148, 149, 158, 160, 215, 248, 252, 270, 295, 296, 297, 298, 313, 314, 316, 320, 322, 324, 325, 334], "program": [0, 2, 10, 12, 22, 31, 46, 53, 54, 57, 60, 62, 73, 74, 75, 76, 77, 78, 81, 87, 89, 91, 96, 99, 122, 159, 224, 226, 251, 254, 259, 261, 273, 276, 277, 278, 279, 281, 284, 285, 286, 290, 291, 292, 294, 299, 300, 301, 302, 303, 304, 305, 306, 309, 313, 315, 317, 318, 320, 322, 324, 327, 330, 334], "quickstart": [0, 74, 75, 76, 77, 81, 82, 88, 89, 224, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 287, 288, 289, 299, 300, 301, 302, 303, 304, 305, 308, 322, 334], "guid": [0, 28, 34, 46, 57, 59, 62, 70, 72, 73, 74, 75, 76, 77, 81, 82, 87, 88, 89, 91, 127, 153, 159, 184, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 251, 256, 265, 273, 287, 288, 289, 293, 299, 300, 301, 302, 303, 304, 305, 306, 308, 313, 314, 315, 318, 325], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 94, 95, 96, 105, 109, 110, 112, 116, 118, 122, 123, 125, 126, 134, 136, 140, 141, 143, 146, 148, 149, 153, 154, 155, 156, 158, 159, 160, 169, 174, 180, 184, 185, 193, 201, 204, 208, 213, 221, 226, 228, 230, 234, 243, 246, 247, 248, 249, 250, 251, 254, 268, 269, 270, 273, 274, 276, 281, 282, 283, 284, 286, 293, 295, 296, 306, 310, 311, 313, 314, 315, 316, 320, 321, 322, 324, 325, 330, 331, 334], "also": [0, 2, 4, 5, 7, 9, 12, 16, 17, 18, 19, 20, 21, 23, 24, 26, 29, 30, 31, 32, 34, 35, 36, 37, 41, 43, 45, 46, 47, 48, 54, 55, 56, 57, 58, 60, 62, 63, 66, 68, 70, 71, 73, 76, 77, 78, 80, 81, 85, 86, 87, 88, 89, 91, 110, 122, 134, 140, 141, 159, 160, 163, 184, 217, 221, 225, 231, 237, 246, 249, 250, 268, 269, 270, 271, 272, 273, 282, 283, 286, 289, 296, 297, 306, 307, 310, 311, 313, 314, 315, 316, 320, 322, 329, 334], "includ": [0, 2, 3, 4, 6, 7, 8, 10, 11, 14, 16, 18, 19, 21, 23, 24, 26, 27, 29, 30, 31, 34, 36, 37, 38, 40, 41, 43, 44, 46, 47, 48, 52, 54, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 68, 70, 73, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 89, 91, 92, 96, 112, 113, 114, 115, 116, 124, 134, 136, 137, 141, 147, 148, 150, 158, 160, 162, 180, 184, 185, 189, 224, 226, 228, 247, 251, 254, 270, 276, 281, 283, 286, 293, 294, 296, 298, 306, 313, 316, 320, 322], "add": [0, 2, 5, 18, 24, 29, 31, 33, 34, 38, 43, 47, 51, 53, 55, 57, 60, 61, 62, 70, 71, 78, 79, 81, 83, 84, 85, 86, 87, 89, 91, 96, 104, 111, 112, 118, 140, 141, 148, 149, 159, 164, 166, 184, 185, 193, 194, 201, 217, 221, 226, 247, 270, 282, 296, 297, 309, 314, 315, 316, 317, 319, 320, 322, 328, 332], "addit": [0, 2, 6, 16, 18, 19, 21, 23, 27, 28, 29, 33, 35, 36, 38, 42, 43, 44, 47, 48, 50, 55, 56, 57, 59, 60, 62, 70, 71, 73, 76, 78, 80, 85, 86, 88, 91, 95, 110, 114, 116, 136, 137, 163, 164, 165, 185, 193, 194, 201, 204, 224, 246, 252, 257, 268, 270, 272, 281, 302, 310, 313, 314, 315, 318, 325], "sens": [0, 12, 19, 57, 58, 91, 148], "commun": [0, 1, 9, 12, 16, 18, 24, 26, 28, 31, 34, 44, 45, 48, 52, 53, 54, 55, 57, 59, 60, 62, 65, 68, 70, 72, 75, 76, 77, 83, 87, 88, 91, 106, 107, 110, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 134, 136, 137, 141, 145, 148, 150, 151, 152, 153, 154, 155, 159, 160, 162, 163, 180, 185, 210, 213, 226, 249, 276, 281, 305, 310, 313, 315, 317, 320, 322, 325, 334], "capabl": [0, 5, 7, 10, 13, 16, 21, 24, 33, 36, 44, 53, 55, 60, 63, 77, 81, 86, 88, 89, 91, 111, 113, 115, 116, 166, 251, 283, 315, 325], "beyond": [0, 1, 5, 35, 44, 55, 88, 89, 91, 99, 226], "what": [0, 12, 15, 18, 26, 29, 36, 37, 41, 46, 50, 51, 52, 54, 56, 57, 59, 62, 68, 73, 76, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 116, 118, 134, 151, 160, 224, 226, 282, 283, 286, 297, 310, 314, 320, 321], "base": [0, 1, 2, 5, 6, 10, 13, 16, 18, 19, 20, 22, 24, 27, 29, 30, 35, 36, 37, 41, 42, 43, 44, 45, 46, 48, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 68, 77, 84, 86, 89, 91, 95, 96, 98, 101, 102, 103, 104, 105, 106, 107, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 187, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 207, 208, 210, 211, 212, 213, 214, 215, 217, 218, 221, 224, 228, 231, 244, 251, 260, 273, 276, 284, 290, 293, 322], "platform": [0, 19, 22, 26, 31, 55, 58, 59, 62, 73, 75, 78, 86, 89, 91, 247, 249, 269, 284, 307], "provid": [0, 1, 2, 3, 6, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 31, 32, 34, 35, 36, 41, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 76, 77, 78, 80, 82, 86, 88, 89, 91, 95, 96, 98, 105, 107, 110, 112, 113, 115, 116, 123, 125, 126, 134, 136, 137, 141, 146, 149, 153, 154, 158, 159, 160, 162, 163, 164, 165, 184, 212, 213, 215, 216, 217, 220, 221, 226, 251, 269, 272, 273, 276, 281, 282, 283, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 307, 310, 312, 313, 314, 315, 316, 319, 320, 325, 327], "icd": 0, "cover": [0, 23, 26, 63, 68, 74, 82, 83, 87, 88, 91, 160, 224, 258, 267], "mechan": [0, 2, 6, 17, 43, 50, 54, 55, 58, 89, 91, 176, 305], "electr": [0, 15, 58, 60, 63], "softwar": [0, 8, 26, 27, 30, 42, 45, 46, 54, 55, 58, 60, 63, 65, 70, 87, 89, 91, 125, 158, 178, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 251, 265, 273, 274, 288, 289, 295, 299, 300, 301, 302, 303, 304, 305, 307, 309, 313, 314, 315, 318, 319, 320, 327], "interfac": [0, 2, 15, 16, 18, 19, 26, 30, 32, 41, 43, 48, 53, 54, 57, 58, 60, 61, 63, 68, 73, 74, 75, 76, 88, 89, 91, 93, 97, 109, 111, 112, 116, 130, 137, 160, 167, 181, 186, 187, 209, 216, 220, 243, 246, 259, 268, 269, 284, 285, 286, 293, 295, 309, 313, 331], "support": [0, 2, 4, 5, 6, 8, 10, 12, 16, 19, 21, 26, 27, 28, 31, 32, 35, 38, 48, 54, 55, 56, 58, 61, 62, 64, 65, 66, 67, 68, 70, 73, 76, 77, 80, 83, 86, 87, 88, 91, 97, 137, 145, 160, 163, 209, 246, 251, 270, 273, 276, 281, 293, 297, 307, 320, 322, 334], "protocol": [0, 16, 24, 28, 59, 60, 73, 83, 87, 88, 89, 174, 249, 281, 320], "definit": [0, 16, 18, 24, 28, 29, 44, 47, 54, 55, 73, 87, 88, 89, 91, 95, 97, 121, 122, 152, 159, 160, 209, 310, 314], "thi": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 95, 96, 99, 100, 101, 104, 110, 111, 112, 113, 115, 116, 117, 118, 122, 123, 125, 131, 132, 134, 136, 137, 140, 141, 142, 143, 146, 148, 149, 152, 153, 154, 155, 158, 159, 160, 162, 163, 164, 165, 169, 172, 174, 179, 180, 184, 185, 193, 194, 196, 197, 199, 200, 201, 202, 204, 208, 210, 213, 217, 219, 221, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 333, 334], "refer": [0, 2, 3, 6, 8, 10, 11, 13, 19, 22, 23, 28, 29, 31, 34, 40, 41, 47, 48, 50, 51, 53, 54, 55, 57, 59, 60, 62, 66, 70, 72, 74, 76, 77, 87, 89, 91, 134, 149, 160, 225, 226, 251, 269, 270, 282, 285, 286, 299, 300, 301, 302, 303, 304, 305, 307, 313, 315, 320], "detail": [0, 2, 4, 5, 11, 12, 13, 18, 19, 22, 23, 33, 35, 36, 40, 43, 44, 45, 48, 54, 57, 58, 59, 64, 65, 68, 71, 73, 74, 76, 78, 82, 86, 87, 88, 89, 91, 101, 105, 116, 122, 123, 134, 141, 160, 169, 180, 212, 228, 247, 251, 262, 265, 272, 281, 283, 285, 314], "who": [0, 52, 54, 63, 89, 91], "wish": [0, 23, 34, 37, 51, 54, 59, 91, 282, 306], "languag": [0, 1, 2, 12, 34, 54, 73, 88, 89, 96], "other": [0, 2, 5, 6, 8, 9, 12, 14, 16, 18, 19, 20, 21, 22, 24, 25, 26, 27, 29, 31, 32, 34, 35, 36, 37, 38, 41, 42, 43, 46, 47, 48, 51, 52, 54, 55, 56, 58, 59, 60, 65, 70, 73, 75, 78, 80, 82, 83, 86, 87, 88, 91, 96, 103, 107, 112, 113, 115, 117, 118, 120, 121, 122, 123, 124, 128, 134, 136, 137, 140, 141, 147, 149, 154, 155, 159, 160, 164, 177, 184, 185, 193, 210, 213, 217, 221, 250, 251, 254, 261, 265, 270, 272, 276, 283, 285, 286, 293, 296, 298, 310, 313, 315, 316, 320, 321, 325, 330], "than": [0, 2, 5, 9, 12, 18, 19, 23, 24, 26, 29, 35, 36, 37, 40, 45, 48, 52, 54, 55, 56, 57, 62, 67, 68, 71, 73, 74, 76, 77, 82, 84, 87, 88, 89, 91, 105, 116, 126, 134, 136, 141, 153, 160, 276, 295, 297, 305, 313, 330], "implement": [0, 1, 2, 8, 10, 12, 18, 20, 21, 24, 26, 45, 46, 53, 54, 55, 57, 62, 73, 76, 77, 78, 88, 89, 91, 99, 100, 101, 106, 113, 115, 116, 117, 118, 125, 137, 140, 157, 215, 261, 310, 314], "speak": [0, 54, 88], "repositori": [0, 82, 163, 273], "github": [0, 76, 77, 273, 296, 316, 320], "repo": [0, 273], "where": [0, 1, 2, 5, 6, 12, 13, 14, 16, 18, 19, 22, 23, 24, 27, 29, 30, 31, 33, 34, 35, 36, 37, 41, 43, 46, 47, 48, 54, 55, 56, 60, 62, 65, 67, 72, 73, 76, 77, 79, 81, 82, 83, 84, 85, 87, 88, 89, 91, 96, 103, 107, 114, 124, 134, 141, 147, 150, 158, 159, 160, 184, 185, 194, 208, 226, 246, 251, 254, 268, 272, 282, 283, 285, 286, 293, 296, 306, 307, 310, 311, 312, 313, 314, 315, 316, 322], "all": [0, 2, 5, 12, 14, 16, 18, 19, 20, 24, 25, 26, 27, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 55, 56, 57, 58, 59, 60, 62, 63, 65, 66, 68, 70, 71, 73, 74, 76, 77, 78, 80, 82, 83, 84, 85, 86, 87, 88, 89, 91, 94, 96, 111, 112, 113, 114, 115, 116, 118, 121, 122, 126, 127, 128, 131, 136, 137, 140, 141, 142, 151, 152, 154, 156, 157, 159, 160, 162, 163, 174, 176, 177, 178, 185, 194, 205, 210, 217, 219, 221, 223, 225, 227, 228, 246, 251, 254, 261, 269, 270, 271, 273, 276, 282, 283, 288, 295, 296, 297, 304, 306, 310, 312, 313, 314, 315, 316, 319, 320, 321, 322, 323, 325], "code": [0, 2, 3, 5, 8, 11, 12, 16, 17, 18, 22, 24, 27, 44, 46, 54, 55, 59, 60, 62, 73, 76, 80, 81, 83, 84, 85, 86, 87, 88, 93, 97, 109, 111, 112, 118, 130, 141, 144, 145, 146, 152, 153, 154, 167, 186, 187, 208, 209, 210, 216, 220, 224, 226, 247, 260, 273, 276, 279, 281, 283, 293, 298, 302, 304, 315, 320], "host": [0, 2, 24, 26, 44, 45, 54, 59, 60, 61, 62, 68, 70, 76, 77, 78, 81, 83, 86, 89, 91, 100, 109, 110, 122, 159, 164, 184, 248, 249, 251, 272, 296, 297, 307, 310, 313, 314, 315, 316, 317, 318, 320, 325], "version": [0, 16, 24, 26, 27, 34, 37, 40, 42, 48, 52, 59, 60, 61, 62, 70, 71, 73, 75, 76, 78, 82, 86, 87, 88, 89, 96, 103, 106, 112, 113, 115, 117, 118, 120, 123, 124, 125, 127, 131, 134, 135, 136, 138, 139, 140, 141, 145, 147, 149, 150, 151, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 167, 168, 169, 170, 171, 173, 174, 175, 176, 177, 179, 180, 184, 185, 188, 199, 210, 213, 214, 215, 217, 221, 223, 270, 273, 319, 324], "4": [0, 2, 3, 7, 16, 19, 26, 27, 29, 31, 33, 35, 37, 41, 54, 57, 59, 60, 62, 66, 68, 71, 73, 75, 76, 81, 82, 83, 86, 87, 88, 91, 123, 125, 141, 155, 158, 161, 164, 169, 185, 193, 211, 215, 221, 223, 226, 272, 281, 283, 293, 319, 334], "0": [0, 2, 3, 4, 5, 7, 16, 19, 23, 27, 29, 33, 36, 37, 40, 41, 42, 47, 48, 49, 50, 51, 54, 56, 59, 60, 61, 62, 67, 68, 71, 73, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 96, 112, 118, 122, 123, 125, 129, 132, 134, 136, 137, 141, 149, 155, 157, 158, 159, 160, 161, 163, 164, 168, 169, 171, 172, 173, 176, 179, 180, 184, 185, 199, 207, 215, 221, 223, 226, 227, 228, 250, 272, 273, 276, 281, 282, 283, 290, 293, 295, 296, 308, 313, 315, 319, 320, 322], "3": [0, 3, 4, 5, 7, 16, 19, 22, 26, 29, 30, 31, 32, 34, 35, 37, 38, 42, 45, 47, 51, 52, 54, 56, 57, 58, 59, 60, 61, 62, 66, 68, 70, 71, 74, 78, 80, 81, 82, 84, 85, 86, 87, 88, 91, 112, 123, 128, 134, 140, 141, 149, 155, 158, 163, 164, 173, 180, 184, 193, 199, 211, 214, 215, 226, 227, 228, 249, 250, 271, 272, 283, 284, 285, 286, 293, 297, 298, 304, 308, 310, 319, 320, 329, 334], "pleas": [0, 2, 12, 16, 19, 23, 41, 53, 57, 61, 62, 68, 71, 76, 77, 78, 79, 86, 87, 89, 91, 112, 148, 184, 214, 221, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 251, 256, 269, 273, 279, 282, 287, 288, 289, 290, 293, 299, 300, 301, 302, 303, 304, 305, 307, 308, 313, 315, 316, 320, 321, 322, 334], "review": [0, 11, 35, 43, 68, 91, 313, 324], "releas": [0, 2, 4, 19, 23, 27, 33, 34, 38, 41, 43, 51, 54, 56, 57, 62, 68, 69, 70, 91, 140, 160, 162, 184, 226, 243, 269, 273, 295, 313], "note": [0, 2, 9, 12, 16, 18, 19, 22, 24, 26, 29, 31, 32, 33, 36, 37, 38, 40, 43, 44, 50, 52, 55, 56, 57, 60, 62, 65, 66, 68, 75, 76, 77, 80, 81, 83, 84, 85, 87, 88, 91, 94, 96, 116, 118, 137, 150, 158, 159, 174, 215, 226, 228, 249, 250, 251, 270, 273, 274, 276, 281, 282, 283, 284, 285, 293, 295, 296, 297, 307, 310, 313, 314, 315, 318, 321, 324, 325], "see": [0, 2, 4, 5, 6, 12, 13, 14, 16, 18, 19, 23, 24, 26, 31, 33, 34, 35, 36, 37, 38, 41, 45, 48, 52, 55, 56, 60, 61, 62, 68, 71, 79, 81, 82, 83, 84, 85, 86, 88, 89, 91, 105, 118, 122, 123, 125, 155, 159, 160, 161, 163, 215, 225, 226, 227, 231, 234, 242, 245, 246, 247, 249, 250, 251, 254, 255, 257, 258, 259, 260, 261, 262, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 277, 279, 280, 281, 282, 283, 284, 285, 288, 290, 292, 293, 294, 295, 297, 299, 300, 301, 302, 303, 304, 305, 309, 310, 311, 312, 313, 314, 315, 318, 319, 321, 323, 326, 327, 328, 329, 331, 332, 333], "ha": [0, 2, 3, 5, 6, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 43, 45, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 59, 60, 62, 63, 68, 71, 77, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 96, 98, 99, 112, 116, 117, 118, 122, 125, 134, 136, 137, 141, 142, 143, 146, 148, 154, 155, 158, 159, 160, 162, 173, 179, 180, 184, 189, 191, 214, 215, 221, 223, 226, 233, 246, 250, 254, 268, 269, 273, 281, 282, 293, 296, 298, 306, 311, 313, 314, 316, 320, 325, 334], "chang": [0, 9, 13, 14, 16, 17, 18, 20, 21, 23, 26, 31, 35, 37, 47, 51, 52, 54, 55, 56, 59, 60, 62, 68, 70, 71, 82, 83, 84, 85, 86, 87, 88, 91, 96, 99, 101, 122, 125, 140, 149, 153, 159, 160, 162, 169, 177, 185, 226, 233, 247, 251, 269, 273, 276, 282, 309, 310, 313, 315, 320, 331, 332, 334], "concept": [0, 4, 13, 19, 39, 73, 74, 83, 85, 88, 91, 224, 282, 314], "sdk": [1, 3, 4, 8, 10, 11, 12, 14, 16, 19, 21, 22, 26, 32, 41, 42, 44, 46, 48, 52, 53, 54, 55, 57, 58, 59, 60, 62, 72, 74, 76, 77, 78, 81, 83, 84, 91, 96, 97, 104, 110, 158, 159, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 250, 251, 256, 257, 266, 268, 269, 271, 273, 280, 281, 282, 283, 287, 288, 289, 308, 311, 313, 319, 320, 321, 322, 323, 325, 326, 327, 328, 329, 332, 333, 334], "let": [1, 2, 5, 6, 17, 18, 31, 51, 56, 71, 72, 73, 76, 81, 82, 83, 84, 85, 86, 88, 89, 91, 174, 226, 282], "creat": [1, 2, 3, 10, 13, 14, 20, 21, 23, 26, 27, 29, 30, 31, 33, 34, 35, 37, 41, 44, 47, 52, 54, 55, 59, 60, 64, 65, 70, 73, 75, 76, 77, 81, 82, 83, 84, 86, 87, 89, 91, 95, 96, 99, 101, 105, 110, 112, 113, 114, 116, 118, 137, 141, 149, 150, 158, 159, 160, 161, 163, 164, 165, 172, 184, 185, 197, 217, 219, 221, 223, 226, 243, 248, 251, 265, 268, 270, 274, 276, 281, 282, 283, 285, 294, 295, 297, 305, 306, 307, 309, 310, 311, 313, 314, 316, 317, 319, 320, 322, 325, 326, 328, 329, 330, 331, 334], "integr": [1, 2, 7, 13, 30, 36, 39, 41, 53, 58, 62, 65, 68, 72, 75, 83, 130, 226, 250, 305, 325], "follow": [1, 2, 3, 5, 6, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 29, 31, 32, 35, 37, 38, 41, 42, 43, 45, 46, 47, 48, 51, 52, 54, 56, 57, 59, 60, 62, 65, 68, 70, 71, 72, 73, 74, 75, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 116, 118, 122, 134, 149, 158, 160, 162, 172, 184, 215, 217, 221, 224, 226, 233, 243, 246, 248, 250, 251, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 272, 281, 282, 283, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 309, 310, 313, 314, 315, 316, 321, 322, 324, 325, 329, 331, 334], "server": [1, 2, 12, 16, 20, 43, 45, 46, 54, 56, 59, 62, 68, 72, 76, 83, 84, 85, 86, 89, 91, 97, 105, 110, 125, 126, 134, 141, 148, 151, 174, 180, 184, 209, 213, 226, 249, 251, 266, 270, 281, 282, 293, 299, 300, 301, 302, 303, 304, 305, 316], "model": [1, 18, 19, 41, 48, 53, 55, 60, 64, 65, 68, 72, 81, 84, 85, 89, 91, 111, 151, 162, 224, 226, 251, 272, 282, 284, 296, 297, 316, 320, 322], "servic": [1, 2, 4, 8, 10, 13, 17, 19, 21, 22, 23, 27, 28, 30, 33, 39, 40, 42, 47, 48, 53, 54, 58, 61, 62, 70, 71, 72, 73, 74, 75, 79, 80, 83, 84, 85, 86, 87, 96, 97, 98, 99, 103, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 117, 118, 121, 122, 123, 124, 125, 126, 127, 128, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 143, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 184, 185, 187, 190, 209, 210, 211, 213, 224, 225, 226, 246, 247, 258, 259, 261, 262, 263, 266, 267, 273, 279, 281, 282, 285, 292, 296, 298, 304, 305, 307, 308, 316, 317, 327, 328, 332], "run": [1, 3, 9, 10, 12, 13, 15, 16, 21, 22, 24, 26, 27, 30, 33, 35, 37, 38, 40, 44, 46, 47, 53, 54, 55, 60, 68, 70, 71, 72, 74, 75, 78, 79, 81, 82, 83, 84, 85, 88, 89, 91, 96, 99, 101, 102, 104, 110, 111, 112, 114, 116, 118, 132, 134, 146, 151, 164, 172, 177, 179, 180, 184, 210, 211, 215, 217, 219, 221, 223, 224, 252, 264, 270, 291, 293, 294, 295, 296, 297, 298, 314, 316, 317, 322, 325, 334], "over": [1, 2, 5, 6, 17, 18, 19, 22, 26, 31, 35, 40, 45, 52, 54, 55, 61, 64, 65, 68, 72, 73, 80, 81, 82, 83, 84, 85, 86, 88, 91, 123, 140, 155, 158, 160, 169, 202, 217, 221, 226, 227, 228, 230, 233, 257, 282, 306, 310, 320, 322], "network": [1, 8, 16, 26, 41, 44, 53, 55, 58, 61, 62, 70, 71, 72, 73, 78, 81, 82, 83, 84, 86, 88, 97, 163, 167, 169, 173, 248, 249, 259, 260, 266, 271, 293, 297, 307, 313, 315, 319, 320, 322, 325], "connect": [1, 2, 13, 14, 15, 16, 18, 19, 20, 21, 23, 26, 28, 30, 31, 32, 34, 46, 48, 50, 54, 58, 59, 62, 63, 64, 66, 68, 71, 72, 75, 76, 77, 78, 80, 81, 83, 84, 86, 87, 88, 89, 91, 100, 110, 117, 126, 134, 137, 159, 174, 226, 261, 270, 272, 276, 281, 283, 285, 286, 293, 300, 310, 314, 315, 316, 320, 322, 325, 334], "diagram": [1, 16, 24, 38, 41, 53, 54, 57, 60, 84, 86, 89, 320, 322], "high": [1, 2, 5, 6, 12, 15, 16, 17, 24, 26, 30, 31, 35, 36, 37, 43, 48, 54, 55, 59, 60, 66, 83, 88, 89, 91, 155, 262, 272, 282, 284, 293, 313], "level": [1, 2, 5, 6, 12, 16, 19, 22, 24, 35, 37, 43, 45, 48, 54, 55, 56, 60, 73, 77, 80, 81, 87, 88, 89, 118, 125, 159, 177, 184, 270, 272, 290, 293, 315], "overview": [1, 28, 30, 39, 57, 68, 81, 83, 89, 231, 259, 261, 265, 266, 274, 315], "robot": [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 19, 20, 22, 24, 25, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 40, 41, 43, 45, 46, 51, 52, 53, 57, 58, 59, 60, 61, 62, 63, 67, 68, 70, 73, 75, 76, 77, 78, 80, 81, 83, 84, 85, 86, 91, 93, 95, 96, 97, 99, 100, 101, 103, 104, 105, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 131, 132, 134, 135, 136, 137, 139, 140, 141, 143, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 163, 167, 172, 175, 179, 180, 182, 184, 185, 186, 187, 208, 210, 213, 217, 221, 224, 225, 226, 227, 229, 230, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 248, 249, 251, 253, 256, 258, 260, 262, 266, 269, 272, 274, 276, 279, 281, 283, 284, 285, 286, 288, 289, 293, 294, 295, 297, 300, 306, 307, 308, 309, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 329, 330], "": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 43, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 68, 70, 71, 73, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 89, 91, 92, 95, 96, 99, 111, 112, 116, 118, 126, 128, 134, 137, 139, 140, 141, 143, 144, 149, 150, 151, 153, 158, 159, 160, 161, 162, 163, 164, 178, 180, 184, 185, 208, 212, 219, 221, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 248, 249, 251, 254, 255, 256, 257, 259, 266, 269, 270, 272, 273, 274, 276, 281, 282, 283, 285, 286, 287, 288, 289, 290, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 308, 310, 312, 313, 314, 315, 317, 320, 322, 323, 325, 326, 330, 333, 334], "tablet": [1, 8, 9, 12, 13, 14, 18, 20, 21, 23, 25, 28, 30, 33, 35, 36, 41, 42, 46, 52, 53, 55, 56, 57, 58, 59, 68, 76, 79, 80, 81, 83, 84, 85, 86, 89, 91, 116, 158, 225, 226, 228, 251, 257, 268, 272, 276, 283, 285, 295, 297, 310, 311, 313, 315, 316, 320, 323, 324, 327], "laptop": [1, 32, 53, 78, 85, 86, 226, 310, 314, 320], "cloud": [1, 2, 16, 19, 23, 47, 54, 60, 75, 78, 91, 97, 134, 136, 158, 259, 261, 282, 286, 296, 298, 316], "long": [1, 2, 15, 19, 22, 23, 26, 31, 35, 37, 45, 46, 57, 77, 82, 83, 84, 85, 88, 89, 91, 116, 160, 233, 258, 272, 282], "thei": [1, 2, 5, 9, 12, 13, 15, 18, 19, 21, 22, 24, 26, 29, 30, 31, 33, 34, 35, 36, 37, 38, 41, 42, 43, 45, 46, 47, 48, 52, 53, 54, 55, 56, 57, 59, 60, 62, 76, 77, 78, 82, 85, 87, 88, 89, 91, 94, 102, 128, 137, 141, 149, 177, 225, 226, 247, 250, 251, 272, 276, 283, 286, 314, 315], "establish": [1, 2, 22, 26, 44, 55, 66, 91, 110, 126, 174, 180, 213, 272, 281, 312, 313, 326], "ani": [1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 19, 21, 22, 23, 24, 25, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 67, 71, 76, 77, 78, 80, 81, 83, 84, 87, 88, 89, 91, 95, 96, 99, 106, 112, 113, 115, 116, 118, 122, 125, 127, 134, 137, 141, 148, 151, 153, 158, 159, 160, 164, 165, 179, 180, 184, 208, 212, 213, 225, 226, 251, 270, 273, 276, 281, 282, 283, 293, 294, 295, 297, 298, 307, 310, 314, 315, 320, 322, 325, 333, 334], "ip": [1, 32, 38, 43, 54, 59, 60, 62, 68, 70, 71, 75, 76, 77, 78, 81, 83, 85, 89, 91, 100, 109, 111, 112, 122, 217, 221, 226, 246, 248, 249, 251, 272, 281, 293, 296, 297, 307, 310, 313, 314, 315, 316, 317, 319, 320, 325], "direct": [1, 4, 5, 6, 8, 18, 19, 23, 26, 29, 37, 60, 61, 62, 68, 73, 84, 85, 89, 91, 122, 157, 158, 160, 227, 251, 286, 295, 296, 298, 308, 309, 313, 314, 316, 331], "wifi": [1, 3, 53, 54, 59, 60, 61, 62, 75, 78, 84, 86, 87, 89, 91, 111, 112, 226, 248, 272, 310, 313], "ethernet": [1, 3, 7, 15, 16, 54, 59, 60, 61, 66, 68, 89, 91, 112], "intranet": 1, "internet": [1, 54, 60, 68, 285, 293, 298, 307], "imag": [1, 2, 3, 6, 16, 19, 22, 24, 31, 35, 38, 40, 41, 42, 44, 47, 52, 53, 60, 61, 68, 70, 77, 79, 80, 81, 82, 83, 84, 85, 86, 97, 111, 113, 115, 116, 117, 134, 151, 165, 173, 177, 217, 219, 221, 229, 233, 234, 242, 249, 250, 251, 252, 259, 260, 261, 266, 270, 273, 281, 282, 285, 288, 293, 296, 297, 307, 316, 319, 320, 322, 331], "command": [1, 4, 5, 6, 9, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 30, 32, 35, 36, 37, 38, 41, 46, 50, 52, 53, 57, 60, 63, 68, 70, 71, 73, 75, 76, 77, 78, 81, 84, 85, 86, 96, 97, 98, 103, 109, 123, 124, 125, 134, 135, 147, 155, 157, 159, 179, 184, 215, 224, 225, 227, 231, 233, 234, 238, 239, 241, 242, 243, 246, 247, 248, 249, 250, 251, 254, 258, 259, 260, 262, 268, 270, 273, 276, 277, 278, 280, 281, 284, 285, 286, 288, 289, 290, 292, 293, 294, 296, 297, 299, 300, 301, 302, 303, 304, 305, 307, 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 330, 334], "higher": [1, 6, 19, 26, 29, 37, 48, 52, 54, 55, 63, 70, 89, 91, 125, 286, 315, 319, 320], "layer": [1, 12, 21, 26, 30, 54, 55, 63, 81, 91], "stack": [1, 26, 31, 54, 62, 136], "autonomi": [1, 19, 26, 62, 68, 224, 283], "built": [1, 2, 21, 26, 43, 53, 54, 56, 59, 60, 62, 77, 80, 86, 87, 89, 91, 96, 157, 251, 270, 273, 297, 307, 320], "top": [1, 5, 6, 12, 15, 16, 22, 23, 34, 37, 47, 54, 59, 62, 64, 67, 68, 79, 80, 81, 84, 87, 89, 91, 282, 313, 315, 320, 322, 325], "lower": [1, 15, 19, 34, 36, 37, 42, 48, 50, 54, 88, 89, 91, 149, 282, 286, 295, 313, 320], "core": [1, 12, 16, 26, 53, 55, 58, 59, 73, 75, 81, 85, 87, 88, 91, 92, 184, 226, 249, 251, 252, 265, 266, 269, 270, 293, 296, 306, 307, 310, 313, 316], "final": [1, 6, 14, 17, 24, 27, 36, 52, 56, 62, 76, 77, 78, 79, 80, 81, 82, 88, 89, 91, 134, 150, 226, 270, 282, 283, 299, 300, 315, 325], "allow": [1, 2, 4, 5, 6, 9, 11, 12, 13, 14, 16, 17, 18, 20, 21, 23, 24, 27, 29, 30, 31, 32, 34, 35, 36, 37, 41, 42, 43, 45, 48, 52, 55, 56, 57, 59, 60, 61, 62, 66, 68, 70, 71, 75, 76, 77, 78, 83, 85, 86, 88, 89, 91, 96, 101, 110, 118, 121, 122, 125, 126, 137, 144, 146, 149, 152, 153, 154, 157, 158, 160, 164, 184, 226, 234, 242, 249, 250, 251, 268, 270, 272, 283, 290, 295, 296, 305, 307, 310, 311, 313, 315, 316, 318, 320, 321, 322, 325, 334], "expans": 1, "those": [1, 2, 5, 6, 14, 18, 21, 26, 29, 31, 35, 36, 37, 40, 41, 51, 53, 54, 57, 60, 62, 75, 76, 77, 78, 79, 81, 84, 86, 87, 89, 91, 116, 282, 283, 293, 294, 320, 322, 334], "itself": [1, 5, 16, 17, 18, 20, 26, 31, 40, 42, 43, 44, 45, 47, 54, 55, 59, 60, 63, 68, 83, 88, 89, 91, 101, 122, 141, 153, 159, 165, 213, 248, 281, 310, 314], "For": [1, 2, 3, 5, 6, 8, 9, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 29, 30, 31, 33, 34, 35, 36, 40, 41, 42, 43, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 63, 73, 75, 76, 77, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 91, 95, 96, 105, 107, 116, 118, 124, 125, 127, 131, 134, 136, 140, 141, 147, 148, 149, 151, 155, 158, 160, 161, 162, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 181, 182, 185, 210, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 247, 249, 251, 254, 256, 270, 273, 276, 281, 282, 283, 284, 287, 288, 289, 296, 298, 299, 300, 301, 302, 303, 304, 305, 307, 308, 310, 313, 314, 315, 316, 320, 321, 322, 334], "cam": [1, 24, 40, 42, 44, 55, 57, 59, 62, 79, 80, 91, 97, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 266, 276, 297, 313, 325], "offer": [1, 7, 12, 43, 54, 55, 59, 62, 83, 91, 174], "stream": [1, 19, 20, 27, 35, 43, 54, 56, 89, 96, 107, 112, 119, 132, 134, 160, 162, 167, 169, 175, 177, 184, 187, 188, 210, 276, 281, 313, 315, 319], "qualiti": [1, 16, 23, 55, 76, 88, 89, 91, 134, 136, 137, 167, 177, 276, 282, 313, 319, 320], "led": [1, 35, 89, 171, 172, 226, 250], "light": [1, 2, 3, 13, 22, 31, 35, 36, 58, 81, 89, 91, 139, 167, 256, 267, 298, 319], "collect": [1, 2, 8, 21, 22, 25, 26, 41, 44, 46, 59, 60, 73, 74, 77, 81, 86, 89, 91, 96, 112, 116, 131, 136, 137, 154, 251, 281, 282, 286, 320, 322, 325], "organ": [1, 2, 41, 82, 86, 91, 320, 322], "store": [1, 2, 13, 14, 16, 19, 20, 21, 25, 27, 30, 34, 35, 39, 40, 41, 43, 47, 55, 57, 59, 60, 77, 80, 81, 84, 91, 96, 97, 102, 114, 115, 116, 123, 137, 150, 158, 173, 184, 191, 193, 194, 196, 198, 199, 203, 204, 212, 246, 247, 254, 268, 282, 286, 306, 307, 311, 314, 317, 319], "data": [1, 2, 3, 13, 15, 16, 18, 20, 22, 23, 24, 25, 26, 30, 44, 46, 47, 48, 53, 54, 55, 56, 58, 59, 60, 62, 66, 74, 81, 82, 83, 84, 85, 86, 88, 96, 97, 98, 99, 101, 102, 104, 109, 111, 112, 128, 131, 132, 134, 136, 137, 146, 151, 154, 158, 159, 164, 166, 168, 173, 177, 181, 184, 187, 189, 190, 191, 194, 196, 199, 200, 201, 202, 203, 204, 217, 219, 221, 223, 224, 252, 259, 266, 270, 276, 281, 283, 284, 285, 286, 293, 296, 298, 305, 306, 307, 308, 313, 314, 316, 319, 320], "everi": [1, 2, 12, 16, 18, 19, 22, 23, 24, 30, 31, 35, 37, 40, 44, 48, 53, 56, 77, 78, 82, 88, 91, 122, 140, 160], "mission": [1, 8, 11, 13, 14, 18, 19, 21, 22, 25, 40, 41, 43, 44, 52, 59, 75, 80, 86, 87, 92, 107, 210, 211, 212, 213, 214, 215, 217, 221, 224, 226, 247, 249, 260, 264, 268, 271, 298, 301, 307], "teleoper": [1, 2, 40, 41, 56, 89, 91, 116, 251, 252, 297], "session": [1, 2, 24, 40, 41, 54, 71, 89, 91, 96, 158, 213], "execut": [1, 2, 5, 9, 12, 13, 15, 16, 24, 28, 29, 30, 31, 32, 33, 34, 36, 46, 48, 52, 55, 60, 62, 71, 73, 78, 86, 87, 88, 89, 91, 96, 99, 104, 112, 123, 155, 160, 210, 215, 225, 226, 230, 232, 236, 237, 239, 241, 247, 269, 272, 283, 307, 312, 313, 314, 325], "fleet": [1, 2, 8, 25, 163], "open": [1, 4, 5, 6, 7, 10, 13, 14, 18, 22, 29, 31, 32, 34, 38, 42, 43, 62, 66, 76, 77, 80, 81, 82, 83, 85, 86, 87, 88, 91, 124, 160, 226, 229, 243, 251, 258, 268, 281, 284, 285, 286, 306, 310, 313, 314, 315, 324, 325], "custom": [1, 2, 21, 23, 24, 26, 29, 30, 32, 34, 37, 40, 41, 42, 44, 54, 59, 60, 61, 68, 85, 91, 97, 106, 112, 113, 126, 137, 146, 164, 184, 210, 213, 226, 251, 261, 266, 293, 297, 311], "through": [1, 2, 5, 6, 9, 14, 16, 18, 19, 21, 22, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, 42, 43, 44, 46, 48, 50, 53, 54, 55, 57, 60, 62, 66, 68, 71, 75, 76, 80, 83, 85, 86, 87, 89, 91, 115, 116, 122, 126, 127, 134, 164, 180, 184, 216, 220, 224, 228, 229, 250, 251, 266, 268, 272, 281, 282, 284, 288, 293, 306, 312, 313, 314, 315, 317, 325, 329, 334], "programmat": [1, 2, 41, 46, 89, 91, 306, 314], "web": [1, 2, 26, 44, 57, 59, 61, 68, 70, 75, 79, 80, 86, 89, 153, 159, 216, 217, 219, 221, 223, 247, 250, 253, 276, 285, 313, 314, 325], "call": [1, 2, 5, 12, 13, 18, 19, 20, 21, 22, 24, 34, 35, 41, 53, 54, 55, 56, 57, 59, 61, 73, 76, 77, 78, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 99, 101, 104, 111, 112, 113, 115, 116, 118, 122, 123, 126, 134, 137, 141, 151, 152, 153, 154, 155, 159, 160, 163, 164, 165, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 193, 196, 199, 203, 208, 217, 221, 226, 228, 251, 253, 260, 264, 272, 282, 283, 286, 296, 297, 302, 306, 307, 313, 314, 316, 325], "similar": [1, 6, 12, 18, 22, 37, 38, 41, 48, 55, 60, 68, 86, 88, 89, 91, 141, 149, 233, 253, 269, 270, 285, 297, 315], "written": [1, 18, 24, 27, 29, 30, 35, 73, 88, 89, 91, 128, 184, 193, 194, 201, 208, 314], "mani": [1, 2, 5, 12, 18, 21, 26, 29, 32, 35, 37, 38, 46, 47, 54, 55, 56, 58, 60, 77, 78, 81, 82, 87, 88, 89, 91, 118, 134, 159, 160, 233, 237, 282, 296, 298, 307, 316, 325], "most": [1, 2, 16, 18, 26, 30, 31, 32, 35, 36, 37, 42, 43, 46, 47, 48, 50, 51, 52, 55, 56, 57, 60, 62, 68, 77, 82, 83, 87, 88, 89, 91, 96, 99, 101, 112, 141, 143, 153, 154, 163, 169, 176, 177, 184, 224, 282, 293, 314, 315], "devic": [1, 5, 16, 46, 58, 60, 61, 62, 63, 68, 76, 78, 86, 88, 89, 91, 131, 137, 170, 174, 175, 226, 248, 268, 270, 281, 298, 311, 314, 315], "about": [1, 6, 10, 11, 12, 15, 16, 17, 18, 19, 26, 27, 33, 35, 36, 37, 43, 45, 46, 47, 48, 52, 55, 56, 57, 58, 59, 62, 64, 68, 77, 81, 83, 84, 86, 87, 88, 89, 91, 96, 101, 113, 115, 121, 122, 131, 141, 158, 160, 163, 180, 210, 213, 217, 221, 226, 229, 254, 255, 259, 260, 272, 277, 281, 282, 283, 312, 320, 325], "formerli": [1, 92], "scout": [1, 41, 42, 53, 56, 57, 62, 91, 92, 158, 221, 222, 223, 310], "geometri": [1, 16, 19, 48, 50, 55, 63, 65, 88, 89, 128, 160, 186, 231, 258, 267, 274], "frame": [1, 17, 19, 21, 23, 27, 29, 30, 35, 37, 48, 55, 56, 63, 80, 84, 85, 91, 97, 134, 136, 148, 149, 157, 159, 160, 165, 177, 185, 224, 231, 258, 267, 273, 281, 282, 283, 284, 285, 286, 330, 333], "e": [1, 2, 9, 16, 22, 24, 26, 27, 31, 35, 36, 38, 46, 48, 51, 52, 55, 57, 59, 60, 61, 76, 82, 83, 84, 86, 89, 91, 97, 134, 137, 141, 148, 158, 163, 169, 180, 181, 217, 221, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 254, 257, 260, 261, 268, 270, 283, 284, 288, 289, 290, 295, 296, 297, 306, 307, 309, 311, 314, 315, 316, 323, 325, 331, 334], "stop": [1, 9, 17, 23, 24, 25, 30, 31, 33, 34, 36, 37, 38, 48, 51, 55, 57, 60, 61, 70, 71, 78, 81, 83, 85, 86, 91, 96, 97, 99, 122, 125, 137, 140, 141, 153, 155, 158, 159, 160, 163, 164, 172, 180, 182, 184, 210, 213, 217, 221, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 257, 260, 268, 272, 283, 288, 289, 290, 295, 297, 309, 310, 311, 313, 320, 323, 331, 334], "keepal": [1, 46, 88, 110, 141, 155], "beta": [1, 87, 88, 91, 140, 160, 162], "leas": [1, 17, 18, 38, 51, 55, 84, 96, 97, 98, 99, 106, 107, 111, 112, 123, 124, 126, 134, 140, 155, 158, 160, 179, 210, 213, 226, 228, 243, 245, 272, 282, 283, 295, 309, 310, 312, 331, 334], "fault": [1, 17, 31, 48, 55, 57, 76, 88, 91, 97, 111, 122, 134, 137, 155, 160, 261, 265, 281, 313], "choreographi": [1, 24, 29, 32, 36, 38, 87, 91, 92, 94, 95, 225], "joint": [1, 29, 30, 35, 37, 47, 55, 86, 91, 160, 179, 224, 225, 231, 237, 258, 289], "arm": [1, 30, 31, 35, 36, 48, 52, 58, 61, 62, 81, 84, 85, 86, 88, 91, 96, 97, 159, 160, 162, 224, 226, 230, 234, 242, 262, 267, 281], "awar": [2, 5, 18, 52, 89, 227, 234, 235, 242, 244], "manag": [2, 7, 18, 26, 31, 38, 44, 46, 52, 57, 59, 60, 63, 69, 71, 76, 77, 78, 84, 89, 91, 97, 104, 116, 140, 141, 142, 172, 179, 180, 181, 226, 282, 293], "central": 2, "deploi": [2, 37, 48, 54, 59, 60, 61, 62, 70, 75, 76, 84, 86, 87, 89, 91, 315], "an": [2, 5, 6, 8, 9, 10, 13, 14, 15, 17, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 66, 68, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 91, 94, 95, 96, 99, 103, 104, 106, 110, 111, 112, 113, 114, 115, 116, 118, 122, 124, 125, 126, 127, 128, 131, 132, 134, 136, 137, 138, 140, 141, 143, 145, 146, 147, 148, 149, 151, 153, 154, 157, 158, 159, 160, 162, 163, 164, 165, 173, 174, 177, 180, 181, 184, 185, 194, 201, 208, 210, 211, 217, 219, 221, 224, 225, 226, 227, 228, 229, 230, 231, 232, 234, 235, 237, 239, 240, 241, 243, 246, 247, 248, 249, 250, 251, 257, 266, 268, 270, 272, 273, 274, 276, 281, 282, 283, 284, 285, 286, 288, 290, 293, 295, 296, 297, 298, 299, 300, 301, 303, 304, 305, 307, 311, 312, 313, 314, 315, 316, 317, 319, 320, 321, 322, 323, 324, 327, 330, 331, 333], "premis": 2, "learn": [2, 10, 11, 48, 57, 75, 81, 82, 83, 84, 85, 86, 89, 91, 224, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 259, 260, 261, 266, 287, 288, 289, 308, 313, 322, 334], "more": [2, 4, 5, 6, 8, 9, 11, 12, 13, 16, 18, 19, 21, 23, 26, 27, 29, 31, 32, 33, 35, 36, 37, 40, 42, 43, 44, 45, 47, 48, 51, 54, 55, 56, 57, 59, 60, 62, 65, 67, 68, 71, 76, 77, 78, 81, 82, 83, 86, 87, 88, 89, 91, 105, 106, 112, 134, 137, 141, 148, 149, 153, 155, 157, 158, 160, 224, 226, 228, 230, 231, 237, 241, 247, 251, 259, 260, 261, 262, 265, 268, 270, 272, 274, 276, 281, 282, 283, 290, 295, 313, 314, 315, 318, 322, 325, 330], "product": [2, 43, 60, 85, 89, 91, 299, 300, 301, 302, 303, 304, 305, 313], "deploy": [2, 54, 70, 75, 89], "here": [2, 16, 18, 24, 27, 28, 31, 41, 44, 46, 48, 50, 53, 55, 59, 60, 61, 62, 65, 68, 71, 76, 77, 78, 81, 82, 83, 84, 86, 87, 88, 89, 91, 116, 136, 160, 172, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 247, 252, 281, 283, 288, 289, 290, 293, 296, 307, 309, 311, 313, 315, 316, 320, 322], "spot": [2, 6, 8, 9, 10, 11, 12, 14, 18, 19, 21, 22, 23, 24, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 40, 41, 42, 43, 44, 46, 50, 51, 53, 54, 55, 56, 59, 61, 63, 64, 65, 66, 72, 73, 74, 79, 82, 83, 84, 85, 86, 96, 97, 110, 124, 138, 153, 157, 160, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 224, 228, 245, 246, 249, 250, 251, 252, 257, 259, 260, 263, 266, 267, 268, 269, 271, 273, 274, 276, 280, 281, 290, 292, 293, 295, 296, 298, 306, 307, 310, 311, 314, 315, 318, 321, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "serv": [2, 60, 91, 122, 181, 217, 221, 314], "user": [2, 5, 6, 9, 10, 12, 13, 16, 17, 18, 19, 22, 26, 27, 32, 33, 34, 35, 38, 41, 43, 46, 48, 53, 54, 55, 56, 57, 59, 60, 61, 62, 68, 70, 71, 77, 78, 79, 81, 82, 83, 84, 85, 86, 88, 89, 91, 96, 99, 105, 110, 114, 115, 116, 118, 122, 126, 153, 155, 158, 159, 160, 179, 180, 182, 184, 217, 221, 226, 229, 234, 242, 246, 247, 250, 251, 268, 269, 270, 272, 273, 293, 296, 297, 298, 307, 310, 311, 314, 315, 316, 317, 318], "instanc": [2, 18, 19, 43, 44, 46, 48, 55, 57, 76, 77, 87, 89, 91, 96, 99, 103, 107, 110, 112, 116, 122, 123, 124, 127, 131, 137, 140, 141, 147, 159, 160, 163, 180, 217, 219, 221, 223, 281, 305, 314], "interact": [2, 6, 7, 24, 26, 54, 58, 62, 68, 71, 75, 87, 88, 89, 91, 96, 111, 141, 146, 174, 184, 273, 289, 298, 302, 319, 330], "send": [2, 5, 12, 16, 18, 19, 26, 31, 35, 38, 41, 43, 45, 48, 51, 52, 54, 55, 59, 77, 83, 84, 85, 89, 91, 96, 99, 107, 110, 111, 114, 116, 118, 122, 131, 132, 134, 153, 159, 163, 180, 185, 217, 221, 227, 236, 237, 243, 282, 293, 296, 305, 310, 314, 315, 317], "request": [2, 4, 6, 10, 12, 14, 16, 18, 19, 24, 26, 27, 35, 36, 43, 44, 45, 47, 48, 52, 54, 55, 57, 59, 65, 68, 73, 76, 77, 83, 84, 85, 86, 88, 89, 96, 98, 99, 101, 103, 106, 111, 112, 113, 114, 115, 116, 121, 122, 124, 125, 126, 134, 135, 136, 137, 138, 141, 143, 145, 146, 147, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 162, 164, 179, 180, 185, 190, 195, 198, 217, 219, 221, 223, 226, 229, 231, 232, 234, 237, 239, 240, 241, 244, 251, 259, 270, 272, 276, 278, 281, 283, 289, 296, 299, 300, 301, 302, 303, 304, 305, 312, 313, 314, 315, 316, 317, 319, 325, 333], "number": [2, 9, 17, 19, 22, 24, 26, 27, 29, 31, 35, 36, 37, 43, 45, 52, 54, 56, 57, 60, 71, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 114, 118, 122, 123, 128, 134, 137, 141, 146, 148, 150, 153, 158, 159, 160, 162, 164, 165, 180, 184, 192, 195, 200, 202, 208, 217, 221, 226, 250, 251, 272, 282, 283, 293, 295, 298, 310, 313, 315, 320, 322], "resourc": [2, 26, 60, 62, 83, 86, 88, 89, 91, 97, 98, 118, 134, 141, 143, 158, 163, 213, 216, 217, 219, 220, 221, 223, 299, 300, 301, 302, 303, 304, 305, 315, 320], "endpoint": [2, 7, 40, 41, 45, 51, 54, 55, 70, 77, 79, 83, 87, 89, 96, 100, 125, 134, 159, 160, 180, 184, 185, 210, 216, 217, 219, 220, 221, 223, 228, 250, 251, 257, 283, 298, 307, 310, 314, 323, 325], "each": [2, 3, 5, 11, 12, 13, 16, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 55, 56, 57, 59, 62, 65, 66, 67, 73, 76, 77, 80, 81, 83, 84, 88, 89, 91, 96, 97, 99, 107, 112, 116, 119, 136, 137, 143, 145, 148, 150, 154, 160, 164, 165, 171, 177, 185, 193, 194, 207, 209, 210, 224, 227, 247, 251, 254, 260, 271, 276, 279, 281, 282, 283, 284, 286, 295, 306, 313, 314, 315, 320, 322, 325, 330], "prefix": [2, 36, 47, 73, 91, 118, 136, 158, 163, 164, 314], "rout": [2, 8, 10, 13, 14, 17, 20, 23, 25, 44, 59, 68, 89, 99, 101, 122, 134, 158, 283, 293, 314], "v0": [2, 217, 221], "list": [2, 5, 12, 15, 17, 18, 20, 24, 26, 27, 30, 31, 34, 35, 40, 41, 42, 47, 52, 55, 59, 60, 62, 68, 70, 71, 76, 77, 78, 80, 83, 87, 89, 91, 96, 102, 104, 106, 110, 111, 113, 115, 116, 117, 118, 120, 121, 123, 128, 129, 132, 134, 136, 137, 140, 141, 144, 145, 149, 150, 151, 152, 154, 159, 160, 163, 165, 166, 168, 169, 170, 173, 176, 185, 190, 193, 194, 205, 212, 213, 215, 217, 219, 221, 223, 225, 226, 234, 242, 243, 245, 246, 249, 251, 253, 254, 255, 257, 268, 269, 270, 271, 272, 276, 277, 280, 283, 285, 288, 290, 292, 294, 295, 299, 300, 301, 302, 303, 304, 305, 306, 310, 311, 312, 313, 314, 315, 319, 320, 321, 322, 323, 325, 326, 327, 328, 329, 331, 332, 333], "run_ev": [2, 219, 223], "mai": [2, 5, 9, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29, 31, 32, 34, 35, 36, 37, 41, 43, 44, 46, 47, 48, 51, 52, 54, 55, 56, 57, 59, 60, 62, 63, 65, 68, 71, 73, 78, 79, 82, 84, 87, 88, 89, 91, 99, 112, 122, 125, 126, 128, 137, 140, 141, 145, 148, 158, 159, 160, 162, 165, 175, 184, 193, 199, 224, 225, 226, 249, 251, 254, 268, 269, 270, 272, 282, 283, 285, 286, 294, 295, 296, 309, 310, 311, 313, 315, 316, 319, 320], "retriev": [2, 39, 41, 43, 46, 55, 57, 68, 77, 89, 91, 114, 121, 123, 137, 141, 146, 163, 168, 170, 171, 173, 175, 176, 178, 184, 192, 217, 221, 251, 253, 276, 281, 307, 317, 319], "get": [2, 10, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 26, 31, 35, 42, 43, 47, 55, 56, 59, 61, 62, 63, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 96, 99, 104, 106, 111, 112, 113, 114, 115, 116, 118, 121, 123, 124, 128, 135, 137, 140, 141, 142, 143, 144, 145, 146, 149, 150, 153, 154, 158, 159, 160, 161, 162, 163, 168, 169, 173, 174, 177, 180, 183, 184, 185, 188, 193, 194, 195, 202, 210, 212, 213, 215, 217, 219, 221, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 254, 256, 259, 260, 261, 266, 269, 270, 272, 273, 281, 282, 283, 287, 288, 289, 291, 297, 299, 300, 301, 302, 303, 304, 305, 307, 308, 314, 319, 320, 322, 325, 334], "url": [2, 26, 43, 114, 217, 219, 221, 223, 298], "would": [2, 5, 12, 14, 15, 16, 18, 19, 26, 30, 34, 35, 40, 47, 54, 56, 57, 59, 62, 77, 78, 82, 86, 87, 89, 91, 95, 99, 141, 160, 215, 226, 251, 282, 283, 306, 314], "g": [2, 16, 22, 26, 27, 35, 36, 46, 48, 52, 57, 59, 60, 63, 78, 80, 82, 83, 87, 88, 89, 91, 134, 137, 141, 148, 158, 163, 169, 180, 181, 228, 246, 254, 261, 270, 283, 284, 285, 295, 296, 297, 306, 307, 314, 315, 316, 325], "my": [2, 18, 26, 68, 81, 163], "agnost": [2, 12], "against": [2, 6, 22, 24, 45, 60, 82, 89, 91, 141, 143, 157, 165, 282, 283], "method": [2, 12, 16, 18, 22, 26, 27, 29, 31, 41, 44, 54, 68, 70, 76, 77, 78, 84, 87, 88, 89, 91, 104, 110, 116, 117, 118, 122, 137, 141, 153, 159, 184, 192, 196, 199, 200, 203, 226, 253, 283, 292, 299, 300, 301, 302, 303, 304, 305, 310, 313], "rest": [2, 16, 18, 26, 27, 40, 41, 43, 48, 54, 73, 78, 81, 89, 91, 114, 116, 216, 217, 219, 220, 221, 223, 226, 251, 325], "onli": [2, 5, 6, 9, 18, 19, 22, 24, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 40, 41, 43, 46, 47, 52, 54, 55, 56, 57, 59, 60, 62, 68, 71, 73, 76, 77, 80, 81, 82, 83, 84, 87, 88, 89, 91, 96, 110, 114, 117, 123, 125, 134, 135, 136, 146, 148, 149, 153, 154, 159, 160, 164, 176, 184, 213, 215, 217, 221, 225, 251, 254, 270, 273, 276, 282, 283, 286, 293, 294, 310, 313, 314, 315, 325, 334], "author": [2, 26, 28, 30, 31, 32, 34, 44, 46, 55, 57, 73, 75, 76, 77, 83, 85, 91, 110, 122, 126, 153, 159, 217, 221, 248, 251, 293, 306, 314, 315, 318, 323, 325], "In": [2, 5, 6, 7, 12, 16, 18, 19, 20, 22, 24, 29, 31, 33, 34, 35, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 49, 52, 54, 55, 57, 59, 60, 62, 63, 65, 68, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 88, 89, 91, 99, 136, 160, 224, 226, 228, 231, 250, 257, 268, 273, 282, 283, 293, 298, 306, 308, 314, 315, 316, 318, 321, 325, 329], "order": [2, 5, 12, 13, 14, 16, 19, 21, 24, 29, 35, 42, 43, 44, 48, 54, 56, 59, 62, 63, 68, 71, 76, 77, 78, 89, 91, 116, 134, 137, 159, 164, 165, 184, 207, 224, 274, 281, 283, 290, 309, 310, 327, 329], "need": [2, 9, 12, 13, 15, 16, 17, 18, 19, 21, 22, 26, 27, 29, 31, 32, 33, 34, 35, 40, 42, 44, 46, 47, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 70, 71, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 89, 91, 99, 101, 105, 107, 116, 117, 126, 141, 153, 158, 159, 175, 180, 182, 192, 193, 194, 204, 210, 213, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 255, 257, 268, 270, 271, 272, 276, 280, 281, 282, 288, 289, 290, 293, 295, 304, 307, 309, 310, 311, 313, 314, 315, 318, 319, 320, 321, 322, 323, 326, 327, 328, 329, 332, 333, 334], "header": [2, 27, 42, 43, 54, 57, 73, 83, 88, 89, 112, 126, 135, 156, 164, 179, 189, 193, 219, 272, 312], "token": [2, 26, 43, 54, 59, 73, 83, 88, 89, 91, 97, 105, 110, 114, 122, 126, 153, 159, 163, 184, 217, 219, 221, 251, 299, 300, 301, 302, 303, 304, 305, 314], "obtain": [2, 12, 16, 88, 89, 91, 118, 134, 136, 137, 154, 162, 180, 210, 217, 219, 221, 223, 296, 299, 300, 301, 302, 303, 304, 305, 316, 320, 322], "admin": [2, 26, 59, 68, 71, 75, 87, 89, 91, 248, 252, 299, 300, 301, 302, 303, 304, 305, 312, 314, 325], "set": [2, 5, 6, 9, 12, 14, 15, 16, 17, 18, 21, 22, 24, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 43, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 70, 71, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 94, 95, 96, 99, 104, 106, 109, 110, 114, 116, 118, 125, 134, 135, 136, 137, 140, 141, 142, 143, 149, 151, 153, 156, 158, 159, 160, 163, 164, 168, 169, 171, 172, 173, 174, 176, 177, 181, 184, 193, 194, 208, 210, 215, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 250, 253, 256, 268, 273, 281, 287, 288, 289, 290, 293, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 313, 315, 316, 320, 322, 329, 334], "To": [2, 12, 13, 14, 15, 16, 18, 19, 21, 26, 30, 31, 32, 33, 34, 35, 37, 38, 41, 42, 46, 47, 48, 52, 54, 55, 56, 57, 59, 60, 61, 62, 68, 70, 71, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 91, 116, 160, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 249, 250, 251, 252, 255, 256, 257, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 287, 288, 289, 290, 292, 293, 294, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 325, 326, 327, 328, 329, 330, 332, 333, 334], "make": [2, 5, 9, 12, 16, 17, 18, 19, 20, 21, 24, 27, 31, 33, 34, 35, 36, 37, 44, 46, 55, 57, 64, 66, 68, 70, 73, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 99, 148, 215, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 257, 260, 268, 273, 274, 276, 281, 282, 283, 288, 289, 295, 297, 299, 300, 301, 302, 303, 304, 305, 310, 313, 314], "login": [2, 31, 32, 59, 68, 76, 86, 89, 91, 105, 221], "api_token": [2, 89, 217, 219, 221], "import": [2, 9, 23, 26, 31, 42, 43, 45, 46, 56, 57, 60, 61, 62, 68, 70, 75, 76, 77, 80, 81, 82, 83, 84, 87, 88, 89, 91, 95, 118, 159, 217, 221, 226, 249, 282, 325], "json": [2, 41, 57, 61, 62, 77, 80, 86, 91, 113, 115, 219, 223, 247, 251, 270, 296, 319], "bearer": [2, 43], "check": [2, 13, 15, 16, 17, 21, 24, 26, 30, 31, 34, 35, 38, 45, 46, 51, 52, 53, 54, 55, 57, 70, 71, 76, 77, 78, 80, 82, 83, 86, 87, 88, 91, 96, 97, 99, 111, 113, 115, 116, 123, 125, 128, 129, 140, 141, 144, 155, 159, 160, 162, 165, 166, 180, 184, 224, 226, 251, 272, 293, 294, 298, 313, 315, 325], "valid": [2, 6, 12, 16, 17, 20, 26, 29, 35, 43, 45, 47, 51, 52, 54, 55, 56, 57, 59, 60, 62, 68, 86, 88, 89, 91, 96, 97, 99, 102, 105, 107, 110, 114, 116, 118, 128, 137, 140, 141, 155, 157, 158, 159, 160, 165, 180, 181, 184, 193, 204, 210, 212, 213, 310, 314], "authenticate_respons": 2, "f": [2, 42, 56, 60, 61, 62, 68, 78, 80, 86, 91, 270, 295, 296, 297, 307, 309, 315, 316, 320, 331], "ok": [2, 16, 54, 73, 81, 87, 91, 96, 99, 125, 141, 143, 180, 272, 281, 312], "print": [2, 19, 22, 31, 57, 59, 60, 75, 81, 82, 83, 84, 85, 89, 91, 111, 112, 118, 141, 160, 179, 246, 276, 295, 310, 325, 334], "auth": [2, 43, 54, 59, 88, 89, 97, 153, 184, 251, 252, 314], "succeed": [2, 54, 84, 89, 91, 126, 155, 159, 272], "els": [2, 31, 33, 34, 37, 60, 76, 83, 84, 85, 86, 89, 91, 134, 334], "fail": [2, 12, 13, 14, 16, 18, 24, 26, 30, 35, 43, 52, 54, 55, 57, 59, 60, 61, 70, 76, 82, 83, 84, 87, 88, 89, 91, 98, 107, 114, 118, 124, 125, 126, 134, 136, 137, 148, 151, 154, 155, 158, 159, 160, 163, 179, 181, 208, 210, 212, 257, 269, 282, 298, 312, 313, 314, 315, 318, 324, 325], "format": [2, 19, 28, 29, 30, 31, 35, 39, 40, 54, 55, 57, 62, 76, 77, 80, 81, 82, 83, 84, 87, 88, 89, 109, 113, 115, 128, 136, 137, 149, 191, 192, 196, 199, 200, 203, 205, 208, 210, 219, 223, 225, 246, 251, 254, 270, 276, 281, 284, 296, 307, 315, 316, 320, 322], "text": [2, 27, 29, 31, 34, 35, 59, 62, 73, 80, 83, 85, 88, 89, 91, 95, 111, 118, 159, 254, 292, 295, 310, 327, 330], "now": [2, 14, 16, 18, 19, 22, 24, 32, 34, 41, 45, 47, 51, 52, 56, 60, 68, 71, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 95, 99, 106, 112, 136, 201, 226, 246, 254, 272, 282, 310, 334], "we": [2, 4, 5, 6, 10, 16, 18, 19, 22, 24, 27, 30, 31, 35, 36, 37, 47, 48, 56, 59, 60, 61, 62, 65, 68, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 95, 101, 116, 118, 122, 134, 153, 158, 160, 185, 203, 224, 226, 228, 233, 246, 282, 283, 293, 299, 300, 301, 302, 303, 304, 305, 306, 313, 314], "have": [2, 4, 5, 6, 12, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 38, 40, 43, 44, 45, 46, 47, 51, 53, 54, 55, 56, 57, 59, 60, 62, 64, 65, 68, 70, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 112, 116, 118, 123, 126, 136, 137, 141, 149, 160, 164, 180, 184, 185, 199, 205, 226, 227, 228, 244, 245, 246, 247, 249, 257, 268, 270, 271, 272, 273, 274, 276, 280, 282, 283, 284, 285, 286, 288, 290, 293, 295, 298, 306, 307, 310, 311, 313, 314, 315, 319, 320, 321, 323, 325, 326, 327, 328, 329, 332, 333], "part": [2, 10, 12, 16, 18, 22, 29, 35, 36, 37, 40, 41, 52, 55, 56, 57, 59, 60, 62, 73, 81, 89, 91, 99, 107, 117, 193, 224, 251, 270, 305, 315], "argument": [2, 30, 32, 38, 40, 54, 57, 62, 70, 71, 76, 77, 78, 80, 81, 83, 84, 85, 86, 87, 88, 89, 91, 95, 96, 105, 111, 112, 116, 118, 120, 125, 126, 137, 141, 152, 153, 154, 160, 165, 169, 184, 217, 221, 226, 228, 234, 247, 249, 250, 251, 254, 272, 273, 274, 276, 278, 281, 282, 283, 285, 296, 305, 307, 310, 313, 315, 316, 317, 318, 320, 322, 323, 327, 330, 334], "cooki": 2, "fetch": [2, 57, 74, 89, 270, 304], "some": [2, 5, 6, 7, 12, 14, 16, 18, 19, 21, 24, 26, 27, 29, 31, 34, 35, 36, 37, 42, 45, 46, 48, 51, 52, 54, 55, 58, 59, 62, 74, 76, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 104, 107, 116, 148, 157, 159, 215, 224, 226, 227, 228, 240, 272, 276, 282, 283, 284, 293, 310, 320], "same": [2, 5, 12, 16, 18, 19, 22, 23, 24, 26, 29, 30, 31, 32, 34, 35, 37, 38, 40, 41, 42, 44, 45, 46, 47, 52, 53, 54, 55, 56, 57, 59, 60, 62, 63, 66, 75, 76, 77, 80, 81, 82, 84, 85, 87, 88, 89, 91, 96, 113, 115, 118, 126, 129, 134, 137, 140, 141, 158, 160, 226, 227, 231, 247, 248, 251, 270, 272, 276, 283, 286, 288, 296, 307, 310, 313, 314, 315, 316, 317], "strategi": [2, 14, 54], "robots_respons": 2, "hostnam": [2, 31, 32, 38, 43, 62, 76, 77, 81, 83, 84, 87, 91, 109, 114, 184, 217, 221, 249, 251, 272, 282, 296, 297, 299, 300, 301, 302, 303, 304, 305, 310, 313, 315, 316, 322, 334], "verifi": [2, 18, 20, 45, 54, 57, 62, 76, 78, 81, 89, 91, 122, 153, 159, 165, 179, 217, 218, 219, 268, 295, 297, 299, 300, 301, 302, 303, 304, 305, 311, 315], "fals": [2, 18, 24, 37, 56, 57, 59, 76, 84, 86, 88, 89, 91, 95, 96, 99, 102, 106, 109, 111, 116, 118, 120, 123, 125, 127, 134, 136, 137, 140, 141, 143, 148, 150, 155, 158, 159, 160, 162, 165, 173, 179, 180, 184, 185, 193, 199, 204, 205, 215, 273, 282, 299, 300, 301, 302, 303, 304, 305, 320], "encount": [2, 19, 20, 46, 57, 89, 91, 126, 212], "problem": [2, 6, 12, 17, 18, 26, 46, 54, 68, 73, 78, 82, 83, 89, 91, 96, 106, 107, 112, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 134, 136, 145, 148, 150, 151, 152, 153, 154, 155, 159, 160, 162, 180, 185, 192, 196, 199, 200, 203, 205, 210, 213, 269, 319, 324], "while": [2, 5, 6, 7, 9, 11, 15, 16, 18, 19, 21, 23, 24, 26, 27, 30, 31, 34, 35, 36, 37, 38, 40, 41, 42, 46, 48, 54, 55, 57, 59, 60, 63, 80, 81, 82, 83, 84, 85, 87, 89, 91, 116, 125, 134, 146, 155, 158, 160, 179, 226, 227, 251, 257, 258, 270, 273, 282, 283, 285, 294, 303, 306, 309, 325, 330], "robots_json": 2, "must": [2, 6, 9, 12, 13, 16, 17, 19, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 43, 44, 45, 46, 48, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 68, 73, 75, 76, 82, 88, 89, 91, 107, 110, 112, 114, 116, 122, 128, 141, 158, 160, 172, 173, 185, 193, 210, 217, 221, 227, 229, 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, 241, 243, 244, 247, 251, 253, 254, 256, 270, 272, 273, 275, 276, 278, 279, 281, 282, 283, 285, 287, 289, 291, 295, 296, 298, 306, 307, 308, 309, 310, 313, 314, 315, 316, 317, 318, 325, 330], "asid": [2, 12, 18], "If": [2, 5, 6, 9, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 26, 27, 29, 30, 31, 34, 35, 36, 37, 38, 43, 45, 46, 47, 48, 51, 52, 54, 55, 56, 57, 59, 60, 61, 62, 63, 65, 66, 67, 68, 70, 71, 73, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 99, 105, 110, 113, 114, 115, 116, 117, 118, 122, 134, 137, 141, 148, 158, 159, 160, 163, 175, 180, 184, 193, 201, 208, 221, 225, 226, 247, 249, 250, 269, 270, 273, 276, 281, 282, 284, 285, 286, 288, 293, 295, 296, 297, 298, 306, 307, 309, 310, 313, 314, 315, 319, 320, 321, 325, 327, 334], "unauthor": [2, 314], "made": [2, 18, 26, 35, 41, 48, 60, 75, 80, 81, 83, 87, 88, 89, 91, 116, 118, 134, 136, 141, 159, 185, 208, 281, 282, 316], "401": 2, "respons": [2, 5, 12, 15, 18, 23, 35, 41, 43, 45, 46, 54, 55, 57, 73, 76, 83, 84, 87, 88, 89, 91, 96, 98, 99, 101, 103, 104, 105, 106, 107, 112, 113, 115, 116, 117, 121, 122, 125, 126, 127, 134, 136, 140, 141, 143, 146, 148, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 179, 180, 181, 185, 190, 195, 198, 210, 213, 217, 221, 247, 251, 264, 272, 276, 281, 282, 298, 313, 314, 325], "sent": [2, 5, 18, 26, 35, 36, 40, 45, 48, 52, 54, 55, 56, 57, 59, 84, 89, 91, 96, 110, 118, 125, 159, 160, 164, 177, 184, 185, 246, 314], "likewis": [2, 8, 43, 48], "link": [2, 5, 6, 9, 37, 38, 42, 44, 45, 48, 54, 55, 57, 59, 62, 63, 68, 70, 82, 86, 110, 137, 162, 282, 293], "visit": [2, 14, 18, 24, 313], "browser": [2, 62, 81, 82, 89, 285], "without": [2, 5, 6, 9, 14, 15, 16, 18, 19, 21, 22, 23, 27, 29, 30, 33, 34, 35, 45, 52, 54, 56, 58, 59, 60, 61, 62, 63, 65, 68, 71, 86, 87, 88, 89, 91, 99, 105, 114, 116, 119, 122, 159, 160, 163, 205, 235, 249, 254, 283, 290, 295, 296, 314, 333], "being": [2, 5, 6, 7, 15, 16, 21, 26, 27, 29, 30, 31, 38, 41, 52, 54, 55, 57, 59, 61, 62, 73, 78, 83, 84, 86, 87, 88, 89, 91, 96, 102, 116, 122, 125, 134, 150, 158, 169, 184, 217, 221, 270, 272, 276, 282, 307, 314, 320, 322, 325], "forbidden": 2, "shown": [2, 14, 16, 19, 24, 26, 30, 31, 35, 38, 41, 43, 44, 47, 48, 52, 54, 56, 62, 63, 65, 66, 70, 78, 79, 82, 85, 89, 91, 226, 282, 283, 298, 308, 310, 320, 322, 330], "bosdyn": [2, 12, 18, 19, 26, 27, 29, 30, 32, 43, 45, 54, 56, 57, 59, 73, 75, 76, 77, 80, 81, 83, 84, 86, 87, 88, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 218, 219, 221, 222, 223, 227, 229, 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, 241, 243, 244, 246, 251, 253, 254, 256, 268, 272, 273, 275, 276, 278, 279, 281, 282, 283, 284, 285, 286, 287, 289, 290, 291, 293, 296, 306, 308, 310, 311, 313, 314, 315, 316, 317, 318, 325, 330], "packag": [2, 29, 30, 57, 60, 62, 73, 75, 82, 83, 86, 88, 89, 91, 163, 221, 223, 226, 249, 252, 270, 273, 281, 293, 297, 315, 319, 320, 329, 334], "onc": [2, 5, 12, 13, 15, 17, 18, 20, 21, 23, 24, 26, 29, 30, 31, 32, 33, 34, 35, 37, 38, 43, 45, 46, 55, 57, 59, 60, 62, 70, 75, 76, 77, 78, 81, 82, 83, 84, 85, 86, 88, 89, 153, 179, 226, 228, 251, 257, 268, 272, 281, 282, 307, 309, 310, 312, 314, 323, 329], "instanti": [2, 56, 159, 165, 215], "help": [2, 10, 13, 15, 19, 20, 21, 22, 26, 27, 31, 35, 38, 45, 52, 53, 55, 56, 57, 62, 63, 68, 74, 76, 80, 81, 82, 83, 84, 86, 87, 88, 89, 91, 123, 125, 137, 160, 180, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 246, 251, 256, 281, 282, 287, 288, 289, 308, 313, 322, 325, 334], "which": [2, 5, 6, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29, 30, 31, 32, 34, 35, 37, 38, 41, 42, 43, 44, 45, 47, 48, 52, 54, 55, 56, 57, 59, 60, 61, 62, 68, 71, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 94, 95, 96, 99, 104, 110, 111, 112, 113, 115, 116, 117, 118, 122, 124, 134, 135, 136, 137, 141, 143, 147, 151, 153, 154, 155, 158, 159, 160, 161, 162, 164, 165, 174, 180, 184, 185, 188, 192, 193, 194, 198, 201, 204, 205, 208, 219, 223, 224, 225, 226, 234, 242, 243, 245, 246, 248, 249, 250, 251, 253, 255, 257, 258, 261, 267, 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, 280, 281, 282, 283, 288, 290, 292, 294, 295, 298, 299, 300, 301, 302, 303, 304, 305, 309, 310, 311, 312, 313, 314, 315, 318, 319, 320, 321, 323, 325, 326, 327, 328, 330, 331, 332, 333, 334], "awai": [2, 5, 7, 9, 19, 20, 22, 23, 36, 37, 42, 81, 85, 89, 91, 134, 158, 229, 320], "simplifi": [2, 26, 41, 43, 46, 54, 57, 62, 73, 76, 89, 116, 258, 267, 283], "build": [2, 3, 19, 20, 21, 24, 43, 53, 54, 56, 70, 73, 75, 78, 84, 85, 86, 89, 91, 136, 154, 160, 166, 180, 249, 250, 251, 252, 273, 296, 306, 307, 310, 313, 314, 315, 316, 319, 320], "hello": [2, 89, 224, 260, 264, 310], "rebrand": 2, "pre": [2, 18, 19, 29, 32, 37, 45, 46, 58, 60, 62, 68, 81, 82, 85, 86, 87, 88, 89, 91, 123, 217, 221, 320, 322], "exist": [2, 5, 10, 16, 19, 26, 29, 30, 31, 35, 41, 45, 47, 52, 54, 55, 56, 62, 73, 81, 83, 87, 89, 91, 96, 113, 121, 122, 125, 127, 128, 134, 137, 141, 146, 150, 153, 158, 159, 163, 173, 174, 184, 185, 188, 205, 217, 221, 228, 251, 270, 272, 282, 283, 285, 310, 313, 315, 317, 327], "instead": [2, 9, 12, 16, 18, 23, 26, 27, 29, 31, 35, 36, 37, 42, 46, 57, 59, 60, 62, 68, 76, 77, 80, 82, 83, 85, 86, 89, 91, 96, 108, 112, 123, 134, 149, 159, 161, 163, 175, 184, 199, 221, 223, 247, 270, 276, 283, 296, 297, 310, 313, 320], "previou": [2, 9, 19, 24, 29, 34, 35, 37, 45, 46, 60, 62, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 118, 122, 123, 180, 217, 221, 272], "continu": [2, 5, 7, 9, 12, 13, 16, 17, 18, 21, 35, 52, 55, 57, 60, 61, 66, 70, 76, 79, 80, 83, 84, 85, 88, 89, 96, 99, 111, 126, 134, 137, 141, 163, 226, 237, 241, 268, 273, 274, 291, 295, 305, 313, 314, 330], "work": [2, 9, 16, 17, 19, 22, 31, 32, 36, 38, 47, 51, 54, 55, 56, 57, 59, 61, 62, 65, 68, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 104, 141, 151, 163, 166, 183, 215, 226, 269, 272, 276, 283, 295, 297, 306, 307, 310, 313, 314, 315, 320, 325, 329, 334], "It": [2, 5, 6, 9, 12, 15, 18, 23, 26, 27, 29, 30, 31, 32, 35, 36, 37, 40, 41, 44, 46, 51, 54, 55, 56, 57, 59, 60, 62, 70, 74, 76, 77, 83, 84, 85, 87, 88, 89, 91, 96, 99, 110, 116, 137, 159, 160, 164, 194, 217, 221, 227, 233, 234, 235, 238, 240, 242, 251, 270, 271, 274, 282, 283, 284, 285, 288, 292, 297, 299, 300, 301, 302, 303, 304, 305, 310, 313, 314, 315, 316, 320, 322, 329, 330, 334], "highli": [2, 31, 87, 281], "recommend": [2, 7, 15, 16, 18, 19, 31, 35, 36, 57, 59, 60, 62, 63, 65, 68, 70, 74, 78, 86, 87, 88, 89, 91, 116, 226, 228, 233, 265, 281, 283, 299, 300, 301, 302, 303, 304, 305, 313, 314, 315, 329], "move": [2, 6, 9, 12, 13, 14, 16, 19, 21, 22, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 47, 48, 55, 56, 59, 63, 75, 79, 81, 83, 84, 85, 86, 91, 95, 96, 112, 148, 160, 184, 206, 214, 225, 226, 227, 228, 231, 234, 235, 238, 240, 242, 244, 257, 258, 268, 273, 274, 281, 290, 295, 309, 310, 311, 334], "forward": [2, 5, 16, 31, 36, 37, 38, 47, 48, 53, 54, 68, 70, 71, 86, 88, 89, 91, 115, 134, 160, 244, 257, 274, 295, 308, 314], "demand": 2, "access": [2, 8, 11, 19, 20, 23, 24, 26, 27, 30, 31, 33, 34, 43, 46, 48, 54, 55, 58, 59, 60, 68, 70, 71, 76, 78, 81, 83, 86, 88, 89, 91, 110, 116, 121, 122, 125, 126, 137, 141, 145, 149, 153, 159, 160, 161, 164, 184, 188, 193, 194, 199, 216, 220, 276, 282, 298, 307, 313, 315, 320], "push": [2, 6, 50, 87, 89, 91, 320, 322], "occur": [2, 5, 17, 18, 19, 31, 37, 46, 51, 55, 57, 66, 78, 89, 91, 96, 116, 126, 157, 158, 159, 160, 162, 179, 212, 225, 281, 305, 325], "gener": [2, 5, 7, 10, 12, 18, 20, 24, 26, 27, 29, 31, 36, 37, 40, 41, 42, 43, 44, 47, 48, 51, 52, 54, 55, 56, 57, 59, 60, 62, 70, 73, 75, 76, 78, 84, 88, 89, 91, 95, 96, 98, 105, 107, 110, 113, 114, 115, 118, 121, 122, 125, 127, 128, 134, 136, 141, 148, 149, 153, 154, 155, 157, 158, 159, 160, 163, 164, 179, 180, 181, 184, 210, 217, 221, 250, 251, 270, 285, 286, 290, 293, 295, 296, 303, 307, 313, 314, 315, 320, 322, 325], "one": [2, 3, 5, 13, 16, 17, 18, 19, 21, 22, 24, 26, 27, 29, 30, 31, 32, 35, 36, 37, 38, 40, 43, 45, 46, 47, 48, 51, 52, 54, 55, 56, 59, 60, 62, 73, 76, 80, 81, 84, 85, 87, 88, 89, 91, 96, 118, 121, 122, 125, 137, 140, 153, 158, 159, 160, 177, 208, 212, 228, 246, 254, 270, 272, 273, 276, 278, 281, 282, 283, 285, 286, 293, 295, 296, 298, 305, 306, 307, 312, 314, 316, 320, 330], "system": [2, 5, 9, 15, 16, 17, 18, 19, 21, 23, 24, 26, 30, 35, 37, 43, 52, 54, 55, 56, 57, 58, 59, 61, 62, 63, 65, 66, 69, 71, 73, 75, 76, 78, 82, 83, 84, 88, 89, 91, 106, 118, 122, 125, 126, 134, 136, 141, 150, 154, 160, 164, 170, 173, 180, 184, 191, 208, 217, 221, 226, 266, 269, 270, 273, 281, 282, 286, 293, 314, 315, 318, 329], "real": [2, 13, 16, 19, 20, 31, 44, 54, 81, 83, 89, 91, 148, 157, 320, 322], "anoth": [2, 13, 19, 20, 21, 22, 24, 26, 37, 47, 52, 54, 56, 59, 60, 62, 79, 83, 88, 89, 91, 99, 103, 107, 124, 137, 146, 147, 148, 160, 175, 179, 206, 226, 246, 272, 273, 282, 283, 286, 296, 305, 309, 310, 316, 320, 322], "case": [2, 8, 12, 16, 18, 20, 21, 22, 26, 35, 41, 45, 46, 52, 54, 55, 60, 62, 65, 73, 76, 77, 79, 82, 84, 87, 88, 89, 91, 96, 99, 112, 122, 128, 136, 140, 153, 159, 160, 251, 272, 282, 295, 307, 308, 309, 313, 314, 325], "sourc": [2, 6, 21, 40, 41, 43, 55, 56, 57, 62, 75, 76, 77, 79, 80, 81, 82, 83, 84, 87, 88, 89, 91, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, 214, 215, 217, 218, 219, 221, 223, 234, 242, 271, 273, 275, 276, 282, 296, 308, 313, 315, 316, 320, 325, 330], "Its": [2, 35, 184], "job": [2, 86, 91], "identifi": [2, 26, 34, 35, 40, 41, 46, 52, 53, 55, 57, 76, 77, 84, 88, 89, 91, 95, 115, 116, 117, 118, 123, 131, 134, 158, 159, 163, 180, 185, 191, 194, 283, 314, 333], "point": [2, 5, 6, 9, 16, 18, 19, 23, 24, 26, 27, 37, 47, 54, 55, 56, 58, 59, 60, 61, 63, 68, 71, 76, 77, 78, 81, 82, 83, 84, 85, 87, 91, 97, 99, 134, 136, 149, 158, 159, 160, 163, 208, 237, 247, 259, 272, 273, 274, 282, 286, 295, 308, 313, 319, 320, 322, 333], "post": [2, 43, 79, 82, 89, 91, 217, 221, 259, 261, 270, 295, 296], "regist": [2, 16, 18, 26, 41, 43, 45, 46, 51, 53, 55, 57, 58, 60, 62, 68, 74, 83, 89, 91, 100, 111, 118, 121, 122, 125, 134, 137, 152, 153, 158, 159, 163, 184, 191, 193, 194, 198, 201, 204, 248, 251, 255, 265, 269, 276, 281, 282, 296, 297, 306, 307, 310, 313, 315, 316, 317, 318, 320, 325], "subscrib": [2, 89], "page": [2, 26, 30, 43, 47, 59, 60, 62, 68, 70, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 91, 153, 159, 253, 254, 281, 282, 285, 293, 297, 299, 300, 301, 302, 303, 304, 305, 312, 314, 315, 319], "know": [2, 12, 18, 19, 47, 55, 59, 76, 88, 89, 91, 101, 151, 160, 282, 283, 315], "specifi": [2, 5, 6, 12, 13, 16, 17, 18, 19, 22, 24, 26, 27, 29, 30, 35, 36, 37, 41, 43, 45, 48, 51, 54, 55, 56, 57, 62, 70, 71, 73, 76, 77, 78, 80, 82, 84, 86, 88, 91, 95, 96, 97, 107, 109, 110, 111, 114, 116, 117, 118, 121, 122, 125, 127, 134, 136, 137, 140, 141, 142, 145, 146, 154, 157, 160, 162, 168, 173, 176, 177, 180, 184, 188, 196, 197, 199, 202, 209, 210, 217, 221, 226, 228, 234, 242, 249, 250, 251, 253, 254, 270, 273, 274, 276, 278, 282, 283, 296, 307, 310, 313, 315, 316, 320, 322, 323, 325, 330, 334], "locat": [2, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 27, 29, 31, 34, 35, 36, 37, 38, 44, 47, 50, 54, 55, 59, 60, 61, 62, 67, 68, 76, 77, 79, 80, 81, 82, 83, 84, 85, 88, 89, 91, 95, 96, 106, 160, 184, 189, 194, 206, 214, 226, 244, 248, 251, 268, 270, 273, 281, 282, 283, 295, 311, 313, 315, 319, 320, 323, 330, 333], "target": [2, 5, 6, 12, 18, 22, 35, 51, 59, 62, 63, 71, 73, 79, 83, 85, 87, 89, 125, 158, 177, 179, 228, 270, 273, 307, 310, 319], "addition": [2, 16, 19, 27, 30, 37, 38, 52, 57, 89, 91, 112, 143, 159, 268, 273, 276, 281, 283, 313, 318], "requir": [2, 6, 12, 13, 15, 16, 17, 18, 19, 20, 22, 24, 26, 27, 28, 29, 31, 33, 34, 35, 36, 37, 43, 44, 45, 46, 48, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 67, 68, 70, 71, 77, 78, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 96, 98, 99, 102, 113, 123, 126, 153, 155, 156, 158, 160, 165, 184, 213, 217, 221, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 311, 312, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "section": [2, 4, 9, 12, 22, 24, 31, 34, 35, 36, 37, 38, 39, 41, 55, 58, 59, 60, 61, 62, 65, 69, 70, 71, 75, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 95, 251, 276, 281, 282, 312, 313, 314, 315, 320, 322, 334], "below": [2, 4, 5, 9, 12, 14, 15, 16, 19, 23, 24, 26, 29, 30, 31, 34, 38, 41, 43, 44, 46, 48, 52, 53, 54, 56, 60, 62, 65, 66, 67, 68, 70, 71, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 97, 209, 224, 226, 233, 246, 247, 254, 270, 273, 281, 294, 296, 297, 298, 307, 308, 310, 313, 315, 316, 320, 322, 334], "bodi": [2, 6, 16, 19, 21, 23, 27, 30, 31, 34, 35, 36, 47, 52, 55, 63, 65, 67, 85, 88, 89, 91, 128, 139, 141, 160, 164, 219, 225, 226, 244, 256, 258, 274, 281, 283, 289, 297, 312, 319, 323, 328, 334], "structur": [2, 8, 16, 20, 30, 35, 43, 47, 48, 50, 52, 54, 57, 60, 63, 78, 80, 81, 83, 85, 88, 89, 91, 95, 113, 115, 128, 134, 160, 170, 189, 191], "uniqu": [2, 19, 22, 26, 27, 35, 41, 44, 47, 55, 57, 59, 62, 70, 87, 89, 91, 96, 113, 115, 118, 122, 136, 153, 159, 163, 180, 191, 251, 283, 286, 295, 306, 313, 314, 315], "uuid": [2, 59, 75, 118, 159, 217, 221, 319, 325], "string": [2, 12, 24, 26, 27, 41, 47, 54, 57, 59, 62, 70, 73, 76, 88, 89, 91, 95, 96, 105, 109, 112, 113, 114, 116, 117, 118, 119, 128, 134, 136, 137, 141, 142, 143, 145, 146, 150, 153, 154, 158, 159, 160, 162, 163, 164, 166, 173, 180, 183, 184, 185, 193, 194, 201, 204, 208, 212, 215, 217, 219, 221, 251, 298, 310, 313, 314, 315], "type": [2, 3, 6, 13, 15, 16, 17, 18, 19, 22, 26, 27, 30, 36, 41, 44, 46, 47, 52, 54, 55, 57, 59, 62, 63, 68, 71, 73, 76, 78, 80, 83, 84, 87, 88, 89, 95, 96, 99, 101, 109, 110, 111, 113, 114, 116, 118, 123, 134, 136, 137, 145, 149, 151, 155, 157, 158, 159, 162, 163, 164, 166, 173, 179, 185, 190, 193, 194, 195, 196, 197, 199, 204, 205, 208, 210, 212, 215, 217, 219, 221, 223, 226, 228, 246, 251, 253, 271, 282, 283, 298, 308, 312, 314, 315], "wa": [2, 6, 14, 16, 17, 19, 21, 23, 24, 25, 26, 27, 29, 34, 35, 40, 41, 42, 45, 52, 54, 55, 56, 57, 59, 76, 77, 80, 82, 83, 84, 85, 86, 87, 89, 91, 96, 98, 105, 106, 107, 113, 114, 116, 121, 123, 125, 126, 131, 134, 136, 137, 140, 141, 146, 148, 151, 153, 154, 155, 157, 159, 160, 165, 176, 193, 194, 201, 206, 210, 212, 213, 226, 233, 269, 272, 281, 283, 284, 293, 307, 309, 312, 315, 334], "trigger": [2, 9, 10, 18, 20, 21, 24, 34, 41, 44, 48, 59, 62, 73, 78, 79, 89, 91, 113, 115, 116, 117, 126, 127, 134, 137, 140, 250, 269, 272, 281, 296, 298, 310, 318], "iso": [2, 219], "date": [2, 70, 87, 91, 251], "indic": [2, 6, 13, 15, 17, 18, 26, 29, 30, 31, 34, 35, 36, 37, 46, 48, 52, 54, 56, 57, 85, 88, 89, 91, 96, 99, 105, 114, 116, 134, 136, 137, 141, 142, 158, 159, 160, 165, 171, 173, 176, 184, 210, 217, 219, 221, 223, 254, 270, 272, 289, 295, 296, 297, 308, 312, 313, 316], "depend": [2, 5, 9, 16, 21, 22, 23, 24, 26, 27, 29, 31, 32, 36, 37, 48, 50, 52, 56, 59, 60, 62, 73, 78, 81, 83, 87, 91, 160, 164, 296, 307, 315, 316, 317, 320, 322], "multipl": [2, 12, 15, 19, 21, 22, 26, 29, 32, 35, 37, 38, 40, 41, 46, 47, 52, 54, 55, 57, 60, 62, 76, 83, 88, 89, 91, 96, 137, 141, 149, 160, 169, 199, 251, 270, 273, 282, 286, 306, 314, 315], "invok": [2, 111, 141], "whenev": [2, 16, 19, 71, 91, 283], "valu": [2, 3, 5, 15, 16, 24, 27, 29, 31, 35, 36, 37, 41, 42, 43, 45, 47, 48, 52, 55, 56, 57, 59, 62, 63, 66, 73, 77, 78, 82, 83, 84, 88, 94, 95, 96, 110, 111, 112, 118, 125, 126, 134, 136, 137, 141, 149, 150, 157, 158, 160, 163, 164, 165, 166, 171, 184, 185, 188, 191, 193, 194, 200, 201, 208, 210, 211, 215, 219, 233, 248, 254, 270, 273, 281, 282, 283, 296, 298, 316, 320, 322, 323, 330], "action_complet": 2, "field": [2, 3, 12, 14, 16, 18, 22, 23, 29, 31, 34, 35, 40, 41, 43, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 59, 62, 68, 70, 73, 78, 79, 83, 84, 88, 91, 94, 95, 96, 112, 117, 119, 122, 126, 134, 136, 137, 148, 149, 154, 156, 164, 165, 173, 208, 212, 215, 273, 313, 314, 315, 333], "ident": [2, 5, 6, 12, 26, 37, 56, 62, 71, 91, 123, 134, 149, 276, 282, 283], "object": [2, 5, 6, 16, 18, 23, 30, 43, 44, 47, 56, 57, 73, 76, 77, 81, 82, 83, 84, 85, 89, 91, 95, 96, 97, 99, 100, 101, 102, 103, 104, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 120, 122, 123, 124, 125, 129, 132, 134, 137, 140, 141, 142, 143, 147, 148, 149, 153, 155, 156, 158, 159, 160, 161, 163, 164, 166, 172, 180, 181, 182, 184, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 207, 208, 210, 213, 214, 215, 217, 219, 221, 224, 235, 247, 258, 260, 273, 282, 296, 313, 314, 316, 320, 328], "At": [2, 7, 18, 22, 25, 27, 29, 36, 37, 44, 48, 60, 75, 77, 81, 84, 87, 91, 177, 272, 293], "contain": [2, 9, 12, 13, 16, 19, 20, 21, 23, 24, 27, 29, 30, 31, 33, 35, 40, 41, 42, 43, 45, 47, 48, 50, 51, 52, 55, 56, 57, 60, 66, 69, 73, 76, 79, 80, 81, 86, 87, 88, 89, 91, 95, 96, 110, 112, 113, 115, 116, 134, 135, 136, 137, 141, 145, 148, 150, 151, 156, 159, 160, 163, 165, 176, 181, 185, 190, 194, 197, 215, 217, 221, 225, 226, 249, 251, 254, 270, 281, 282, 283, 293, 296, 297, 298, 306, 307, 313, 314, 315, 316, 317, 320], "like": [2, 3, 9, 11, 12, 15, 16, 17, 19, 29, 30, 31, 35, 36, 37, 40, 46, 47, 55, 56, 59, 60, 65, 68, 73, 77, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 112, 113, 115, 117, 118, 120, 123, 126, 134, 155, 185, 192, 193, 208, 210, 213, 226, 251, 272, 276, 283, 286, 298, 306, 310, 312, 314, 315, 325], "name": [2, 3, 16, 18, 19, 24, 26, 27, 30, 31, 33, 34, 35, 40, 41, 43, 44, 46, 47, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 66, 68, 70, 71, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 95, 96, 104, 105, 109, 111, 112, 113, 114, 118, 121, 122, 125, 126, 127, 128, 132, 136, 137, 140, 141, 145, 153, 154, 156, 158, 159, 160, 162, 163, 165, 166, 169, 173, 181, 184, 185, 188, 190, 191, 193, 194, 196, 197, 199, 204, 212, 213, 215, 217, 219, 221, 223, 247, 251, 253, 270, 271, 273, 276, 281, 282, 286, 296, 297, 298, 300, 301, 306, 307, 309, 310, 313, 314, 315, 316, 325], "result": [2, 12, 13, 16, 17, 18, 19, 21, 23, 26, 29, 30, 31, 35, 36, 40, 46, 48, 52, 53, 56, 65, 77, 80, 81, 82, 83, 84, 88, 89, 96, 104, 107, 112, 116, 134, 136, 137, 141, 143, 161, 173, 179, 184, 211, 215, 249, 251, 270, 272, 276, 290, 296, 307, 310, 313, 315], "were": [2, 16, 19, 37, 40, 47, 52, 54, 62, 73, 76, 82, 86, 89, 91, 106, 113, 115, 116, 118, 148, 158, 184, 282, 283, 285, 318], "well": [2, 5, 6, 9, 16, 17, 18, 24, 26, 27, 28, 32, 35, 36, 40, 41, 43, 45, 46, 47, 54, 55, 56, 57, 62, 66, 70, 73, 76, 77, 82, 83, 85, 88, 89, 91, 92, 95, 96, 113, 115, 128, 250, 265, 270, 272, 276, 278, 281, 283, 311, 313, 314, 315, 320, 325, 326, 330], "taken": [2, 5, 19, 20, 25, 26, 56, 57, 63, 84, 87, 88, 89, 91, 104, 137, 141, 286], "anomal": 2, "thermal": [2, 39, 56, 89], "inspect": [2, 12, 16, 19, 21, 40, 50, 56, 79, 89, 91, 116, 155, 271, 297, 310, 316, 319], "abov": [2, 3, 12, 16, 18, 19, 22, 24, 26, 31, 36, 38, 41, 47, 48, 54, 62, 63, 65, 68, 70, 71, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 184, 226, 247, 249, 270, 276, 282, 283, 288, 294, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 308, 313, 314, 315, 316, 320, 330], "maximum": [2, 3, 5, 9, 17, 23, 29, 30, 31, 35, 36, 37, 41, 48, 50, 65, 66, 89, 91, 96, 136, 146, 148, 160, 165, 169, 180, 219, 271, 273, 319], "temperatur": [2, 3, 12, 42, 56, 77, 89, 155, 169, 170, 173, 272, 298], "threshold": [2, 9, 12, 24, 35, 43, 48, 56, 89, 91, 134, 166, 316, 320, 321, 322], "action_completed_with_alert": 2, "secret": [2, 57, 59, 62, 70, 75, 77, 86, 89, 91, 153, 159, 184, 219, 251, 306, 307, 313, 314, 315, 318, 325], "properti": [2, 24, 55, 85, 86, 89, 91, 96, 99, 104, 112, 125, 140, 141, 149, 159, 160, 180, 185, 188, 189, 193, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 210, 333], "64": [2, 27, 32, 49, 71, 91, 194, 205], "charact": [2, 24, 73, 89, 114, 315], "hex": 2, "sign": [2, 26, 37, 55, 87, 91, 150, 310], "signatur": [2, 31, 57, 89, 91, 116, 137, 218, 219], "t": [2, 3, 5, 12, 14, 15, 16, 19, 23, 26, 30, 34, 35, 37, 56, 61, 62, 66, 67, 71, 73, 76, 77, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 114, 118, 134, 158, 159, 160, 180, 185, 201, 210, 249, 250, 270, 276, 282, 283, 284, 295, 296, 297, 307, 309, 315, 316, 320, 331], "1701098596652": 2, "v1": [2, 27, 43, 82, 89, 91], "unix": [2, 71, 159, 180, 193, 201, 204, 208], "timestamp": [2, 16, 26, 27, 29, 30, 35, 40, 41, 43, 47, 48, 54, 55, 73, 76, 88, 89, 91, 96, 113, 114, 115, 118, 129, 134, 137, 150, 156, 159, 180, 182, 185, 193, 194, 201, 204, 208, 251, 254], "messag": [2, 3, 4, 5, 6, 12, 16, 18, 19, 21, 23, 24, 26, 27, 29, 30, 31, 35, 36, 41, 45, 46, 47, 48, 53, 54, 55, 56, 57, 73, 77, 80, 82, 83, 89, 91, 94, 95, 96, 103, 107, 109, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 124, 126, 127, 129, 134, 135, 136, 137, 138, 141, 142, 143, 147, 149, 152, 153, 154, 156, 158, 159, 160, 163, 164, 165, 166, 177, 180, 183, 184, 185, 187, 190, 192, 193, 194, 195, 196, 197, 198, 202, 203, 204, 210, 212, 213, 215, 219, 246, 253, 254, 262, 270, 281, 292, 293, 314, 315, 325], "hash": [2, 27, 29, 91, 96, 194], "hmac": 2, "form": [2, 12, 26, 27, 37, 40, 42, 54, 56, 60, 73, 91, 105, 118, 123, 126, 128, 155, 159, 165, 183, 208, 217, 221, 281, 284, 285, 286, 293], "payload_json_as_str": 2, "sha256": 2, "function": [2, 18, 21, 30, 31, 35, 38, 41, 44, 47, 53, 54, 56, 58, 59, 60, 61, 62, 66, 76, 77, 80, 81, 83, 84, 85, 91, 95, 96, 99, 100, 112, 116, 118, 123, 132, 136, 137, 141, 143, 148, 154, 155, 159, 160, 162, 164, 165, 172, 179, 184, 193, 206, 208, 217, 219, 221, 223, 226, 228, 243, 245, 247, 250, 251, 269, 295, 309, 312, 313, 314, 315, 323, 325, 331, 334], "hexadecim": 2, "represent": [2, 24, 30, 31, 40, 48, 54, 55, 88, 89, 91, 128, 136, 184, 215, 219, 223], "match": [2, 17, 18, 22, 30, 31, 35, 40, 46, 47, 51, 56, 62, 70, 73, 89, 95, 96, 98, 117, 122, 125, 126, 127, 153, 158, 163, 165, 181, 184, 185, 191, 193, 194, 210, 212, 270, 296, 310, 313, 314, 316, 330], "modul": [2, 60, 73, 74, 87, 89, 91, 116, 141, 160, 250, 282, 315, 320], "util": [2, 21, 26, 48, 59, 60, 62, 76, 77, 81, 83, 84, 85, 86, 89, 97, 104, 111, 113, 125, 173, 186, 209, 216, 220, 247, 281, 282, 290, 314], "validate_webhook_payload": [2, 219], "handl": [2, 6, 12, 27, 31, 43, 44, 55, 56, 57, 65, 66, 71, 73, 76, 77, 82, 91, 99, 101, 112, 116, 118, 141, 152, 154, 155, 159, 160, 163, 181, 226, 229, 296, 314, 316], "step": [2, 3, 19, 29, 30, 34, 36, 45, 55, 57, 62, 65, 68, 71, 74, 78, 79, 82, 85, 86, 88, 89, 212, 226, 270, 272, 281, 296, 297, 303, 307, 314, 316, 320, 330], "ensur": [2, 30, 31, 33, 35, 37, 46, 48, 56, 57, 59, 60, 62, 63, 64, 66, 67, 68, 78, 82, 87, 89, 91, 118, 137, 141, 148, 153, 159, 184, 234, 235, 242, 244, 251, 268, 282, 283, 290, 296, 311, 313, 314, 315, 316, 325], "came": [2, 27, 56, 219], "alter": [2, 35, 91], "transit": [2, 29, 31, 35, 65, 89, 91, 92, 116, 160, 269], "man": [2, 31, 37, 83, 91], "middl": [2, 5, 9, 18, 31, 34, 47, 65, 89, 91, 282, 286, 330], "replai": [2, 8, 9, 14, 17, 20, 21, 22, 41, 89, 259, 268, 309], "registr": [2, 26, 44, 46, 55, 60, 62, 68, 76, 77, 83, 88, 89, 97, 100, 111, 118, 127, 130, 184, 224, 251, 265, 281, 310, 313, 315, 325], "both": [2, 5, 6, 13, 14, 16, 17, 19, 21, 23, 26, 27, 29, 30, 31, 32, 36, 37, 40, 42, 44, 46, 48, 55, 56, 57, 59, 62, 66, 79, 83, 85, 86, 88, 89, 91, 95, 110, 125, 226, 230, 247, 272, 281, 310, 313, 315, 321], "certain": [2, 9, 12, 18, 22, 24, 26, 35, 46, 52, 55, 62, 63, 71, 89, 91, 224, 226, 272, 280], "environ": [2, 5, 9, 14, 16, 18, 19, 20, 22, 23, 43, 54, 55, 62, 63, 68, 71, 78, 79, 81, 82, 85, 86, 88, 89, 91, 157, 158, 184, 219, 221, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 249, 256, 281, 282, 287, 288, 289, 290, 297, 299, 300, 301, 302, 303, 304, 305, 308, 315, 320, 322, 329, 334], "strongli": [2, 112], "discourag": [2, 87, 251, 310, 313, 315], "default": [2, 5, 6, 14, 18, 19, 29, 30, 31, 35, 36, 37, 43, 48, 54, 56, 57, 59, 62, 68, 70, 71, 73, 76, 78, 80, 81, 83, 84, 86, 87, 88, 89, 95, 96, 99, 101, 110, 112, 116, 118, 122, 134, 136, 137, 141, 153, 154, 158, 159, 160, 163, 164, 165, 181, 184, 193, 204, 208, 219, 223, 227, 246, 247, 251, 270, 271, 272, 273, 276, 282, 283, 293, 296, 307, 310, 313, 314, 315, 316, 320, 322, 325, 327, 330], "tl": [2, 299, 300, 301, 302, 303, 304, 305], "certif": [2, 54, 91, 126, 163, 217, 221, 299, 300, 301, 302, 303, 304, 305], "invalid": [2, 16, 17, 26, 30, 48, 54, 55, 89, 91, 96, 105, 106, 113, 125, 126, 128, 134, 136, 141, 146, 148, 150, 154, 155, 157, 160, 165, 179, 201, 210, 215, 219, 281], "overridden": [2, 17, 78, 89, 91, 118, 155, 179, 272], "validatetlscert": 2, "unrecogn": [2, 91, 134], "self": [2, 18, 21, 23, 24, 31, 34, 37, 38, 54, 55, 57, 65, 75, 76, 77, 83, 89, 91, 110, 111, 137, 141, 149, 160, 207, 224, 225, 226, 251, 265, 272, 282, 295, 309, 310, 313, 314, 315, 317, 325, 331, 334], "cert": [2, 88, 110, 163, 174, 217], "dure": [2, 5, 8, 11, 12, 13, 17, 18, 19, 20, 21, 24, 25, 26, 31, 33, 36, 40, 41, 48, 54, 55, 57, 59, 66, 77, 79, 80, 82, 83, 87, 89, 91, 99, 116, 121, 122, 127, 134, 137, 141, 148, 153, 155, 160, 179, 212, 213, 225, 226, 249, 251, 252, 272, 307, 325], "equal": [2, 9, 24, 48, 71, 80, 91, 282], "choic": [2, 5, 89, 91, 250], "done": [2, 18, 20, 31, 37, 47, 52, 60, 76, 79, 81, 82, 84, 85, 91, 112, 134, 160, 226, 279, 306, 313, 314], "better": [2, 5, 9, 19, 31, 43, 65, 73, 84, 85, 86, 89, 91, 283, 296], "suit": [2, 22], "mayb": [2, 87, 96, 281], "report": [2, 12, 15, 16, 21, 23, 41, 46, 47, 55, 62, 73, 76, 77, 80, 83, 84, 85, 86, 89, 91, 99, 116, 179, 322], "period": [2, 17, 23, 26, 36, 37, 52, 53, 54, 55, 57, 77, 88, 89, 95, 104, 110, 122, 123, 125, 153, 155, 160, 173, 179, 217, 221, 268, 272, 294, 297, 307], "click": [2, 6, 30, 31, 32, 33, 36, 38, 62, 68, 70, 78, 79, 81, 89, 226, 234, 242, 297, 306, 315], "button": [2, 30, 31, 33, 34, 36, 38, 41, 56, 62, 66, 70, 79, 87, 89, 91, 125, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 269, 288, 289, 295, 297, 309, 313, 316, 331, 334], "return": [2, 3, 5, 6, 9, 12, 15, 16, 17, 18, 19, 23, 24, 26, 31, 35, 36, 37, 38, 40, 43, 52, 53, 54, 55, 56, 57, 60, 66, 68, 73, 76, 77, 80, 81, 83, 84, 85, 86, 87, 88, 91, 95, 96, 97, 99, 100, 101, 103, 105, 109, 110, 112, 113, 114, 115, 116, 117, 118, 121, 122, 123, 124, 125, 127, 128, 131, 132, 134, 135, 136, 137, 138, 140, 141, 142, 143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 172, 173, 176, 178, 179, 180, 181, 183, 184, 185, 188, 189, 192, 193, 194, 196, 197, 199, 200, 201, 202, 203, 204, 205, 208, 212, 213, 215, 217, 219, 221, 223, 226, 243, 254, 264, 267, 272, 276, 281, 282, 283, 289, 295, 296, 308, 309, 310, 312, 313, 314, 315, 331, 334], "relev": [2, 16, 23, 45, 46, 47, 60, 91, 211, 218, 222], "easili": [2, 31, 32, 34, 53, 57, 59, 60, 62, 63, 68, 85, 87, 89, 91, 118, 161, 272, 282, 296, 315, 316], "achiev": [2, 12, 16, 19, 21, 26, 36, 48, 50, 68, 89, 91, 159, 160, 180, 273, 315], "sinc": [2, 5, 12, 23, 26, 37, 47, 52, 54, 55, 59, 74, 82, 83, 85, 88, 89, 91, 96, 112, 123, 134, 149, 155, 159, 161, 163, 173, 180, 184, 193, 199, 201, 204, 208, 214, 217, 221, 223, 231, 246, 251, 254, 274, 276, 310, 313, 315, 320], "great": [2, 31, 56, 81, 226], "want": [2, 5, 6, 12, 15, 16, 18, 19, 31, 33, 34, 38, 47, 52, 53, 56, 57, 63, 73, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 122, 131, 164, 203, 208, 226, 273, 282, 283, 294, 296, 309, 314, 316, 333], "do": [2, 6, 7, 15, 16, 18, 21, 22, 24, 26, 29, 31, 32, 35, 37, 43, 46, 47, 51, 52, 53, 54, 56, 57, 59, 60, 62, 65, 66, 67, 68, 71, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 99, 101, 112, 116, 118, 125, 134, 140, 141, 148, 153, 160, 180, 215, 226, 240, 247, 249, 250, 270, 281, 283, 285, 286, 287, 297, 310, 311, 316], "someth": [2, 5, 12, 17, 24, 35, 37, 59, 61, 80, 81, 83, 86, 87, 89, 91, 121, 122, 127, 153, 155, 272, 310, 312], "particular": [2, 13, 18, 20, 23, 26, 35, 36, 40, 41, 42, 52, 56, 63, 73, 76, 77, 78, 80, 89, 91, 117, 121, 134, 159, 195, 282, 298], "enterpris": [2, 89], "asset": [2, 12, 270], "eam": 2, "anomali": 2, "necessari": [2, 9, 18, 19, 32, 34, 35, 42, 44, 48, 52, 54, 57, 60, 62, 64, 68, 70, 71, 78, 79, 84, 88, 89, 91, 95, 98, 134, 141, 158, 192, 210, 251, 270, 273, 285, 307, 314, 320, 321], "kick": [2, 61, 116, 122, 153, 159, 217, 221, 310], "off": [2, 9, 10, 15, 18, 24, 30, 31, 34, 35, 36, 37, 38, 43, 44, 45, 46, 51, 53, 55, 56, 59, 60, 66, 81, 84, 85, 87, 91, 116, 118, 122, 140, 141, 153, 155, 159, 160, 165, 175, 217, 221, 225, 226, 250, 251, 257, 269, 272, 273, 283, 296, 310, 313, 315, 316, 321, 323, 334], "monitor": [2, 12, 18, 21, 44, 46, 55, 68, 69, 78, 82, 89, 91, 104, 114, 116, 155, 251, 294, 295], "automat": [2, 5, 6, 9, 15, 16, 18, 24, 29, 31, 35, 38, 41, 46, 51, 52, 54, 56, 57, 59, 60, 62, 68, 71, 77, 78, 82, 83, 84, 86, 89, 91, 96, 106, 153, 164, 177, 180, 226, 229, 242, 253, 276, 283, 284, 285, 305, 313, 314, 318, 325, 334], "prescrib": 2, "per": [2, 3, 19, 24, 29, 30, 31, 35, 36, 37, 44, 46, 47, 59, 82, 89, 91, 184, 282, 306], "adjust": [2, 20, 24, 26, 29, 30, 31, 36, 37, 38, 42, 56, 68, 89, 91, 226, 272, 273, 307, 315, 320, 321], "launch": [2, 18, 71, 87, 89, 182, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 274, 288, 289, 290, 296, 309, 313, 315, 316, 327], "window": [2, 22, 31, 32, 62, 71, 74, 79, 81, 84, 87, 89, 247, 273, 276, 282, 315, 320, 322, 324, 329, 334], "featur": [2, 5, 8, 14, 18, 19, 20, 21, 22, 41, 51, 56, 68, 88, 91, 134, 144, 224, 228, 284, 286, 312, 313], "describ": [2, 3, 12, 13, 18, 19, 21, 22, 24, 26, 27, 29, 30, 31, 35, 37, 39, 41, 42, 43, 47, 48, 50, 52, 54, 55, 60, 61, 62, 65, 69, 70, 73, 78, 82, 87, 88, 89, 91, 116, 136, 149, 158, 160, 164, 173, 179, 185, 188, 193, 194, 208, 213, 251, 272, 274, 276, 288, 294, 296, 310, 311, 313, 315, 316, 317, 321, 322, 324, 327, 333, 334], "block": [2, 9, 14, 18, 22, 27, 29, 35, 46, 54, 57, 60, 76, 77, 78, 83, 84, 89, 91, 99, 112, 114, 116, 123, 134, 140, 141, 155, 159, 160, 164, 179, 184, 187, 192, 194, 200, 201, 205, 226, 251, 272, 279, 310, 313, 314, 315, 320, 322, 325], "descript": [2, 10, 12, 15, 17, 20, 24, 26, 27, 28, 29, 31, 35, 46, 55, 57, 59, 61, 62, 66, 71, 77, 78, 86, 87, 88, 89, 91, 118, 159, 163, 165, 208, 254, 270, 298, 314], "specif": [2, 4, 6, 10, 13, 18, 19, 21, 24, 30, 31, 35, 36, 37, 41, 42, 43, 44, 46, 47, 48, 52, 54, 55, 57, 58, 59, 60, 61, 62, 68, 70, 73, 75, 77, 78, 82, 86, 87, 88, 89, 91, 94, 95, 96, 109, 110, 112, 124, 126, 134, 137, 141, 143, 147, 149, 150, 151, 160, 162, 163, 185, 217, 221, 225, 228, 251, 254, 260, 270, 280, 282, 283, 288, 297, 299, 300, 301, 303, 304, 305, 310, 314, 315, 325, 326], "how": [2, 6, 10, 13, 16, 19, 21, 23, 24, 26, 29, 31, 35, 36, 37, 39, 41, 44, 45, 46, 47, 53, 54, 55, 56, 57, 61, 62, 68, 69, 71, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 99, 116, 123, 134, 157, 160, 163, 177, 179, 188, 193, 194, 224, 226, 227, 228, 230, 231, 234, 235, 236, 237, 238, 240, 242, 246, 247, 249, 250, 251, 253, 254, 255, 256, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 287, 288, 289, 291, 293, 294, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 317, 318, 319, 320, 324, 326, 327, 328, 329, 330, 332], "often": [2, 5, 36, 45, 47, 55, 75, 78, 81, 82, 85, 88, 91, 116, 118, 126, 177, 179, 270, 313, 333], "gaug": [2, 80, 91, 297], "dai": [2, 89, 246, 251, 254], "12": [2, 3, 26, 43, 59, 66, 81, 86, 87, 89, 91, 298, 314], "00pm": 2, "take": [2, 5, 6, 9, 16, 17, 18, 20, 22, 23, 24, 26, 29, 31, 34, 35, 37, 41, 45, 46, 48, 51, 52, 54, 55, 56, 57, 62, 68, 71, 73, 76, 77, 81, 82, 83, 84, 85, 86, 89, 91, 99, 111, 112, 113, 118, 119, 123, 141, 159, 160, 166, 177, 208, 226, 228, 234, 242, 243, 247, 251, 272, 281, 282, 283, 296, 310, 312, 313, 315, 316, 317, 318, 320, 322, 324, 330, 331], "mondai": 2, "ideal": [2, 73, 112], "begin": [2, 5, 6, 9, 18, 19, 20, 22, 24, 27, 29, 30, 31, 33, 35, 36, 37, 38, 40, 46, 51, 52, 57, 77, 79, 89, 91, 96, 99, 101, 217, 221, 272, 281, 285, 299, 300, 301, 302, 303, 304, 305, 312, 314, 322], "actual": [2, 29, 32, 35, 76, 77, 87, 91, 96, 118, 128, 282, 310, 330], "becaus": [2, 5, 12, 14, 16, 17, 18, 19, 20, 26, 27, 29, 42, 52, 53, 54, 55, 56, 60, 82, 83, 85, 86, 87, 89, 91, 107, 118, 134, 141, 155, 158, 206, 269, 281, 282, 306], "thing": [2, 5, 9, 12, 18, 51, 52, 56, 57, 75, 77, 80, 81, 82, 83, 84, 86, 89, 91, 140, 141, 149, 160], "could": [2, 13, 16, 17, 18, 26, 27, 35, 37, 47, 54, 55, 61, 62, 73, 82, 83, 85, 86, 87, 89, 91, 96, 107, 118, 120, 126, 128, 137, 141, 146, 158, 160, 163, 185, 210, 212, 215, 218, 269, 281, 282, 283, 314, 325, 333], "prevent": [2, 5, 15, 19, 22, 26, 29, 31, 35, 46, 48, 52, 54, 55, 57, 63, 88, 89, 91, 125, 128, 134, 141, 164, 172, 184, 273, 281, 282, 313, 321], "given": [2, 6, 12, 13, 16, 17, 18, 19, 20, 22, 24, 34, 35, 37, 38, 42, 44, 47, 52, 55, 56, 65, 78, 80, 89, 91, 96, 99, 110, 111, 112, 118, 119, 120, 125, 134, 136, 137, 140, 141, 149, 154, 158, 159, 160, 172, 180, 184, 185, 188, 192, 194, 195, 197, 199, 200, 205, 208, 215, 217, 219, 221, 223, 246, 250, 251, 270, 285, 304, 314, 315, 319], "prior": [2, 17, 21, 23, 35, 37, 55, 91, 310, 320], "ran": [2, 85, 89, 91, 249, 272], "differ": [2, 5, 9, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 41, 46, 47, 52, 54, 55, 56, 57, 59, 60, 62, 68, 71, 73, 78, 81, 82, 83, 87, 88, 89, 91, 95, 96, 111, 113, 115, 134, 136, 137, 141, 145, 154, 160, 180, 226, 231, 238, 249, 251, 258, 260, 263, 264, 266, 267, 272, 274, 276, 281, 282, 283, 286, 292, 310, 313, 315, 317, 325, 330], "just": [2, 5, 6, 15, 24, 30, 31, 35, 56, 76, 77, 82, 84, 85, 86, 87, 88, 89, 91, 96, 112, 118, 158, 163, 226, 249, 250, 251, 276, 282, 283, 313], "few": [2, 12, 16, 18, 21, 23, 26, 27, 46, 48, 51, 54, 55, 73, 78, 81, 86, 87, 88, 89, 91, 140, 270, 322], "first": [2, 5, 23, 24, 26, 27, 29, 31, 33, 35, 37, 40, 42, 43, 45, 52, 54, 55, 56, 59, 60, 62, 71, 73, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 91, 96, 115, 125, 134, 150, 153, 160, 162, 163, 180, 184, 217, 221, 246, 257, 270, 273, 281, 282, 283, 284, 296, 306, 314, 315, 316, 320, 325], "next": [2, 12, 14, 15, 22, 23, 31, 34, 35, 51, 56, 60, 62, 68, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 91, 96, 99, 137, 205, 226, 281, 283, 313, 320, 322, 325, 334], "calcul": [2, 16, 26, 31, 47, 48, 91, 281, 282, 308], "origin": [2, 5, 12, 19, 29, 31, 34, 35, 37, 43, 47, 59, 60, 78, 80, 88, 89, 91, 114, 141, 282, 322], "plu": [2, 24, 41, 79, 89, 91, 226, 316], "keep": [2, 5, 7, 9, 16, 21, 23, 30, 31, 33, 34, 35, 44, 46, 52, 55, 57, 65, 70, 73, 78, 80, 82, 83, 84, 85, 86, 87, 89, 91, 97, 100, 122, 125, 126, 141, 153, 179, 194, 251, 315, 317, 320], "updat": [2, 13, 19, 21, 26, 35, 37, 47, 57, 59, 60, 61, 62, 68, 70, 77, 78, 79, 81, 86, 91, 95, 99, 101, 103, 104, 107, 111, 116, 122, 124, 134, 137, 141, 143, 146, 147, 150, 153, 158, 159, 160, 162, 163, 173, 180, 182, 185, 217, 221, 249, 255, 276, 305, 306, 310, 313, 314, 320, 322, 329, 330], "interv": [2, 13, 19, 89, 91, 104, 122, 159, 180], "gap": 2, "between": [2, 5, 7, 10, 13, 16, 19, 20, 21, 23, 24, 26, 29, 30, 31, 34, 36, 37, 43, 45, 52, 53, 54, 56, 60, 62, 64, 65, 66, 70, 83, 84, 85, 87, 88, 89, 91, 96, 104, 110, 111, 128, 134, 137, 141, 149, 153, 158, 160, 176, 180, 226, 250, 257, 272, 273, 276, 281, 282, 283, 286, 293, 308, 310, 316, 320, 322, 326], "kickoff": [2, 217, 221], "practic": [2, 18, 20, 46, 62, 91], "minimum": [2, 29, 31, 35, 37, 41, 56, 81, 84, 89, 91, 136, 165, 169, 271], "60": [2, 7, 36, 43, 49, 51, 60, 89, 91, 96, 180], "second": [2, 5, 15, 18, 23, 24, 26, 27, 29, 30, 31, 35, 36, 37, 38, 43, 45, 48, 51, 52, 54, 55, 56, 57, 62, 73, 76, 77, 84, 85, 87, 88, 89, 91, 96, 99, 104, 116, 118, 122, 125, 134, 137, 140, 141, 146, 150, 153, 158, 159, 160, 162, 164, 180, 184, 208, 226, 230, 246, 250, 251, 254, 272, 282, 283, 297, 309, 310, 319, 320, 322], "doe": [2, 5, 6, 9, 12, 13, 16, 19, 21, 23, 26, 27, 31, 34, 35, 37, 41, 43, 45, 51, 53, 54, 55, 56, 57, 60, 62, 68, 76, 77, 78, 83, 86, 88, 89, 91, 96, 98, 99, 113, 118, 121, 122, 126, 127, 141, 146, 150, 153, 159, 160, 163, 165, 184, 191, 210, 226, 250, 270, 272, 283, 293, 296, 298, 310, 311, 313, 315, 320, 321], "non": [2, 18, 22, 24, 36, 37, 41, 47, 52, 54, 58, 62, 82, 88, 89, 91, 99, 141, 155, 159, 160, 163, 175, 180, 181, 269, 311, 316], "posit": [2, 3, 5, 6, 9, 16, 17, 18, 19, 21, 22, 23, 24, 29, 31, 35, 36, 37, 38, 40, 47, 48, 55, 66, 67, 76, 79, 80, 81, 84, 85, 88, 89, 149, 157, 158, 160, 169, 176, 185, 225, 228, 229, 230, 231, 233, 239, 240, 244, 273, 274, 281, 282, 283, 290, 295, 307, 308, 309, 313, 320, 330], "rel": [2, 5, 6, 13, 16, 17, 19, 21, 22, 23, 30, 35, 36, 37, 40, 46, 47, 48, 55, 56, 59, 73, 81, 85, 89, 91, 118, 134, 159, 160, 180, 185, 231, 233, 274, 283, 286, 327], "end": [2, 5, 6, 9, 12, 15, 17, 18, 19, 24, 25, 27, 29, 31, 35, 36, 37, 41, 43, 48, 54, 57, 59, 60, 68, 71, 74, 75, 79, 81, 84, 85, 86, 89, 91, 98, 99, 109, 114, 118, 134, 140, 159, 160, 179, 180, 188, 189, 194, 205, 217, 219, 221, 223, 231, 238, 240, 254, 272, 283, 307, 309, 313, 320], "tri": [2, 14, 20, 89, 91, 125, 184, 315], "lock": [2, 26, 36, 54, 78, 89, 91, 105, 137], "world": [2, 5, 6, 16, 21, 22, 23, 37, 85, 88, 89, 91, 97, 148, 160, 224, 260, 273, 282, 310, 328, 330], "much": [2, 6, 21, 29, 31, 36, 37, 55, 81, 82, 88, 89, 91, 227, 274], "express": [2, 5, 6, 12, 13, 24, 27, 30, 47, 48, 55, 84, 85, 88, 89, 91, 136, 149, 160, 163, 185, 207, 231, 251], "millisecond": [2, 110, 217, 221, 276], "miss": [2, 16, 83, 89, 91, 128, 134, 148, 158, 184, 212, 213, 293], "its": [2, 5, 6, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 31, 34, 35, 36, 37, 38, 40, 41, 43, 44, 45, 47, 48, 50, 55, 57, 59, 60, 62, 63, 65, 69, 73, 76, 77, 81, 83, 84, 85, 86, 87, 88, 89, 91, 92, 99, 113, 115, 116, 123, 134, 137, 141, 156, 158, 160, 184, 195, 226, 227, 234, 235, 242, 244, 272, 273, 274, 276, 281, 282, 283, 293, 296, 309, 310, 313, 314, 316, 321, 323, 324], "delai": [2, 31, 35, 54, 89, 91, 140, 217, 221, 276, 320, 322], "late": [2, 91], "tuesdai": 2, "rather": [2, 5, 18, 19, 29, 36, 40, 54, 55, 62, 68, 73, 84, 89, 91, 134, 160, 165, 305], "durat": [2, 18, 26, 29, 31, 35, 36, 37, 41, 48, 51, 52, 66, 73, 85, 88, 89, 91, 96, 141, 146, 155, 160, 172, 180, 208, 226, 228, 250, 254, 272], "creep": 2, "later": [2, 8, 12, 16, 19, 24, 26, 34, 37, 40, 41, 43, 45, 54, 57, 68, 76, 77, 80, 82, 83, 89, 91, 116, 185, 253, 283, 314], "eventu": [2, 85, 91, 99], "blackout": [2, 217, 221], "even": [2, 5, 9, 12, 14, 17, 18, 19, 29, 31, 36, 46, 54, 55, 60, 65, 70, 76, 84, 86, 87, 88, 89, 91, 96, 112, 174, 231, 269, 294, 325], "modifi": [2, 5, 9, 12, 16, 18, 29, 34, 35, 36, 37, 55, 56, 57, 60, 65, 71, 77, 86, 88, 89, 91, 96, 116, 122, 148, 165, 184, 268, 304], "wednesdai": 2, "fridai": [2, 43], "simpli": [2, 15, 16, 19, 31, 50, 52, 60, 62, 75, 78, 80, 87, 91, 101, 184, 226, 247, 283, 306, 314], "opposit": [2, 37, 91], "after": [2, 5, 6, 12, 14, 16, 17, 18, 19, 21, 22, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 42, 43, 46, 51, 54, 55, 56, 59, 60, 62, 68, 70, 71, 73, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 99, 110, 112, 116, 122, 125, 134, 140, 149, 153, 159, 160, 180, 185, 217, 221, 226, 229, 248, 251, 272, 276, 280, 281, 282, 283, 296, 297, 298, 307, 309, 314, 315, 317, 334], "still": [2, 5, 12, 14, 17, 18, 20, 29, 38, 46, 48, 51, 52, 57, 59, 82, 84, 85, 86, 88, 89, 91, 96, 118, 122, 141, 153, 226, 272, 314, 325], "pick": [2, 6, 7, 34, 37, 53, 56, 81, 83, 85, 89, 91, 234, 258, 306], "roll": [2, 29, 37, 47, 59, 60, 88, 89, 91, 149, 160, 207, 257, 334], "around": [2, 5, 7, 9, 14, 18, 19, 22, 23, 31, 33, 34, 37, 40, 47, 54, 55, 62, 64, 65, 75, 79, 81, 83, 85, 88, 89, 91, 99, 105, 160, 161, 182, 227, 231, 234, 235, 242, 244, 283, 286, 290, 297, 309, 322, 323], "face": [2, 18, 23, 37, 85, 89, 91, 229], "term": [2, 12, 28, 54, 73, 88, 89, 91, 217, 221], "invers": [2, 47, 91, 97, 149, 258], "corner": [2, 19, 22, 47, 62, 63, 64, 68, 79, 84, 91, 226, 282], "discuss": [2, 88, 282], "week": [2, 217, 221], "unit": [2, 5, 16, 19, 27, 42, 48, 55, 59, 71, 73, 85, 89, 97, 118, 141, 150, 165, 166, 169, 175, 251, 254, 298, 314, 319], "sundai": [2, 217, 221], "That": [2, 18, 19, 24, 78, 81, 89, 91, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 282, 287, 288, 289, 308, 320, 322, 334], "mean": [2, 7, 12, 16, 17, 18, 24, 27, 29, 35, 36, 37, 42, 45, 48, 56, 59, 62, 67, 73, 82, 83, 85, 89, 91, 96, 99, 155, 160, 193, 226, 231, 254, 270, 273, 283, 285, 313, 322], "offset": [2, 24, 26, 27, 29, 36, 37, 55, 56, 85, 89, 91, 134, 194, 217, 221, 273, 274, 281], "As": [2, 5, 12, 16, 18, 19, 30, 31, 33, 38, 43, 47, 48, 56, 57, 60, 62, 76, 84, 88, 89, 91, 96, 225, 226, 272, 276, 278, 281, 282, 283, 296, 313, 316, 320, 322, 330], "mind": [2, 31, 33, 34, 46], "plan": [2, 14, 18, 19, 22, 89, 91, 228, 293], "out": [2, 5, 11, 12, 13, 18, 19, 24, 25, 26, 31, 37, 41, 45, 46, 47, 49, 51, 54, 56, 57, 60, 68, 73, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 105, 111, 118, 119, 122, 125, 134, 136, 148, 149, 150, 154, 155, 160, 162, 170, 173, 179, 180, 185, 208, 224, 250, 251, 272, 276, 282, 284, 286, 290, 295, 297, 310, 312, 314, 319, 325, 330], "area": [2, 8, 9, 10, 13, 15, 16, 17, 19, 21, 22, 31, 42, 46, 53, 63, 65, 81, 97, 134, 165, 259, 290, 323], "travers": [2, 6, 9, 10, 18, 19, 20, 21, 23, 91, 99, 158], "buffer": [2, 24, 35, 39, 42, 57, 87, 88, 91, 96, 97, 106, 111, 113, 120, 159, 164, 246, 263, 273, 320], "11": [2, 3, 7, 29, 52, 59, 60, 66, 87, 88, 91, 246, 254, 310], "00am": 2, "last": [2, 14, 29, 37, 38, 42, 48, 52, 55, 78, 82, 84, 85, 87, 88, 89, 91, 96, 137, 141, 148, 158, 180, 246, 283, 307, 309, 315, 320, 322, 334], "might": [2, 12, 16, 19, 22, 24, 27, 29, 35, 37, 46, 53, 59, 62, 63, 65, 73, 81, 83, 84, 86, 87, 88, 91, 151, 270, 296, 316], "10": [2, 3, 7, 16, 24, 26, 29, 32, 40, 42, 51, 52, 59, 60, 61, 66, 68, 71, 74, 82, 83, 84, 86, 87, 88, 89, 91, 118, 137, 160, 226, 230, 246, 250, 272, 309, 310, 319, 320], "account": [2, 26, 31, 54, 68, 89, 177, 247], "estim": [2, 6, 16, 19, 21, 23, 26, 36, 47, 48, 55, 91, 134, 159, 160, 180, 208, 229, 286, 330], "idea": [2, 6, 55, 89, 91], "appli": [2, 5, 6, 16, 19, 29, 35, 36, 37, 38, 55, 62, 68, 89, 91, 96, 122, 141, 160, 213, 281], "guarante": [2, 5, 26, 45, 47, 55, 89, 91, 96, 272], "priorit": 2, "hour": [2, 26, 43, 59, 89, 91, 246, 251, 254, 314], "try": [2, 5, 7, 9, 19, 21, 23, 26, 29, 34, 36, 42, 61, 70, 76, 82, 84, 85, 86, 87, 89, 91, 99, 112, 116, 118, 126, 134, 137, 141, 148, 158, 159, 160, 162, 163, 175, 184, 246, 251, 257, 272, 282, 310, 313, 315, 317, 325], "minut": [2, 3, 26, 29, 30, 31, 35, 37, 82, 86, 89, 91, 96, 219, 246, 251, 254, 307, 322], "apart": [2, 34, 36, 37, 52, 56, 88, 91], "wait": [2, 12, 15, 41, 45, 52, 57, 81, 83, 84, 85, 86, 87, 88, 89, 91, 99, 104, 116, 122, 137, 141, 153, 155, 159, 160, 162, 164, 179, 180, 184, 226, 276, 279, 309, 314], "55am": 2, "leav": [2, 9, 10, 18, 22, 46, 77, 87, 89, 91, 96, 99, 116, 123, 323], "5": [2, 3, 5, 7, 14, 26, 30, 35, 37, 52, 54, 56, 59, 60, 61, 66, 67, 68, 70, 75, 76, 81, 82, 83, 84, 86, 88, 91, 96, 101, 110, 125, 134, 140, 141, 160, 180, 214, 219, 226, 227, 228, 233, 246, 250, 254, 272, 282, 283, 296, 298, 308, 310, 319, 322, 334], "intent": [2, 34, 89, 175], "design": [2, 5, 16, 22, 24, 25, 27, 31, 37, 43, 44, 46, 54, 58, 64, 65, 66, 78, 87, 89, 91, 160, 234, 242], "interfer": [2, 7, 89], "normal": [2, 9, 15, 16, 18, 35, 36, 37, 47, 55, 65, 66, 83, 86, 89, 91, 149, 226, 228, 282, 310], "expect": [2, 16, 19, 23, 29, 43, 44, 45, 55, 56, 57, 70, 73, 76, 77, 87, 88, 89, 91, 96, 123, 128, 134, 137, 141, 153, 155, 193, 194, 210, 251, 252, 281, 284, 298, 320, 321, 322, 325, 334], "state": [2, 3, 5, 12, 13, 16, 18, 20, 21, 23, 24, 26, 30, 31, 35, 46, 50, 52, 54, 57, 59, 77, 82, 84, 85, 96, 97, 111, 116, 122, 123, 126, 127, 134, 137, 141, 143, 153, 155, 158, 159, 160, 173, 175, 180, 210, 224, 228, 251, 259, 260, 262, 266, 269, 283, 293, 294, 313, 330], "accord": [2, 37, 89, 91, 116, 228], "difficult": [2, 12, 21, 23, 29, 36, 46, 73, 81, 84, 89, 91, 282, 315], "veri": [2, 9, 12, 18, 19, 23, 30, 35, 36, 41, 48, 54, 62, 65, 68, 73, 78, 88, 89, 91, 233, 251, 273, 282, 313, 314, 321], "unlik": [2, 26, 32, 35, 46, 56, 87, 91, 107, 210, 333], "disrupt": 2, "8": [2, 3, 7, 27, 37, 59, 60, 65, 66, 79, 81, 82, 83, 85, 86, 87, 88, 89, 91, 158, 226, 283, 319, 334], "increas": [2, 36, 54, 65, 78, 84, 87, 88, 89, 91, 141, 320, 322], "elig": 2, "dispatch": [2, 217, 221, 303], "b": [2, 9, 12, 14, 19, 24, 31, 38, 47, 56, 60, 66, 82, 88, 89, 91, 128, 137, 149, 215, 293, 309, 331, 334], "9": [2, 3, 7, 31, 56, 59, 60, 66, 82, 86, 87, 88, 89, 91, 282, 283], "determin": [2, 12, 13, 14, 15, 18, 20, 21, 22, 23, 26, 27, 29, 36, 37, 41, 45, 46, 47, 52, 55, 57, 59, 75, 76, 81, 83, 89, 91, 96, 99, 111, 112, 113, 134, 136, 141, 149, 150, 158, 184, 217, 221, 226, 251, 272, 273, 282, 310, 313, 314, 315, 317, 320, 326], "stalest": 2, "steadi": [2, 37, 91, 228, 321], "furthest": [2, 91], "past": [2, 18, 19, 51, 55, 75, 84, 89, 91, 99, 116, 226, 272], "fifteen": 2, "ago": [2, 83, 88, 91, 246, 254], "two": [2, 12, 15, 18, 19, 20, 21, 24, 26, 29, 30, 34, 35, 36, 37, 40, 42, 44, 45, 47, 48, 51, 54, 56, 57, 58, 59, 60, 62, 65, 66, 68, 70, 75, 76, 78, 79, 80, 81, 84, 85, 87, 88, 89, 91, 128, 141, 149, 158, 170, 174, 217, 221, 226, 230, 246, 247, 251, 269, 272, 273, 281, 282, 283, 286, 296, 298, 313, 315, 317, 320, 322, 324], "staler": 2, "never": [2, 7, 26, 27, 31, 34, 48, 54, 66, 73, 91, 159, 274], "been": [2, 4, 5, 9, 14, 16, 18, 19, 20, 21, 23, 24, 26, 31, 33, 34, 37, 38, 43, 45, 46, 48, 52, 54, 56, 57, 59, 60, 76, 77, 84, 87, 88, 89, 91, 99, 112, 116, 118, 125, 136, 141, 143, 158, 159, 173, 180, 189, 201, 205, 221, 223, 247, 272, 273, 281, 282, 284, 296, 313, 314, 316, 320], "befor": [2, 9, 12, 18, 19, 23, 24, 26, 29, 31, 32, 33, 34, 35, 37, 38, 43, 46, 52, 55, 57, 59, 62, 71, 75, 76, 81, 82, 83, 84, 85, 86, 88, 89, 91, 99, 118, 122, 125, 137, 141, 148, 155, 158, 159, 160, 164, 180, 193, 217, 219, 221, 224, 225, 226, 228, 229, 230, 232, 233, 236, 237, 239, 241, 243, 252, 268, 272, 281, 282, 283, 306, 310, 313, 314, 315, 320, 322, 325], "chosen": [2, 54, 57, 91, 134, 160, 309, 315], "tie": 2, "ti": [2, 63, 91], "whichev": [2, 37, 48, 52, 91], "come": [2, 9, 19, 34, 37, 45, 51, 54, 60, 62, 65, 70, 71, 83, 85, 87, 88, 89, 91, 160, 173, 293], "alphabet": [2, 91], "side": [2, 21, 31, 34, 37, 55, 63, 64, 70, 89, 160, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "effect": [2, 18, 23, 31, 36, 37, 38, 48, 59, 73, 89, 91, 272, 312], "worth": [2, 89], "shed": 2, "strang": 2, "happen": [2, 16, 18, 19, 30, 45, 51, 54, 56, 60, 62, 74, 82, 84, 88, 89, 91, 112, 122, 134, 136, 141, 154, 225], "situat": [2, 5, 14, 23, 31, 88, 89, 91], "reason": [2, 12, 15, 16, 18, 22, 26, 27, 34, 54, 81, 83, 88, 89, 91, 217, 221, 282, 313], "earliest": [2, 91], "avail": [2, 5, 6, 11, 16, 18, 19, 20, 21, 22, 23, 29, 31, 33, 34, 35, 41, 43, 48, 50, 51, 53, 54, 55, 56, 57, 59, 60, 62, 64, 65, 68, 71, 76, 82, 84, 86, 87, 88, 89, 91, 99, 116, 121, 122, 137, 141, 145, 151, 159, 168, 169, 176, 180, 219, 223, 226, 234, 246, 251, 259, 260, 263, 266, 269, 276, 281, 283, 290, 296, 313, 314, 316, 325], "opportun": [2, 19], "back": [2, 8, 9, 10, 12, 17, 18, 19, 29, 36, 37, 38, 41, 48, 54, 56, 57, 58, 60, 65, 66, 79, 81, 82, 83, 84, 85, 86, 87, 89, 91, 99, 148, 160, 175, 217, 221, 225, 226, 272, 282, 283, 294, 295, 296, 307, 314, 322, 334], "suppos": [2, 12, 14, 91, 282], "up": [2, 6, 7, 9, 15, 16, 18, 19, 23, 24, 26, 27, 29, 31, 35, 36, 37, 38, 44, 45, 46, 47, 53, 54, 56, 57, 58, 60, 62, 63, 65, 66, 70, 71, 76, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 91, 96, 118, 121, 157, 160, 180, 184, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 251, 253, 256, 257, 258, 270, 273, 281, 287, 288, 289, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 313, 315, 321, 323, 329, 334], "accomplish": [2, 5, 18, 22, 89, 91, 104, 224, 279], "thursdai": [2, 43], "saturdai": 2, "scenario": [2, 30, 35, 48, 89, 91, 267], "plai": [2, 8, 10, 12, 13, 24, 29, 31, 33, 35, 36, 79, 84, 89, 91, 168, 210, 225, 268, 294, 303, 319], "24": [2, 22, 49, 60, 66, 68, 86, 87, 89, 310], "so": [2, 5, 12, 15, 18, 19, 20, 21, 22, 24, 27, 29, 31, 32, 33, 37, 41, 42, 43, 45, 47, 54, 55, 56, 57, 59, 62, 70, 73, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 116, 118, 137, 141, 153, 160, 165, 176, 180, 185, 210, 226, 227, 228, 233, 249, 250, 254, 257, 269, 273, 274, 282, 283, 290, 297, 310, 313, 315, 316, 329, 333, 334], "abl": [2, 5, 16, 18, 19, 23, 24, 31, 32, 34, 35, 43, 46, 54, 55, 56, 57, 59, 78, 79, 83, 86, 88, 89, 91, 96, 116, 118, 276, 281, 283, 310, 314, 315, 317], "overdu": 2, "clock": [2, 26, 36, 51, 54, 57, 59, 60, 73, 88, 91, 96, 109, 111, 118, 134, 137, 141, 159, 180, 208, 254, 326], "tick": [2, 13, 24, 56, 89, 91, 118, 213], "59pm": 2, "undesir": 2, "avoid": [2, 7, 20, 22, 26, 31, 34, 35, 36, 38, 48, 63, 65, 73, 83, 89, 91, 184, 225, 272, 273, 298, 310], "extend": [2, 10, 16, 19, 29, 31, 35, 37, 41, 50, 57, 62, 65, 89, 91, 146, 315], "until": [2, 9, 18, 24, 27, 30, 31, 34, 35, 36, 43, 44, 48, 57, 60, 77, 81, 83, 84, 85, 87, 88, 89, 91, 99, 111, 114, 116, 140, 141, 155, 159, 160, 163, 164, 172, 179, 180, 184, 208, 226, 246, 254, 273, 279, 295, 314], "desir": [2, 5, 12, 18, 19, 21, 30, 31, 35, 36, 37, 48, 52, 57, 59, 62, 68, 71, 79, 84, 89, 91, 125, 137, 148, 160, 172, 175, 185, 212, 217, 219, 221, 223, 268, 272, 282, 283, 295, 309, 310, 313, 334], "sai": [2, 30, 34, 35, 45, 47, 56, 88, 89, 91, 160, 210], "ad": [2, 4, 8, 12, 14, 18, 23, 29, 35, 37, 38, 40, 41, 51, 55, 56, 60, 62, 63, 67, 76, 86, 91, 96, 116, 118, 120, 159, 160, 164, 184, 185, 193, 194, 226, 246, 252, 254, 273, 276, 295, 298, 314], "altern": [2, 14, 17, 30, 42, 52, 89, 91, 113, 159, 248, 249, 250, 299, 300, 301, 302, 303, 304, 305, 307, 315], "noon": 2, "implicit": [2, 91], "race": [2, 91], "condit": [2, 12, 18, 20, 21, 24, 31, 45, 88, 134, 160], "due": [2, 16, 18, 36, 50, 54, 60, 62, 73, 84, 87, 88, 89, 91, 96, 126, 141, 150, 155, 165, 272, 282, 312, 313, 314, 320, 322, 324], "poll": [2, 15, 26, 55, 73, 84, 85, 91, 305, 329], "pass": [2, 16, 18, 19, 35, 44, 48, 52, 54, 57, 59, 62, 71, 76, 78, 80, 85, 87, 88, 89, 91, 95, 96, 99, 105, 125, 134, 136, 137, 141, 148, 152, 153, 154, 160, 163, 164, 165, 180, 249, 251, 272, 276, 282, 285, 294, 296, 306, 312, 313, 315, 316, 320, 322, 323, 327, 334], "three": [2, 5, 6, 16, 17, 27, 29, 31, 35, 41, 54, 77, 80, 85, 91, 149, 160, 281, 282, 303, 312, 320, 322], "c": [2, 7, 12, 31, 48, 56, 60, 61, 62, 66, 68, 71, 75, 81, 82, 84, 85, 87, 88, 91, 111, 128, 149, 247, 310, 315, 317, 319, 323, 325], "recal": [2, 85], "howev": [2, 5, 7, 8, 12, 15, 18, 19, 21, 22, 23, 26, 32, 35, 36, 47, 52, 54, 57, 59, 63, 68, 73, 87, 89, 91, 116, 128, 141, 153, 251, 272, 273, 276, 282, 283, 314, 315, 316, 317], "determinist": [2, 56, 78], "although": [2, 26, 43, 54, 89], "anyth": [2, 22, 46, 57, 60, 80, 84, 85, 91, 99, 116, 141], "across": [2, 18, 19, 21, 26, 34, 54, 55, 57, 60, 62, 63, 83, 91, 96, 153, 287, 313, 314], "coordin": [2, 6, 11, 16, 17, 19, 40, 41, 47, 53, 55, 83, 84, 88, 89, 91, 136, 141, 149, 160, 169, 185, 251, 266, 273, 281, 282, 283, 285, 286, 296, 330], "univers": [2, 22], "utc": [2, 129], "yet": [2, 16, 60, 88, 89, 91, 141, 153, 159, 163, 180, 188, 205, 226], "slate": [2, 89, 91], "futur": [2, 17, 26, 35, 37, 43, 48, 51, 55, 56, 68, 81, 83, 88, 89, 91, 96, 105, 112, 116, 134, 137, 140, 160, 161, 162, 184, 272, 306, 314], "pair": [3, 27, 36, 37, 45, 66, 75, 91, 112, 116, 164, 193, 194, 198, 215, 283], "stereo": [3, 89], "black": [3, 36, 91, 320], "white": [3, 22, 34, 36, 89, 91, 177, 286, 320], "video": [3, 24, 30, 62, 76, 85, 86, 89, 91, 251, 266, 315, 331], "2": [3, 4, 5, 7, 12, 14, 16, 23, 26, 29, 34, 35, 37, 40, 41, 43, 45, 49, 52, 56, 57, 58, 59, 60, 61, 62, 66, 68, 70, 71, 74, 78, 80, 81, 83, 84, 85, 86, 88, 91, 96, 116, 122, 125, 128, 129, 132, 134, 136, 140, 141, 149, 155, 158, 160, 169, 211, 214, 215, 226, 234, 235, 242, 246, 273, 283, 290, 293, 296, 298, 303, 306, 308, 313, 316, 319, 320, 334], "actuat": [3, 45, 50, 55, 89, 91], "knee": [3, 22, 35, 37, 47, 48, 65, 91], "hx": [3, 29, 50, 91], "hy": [3, 29, 50, 91], "plane": [3, 6, 37, 47, 65, 89, 136, 160], "rotat": [3, 5, 31, 35, 36, 37, 47, 48, 81, 84, 85, 88, 89, 91, 149, 151, 225, 243, 276, 281, 282, 286, 296, 330, 334], "degre": [3, 7, 16, 37, 56, 73, 84, 89, 91, 176, 276], "freedom": [3, 7, 16, 31, 91], "limit": [3, 7, 9, 20, 26, 29, 35, 36, 43, 45, 48, 50, 54, 56, 59, 62, 65, 66, 85, 89, 109, 126, 146, 150, 153, 228, 241, 249, 273, 293, 314], "axi": [3, 5, 6, 16, 37, 47, 80, 84, 88, 89, 91, 149, 243, 282, 286, 334], "dof": [3, 91], "leg": [3, 30, 31, 35, 36, 37, 47, 48, 50, 52, 89], "x": [3, 5, 6, 7, 16, 17, 19, 29, 31, 32, 34, 36, 37, 38, 40, 47, 52, 55, 56, 57, 59, 62, 71, 80, 82, 83, 84, 85, 86, 88, 89, 91, 95, 136, 149, 157, 160, 169, 185, 207, 243, 281, 282, 283, 286, 296, 308, 314, 319, 323, 334], "45": [3, 7, 22, 49, 54, 91, 247], "vertic": [3, 16, 22, 31, 35, 36, 37, 47, 91, 169, 230, 282], "intern": [3, 16, 20, 22, 23, 27, 46, 48, 54, 55, 59, 60, 62, 73, 89, 91, 99, 116, 118, 125, 136, 137, 141, 154, 166, 179, 180, 282], "extern": [3, 20, 21, 27, 43, 46, 55, 57, 59, 62, 84, 87, 89, 91, 151, 159, 160, 228, 251, 257, 276, 298, 315, 317, 321, 323, 334], "y": [3, 5, 17, 19, 29, 31, 36, 37, 38, 47, 55, 59, 60, 62, 78, 80, 83, 84, 85, 86, 89, 91, 136, 149, 157, 160, 169, 185, 207, 243, 251, 281, 282, 283, 286, 296, 308, 319, 323, 334], "91": [3, 49], "50": [3, 19, 49, 50, 59, 60, 62, 68, 70, 71, 78, 86, 91, 184, 226, 249, 297, 310], "bia": 3, "flexion": 3, "extens": [3, 7, 11, 16, 30, 35, 58, 71, 86, 91, 116, 117, 136, 228, 248, 249, 251, 252, 265, 266, 306, 307, 314, 315], "14": [3, 65, 66, 74, 82, 86, 87, 88, 91, 228, 298, 310], "160": [3, 27, 91, 188], "straight": [3, 16, 19, 36, 84, 85, 91, 233, 283], "rang": [3, 9, 16, 29, 30, 31, 35, 36, 43, 50, 54, 55, 58, 62, 65, 66, 78, 83, 89, 91, 114, 150, 169, 176, 180, 228, 273], "front": [3, 5, 15, 31, 35, 36, 37, 47, 65, 81, 82, 84, 85, 89, 91, 160, 229, 266, 276, 308, 320, 321], "hind": [3, 36, 37, 91], "left": [3, 5, 18, 31, 34, 36, 37, 38, 40, 42, 46, 47, 56, 67, 70, 76, 79, 81, 88, 89, 91, 96, 137, 160, 276, 282, 286, 295, 313, 315, 321, 330, 334], "right": [3, 12, 18, 24, 31, 34, 35, 36, 37, 38, 41, 42, 55, 61, 62, 65, 66, 67, 68, 80, 81, 82, 84, 85, 88, 89, 91, 112, 113, 115, 137, 159, 160, 184, 225, 226, 273, 276, 282, 286, 295, 309, 316, 330, 331, 334], "fl": [3, 29, 36, 91], "hl": [3, 29, 36, 91], "complet": [3, 7, 12, 13, 15, 16, 17, 18, 22, 24, 26, 29, 30, 31, 34, 35, 37, 38, 41, 47, 52, 54, 56, 57, 59, 66, 70, 73, 76, 77, 79, 82, 84, 86, 88, 89, 96, 104, 114, 116, 123, 126, 134, 137, 141, 151, 158, 160, 172, 179, 224, 226, 267, 272, 283, 299, 300, 301, 302, 303, 304, 305, 310, 313, 315, 325], "look": [3, 5, 12, 18, 23, 29, 35, 37, 56, 66, 68, 76, 77, 80, 81, 82, 83, 85, 86, 88, 89, 91, 121, 137, 225, 226, 228, 268, 279, 282, 288, 299, 300, 301, 303, 304, 305, 307, 310, 313, 315, 316], "kn": [3, 29, 50, 91], "protobuf": [3, 12, 27, 29, 30, 31, 35, 44, 45, 54, 56, 57, 76, 77, 80, 82, 83, 84, 86, 87, 91, 94, 95, 96, 97, 99, 112, 113, 116, 118, 134, 136, 137, 141, 142, 149, 153, 154, 158, 160, 164, 166, 173, 180, 184, 187, 190, 196, 197, 198, 208, 209, 213, 215, 246, 251, 283, 292, 314, 315, 327], "snippet": [3, 24, 46, 59, 247], "show": [3, 6, 18, 19, 24, 26, 27, 29, 31, 35, 37, 42, 44, 52, 53, 54, 55, 56, 57, 59, 60, 62, 70, 80, 82, 84, 86, 87, 88, 89, 91, 111, 134, 158, 165, 184, 227, 231, 234, 237, 240, 241, 242, 246, 247, 250, 251, 253, 258, 260, 261, 262, 263, 264, 265, 266, 267, 268, 270, 271, 274, 276, 282, 283, 286, 287, 289, 308, 310, 311, 313, 315, 318, 322, 324, 327, 328, 330], "get_robot_st": [3, 77, 85, 88, 162, 278], "joint_stat": [3, 91], "21174180507659912": 3, "veloc": [3, 21, 24, 36, 37, 48, 50, 55, 85, 88, 89, 91, 95, 128, 149, 160, 176, 228, 241, 243], "003905495163053274": 3, "acceler": [3, 5, 36, 48, 89, 91, 160, 241], "1059951782226562": 3, "load": [3, 12, 13, 16, 22, 24, 29, 30, 33, 34, 35, 38, 48, 62, 78, 80, 82, 83, 85, 89, 91, 96, 107, 163, 192, 210, 226, 248, 249, 251, 268, 269, 283, 284, 285, 293, 296, 297, 316, 319, 327], "1": [3, 5, 12, 14, 16, 19, 23, 26, 27, 29, 31, 34, 35, 36, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 54, 56, 57, 59, 60, 62, 66, 68, 70, 71, 73, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 116, 118, 125, 134, 136, 137, 140, 141, 146, 149, 155, 158, 159, 160, 163, 164, 168, 169, 171, 172, 176, 185, 199, 211, 215, 226, 228, 229, 233, 246, 250, 273, 274, 281, 283, 295, 296, 303, 306, 308, 310, 313, 316, 319, 320, 322, 334], "86274254322052": 3, "gamma": [3, 89, 91], "length": [3, 19, 35, 36, 55, 73, 85, 89, 91, 110, 149, 160, 163, 164, 184, 208], "1100": 3, "mm": [3, 7, 91, 208, 251], "43": [3, 49], "width": [3, 31, 36, 37, 42, 60, 81, 250, 315], "500": [3, 84, 91, 308], "19": [3, 66, 83, 86, 87, 89, 91], "7": [3, 5, 51, 59, 60, 62, 66, 74, 78, 81, 82, 86, 87, 89, 91, 141, 169, 250, 273, 283, 320, 322, 334], "height": [3, 7, 16, 19, 22, 36, 37, 42, 55, 81, 88, 89, 91, 149, 160, 282, 283, 285, 286, 315, 330, 334], "stand": [3, 5, 15, 24, 26, 29, 31, 34, 35, 36, 37, 38, 44, 55, 60, 65, 66, 79, 83, 84, 85, 88, 89, 91, 160, 179, 225, 230, 232, 235, 236, 237, 238, 239, 240, 241, 243, 257, 273, 283, 288, 295, 309, 310, 321, 323, 331, 334], "840": 3, "33": [3, 49], "sit": [3, 9, 12, 15, 24, 29, 31, 34, 35, 38, 45, 55, 65, 66, 79, 88, 89, 91, 118, 125, 155, 160, 179, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 257, 283, 288, 289, 290, 295, 309, 321, 323, 331, 334], "191": 3, "net": [3, 61, 91], "weight": [3, 7, 37, 81, 82, 148, 248], "32": [3, 27, 49, 56, 91], "kg": [3, 7, 65, 91], "71": [3, 49, 298], "lb": [3, 334], "speed": [3, 7, 13, 15, 17, 23, 24, 29, 35, 36, 37, 57, 70, 85, 89, 91, 134, 158, 273, 298], "6": [3, 5, 7, 14, 16, 26, 29, 36, 51, 52, 59, 60, 62, 66, 67, 74, 75, 81, 82, 84, 85, 87, 88, 89, 91, 141, 160, 283, 334], "m": [3, 5, 7, 26, 27, 36, 49, 57, 60, 62, 75, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 160, 208, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "ingress": [3, 7, 64], "protect": [3, 5, 7, 64, 89, 91, 116], "ip54": [3, 63, 64], "oper": [3, 4, 5, 7, 8, 9, 11, 12, 13, 18, 19, 20, 21, 23, 24, 25, 26, 36, 46, 51, 52, 54, 55, 59, 60, 63, 66, 73, 76, 78, 81, 87, 88, 89, 91, 111, 116, 118, 120, 125, 134, 159, 176, 254, 269, 273, 292, 295, 307, 313, 315, 318, 320, 322, 324, 331], "20c": 3, "45c": 3, "slope": [3, 91], "30": [3, 15, 36, 49, 57, 60, 77, 86, 87, 88, 89, 91, 116, 122, 123, 140, 153, 155, 160, 310], "stairwai": 3, "stair": [3, 13, 18, 19, 21, 55, 65, 160, 225, 334], "meet": [3, 6, 22, 56, 84, 284], "u": [3, 22, 61, 68, 73, 76, 77, 78, 82, 83, 91, 136, 149, 282, 298], "standard": [3, 9, 12, 16, 24, 29, 36, 37, 44, 54, 57, 58, 59, 62, 63, 68, 71, 76, 81, 84, 88, 89, 91, 165, 272, 313, 318], "typic": [3, 8, 16, 20, 22, 23, 26, 43, 47, 52, 54, 57, 59, 60, 65, 88, 91, 112, 118, 134, 141, 163, 254, 315], "rise": [3, 65, 66, 91, 298], "max": [3, 5, 7, 9, 35, 36, 42, 48, 49, 56, 60, 89, 91, 95, 107, 110, 112, 117, 119, 126, 155, 158, 159, 163, 164, 166, 171, 179, 184, 210, 219, 223, 228, 298, 320, 322], "300": [3, 82, 83], "lux": 3, "batteri": [3, 9, 12, 13, 18, 24, 31, 46, 48, 55, 60, 62, 66, 77, 78, 79, 80, 87, 88, 89, 91, 155, 160, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 251, 288, 289, 309, 313, 331, 334], "capac": [3, 7, 65], "605": 3, "wh": 3, "voltag": [3, 60, 66, 89, 91, 250], "58": [3, 49, 56, 66, 86], "8v": [3, 66], "runtim": [3, 19, 89, 91, 111, 282, 315], "90": [3, 7, 49, 91, 276, 307], "standbi": 3, "time": [3, 5, 9, 12, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 27, 29, 30, 31, 36, 37, 38, 41, 43, 44, 46, 47, 48, 51, 52, 54, 55, 56, 57, 60, 62, 65, 66, 68, 70, 73, 75, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 97, 98, 99, 101, 104, 109, 110, 111, 114, 116, 118, 123, 125, 126, 134, 136, 137, 140, 141, 146, 148, 154, 155, 158, 159, 160, 162, 163, 164, 179, 185, 208, 210, 217, 219, 221, 223, 225, 226, 227, 228, 251, 260, 272, 276, 280, 281, 282, 286, 291, 295, 297, 306, 307, 309, 312, 313, 314, 319, 320, 322, 325, 326, 330, 331, 334], "180": [3, 37, 56, 63, 91, 276], "charger": [3, 89], "400w": 3, "charg": [3, 13, 15, 24, 31, 48, 55, 66, 85, 88, 89, 91], "current": [3, 5, 6, 9, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 31, 33, 35, 36, 37, 38, 43, 45, 47, 51, 52, 55, 59, 62, 66, 77, 82, 84, 85, 88, 89, 91, 96, 98, 99, 106, 111, 116, 118, 123, 125, 134, 135, 141, 149, 150, 155, 157, 158, 159, 160, 162, 163, 168, 169, 176, 178, 179, 180, 194, 205, 208, 210, 217, 221, 233, 246, 247, 249, 251, 254, 268, 271, 272, 274, 276, 277, 278, 283, 287, 293, 298, 303, 311, 313, 314, 323, 325], "7a": 3, "120": [3, 319], "port": [3, 7, 38, 44, 46, 54, 58, 60, 64, 68, 70, 71, 76, 77, 78, 83, 85, 86, 88, 89, 91, 100, 110, 122, 155, 159, 164, 184, 226, 248, 249, 251, 296, 297, 310, 313, 314, 315, 316, 325], "150w": [3, 66], "project": [3, 27, 47, 55, 67, 68, 91, 266], "360": [3, 38, 57, 89, 91, 176, 334], "13": [3, 52, 59, 66, 86, 88, 91, 270], "ft": 3, "802": 3, "1000base": [3, 66], "synchron": [4, 16, 26, 28, 31, 32, 37, 55, 65, 66, 85, 89, 91, 117, 118, 126, 146, 160, 180], "combin": [4, 5, 12, 23, 24, 26, 29, 31, 32, 35, 36, 37, 41, 43, 54, 55, 59, 60, 62, 65, 66, 77, 85, 88, 89, 91, 160, 270, 284, 314, 334], "mobil": [4, 26, 52, 65, 85, 88, 91, 160, 258], "new": [4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 29, 31, 33, 34, 35, 37, 41, 43, 44, 45, 46, 47, 48, 52, 53, 54, 55, 56, 59, 60, 62, 68, 71, 73, 75, 76, 78, 79, 81, 82, 83, 84, 85, 86, 88, 91, 95, 96, 99, 101, 105, 116, 122, 125, 127, 131, 132, 134, 141, 146, 148, 153, 159, 184, 193, 194, 217, 221, 251, 252, 276, 282, 283, 297, 306, 310, 313, 314, 316, 320, 325], "manipul": [4, 5, 48, 54, 58, 81, 83, 91, 97, 160, 242, 258, 282], "door": [4, 5, 13, 14, 18, 55, 97, 226, 258, 282, 298], "surfac": [4, 6, 16, 18, 63, 67, 88, 89, 91, 97, 258, 284], "contact": [4, 5, 6, 17, 18, 29, 30, 35, 36, 48, 55, 63, 65, 75, 76, 77, 87, 89, 97, 160, 250, 258], "gripper": [5, 6, 30, 31, 35, 36, 52, 84, 85, 88, 91, 97, 160, 179, 233, 235, 243, 258, 266, 306], "incorpor": [5, 64, 89, 224], "you": [5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24, 27, 30, 31, 32, 33, 34, 35, 37, 38, 40, 45, 46, 47, 51, 53, 55, 56, 57, 59, 60, 62, 65, 68, 70, 71, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 116, 125, 131, 134, 149, 153, 164, 175, 208, 210, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 249, 251, 253, 254, 256, 268, 270, 272, 273, 274, 276, 281, 282, 283, 285, 287, 288, 289, 290, 293, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 319, 321, 322, 323, 325, 327, 330, 333, 334], "By": [5, 12, 26, 31, 37, 43, 45, 47, 57, 59, 60, 62, 68, 73, 75, 89, 91, 96, 136, 159, 160, 227, 273, 276, 282, 315, 330], "pack": [5, 47, 56, 66, 83, 84, 91, 116], "individu": [5, 16, 19, 29, 31, 35, 36, 40, 43, 45, 52, 57, 60, 62, 77, 80, 89, 91, 96, 185, 251, 281, 282, 315], "singl": [5, 12, 13, 18, 22, 24, 26, 29, 31, 35, 37, 40, 42, 43, 45, 46, 47, 52, 54, 56, 60, 62, 67, 76, 81, 88, 89, 91, 96, 99, 116, 118, 123, 125, 128, 137, 141, 149, 160, 163, 177, 193, 202, 221, 270, 276, 282, 314, 333], "arriv": [5, 16, 85, 91, 99], "_": [5, 14, 16, 18, 19, 29, 30, 32, 35, 36, 37, 40, 41, 43, 47, 48, 50, 54, 55, 56, 57, 59, 60, 61, 62, 66, 68, 70, 73, 76, 77, 78, 79, 80, 81, 82, 84, 86, 87, 88, 89, 91, 112, 225, 226, 227, 228, 247, 249, 250, 251, 252, 254, 268, 270, 272, 276, 281, 282, 283, 284, 285, 286, 290, 293, 294, 295, 297, 306, 307, 310, 311, 312, 313, 314, 315, 316, 320, 322, 324, 325, 327], "ignor": [5, 16, 18, 29, 31, 35, 36, 37, 45, 46, 62, 85, 89, 91, 101, 134, 137, 160, 169], "arm_command": [5, 85, 160], "mobilitycommand": [5, 24], "mobility_command": [5, 24, 89, 160], "grippercommand": 5, "gripper_command": [5, 85, 160], "effector": [5, 6, 89, 91, 231, 238, 240], "space": [5, 6, 19, 22, 23, 29, 30, 31, 33, 34, 35, 43, 47, 56, 63, 65, 67, 73, 84, 89, 91, 160, 176, 227, 228, 229, 231, 234, 235, 242, 243, 269, 282, 286, 295, 323, 331], "mix": [5, 62, 91, 96], "wrench": [5, 89, 160], "trajectori": [5, 6, 16, 29, 30, 37, 48, 52, 84, 88, 89, 160, 224, 227, 228, 230, 236, 240, 258, 267, 281], "angl": [5, 29, 31, 37, 49, 50, 84, 85, 86, 89, 91, 134, 149, 160, 176, 207, 228, 289], "configur": [5, 6, 15, 22, 29, 31, 33, 34, 35, 37, 41, 48, 50, 51, 54, 55, 57, 58, 61, 68, 69, 71, 76, 78, 86, 87, 89, 91, 98, 99, 101, 106, 111, 125, 134, 137, 155, 157, 162, 163, 174, 179, 219, 226, 233, 247, 249, 251, 265, 272, 273, 276, 281, 289, 293, 296, 310, 312, 314, 315, 316, 318, 320, 321, 322, 334], "held": [5, 29, 52, 91, 140, 159], "hold": [5, 7, 37, 43, 82, 85, 87, 89, 91, 111, 160, 231, 235, 273, 322], "place": [5, 6, 10, 13, 19, 20, 21, 23, 24, 34, 36, 37, 38, 54, 56, 61, 80, 81, 82, 84, 85, 89, 91, 160, 165, 184, 208, 226, 282, 295], "subset": [5, 36, 41, 43, 52, 62, 89, 91, 320, 322], "fill": [5, 18, 45, 46, 47, 57, 76, 80, 83, 85, 89, 91, 96, 123, 134, 136, 154, 160, 162, 173, 180, 314], "overwritten": [5, 91, 155, 314], "consid": [5, 12, 18, 19, 22, 23, 31, 36, 46, 48, 52, 55, 56, 63, 65, 66, 73, 83, 87, 89, 91, 112, 134, 141, 143, 160, 219, 233, 297, 320, 322], "pseudo": [5, 91], "stow": [5, 84, 85, 89, 91, 160, 243, 258], "close": [5, 14, 17, 19, 20, 22, 23, 29, 31, 35, 82, 83, 85, 89, 91, 118, 148, 160, 189, 193, 226, 228, 243, 257, 273, 283], "se2_trajectory_request": [5, 91], "receiv": [5, 6, 9, 18, 26, 35, 44, 45, 48, 51, 52, 54, 57, 59, 87, 88, 89, 91, 96, 99, 101, 106, 110, 118, 122, 125, 134, 159, 160, 163, 164, 184, 229, 272, 273, 281, 298, 301, 310, 312, 320, 322], "write": [5, 10, 12, 19, 20, 24, 27, 41, 43, 44, 46, 57, 60, 62, 75, 76, 77, 81, 83, 84, 86, 91, 95, 111, 114, 116, 117, 122, 125, 136, 153, 181, 189, 191, 193, 194, 201, 204, 219, 253, 258, 261, 262, 270, 272, 293, 306, 314, 325], "se2": [5, 91, 128], "similarli": [5, 18, 47, 89, 91, 136], "partial": [5, 12, 60, 86, 91, 282], "fullbodycommand": 5, "empti": [5, 21, 23, 29, 31, 35, 40, 46, 52, 56, 79, 82, 84, 88, 89, 96, 123, 128, 158, 163, 180, 193, 297, 310, 316, 319], "auto": [5, 6, 30, 35, 37, 44, 46, 51, 81, 91, 97, 140, 160, 169, 217, 221, 267, 276], "safe_stop": 5, "With": [5, 26, 31, 37, 53, 62, 85, 87, 89, 91, 95, 184, 251, 266, 281], "introduct": [5, 224], "insid": [5, 13, 16, 18, 36, 40, 55, 56, 62, 65, 86, 87, 91, 99, 149, 226, 282, 296, 307, 314], "respect": [5, 13, 16, 20, 23, 29, 37, 43, 47, 48, 55, 56, 88, 89, 91, 149, 160, 185, 258, 267, 281, 282, 296, 301, 316], "There": [5, 12, 15, 16, 18, 19, 21, 26, 27, 29, 30, 31, 35, 40, 42, 44, 45, 46, 51, 52, 54, 55, 57, 60, 68, 81, 82, 87, 88, 89, 91, 134, 141, 159, 160, 210, 230, 234, 235, 237, 242, 246, 251, 273, 281, 283, 296, 310, 315, 316, 327], "fall": [5, 23, 34, 35, 37, 43, 63, 65, 66, 85, 89, 91, 225, 293], "under": [5, 9, 15, 31, 34, 56, 61, 68, 70, 80, 82, 89, 91, 164, 193, 225, 268, 310, 311, 312], "banner": 5, "directli": [5, 16, 17, 18, 19, 24, 30, 31, 32, 37, 41, 42, 46, 53, 54, 75, 77, 79, 83, 85, 87, 89, 91, 113, 115, 119, 141, 159, 160, 163, 270, 282, 293, 297, 302, 310, 313, 320], "orient": [5, 6, 16, 23, 24, 29, 36, 37, 47, 55, 66, 88, 89, 91, 148, 158, 160, 179, 207, 276, 282, 330], "should": [5, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 43, 44, 45, 46, 47, 52, 54, 55, 56, 57, 59, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 73, 76, 77, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 95, 96, 99, 100, 112, 115, 116, 118, 122, 125, 134, 137, 140, 141, 143, 148, 149, 150, 151, 153, 155, 159, 160, 163, 164, 165, 175, 177, 179, 180, 184, 185, 210, 217, 221, 226, 227, 234, 235, 242, 247, 249, 254, 270, 272, 276, 282, 283, 284, 285, 286, 288, 290, 295, 298, 306, 307, 310, 312, 313, 314, 315, 319, 320, 321, 322, 325, 334], "radian": [5, 29, 37, 48, 73, 84, 91, 134, 149, 160, 207, 283], "3d": [5, 6, 19, 30, 47, 65, 85, 88, 91, 137, 149, 160, 185, 229, 282, 284, 286], "meter": [5, 7, 9, 16, 19, 22, 29, 31, 34, 37, 38, 47, 48, 80, 81, 85, 89, 91, 134, 136, 157, 158, 160, 208, 229, 234, 235, 242, 273, 274, 282, 283, 320], "quaternion": [5, 47, 85, 88, 149, 281, 283], "when": [5, 7, 10, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 46, 47, 48, 50, 51, 52, 54, 55, 56, 57, 59, 60, 62, 63, 65, 66, 73, 75, 76, 77, 78, 79, 81, 83, 84, 85, 87, 88, 89, 91, 95, 96, 99, 101, 104, 105, 112, 113, 115, 116, 118, 122, 123, 125, 134, 136, 141, 151, 153, 158, 159, 160, 163, 165, 179, 180, 184, 185, 193, 208, 210, 217, 221, 225, 226, 227, 228, 233, 243, 250, 251, 257, 269, 272, 273, 276, 278, 279, 281, 282, 283, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 307, 309, 310, 313, 314, 315, 316, 318, 319, 320, 322, 323, 325, 331], "transform": [5, 13, 16, 19, 21, 30, 55, 57, 76, 80, 85, 88, 89, 91, 128, 137, 149, 158, 160, 231, 273, 274, 281, 282, 284, 286, 333], "fulli": [5, 12, 13, 30, 35, 37, 48, 50, 55, 57, 64, 66, 67, 81, 85, 89, 91, 122, 155, 160, 164, 251, 273, 310, 313, 314, 315], "defin": [5, 6, 11, 12, 13, 16, 18, 20, 21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 35, 37, 41, 43, 44, 46, 54, 55, 56, 68, 73, 76, 77, 80, 83, 84, 85, 89, 91, 95, 99, 101, 116, 118, 119, 122, 134, 137, 153, 164, 165, 184, 193, 217, 221, 226, 247, 251, 298, 314, 325, 328], "root": [5, 6, 12, 13, 24, 26, 46, 47, 52, 54, 56, 60, 62, 88, 89, 91, 128, 142, 160, 184, 210, 212, 215, 270, 293], "common": [5, 18, 21, 31, 54, 55, 57, 62, 71, 73, 76, 77, 78, 81, 82, 83, 87, 88, 89, 91, 97, 125, 126, 149, 156, 159, 163, 184, 187, 208, 214, 320, 322, 334], "odom": [5, 6, 16, 21, 47, 48, 89, 91, 128, 149, 160, 231, 274], "vision": [5, 6, 15, 18, 47, 48, 55, 84, 85, 89, 91, 128, 149, 160, 274, 330], "flat": [5, 22, 35, 36, 47, 91, 158, 179], "tool": [5, 6, 19, 27, 30, 31, 43, 57, 60, 62, 69, 91, 95, 160, 263, 283, 313, 314, 315], "grasp": [5, 6, 13, 84, 85, 89, 91, 147, 242, 258], "unset": [5, 22, 54, 73, 89, 91, 112, 160, 165, 180], "attach": [5, 19, 21, 27, 36, 44, 46, 53, 54, 58, 59, 60, 62, 65, 78, 89, 91, 96, 118, 141, 153, 159, 160, 162, 164, 184, 268, 285, 290, 311, 314], "interest": [5, 41, 83, 91, 136, 228, 316], "touch": [5, 7, 37, 60, 91], "center": [5, 16, 28, 29, 31, 32, 34, 35, 36, 37, 47, 64, 65, 67, 71, 80, 84, 88, 89, 91, 148, 149, 285], "fiduci": [5, 13, 16, 19, 21, 23, 37, 47, 55, 79, 89, 91, 134, 158, 257, 266, 268, 282, 283, 286, 309, 311, 330, 333], "5m": [5, 227, 246, 254], "stick": [5, 24, 233, 334], "root_frame_nam": [5, 91, 160], "fiducial_001": 5, "wrist_tform_tool": [5, 91, 160], "z": [5, 16, 17, 19, 29, 37, 47, 55, 59, 84, 85, 88, 91, 136, 149, 157, 160, 185, 207, 243, 251, 281, 282, 283, 286, 308, 313], "w": [5, 29, 31, 38, 47, 81, 85, 89, 91, 149, 282, 283, 295], "7071": 5, "root_tform_task": [5, 91, 160], "sequenc": [5, 12, 15, 18, 20, 26, 27, 28, 29, 30, 32, 37, 38, 43, 52, 88, 89, 95, 96, 118, 141, 150, 155, 159, 215, 225, 226, 267, 293], "option": [5, 6, 18, 19, 20, 24, 26, 30, 31, 34, 35, 36, 37, 40, 41, 48, 54, 55, 56, 57, 60, 61, 62, 68, 73, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 95, 96, 99, 101, 110, 111, 114, 116, 122, 123, 134, 136, 137, 140, 141, 159, 160, 163, 164, 165, 166, 168, 169, 173, 177, 184, 193, 194, 199, 217, 221, 226, 248, 254, 270, 271, 272, 281, 282, 283, 295, 296, 305, 307, 310, 313, 315, 316, 320, 322, 327, 330], "proto": [5, 12, 13, 14, 22, 29, 35, 37, 44, 47, 50, 52, 54, 55, 56, 57, 59, 72, 73, 76, 82, 83, 84, 85, 86, 87, 88, 89, 93, 96, 97, 104, 113, 116, 118, 121, 122, 125, 128, 136, 137, 140, 141, 143, 149, 150, 152, 156, 159, 160, 161, 164, 166, 178, 180, 183, 187, 188, 193, 194, 208, 209, 212, 282, 314], "torqu": [5, 48, 89, 91, 160, 228], "task": [5, 6, 11, 12, 18, 24, 52, 68, 86, 89, 91, 97, 147, 160, 228, 282], "select": [5, 6, 18, 29, 30, 33, 34, 35, 36, 37, 38, 43, 54, 56, 62, 66, 68, 70, 79, 81, 83, 84, 85, 87, 89, 91, 134, 145, 165, 169, 192, 229, 234, 246, 248, 251, 272, 293, 297, 306, 310, 313, 315, 316, 319], "mode": [5, 6, 12, 13, 28, 36, 37, 38, 41, 57, 59, 60, 62, 81, 82, 89, 160, 176, 177, 226, 228, 230, 233, 250, 273, 295, 298, 313, 331, 334], "input": [5, 6, 21, 29, 50, 53, 54, 57, 60, 62, 66, 73, 77, 82, 83, 84, 89, 91, 95, 96, 107, 116, 128, 141, 149, 151, 160, 180, 188, 208, 213, 217, 219, 221, 223, 226, 229, 243, 250, 251, 252, 283, 296, 297, 310, 313, 315, 316, 317], "se3trajectori": [5, 160], "wrenchtrajectori": 5, "hybrid": [5, 91, 230], "armcartesiancommand": [5, 6, 89, 160], "simpl": [5, 12, 18, 27, 43, 48, 62, 71, 74, 77, 78, 80, 81, 87, 89, 91, 166, 233, 241, 251, 258, 262, 270, 294, 311, 314, 315, 320], "travel": [5, 9, 14, 19, 37, 89, 91, 134, 162, 283, 285], "full": [5, 7, 19, 20, 29, 35, 36, 37, 38, 41, 46, 47, 48, 50, 54, 55, 57, 62, 66, 80, 81, 88, 89, 91, 95, 96, 103, 111, 113, 115, 118, 123, 124, 134, 147, 151, 158, 159, 178, 179, 201, 204, 226, 253, 272, 276, 283, 320], "reach": [5, 7, 12, 14, 17, 18, 24, 37, 52, 54, 59, 68, 73, 84, 87, 89, 91, 96, 99, 118, 126, 134, 146, 148, 160, 179, 205, 226, 228, 260, 274, 289, 293, 310, 314], "especi": [5, 31, 32, 36, 37, 59, 63, 84, 91], "hard": [5, 12, 29, 59, 63, 76, 85, 91, 247, 257], "wave": 5, "armjointmovecommand": [5, 89, 160], "tuck": 5, "readi": [5, 16, 75, 81, 82, 83, 86, 87, 91, 99, 160, 226, 239, 281, 334], "walk": [5, 6, 9, 12, 15, 16, 18, 19, 24, 31, 33, 34, 38, 48, 53, 55, 63, 75, 81, 83, 84, 85, 89, 99, 107, 160, 217, 221, 226, 227, 229, 234, 244, 257, 258, 273, 282, 283, 284, 285, 286, 288, 314, 320, 334], "carri": [5, 7, 11, 23, 24, 25, 59, 65, 84, 85, 89, 91, 258], "somewher": [5, 37, 134], "refus": [5, 23, 81, 89, 91], "issu": [5, 6, 14, 15, 19, 24, 26, 46, 52, 54, 55, 59, 70, 73, 78, 82, 83, 84, 87, 88, 91, 95, 96, 103, 105, 123, 124, 125, 134, 135, 136, 137, 138, 141, 147, 151, 154, 155, 159, 160, 179, 229, 251, 272, 274, 278, 283, 309, 312, 313, 314, 315, 317, 320, 325, 333], "item": [5, 6, 55, 59, 82, 83, 89, 91, 234, 242], "motion": [5, 26, 29, 30, 31, 35, 36, 37, 65, 89, 91, 96, 160, 225, 233, 258, 274], "unstow": [5, 89, 243, 258], "namedarmposit": 5, "joystick": [5, 31, 34, 36, 91], "latenc": [5, 48, 57, 89, 91, 320, 322], "cylindr": [5, 91, 243], "own": [5, 19, 21, 26, 31, 40, 43, 46, 47, 52, 56, 57, 59, 74, 75, 77, 81, 83, 89, 91, 104, 112, 141, 194, 251, 270, 272, 281, 312, 313], "linear": [5, 12, 24, 85, 89, 91, 149, 160, 228], "angular": [5, 16, 40, 48, 73, 85, 89, 91, 149, 160, 243], "sometim": [5, 18, 29, 31, 32, 84, 87, 89, 91, 226, 313, 319], "camera": [5, 6, 7, 16, 26, 31, 41, 42, 46, 47, 55, 56, 76, 78, 79, 81, 83, 84, 89, 97, 136, 137, 169, 173, 176, 177, 179, 248, 258, 266, 268, 273, 276, 288, 295, 296, 309, 311, 315, 316, 320, 321, 322, 325], "constrain": [5, 17, 21, 56, 91, 160, 258], "gazecommand": [5, 160], "go": [5, 17, 19, 24, 31, 34, 36, 37, 48, 56, 62, 68, 70, 71, 75, 78, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 115, 118, 123, 126, 134, 160, 226, 266, 273, 283, 297, 313, 314, 319], "wrong": [5, 22, 54, 82, 83, 84, 85, 87, 88, 91, 105, 121, 122, 125, 127, 141, 153, 155, 159, 191], "bring": [5, 38, 79, 85, 91], "minim": [5, 9, 26, 27, 46, 48, 63, 68, 88, 89, 91, 160, 269], "heavi": [5, 58, 63, 65, 91], "compli": [5, 44, 91], "put": [5, 9, 29, 57, 63, 73, 76, 77, 81, 82, 83, 85, 86, 89, 91, 159, 160, 271], "compliant": 5, "pull": [5, 60, 66, 76, 78, 85, 91, 270, 293, 319, 322], "appropri": [5, 18, 30, 31, 43, 47, 55, 66, 76, 77, 89, 91, 116, 119, 136, 184, 215, 293], "locomot": [5, 8, 10, 19, 20, 37, 59, 91, 160], "backward": [5, 27, 31, 36, 37, 38, 48, 54, 56, 88, 89, 91], "workspac": [5, 29, 37, 89, 91], "chalk": [5, 6, 89], "draw": [5, 6, 35, 56, 80, 83, 84, 85, 89, 91, 282, 322], "advantag": [5, 46, 84, 85, 122, 296, 316, 318], "entir": [5, 16, 18, 29, 35, 37, 40, 44, 52, 57, 62, 84, 88, 89, 91, 111, 177, 272, 310], "recruit": 5, "gcode": [5, 6, 89, 258], "slightli": [5, 27, 29, 35, 89, 91, 160], "palm": [5, 6, 84, 91, 160], "plate": [5, 89, 91, 160], "align": [5, 6, 19, 47, 55, 79, 84, 85, 88, 89, 128, 149, 158, 160, 229, 282, 296, 319], "parent": [5, 47, 52, 57, 88, 89, 91, 111, 128, 184, 188, 215], "wrist": [5, 6, 89, 91, 160], "19557": [5, 91], "matrix": [5, 47, 85, 86, 89, 149, 193, 282], "proxim": [5, 54], "maintain": [5, 17, 19, 23, 26, 36, 37, 46, 54, 55, 62, 63, 64, 87, 88, 89, 91, 122, 180, 314, 318], "safe": [5, 13, 18, 23, 24, 27, 45, 46, 51, 82, 83, 85, 88, 91, 125, 141, 155, 159, 160, 180, 184, 272, 310, 315, 317], "distanc": [5, 7, 9, 22, 29, 31, 36, 37, 38, 55, 84, 85, 89, 91, 134, 136, 158, 162, 176, 208, 308, 319, 330], "essenti": [5, 85, 87, 224], "obstacl": [5, 14, 17, 18, 19, 20, 31, 33, 36, 38, 55, 89, 91, 158, 273, 328, 330], "peopl": [5, 9, 81, 84, 91, 273, 296, 316, 320, 322], "path": [5, 9, 14, 17, 18, 19, 21, 23, 33, 40, 42, 60, 62, 73, 76, 81, 83, 84, 86, 87, 89, 91, 95, 99, 134, 163, 217, 221, 247, 251, 252, 257, 270, 271, 281, 282, 283, 284, 285, 293, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 315, 316, 319, 320, 322, 334], "observ": [5, 7, 21, 26, 43, 59, 91, 282, 295, 297], "halt": [5, 91], "risk": [5, 34, 88, 91], "warn": [5, 12, 35, 43, 46, 55, 57, 76, 79, 83, 89, 91, 96, 137, 141, 166, 254, 273, 309, 313, 314, 315, 325], "onboard": [5, 21, 44, 53, 60, 86, 89, 91, 314], "cannot": [5, 23, 29, 31, 35, 55, 57, 59, 78, 83, 89, 91, 96, 105, 112, 134, 136, 137, 146, 153, 154, 155, 158, 160, 163, 184, 212, 251, 270, 274, 281, 310, 313, 315], "intervent": [5, 91], "tight": 5, "possibl": [5, 7, 9, 12, 15, 16, 19, 20, 22, 26, 31, 35, 36, 44, 45, 46, 54, 55, 63, 68, 73, 85, 88, 89, 91, 113, 115, 118, 184, 212, 233, 251, 272, 282, 296, 298, 307, 310, 313, 315, 316], "head": [5, 16, 37, 81, 82, 83, 84, 85, 91, 160], "inadvert": [5, 89], "collid": 5, "sensit": [5, 36, 63, 88, 91, 295, 309], "fragil": 5, "extra": [5, 15, 29, 54, 60, 66, 76, 82, 89, 91, 105, 116, 152, 153, 154, 169, 270, 325], "care": [5, 45, 52, 56, 57, 63, 77, 82, 84, 85, 87, 88, 89, 91, 233, 320], "abil": [5, 20, 30, 55, 59, 65, 89, 91], "properli": [5, 43, 45, 46, 59, 62, 68, 76, 77, 87, 89, 98, 217, 218, 219, 221, 223, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 256, 257, 282, 287, 288, 289, 299, 300, 301, 302, 303, 304, 305, 308, 313, 314, 322, 323, 334], "larg": [5, 12, 14, 19, 20, 21, 23, 30, 31, 36, 37, 43, 46, 53, 54, 55, 62, 80, 81, 88, 89, 91, 134, 160, 164, 233, 282, 283], "disturb": [5, 52, 85, 89], "damag": [5, 22, 89, 91], "NOT": [5, 23, 45, 91, 250, 325], "reduc": [5, 22, 23, 31, 36, 55, 57, 65, 89, 91, 96, 297, 315, 320, 322], "likelihood": [5, 54], "outstretch": 5, "attempt": [5, 7, 14, 16, 18, 21, 23, 26, 34, 35, 36, 37, 38, 45, 52, 54, 57, 59, 63, 68, 76, 77, 83, 89, 91, 96, 123, 125, 134, 137, 140, 153, 155, 159, 160, 180, 184, 257, 272, 283, 313, 314], "lift": [5, 7, 36, 37, 91], "too": [5, 12, 16, 20, 23, 31, 34, 36, 37, 54, 55, 81, 85, 88, 89, 91, 134, 155, 158, 160, 272, 281], "disabl": [5, 31, 36, 38, 60, 66, 76, 77, 81, 83, 86, 91, 97, 125, 155, 160, 217, 221, 260, 273, 276, 293, 295, 313, 314], "menu": [5, 9, 29, 30, 31, 33, 34, 36, 38, 79, 83, 85, 297, 310, 313, 315, 316], "potenti": [5, 9, 12, 55, 63, 87, 91, 96, 137], "caus": [5, 6, 9, 12, 18, 19, 23, 29, 31, 34, 35, 38, 46, 52, 54, 55, 56, 57, 59, 62, 66, 79, 82, 88, 89, 126, 160, 175, 225, 226, 227, 231, 234, 235, 242, 244, 257, 283, 309, 313], "inoper": 5, "paramet": [6, 9, 12, 19, 21, 22, 24, 28, 30, 35, 37, 40, 43, 44, 48, 53, 55, 57, 61, 62, 78, 80, 81, 82, 84, 85, 88, 89, 95, 96, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 131, 134, 135, 136, 137, 138, 139, 141, 142, 143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 162, 163, 164, 165, 166, 168, 169, 172, 173, 176, 177, 179, 180, 183, 184, 185, 192, 193, 194, 196, 199, 201, 202, 203, 208, 210, 212, 213, 215, 217, 219, 221, 223, 226, 233, 251, 258, 261, 266, 282, 298, 322], "depth": [6, 7, 26, 55, 81, 84, 88, 89, 91, 136, 137, 266, 296], "press": [6, 30, 31, 33, 34, 38, 62, 64, 68, 79, 81, 83, 85, 91, 226, 269, 283, 295, 309, 310, 313, 316, 334], "tightli": [6, 18, 30, 63], "squeez": [6, 29, 91], "tip": [6, 7, 9, 81, 82, 87, 91], "finger": [6, 7, 91], "constraint": [6, 14, 35, 84, 91, 134, 148, 158], "down": [6, 9, 13, 18, 23, 31, 35, 36, 37, 41, 45, 48, 52, 54, 55, 56, 62, 63, 66, 68, 79, 82, 83, 84, 85, 87, 88, 89, 91, 98, 99, 101, 141, 160, 164, 180, 184, 225, 230, 243, 283, 284, 288, 297, 308, 310, 313, 314, 315, 321, 334], "produc": [6, 21, 22, 30, 31, 35, 63, 82, 91, 148, 233], "correct": [6, 16, 18, 26, 35, 52, 76, 77, 80, 85, 87, 89, 91, 96, 148, 160, 185, 251, 272, 282, 296, 310, 313, 314, 315, 316, 317, 325], "calibr": [6, 43, 84, 89, 179], "error": [6, 12, 16, 19, 26, 30, 31, 35, 36, 43, 46, 48, 51, 55, 56, 73, 76, 77, 78, 83, 84, 87, 88, 89, 96, 98, 99, 104, 105, 106, 107, 109, 110, 112, 113, 115, 116, 118, 120, 121, 122, 123, 125, 126, 127, 128, 134, 136, 137, 140, 141, 145, 146, 148, 151, 153, 154, 155, 157, 158, 159, 160, 163, 164, 165, 179, 180, 181, 191, 210, 211, 212, 213, 215, 218, 228, 254, 269, 270, 272, 281, 282, 310, 312, 313, 314, 315, 325], "toward": [6, 16, 19, 37, 89, 91, 180, 273, 308, 320], "prepar": [6, 82, 86, 91, 242], "autonom": [6, 8, 9, 11, 12, 13, 16, 21, 23, 24, 75, 79, 81, 83, 91, 229, 257, 283], "pixel": [6, 55, 57, 76, 83, 84, 89, 91, 136, 137, 273, 276, 282, 333], "wipe": [6, 89, 91], "behavior": [6, 8, 9, 12, 13, 15, 17, 21, 26, 29, 30, 31, 34, 35, 37, 51, 55, 62, 63, 73, 84, 86, 91, 106, 134, 160, 164, 184, 224, 226, 254, 258], "accuraci": [6, 16, 48, 66, 82, 89, 160, 282], "forc": [6, 7, 12, 22, 35, 48, 63, 82, 89, 91, 101, 112, 160, 217, 221, 228, 240, 245, 258], "robotcommand": [6, 24, 85, 88, 89, 160], "special": [6, 18, 22, 28, 32, 43, 45, 47, 48, 65, 89, 91, 158], "ground": [6, 16, 22, 29, 31, 34, 36, 37, 47, 48, 55, 60, 66, 81, 91, 158, 179, 225, 240, 250, 308], "interpret": [6, 12, 26, 29, 54, 80, 86, 87, 88, 89, 91, 95, 134, 193, 215, 233], "sidewalk": [6, 89, 233], "framework": [6, 30, 35, 62], "autograsp": 6, "search": [6, 13, 56, 68, 84, 85, 91, 226], "along": [6, 8, 9, 14, 16, 19, 20, 21, 25, 27, 35, 43, 48, 51, 67, 73, 76, 80, 82, 83, 85, 89, 91, 134, 160, 225, 228, 270, 273, 281, 283, 295, 298, 313], "grab": [6, 91, 96, 111, 141, 160, 185, 210, 229], "warmstart": 6, "assumpt": [6, 91], "alreadi": [6, 15, 18, 24, 29, 35, 46, 60, 70, 76, 77, 82, 83, 84, 85, 86, 89, 91, 96, 98, 99, 116, 118, 122, 127, 134, 141, 146, 153, 158, 159, 160, 168, 176, 180, 184, 189, 193, 194, 210, 217, 221, 226, 272, 283, 314], "skip": [6, 31, 76, 77, 80, 89, 91, 96, 273, 299, 300, 301, 302, 303, 304, 305, 322], "stage": [6, 12, 18, 78, 99], "immedi": [6, 18, 30, 32, 35, 37, 38, 45, 51, 57, 65, 66, 88, 89, 91, 99, 116, 125, 140, 159, 272, 310, 312], "doorwai": [6, 22], "autopush": [6, 89], "pushbar": [6, 91], "crashbar": 6, "latch": [6, 91], "hand": [6, 7, 29, 30, 34, 37, 81, 84, 85, 89, 91, 139, 160, 243, 244, 256, 321], "suppli": [6, 26, 60, 66, 87, 89, 91, 134, 137, 160, 184, 272, 276, 283, 307, 314], "manipulationapiservic": [6, 147, 229], "doorservic": [6, 89, 124, 229], "semi": 6, "displai": [6, 19, 26, 29, 31, 35, 41, 55, 56, 57, 59, 62, 79, 80, 85, 87, 88, 89, 91, 116, 165, 169, 183, 248, 251, 252, 276, 282, 285, 286, 310, 313, 315, 318, 319, 322, 325, 329, 330, 333], "hing": [6, 89, 91, 229], "Then": [6, 26, 62, 78, 79, 81, 87, 91, 226, 229, 270, 288, 299, 300, 301, 303, 304, 305, 314, 319, 325, 334], "kinmat": 6, "ik": [6, 138, 243, 289], "satisfi": [6, 16, 27, 79, 83, 89, 91, 117, 289], "stanc": [6, 29, 34, 36, 37, 89, 160, 267], "fix": [6, 16, 21, 29, 31, 35, 37, 47, 54, 57, 59, 85, 91, 96, 137, 228, 231, 269, 273, 282, 285, 315], "solut": [6, 8, 70, 87, 88, 89, 91, 138, 226, 289, 324], "feet": [6, 29, 31, 34, 35, 36, 37, 88, 89, 91, 160, 225, 323], "specfi": 6, "unspecifi": [6, 29, 43, 48, 81, 91, 160], "On": [6, 17, 18, 29, 30, 32, 36, 38, 41, 56, 60, 62, 68, 78, 91, 122, 160, 226, 249, 273, 310, 313, 320, 322, 329, 334], "mount": [6, 21, 58, 59, 60, 61, 62, 64, 65, 66, 75, 76, 78, 86, 89, 91, 184, 281, 282, 306, 313, 314], "pose": [6, 16, 19, 20, 21, 22, 23, 29, 30, 35, 37, 38, 47, 81, 87, 89, 91, 123, 128, 134, 148, 149, 158, 160, 179, 185, 231, 238, 281, 282, 288, 289, 297, 309, 331, 334], "li": [6, 12, 65], "respond": [6, 18, 24, 35, 36, 44, 45, 46, 52, 55, 57, 59, 73, 76, 77, 78, 88, 89, 91, 99, 116, 137, 151], "statu": [6, 12, 15, 20, 21, 23, 24, 30, 35, 41, 43, 45, 46, 52, 54, 57, 60, 62, 68, 69, 71, 73, 76, 77, 83, 84, 88, 89, 96, 97, 99, 111, 112, 113, 114, 115, 116, 122, 123, 125, 126, 134, 137, 140, 141, 145, 155, 158, 159, 160, 164, 165, 173, 179, 184, 226, 263, 269, 272, 281, 282, 283, 298, 301, 310, 312, 313, 315, 319, 334], "unabl": [6, 19, 55, 57, 76, 89, 91, 96, 107, 113, 115, 123, 126, 134, 150, 151, 315], "find": [6, 9, 12, 14, 16, 26, 27, 34, 48, 56, 62, 78, 81, 82, 83, 84, 85, 86, 87, 89, 91, 111, 126, 128, 134, 136, 154, 185, 212, 224, 226, 251, 282, 283, 289, 307, 320, 334], "action": [6, 8, 12, 18, 19, 21, 25, 28, 31, 34, 40, 44, 56, 57, 71, 73, 75, 77, 80, 83, 84, 86, 89, 99, 104, 113, 114, 115, 117, 140, 141, 185, 219, 226, 268, 271, 272, 298, 309, 310, 316, 317], "popul": [6, 12, 23, 46, 54, 57, 89, 91, 95, 96, 127, 137, 164, 183, 314], "usual": [6, 16, 17, 26, 35, 40, 51, 62, 63, 76, 78, 83, 91, 101, 158, 159, 242, 320], "sever": [6, 12, 26, 31, 36, 41, 45, 55, 56, 76, 86, 88, 89, 160, 166, 313, 324], "either": [6, 10, 12, 13, 16, 18, 19, 24, 27, 29, 30, 35, 36, 37, 38, 40, 43, 46, 47, 48, 55, 56, 57, 71, 76, 77, 83, 87, 89, 91, 96, 126, 134, 149, 151, 158, 160, 180, 184, 193, 194, 208, 219, 221, 223, 226, 228, 268, 270, 272, 273, 276, 282, 283, 307, 312, 313, 315, 320], "scene": [6, 21, 55, 89, 91, 185, 319, 330], "foot": [6, 29, 30, 35, 36, 37, 48, 55, 89, 91, 160, 323, 328], "relat": [6, 11, 23, 28, 35, 46, 47, 55, 60, 88, 91, 96, 111, 128, 134, 141, 184, 191, 192, 250, 265, 312, 314, 324], "quantiti": [6, 16, 73, 91], "fame": 6, "lie": [6, 47, 91, 158], "xy": [6, 59, 91], "984": 7, "1800": 7, "mass": [7, 29, 36, 37, 65, 76, 77, 89, 91, 160], "drag": [7, 31, 62, 78, 81, 89, 91, 268], "carpet": 7, "25": [7, 51, 54, 66, 84, 85, 86, 179, 180], "temp": [7, 56, 91, 173], "20": [7, 24, 27, 35, 49, 50, 60, 66, 83, 87, 88, 91, 96, 123, 125, 159, 246], "water": [7, 63], "dust": [7, 63], "resist": [7, 66, 91], "22": [7, 49, 59, 66], "peak": 7, "clamp": [7, 66, 89, 91], "130": 7, "n": [7, 49, 75, 82, 83, 86, 88, 89, 91, 160, 246, 254], "tof": 7, "imu": [7, 48, 91, 179], "4k": 7, "rgb": [7, 37, 83, 91, 137, 185, 276], "accessori": 7, "gigabit": 7, "50w": 7, "power": [7, 9, 15, 24, 26, 27, 30, 31, 34, 35, 38, 45, 48, 51, 56, 58, 59, 60, 62, 65, 68, 73, 83, 87, 97, 111, 125, 141, 153, 159, 160, 162, 167, 179, 225, 228, 243, 257, 269, 273, 283, 293, 295, 309, 310, 312, 313, 314, 315, 321, 323, 325, 331, 334], "sync": [7, 31, 73, 84, 88, 89, 91, 96, 97, 111, 123, 134, 159, 163, 260, 281, 295, 309, 326, 331], "pp": [7, 60, 91], "fov": [7, 91], "46": [7, 49, 71, 86], "55": [7, 49, 50], "44": [7, 49], "fit": [7, 31, 82, 89, 91], "jaw": [7, 91], "person": [7, 81, 84, 85, 266, 313, 320], "activ": [7, 9, 19, 20, 24, 31, 34, 35, 36, 37, 38, 46, 52, 54, 55, 57, 59, 75, 76, 77, 81, 82, 83, 84, 87, 88, 89, 91, 111, 127, 134, 140, 141, 143, 146, 179, 291, 320, 334], "small": [7, 20, 22, 23, 34, 35, 36, 54, 64, 83, 84, 89, 91, 137, 149, 248, 330], "clearanc": [7, 234, 235, 242, 244], "alwai": [7, 18, 19, 24, 31, 33, 34, 35, 37, 38, 46, 47, 53, 56, 57, 62, 73, 78, 83, 84, 85, 87, 89, 91, 184, 215, 249], "human": [7, 22, 29, 30, 35, 41, 52, 55, 57, 91, 111, 118, 158, 159, 165, 169, 185, 314, 320], "introduc": [7, 19, 62, 89, 91], "stai": [7, 20, 21, 36, 47, 65, 85, 89, 91], "navig": [8, 9, 14, 18, 19, 21, 22, 23, 24, 25, 31, 33, 34, 36, 38, 55, 79, 86, 91, 99, 134, 226, 281, 282, 285, 293, 294, 311, 313, 315, 324], "graphnav": [8, 10, 11, 13, 14, 54, 55, 91, 97, 99, 101, 134, 148, 158, 259], "map": [8, 10, 12, 13, 14, 17, 18, 20, 22, 23, 25, 27, 31, 38, 40, 47, 54, 55, 56, 57, 61, 62, 75, 80, 82, 86, 95, 97, 111, 112, 118, 134, 158, 159, 169, 188, 199, 224, 226, 248, 259, 281, 282, 284, 285, 315, 330, 334], "record": [8, 10, 12, 13, 14, 20, 21, 22, 23, 24, 25, 26, 30, 33, 35, 40, 41, 51, 56, 75, 80, 82, 96, 97, 116, 118, 134, 140, 173, 184, 224, 259, 267, 268, 272, 281, 284, 285, 286, 311, 314, 319], "save": [8, 19, 21, 24, 25, 27, 30, 33, 40, 41, 43, 48, 57, 59, 61, 62, 70, 77, 78, 79, 80, 81, 82, 83, 86, 89, 91, 95, 96, 111, 113, 115, 116, 136, 159, 181, 225, 246, 249, 250, 270, 271, 276, 282, 283, 284, 294, 295, 297, 306, 307, 309, 310, 316, 317, 319, 325, 327], "your": [8, 11, 18, 19, 21, 22, 25, 31, 33, 36, 38, 46, 53, 56, 57, 60, 62, 68, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 116, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 251, 256, 268, 270, 273, 282, 283, 284, 285, 286, 287, 288, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 320, 322, 324, 325, 326, 331, 333, 334], "process": [8, 12, 13, 16, 20, 21, 24, 25, 27, 31, 33, 41, 42, 43, 44, 46, 53, 55, 57, 59, 60, 62, 68, 73, 75, 78, 83, 88, 89, 91, 96, 97, 111, 112, 113, 115, 116, 122, 140, 151, 158, 177, 180, 251, 282, 296, 303, 313, 314, 316, 320, 322], "assign": [8, 18, 25, 55, 89, 91, 136, 158, 164, 180, 184, 185, 282], "callback": [8, 10, 13, 17, 25, 42, 52, 59, 79, 83, 91, 97, 110, 112, 134, 141, 160, 184, 259, 261, 270, 272, 279], "waypoint": [8, 10, 13, 14, 16, 17, 18, 20, 22, 23, 25, 37, 80, 89, 134, 148, 158, 282, 283, 284, 285, 286, 303, 310], "autowalk": [8, 9, 10, 14, 18, 19, 20, 21, 22, 23, 28, 34, 40, 41, 56, 57, 60, 79, 97, 226, 249, 259, 271, 272, 284, 285, 286, 295, 307, 311], "complex": [8, 12, 19, 48, 58, 91, 224, 230], "topologi": [8, 20, 89, 91, 148], "therefor": [8, 36, 57, 66, 88, 89, 91, 137, 272, 282, 315], "engin": [8, 46, 270], "flexibl": [8, 12, 27, 30, 89], "technic": 8, "summari": [8, 89, 91], "compon": [8, 30, 31, 44, 58, 59, 62, 63, 66, 88, 89, 91, 261, 265, 325], "dock": [8, 18, 24, 79, 97, 160, 217, 221, 259, 261, 264, 267, 270, 290, 309], "initi": [8, 13, 18, 19, 20, 23, 26, 31, 35, 36, 37, 41, 46, 47, 48, 55, 73, 76, 77, 79, 80, 81, 82, 86, 88, 89, 91, 96, 107, 134, 137, 141, 148, 158, 163, 165, 176, 179, 180, 210, 227, 230, 232, 234, 236, 237, 238, 239, 240, 241, 242, 243, 268, 269, 272, 276, 282, 283, 288, 299, 300, 301, 303, 304, 305, 307, 311, 313], "local": [8, 10, 11, 13, 16, 17, 19, 20, 40, 68, 70, 71, 89, 96, 97, 99, 111, 118, 134, 158, 159, 160, 180, 208, 247, 251, 273, 276, 281, 282, 283, 284, 285, 286, 297, 299, 300, 301, 302, 303, 304, 305, 307, 310, 313, 317, 320, 330], "comput": [8, 16, 19, 21, 22, 23, 26, 27, 29, 31, 32, 35, 38, 40, 41, 47, 51, 54, 55, 57, 59, 70, 75, 76, 77, 78, 81, 83, 84, 85, 86, 87, 91, 97, 100, 111, 137, 149, 155, 160, 188, 191, 226, 248, 249, 266, 268, 271, 272, 273, 276, 297, 307, 310, 313, 314, 315, 317, 326], "bridg": [8, 41, 54, 83, 84, 91, 97, 266, 297], "autoreturn": [8, 51, 89, 106, 245], "explor": [8, 54, 87, 89, 91, 272], "gp": [8, 17, 19, 21, 40, 41, 57, 97, 129, 131, 133, 134, 148, 224, 251, 259, 266, 283, 286], "recent": [9, 16, 30, 37, 52, 55, 57, 62, 87, 88, 89, 91, 96, 141, 143, 154, 283, 299], "pilot": 9, "inaccess": 9, "suddenli": 9, "lose": [9, 31, 89, 149, 281], "valuabl": 9, "tell": [9, 18, 19, 20, 24, 35, 51, 78, 82, 84, 85, 86, 89, 91, 99, 131, 134, 160, 163, 189, 282, 306, 314, 316], "hopefulli": 9, "wors": [9, 91], "poor": [9, 54, 83, 91, 293, 298], "unsupervis": [9, 33], "bypass": [9, 62, 91, 251, 310, 313, 315, 318], "wai": [9, 12, 17, 18, 20, 21, 24, 25, 26, 27, 29, 30, 31, 34, 35, 37, 41, 51, 55, 56, 60, 62, 70, 73, 74, 75, 76, 78, 82, 83, 84, 87, 88, 89, 91, 99, 111, 116, 134, 137, 141, 157, 159, 160, 175, 226, 249, 257, 281, 314, 315], "timeout": [9, 17, 31, 41, 45, 46, 51, 52, 54, 55, 57, 77, 84, 88, 91, 101, 116, 118, 122, 123, 125, 134, 137, 153, 159, 160, 162, 180, 315], "stricter": 9, "behav": [9, 35, 36, 38, 45, 57, 91, 249, 251, 325], "becom": [9, 18, 21, 29, 43, 52, 66, 89, 91, 111, 159, 215, 282, 313], "trap": 9, "possibli": [9, 16, 29, 35, 48, 89, 91, 126, 134, 254, 257], "drop": [9, 31, 55, 62, 78, 79, 81, 84, 85, 91, 268, 313, 315], "explicitli": [9, 13, 15, 18, 19, 21, 37, 40, 51, 68, 73, 87, 89, 91, 159, 273], "enabl": [9, 16, 19, 29, 30, 31, 35, 36, 38, 42, 43, 44, 46, 48, 55, 57, 59, 60, 66, 68, 79, 81, 83, 84, 85, 86, 87, 88, 91, 97, 122, 155, 160, 169, 173, 177, 217, 221, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 260, 273, 288, 289, 293, 312, 313, 314, 315, 317, 318], "drive": [9, 14, 15, 18, 19, 30, 38, 41, 58, 79, 81, 83, 88, 89, 91, 228, 283, 295, 316], "themselv": [9, 45, 52, 56, 59, 82, 89, 314], "primari": [9, 30, 61, 71, 73, 88, 89, 91, 246], "tune": [9, 48, 86, 88, 89, 91, 233, 297], "displac": [9, 228], "far": [9, 11, 16, 20, 23, 31, 36, 37, 83, 87, 89, 91, 96, 134, 157, 158, 160, 281, 307], "turn": [9, 18, 23, 31, 36, 37, 38, 45, 51, 55, 56, 60, 68, 71, 76, 87, 89, 91, 96, 116, 118, 140, 175, 225, 226, 272, 295, 309, 331, 334], "act": [9, 31, 54, 55, 59, 61, 62, 88, 91, 159], "radial": [9, 91, 243], "outsid": [9, 18, 23, 31, 35, 36, 44, 46, 54, 55, 73, 91, 148, 296, 316], "dot": [9, 35, 149, 226], "line": [9, 16, 19, 25, 26, 29, 30, 32, 35, 36, 38, 42, 43, 57, 59, 60, 61, 67, 71, 73, 75, 76, 77, 80, 82, 83, 84, 85, 87, 88, 91, 94, 95, 109, 125, 184, 226, 233, 234, 246, 247, 248, 254, 259, 268, 273, 274, 276, 278, 281, 282, 284, 285, 286, 295, 307, 310, 313, 314, 315, 318, 320, 322, 324, 325, 330], "boundari": 9, "omit": [9, 48, 62, 91], "portion": [9, 31, 36, 37, 82, 83, 89, 91], "red": [9, 16, 19, 29, 35, 36, 41, 79, 87, 91, 125, 226, 269, 282, 285, 286, 297, 308, 316, 330], "comm": [9, 12, 17, 24, 43, 51, 88, 89, 91, 155, 257, 260, 261, 310], "main": [9, 29, 31, 37, 51, 52, 53, 62, 68, 76, 77, 78, 81, 83, 84, 86, 89, 91, 95, 109, 111, 113, 151, 159, 160, 226, 247, 269, 315, 320, 322], "whether": [9, 13, 14, 18, 19, 23, 24, 26, 31, 35, 36, 37, 47, 52, 55, 56, 73, 89, 91, 118, 120, 134, 137, 139, 141, 142, 149, 150, 158, 160, 165, 176, 217, 221, 270, 282, 310, 314], "restor": [9, 82], "hear": [9, 91, 140, 210], "loss": [9, 12, 43, 51, 82, 88, 89, 91, 141, 257, 310], "unexpect": [9, 12, 14, 46, 55, 89, 91, 126, 141, 251, 270, 310, 313, 315], "danger": 9, "anyon": [9, 12, 31, 33, 34], "nearbi": [9, 12, 14, 18, 55, 89, 91, 134, 295], "low": [9, 13, 18, 19, 22, 24, 31, 36, 43, 48, 54, 65, 66, 88, 89, 91, 134, 160, 228, 290, 320], "ventur": 9, "further": [9, 12, 27, 29, 30, 34, 35, 36, 63, 85, 89, 91, 96, 99, 105, 161, 281, 297, 327], "amount": [9, 20, 23, 30, 31, 37, 41, 43, 51, 54, 55, 82, 84, 89, 91, 137, 240, 282, 320, 322], "found": [9, 16, 18, 19, 22, 28, 30, 35, 37, 43, 47, 48, 50, 53, 55, 56, 65, 68, 76, 78, 82, 83, 84, 85, 86, 87, 89, 91, 121, 126, 134, 136, 137, 146, 151, 154, 159, 168, 224, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 252, 256, 269, 281, 282, 285, 287, 288, 289, 293, 302, 308, 312, 315, 320, 322, 334], "supervis": [9, 88], "alongsid": [9, 89, 91, 225, 272], "edg": [10, 13, 14, 17, 18, 20, 31, 47, 67, 80, 86, 89, 128, 134, 148, 158, 226, 282, 283, 286], "start": [10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 43, 46, 48, 51, 54, 56, 57, 62, 66, 74, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 91, 96, 99, 100, 106, 109, 111, 114, 118, 122, 134, 137, 140, 146, 150, 153, 158, 159, 160, 164, 165, 173, 179, 180, 184, 188, 189, 217, 221, 224, 225, 226, 245, 251, 254, 268, 269, 282, 283, 290, 295, 298, 307, 308, 309, 311, 313, 316, 320, 321, 322, 334], "exercis": [10, 21, 57, 89, 323], "recording_command_lin": [10, 19, 20, 89, 283], "demonstr": [10, 26, 35, 37, 46, 54, 56, 57, 73, 74, 82, 88, 89, 91, 227, 228, 230, 231, 234, 235, 238, 240, 242, 249, 250, 251, 254, 255, 256, 259, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 288, 291, 292, 294, 299, 300, 301, 302, 303, 304, 305, 306, 310, 314, 315, 317, 318, 319, 326, 329, 330, 332, 333], "download": [10, 15, 16, 20, 21, 24, 25, 27, 28, 30, 31, 32, 35, 40, 42, 54, 57, 60, 62, 71, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 97, 114, 134, 225, 253, 263, 270, 283, 285, 293, 296, 313, 319, 320, 325], "graph_nav_command_lin": [10, 19, 89, 283], "upload": [10, 12, 14, 20, 21, 24, 28, 29, 31, 35, 54, 60, 61, 62, 68, 70, 75, 78, 83, 86, 89, 91, 95, 96, 134, 148, 168, 225, 261, 267, 270, 281, 283, 293, 297, 307, 320], "robotiniti": 10, "robotget": 10, "mapnavig": 10, "destin": [10, 14, 17, 23, 24, 68, 77, 89, 91, 95, 134, 215, 251, 283, 307, 325], "id": [10, 12, 15, 18, 19, 20, 27, 29, 37, 43, 46, 47, 51, 55, 73, 77, 80, 82, 84, 86, 89, 96, 97, 98, 111, 113, 114, 115, 116, 117, 118, 123, 124, 125, 127, 134, 137, 140, 146, 147, 158, 159, 160, 166, 185, 193, 194, 210, 213, 217, 221, 246, 257, 272, 282, 283, 286, 298, 303, 307, 320, 330], "clear": [10, 14, 15, 18, 20, 46, 48, 55, 57, 89, 91, 96, 122, 127, 134, 137, 160, 170, 181, 226, 257, 283, 290, 297, 318], "remote_mission_servic": [10, 89], "remotemissionservic": [10, 11, 89, 213], "view_map": [10, 19, 282, 286], "pars": [10, 24, 27, 29, 30, 35, 42, 43, 73, 76, 80, 89, 91, 95, 96, 102, 111, 119, 129, 136, 184, 191, 205, 208, 225, 281, 284, 285, 286], "area_callback": [10, 18, 89, 98, 226], "enter": [10, 13, 23, 30, 31, 34, 35, 38, 40, 56, 60, 71, 75, 79, 81, 82, 83, 87, 89, 91, 283], "cross": [10, 13, 18, 19, 23, 24, 31, 37, 61, 63, 85, 86, 89, 91, 99, 149, 158, 226], "region": [10, 13, 17, 18, 23, 36, 55, 64, 89, 91, 97, 101, 158, 226, 266, 287, 316], "independ": [11, 15, 32, 37, 46, 54, 56, 88, 91, 126, 177], "fashion": 11, "catalog": 11, "graphnavservic": [11, 26, 88, 89, 134], "graphnavrecordingservic": [11, 13, 24, 89, 158], "missionservic": [11, 89, 210], "benefici": 12, "understand": [12, 16, 23, 26, 35, 43, 47, 54, 73, 74, 84, 85, 87, 91, 169, 313, 314], "tree": [12, 13, 47, 52, 55, 76, 77, 89, 91, 128, 142, 159, 212, 215, 298, 333], "infinit": [12, 118], "recurs": 12, "grpc": [12, 18, 26, 27, 35, 43, 57, 72, 73, 76, 77, 83, 87, 88, 89, 91, 92, 104, 109, 110, 112, 116, 122, 137, 141, 150, 152, 153, 154, 155, 159, 164, 180, 181, 184, 187, 190, 260, 281, 310, 313, 314, 320, 322, 325], "compil": [12, 24, 41, 44, 61, 73, 82, 86, 89, 91, 107, 164, 184, 210, 212, 314, 324], "amp": [12, 91, 243, 295, 309, 331, 334], "script": [12, 29, 31, 35, 42, 53, 57, 59, 60, 61, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 91, 164, 184, 228, 229, 246, 247, 251, 257, 268, 272, 276, 281, 283, 293, 295, 296, 297, 307, 311, 312, 313, 315, 316, 320, 323, 325], "medium": [12, 31, 43, 58, 59, 91], "etc": [12, 16, 19, 27, 43, 54, 56, 59, 60, 62, 68, 70, 71, 77, 87, 88, 89, 91, 111, 158, 159, 160, 174, 193, 228, 250, 286, 310], "translat": [12, 16, 18, 36, 37, 38, 47, 88, 91, 110, 126, 149, 174, 281], "noth": [12, 16, 31, 37, 82, 84, 89, 91, 95, 96, 118, 158, 160, 164, 226], "resili": [12, 89], "playmiss": [12, 24, 91], "ever": [12, 16, 52, 57, 91, 96, 153], "again": [12, 18, 31, 52, 61, 68, 78, 82, 84, 85, 87, 88, 89, 91, 96, 134, 148, 158, 210, 226, 282, 310, 321], "constant": [12, 29, 35, 36, 46, 50, 76, 77, 83, 84, 89, 91, 160, 191, 209], "advanc": [12, 13, 28, 36, 42, 54, 56, 68, 82, 91, 141, 160, 237, 241], "deal": [12, 14], "finish": [12, 15, 18, 34, 37, 52, 75, 79, 81, 84, 85, 86, 91, 99, 116, 160, 226, 282, 295, 297, 310], "grown": 12, "successfulli": [12, 16, 18, 21, 24, 33, 35, 37, 55, 75, 81, 84, 86, 87, 88, 89, 91, 114, 116, 123, 137, 151, 160, 180, 185, 228, 233, 270, 272, 276, 313, 315, 325], "boilerpl": [12, 81, 83, 84], "track": [12, 21, 30, 36, 37, 46, 48, 55, 73, 82, 89, 91, 95, 96, 116, 137, 141, 143, 180, 254], "logic": [12, 27, 35, 43, 59, 60, 66, 78, 91, 141, 293], "consum": [12, 16, 46, 89, 91, 281, 313, 320], "easier": [12, 27, 36, 44, 68, 73, 89, 91, 160, 224, 297], "seamlessli": 12, "correspond": [12, 14, 16, 24, 31, 35, 38, 41, 43, 44, 55, 60, 70, 88, 89, 91, 117, 134, 141, 142, 148, 160, 170, 193, 194, 215, 219, 223, 270, 271, 276, 284, 286, 293, 307], "deep": [12, 53, 82, 296, 316], "42": [12, 49, 298], "1000": [12, 91, 136], "perform": [12, 16, 18, 19, 21, 22, 24, 33, 34, 37, 42, 43, 48, 52, 53, 54, 55, 56, 57, 60, 61, 62, 68, 71, 76, 77, 82, 83, 85, 88, 91, 96, 113, 115, 116, 122, 134, 149, 159, 180, 228, 233, 249, 281, 296, 310, 313, 314, 315, 320, 322, 324], "remov": [12, 21, 22, 31, 35, 38, 54, 55, 60, 66, 68, 83, 91, 96, 114, 116, 118, 122, 140, 141, 163, 164, 173, 184, 185, 255, 268, 273, 306, 313, 321], "tediou": 12, "therein": 12, "familiar": [12, 86, 313], "assembli": 12, "harder": 12, "matlab": 12, "though": [12, 14, 19, 89, 91, 212, 269, 309], "formal": 12, "basic": [12, 22, 27, 31, 33, 34, 40, 43, 59, 62, 76, 77, 79, 80, 81, 82, 86, 88, 89, 91, 184, 189, 191, 224, 225, 283, 293, 312], "pattern": [12, 36, 37, 54, 73, 310, 320, 322, 334], "compar": [12, 13, 20, 22, 37, 42, 50, 52, 62, 84, 89, 141, 143, 161], "benefit": [12, 54], "easi": [12, 19, 31, 46, 75, 81, 82, 85, 86, 91, 161, 164, 184, 269], "edit": [12, 29, 30, 34, 56, 60, 71, 87, 89, 91, 165, 208, 217, 221, 259, 309, 313, 320], "serivc": 12, "seri": [12, 19, 29, 35, 43, 60, 66, 89, 91, 120, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 202, 203, 205, 246, 251, 282], "associ": [12, 16, 18, 19, 20, 21, 24, 25, 28, 29, 30, 35, 40, 41, 43, 44, 46, 47, 51, 55, 57, 59, 62, 77, 87, 89, 96, 112, 113, 115, 116, 117, 127, 134, 137, 140, 143, 158, 159, 165, 173, 185, 193, 194, 197, 199, 217, 219, 221, 223, 226, 249, 251, 282, 283, 286, 296, 298, 306, 313, 314, 315, 316, 318, 333], "encapsul": [12, 47, 91], "reorder": [12, 268], "wrapper": [12, 89, 91, 99, 105, 119, 125, 161, 180, 182, 184], "speicifi": 12, "within": [12, 16, 19, 21, 23, 26, 27, 29, 30, 31, 33, 35, 40, 43, 47, 51, 52, 55, 57, 62, 65, 73, 84, 89, 91, 94, 95, 96, 101, 126, 137, 142, 155, 159, 172, 191, 192, 194, 196, 199, 201, 202, 203, 251, 281, 310, 313, 320, 333, 334], "context": [12, 16, 21, 43, 59, 83, 84, 89, 91, 101, 116, 137, 140, 172, 226, 270, 272, 282, 312], "graph": [12, 13, 18, 19, 20, 21, 24, 26, 47, 52, 80, 82, 88, 97, 99, 148, 158, 224, 259, 283, 284, 285, 286, 311, 316], "nav": [12, 18, 19, 24, 26, 52, 80, 88, 97, 99, 158, 224, 259, 283, 284, 285, 311], "paus": [12, 18, 20, 24, 55, 89, 91, 210, 226, 233], "resum": [12, 18, 54, 89, 91, 309], "convert": [12, 26, 29, 35, 47, 54, 56, 57, 62, 76, 82, 83, 84, 85, 89, 91, 94, 95, 96, 112, 114, 118, 128, 129, 136, 137, 149, 159, 160, 165, 180, 184, 185, 208, 215, 254, 281, 285, 330], "compileautowalk": [12, 91], "loadautowalk": [12, 91], "convers": [12, 56, 83, 89, 95, 113, 137, 180, 208], "queri": [12, 16, 17, 18, 24, 27, 40, 43, 53, 55, 59, 76, 89, 91, 104, 111, 114, 116, 117, 118, 120, 136, 137, 151, 154, 157, 159, 162, 179, 217, 219, 221, 223, 251, 254, 272, 274, 276, 278, 281, 289, 291, 293, 296, 298, 308, 313, 316, 329], "rememb": [12, 23, 31, 33, 46, 86, 87, 91, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 288, 289], "correctli": [12, 22, 29, 46, 55, 60, 62, 64, 70, 75, 76, 78, 81, 84, 87, 88, 89, 91, 99, 101, 134, 273, 293, 297, 313, 314, 315, 329, 333], "everyth": [12, 56, 62, 75, 76, 77, 78, 81, 83, 86, 89, 91, 116, 314], "nodeidentifi": 12, "piec": [12, 40, 53, 57, 62, 77, 80, 85, 88, 89, 91, 116, 117, 233, 314], "node_id": [12, 91], "integ": [12, 27, 29, 31, 35, 52, 56, 57, 76, 91, 125, 136, 193, 208, 320], "equival": [12, 91, 217, 221, 231], "nodeinfo": 12, "user_data_id": [12, 91], "userdata": 12, "give": [12, 18, 30, 31, 34, 36, 51, 52, 59, 68, 73, 88, 89, 91, 111, 160, 272], "insight": 12, "incomplet": [12, 134], "getstat": [12, 24, 91], "malform": [12, 89, 91, 107, 157, 159, 282], "failed_el": [12, 91], "failedel": 12, "why": [12, 27, 30, 35, 45, 82, 85, 89, 91, 160, 165, 282], "resolv": [12, 46, 87, 89, 91, 126, 163], "modif": [12, 31, 82, 86, 87, 89, 91], "lease_use_result": [12, 91, 126, 141, 143], "failed_nod": [12, 91], "previous": [12, 18, 33, 51, 62, 71, 76, 77, 86, 89, 91, 105, 110, 118, 123, 125, 141, 155, 160, 193, 272], "mention": [12, 47, 91, 96], "confin": 12, "measur": [12, 16, 19, 26, 27, 29, 37, 48, 55, 82, 89, 91, 155, 170, 281, 282], "alert": [12, 166], "conform": [12, 63], "inject": [12, 87], "downsid": [12, 91], "editor": [12, 91], "embed": [12, 43, 56, 60, 89, 91, 281], "recompil": 12, "recombin": [12, 35], "ll": [13, 37, 56, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 91, 160, 249, 272, 320], "topolog": [13, 19, 91, 134, 148, 282], "rpc": [13, 15, 17, 18, 19, 22, 23, 26, 29, 30, 34, 35, 36, 41, 43, 44, 48, 52, 54, 55, 56, 57, 73, 77, 88, 89, 91, 96, 105, 106, 110, 112, 113, 114, 115, 116, 117, 118, 122, 125, 126, 134, 140, 141, 146, 153, 159, 160, 162, 163, 164, 169, 180, 210, 251, 252, 260, 282, 313, 314, 315, 325], "pointer": 13, "snapshot": [13, 16, 19, 20, 21, 37, 47, 55, 57, 89, 91, 128, 134, 137, 148, 150, 159, 282, 283, 285, 286, 333], "captur": [13, 16, 19, 23, 25, 39, 40, 42, 43, 47, 53, 55, 79, 80, 81, 83, 84, 89, 91, 111, 113, 115, 116, 117, 137, 168, 217, 219, 221, 223, 225, 271, 276, 288, 296, 313, 315, 320, 322], "approxim": [13, 17, 19, 76, 81, 84, 91, 176, 276, 282], "2m": [13, 91, 176, 283], "otherwis": [13, 19, 23, 24, 29, 36, 37, 46, 56, 83, 84, 91, 99, 112, 113, 118, 125, 126, 128, 137, 141, 155, 159, 160, 162, 163, 165, 177, 180, 184, 212, 251, 270, 283, 297, 310, 313, 315], "annot": [13, 16, 18, 19, 20, 23, 31, 35, 59, 77, 81, 82, 83, 84, 85, 86, 89, 148, 158, 188, 189, 193, 194, 201, 204, 226, 285, 292, 333], "them": [13, 16, 18, 19, 22, 24, 30, 31, 34, 38, 40, 46, 53, 55, 57, 59, 62, 73, 75, 76, 78, 80, 82, 86, 87, 88, 89, 91, 111, 116, 118, 121, 134, 166, 201, 246, 270, 271, 276, 282, 283, 293, 314, 322, 324, 329], "restrict": [13, 31, 35, 36, 91, 270], "sensori": 13, "commonli": [13, 24, 47, 55, 62, 87, 159, 283, 315], "aid": [13, 21, 30, 52, 89, 91, 112], "unawar": [13, 22, 91], "elect": 13, "guess": [13, 16, 22, 26, 91, 134, 148, 282, 283, 285], "compos": [13, 18, 35, 48, 55, 60, 86, 91, 160, 270, 293, 320], "node": [13, 47, 86, 89, 128, 210, 212, 213, 215, 295], "arrang": [13, 91], "hierarchi": [13, 24, 35, 52, 89, 91, 97], "loop": [13, 16, 24, 29, 36, 60, 63, 66, 81, 83, 84, 85, 89, 91, 118, 148, 283, 310], "iter": [13, 24, 62, 80, 84, 91, 112, 116, 148, 162, 180, 202, 213, 217, 221, 273, 282, 320, 322], "proce": [13, 18, 36, 43, 68, 91, 116, 141, 226], "branch": [13, 19, 91, 283], "success": [13, 17, 18, 20, 24, 26, 54, 68, 76, 83, 84, 85, 86, 87, 89, 91, 113, 115, 116, 137, 153, 155, 160, 176, 179, 211, 215, 247, 281, 310], "nodest": [13, 89], "enum": [13, 18, 22, 31, 35, 43, 54, 56, 73, 89, 91, 99, 116, 125, 141, 158, 160, 176, 184, 215], "file": [13, 19, 25, 28, 32, 33, 34, 39, 41, 43, 50, 54, 55, 59, 68, 70, 71, 73, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 96, 107, 111, 114, 116, 117, 136, 159, 184, 187, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 200, 201, 203, 204, 205, 219, 225, 228, 234, 242, 245, 246, 247, 249, 252, 255, 257, 268, 269, 270, 272, 276, 277, 280, 281, 284, 288, 290, 292, 293, 294, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 310, 311, 312, 313, 314, 315, 316, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 332, 333], "necessarili": [13, 37, 91, 270, 283, 315], "exit": [13, 18, 31, 34, 57, 68, 71, 81, 83, 84, 85, 87, 89, 91, 99, 116, 141, 164, 180, 184, 226, 243, 283, 295, 297, 309, 314, 315, 317, 320, 322, 323, 331, 334], "crosswalk": [13, 89], "flash": [13, 18, 89, 172, 226], "sound": [13, 18, 89, 168, 226], "robustli": [14, 65], "old": [14, 16, 21, 27, 34, 43, 54, 60, 62, 89, 91, 122, 137, 281, 293, 313], "imagin": [14, 18, 56, 89], "someon": 14, "stuck": [14, 17, 20, 89, 91, 134], "resort": 14, "succe": [14, 23, 24, 35, 84, 89, 91, 126, 137, 160, 282, 298, 310], "free": [14, 26, 56, 82, 91, 304, 314], "aren": [14, 19, 81, 84, 91, 276], "uncheck": [14, 31, 89], "box": [14, 31, 35, 40, 53, 55, 56, 80, 81, 82, 83, 84, 85, 87, 89, 91, 185, 272, 273, 296, 297, 312, 320, 322, 333], "mark": [14, 16, 31, 51, 52, 57, 59, 89, 91, 116, 140, 184, 333], "screen": [14, 16, 18, 33, 34, 35, 36, 41, 79, 83, 87, 89, 91, 169, 226, 276, 310, 313, 316, 322, 330], "replan": 14, "navigateto": [14, 19, 20, 89], "navigaterout": [14, 20, 89], "travelparam": [14, 89, 134], "true": [14, 16, 24, 35, 37, 56, 57, 76, 80, 81, 82, 83, 84, 85, 86, 88, 89, 91, 95, 96, 99, 101, 106, 109, 111, 112, 114, 116, 118, 122, 125, 128, 129, 134, 137, 141, 148, 155, 158, 159, 160, 162, 164, 165, 169, 173, 177, 180, 184, 185, 189, 205, 208, 215, 217, 273, 282, 299, 300, 301, 302, 303, 304, 305], "playset": [14, 89], "playmissionrequest": 14, "pictur": [15, 47, 66, 68, 81, 84, 87, 89, 91, 234, 242, 313], "station": [15, 16, 24, 89, 91, 123], "recharg": 15, "tag": [15, 40, 47, 62, 78, 86, 91, 158, 168, 173, 252, 270, 273, 281, 282, 286, 293, 297, 307, 315, 319, 320], "kept": [15, 89, 290, 314], "clean": [15, 18, 68, 86, 89, 91, 114, 164, 184, 226], "unobstruct": [15, 91], "index": [15, 27, 76, 83, 89, 91, 118, 120, 150, 187, 188, 192, 193, 195, 196, 199, 200, 202, 203, 205, 254, 315], "cone": 15, "connector": [15, 54, 60, 63, 66], "reveal": 15, "rear": [15, 54, 59, 62, 65, 89, 91, 160, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "tower": 15, "secur": [15, 22, 27, 43, 54, 60, 67, 71, 87, 88, 89, 110, 159, 184, 314], "interlock": [15, 66], "expos": [15, 26, 48, 55, 59, 63, 76, 77, 88, 159, 160, 251, 252], "four": [15, 20, 31, 35, 41, 91, 225, 315], "dockingcommand": [15, 91, 123], "dockingcommandfeedback": [15, 91], "feedback": [15, 20, 57, 73, 84, 85, 88, 113, 115, 123, 124, 134, 147, 160, 179, 272], "getdockingconfig": [15, 91], "getdockingst": [15, 91], "detect": [15, 18, 19, 21, 22, 36, 47, 53, 55, 57, 62, 79, 81, 82, 83, 84, 89, 91, 158, 160, 224, 226, 251, 266, 273, 280, 286, 296, 297, 313, 315, 316, 321], "enough": [15, 16, 22, 23, 52, 65, 73, 83, 89, 91, 141, 149, 234, 235, 242, 244, 251, 272, 281, 320], "status_in_progress": [15, 91], "status_dock": [15, 89, 91], "dockingcomand": 15, "unless": [15, 17, 20, 22, 31, 34, 37, 40, 60, 61, 70, 78, 86, 88, 89, 91, 158, 297], "safeti": [15, 17, 18, 48, 52, 55, 65, 88, 91, 155, 226, 260, 290, 320], "prep_pose_behavior": [15, 91, 123], "prep_pose_undock": [15, 89, 91], "docking_station_id": [15, 91], "status_at_prep_pos": [15, 89, 91], "remain": [15, 17, 18, 35, 37, 55, 77, 80, 88, 89, 91, 163, 231, 273], "isn": [15, 16, 23, 26, 34, 35, 82, 83, 85, 91], "manual": [15, 19, 20, 21, 30, 31, 35, 59, 62, 70, 78, 82, 89, 91, 96, 134, 176, 177, 229, 245, 283, 298, 313, 314], "wasn": [15, 91], "circumst": [15, 56, 91], "global": [16, 17, 19, 21, 23, 80, 89, 91, 284, 286, 315], "satellit": 16, "gnss": [16, 91], "earth": [16, 91, 281, 285], "constel": 16, "Their": [16, 73], "nation": 16, "marin": 16, "electron": 16, "known": [16, 20, 21, 22, 26, 34, 47, 52, 55, 57, 59, 78, 91, 96, 128, 134, 137, 141, 157, 159, 208, 217, 221, 283, 286, 313], "nmea": [16, 89, 129, 130, 281], "0183": [16, 281], "gga": [16, 281], "latitud": [16, 89, 91, 285, 298], "longitud": [16, 89, 91, 285, 298], "altitud": 16, "gst": [16, 281], "deviat": [16, 20, 36, 91], "accur": [16, 36, 47, 57, 89, 91, 158, 176, 240, 283], "zda": [16, 281], "grade": [16, 91], "improv": [16, 19, 36, 42, 43, 46, 54, 55, 62, 86, 87, 91], "relai": 16, "One": [16, 19, 21, 29, 40, 45, 60, 75, 87, 89, 91, 106, 134, 141, 148, 158, 272, 282, 321], "augment": [16, 21, 91], "sba": [16, 91], "waa": 16, "centimet": 16, "kinemat": [16, 24, 30, 47, 48, 55, 91, 97, 160, 258, 283], "rtk": 16, "maxim": [16, 19, 91], "whole": [16, 21, 27, 31, 43, 62, 88, 91], "usb": [16, 19, 24, 38, 57, 60, 68, 78, 89, 91, 268, 281, 284, 285, 286, 293, 311, 313, 315], "wi": [16, 91, 155], "fi": [16, 91, 155], "bluetooth": [16, 226], "accept": [16, 35, 36, 45, 52, 54, 59, 62, 67, 82, 83, 84, 89, 91, 96, 112, 137, 155, 160, 212, 272, 281, 283, 296, 312, 314, 316, 320, 322], "figur": [16, 37, 73, 80, 82, 91], "depict": [16, 19, 24, 28], "involv": [16, 18, 19, 45, 59, 66, 91, 134, 310], "trimbl": [16, 89, 281], "sps986": [16, 89, 281], "o": [16, 26, 43, 53, 55, 58, 59, 66, 69, 70, 75, 76, 81, 83, 87, 184, 226, 246, 249, 251, 252, 265, 270, 273, 293, 296, 306, 307, 308, 313, 316, 331], "udp": [16, 59, 62, 132, 249, 281], "listen": [16, 54, 71, 89, 91, 130, 251, 310, 313, 315], "suitabl": [16, 48], "newgpsdatarequest": [16, 89, 281], "aggreg": [16, 41, 55, 89, 130, 132, 251, 281], "geograph": 16, "gc": 16, "ecef": [16, 91], "horizont": [16, 31, 34, 35, 36, 37, 47, 84, 89, 91, 169, 284], "yaw": [16, 17, 29, 35, 36, 37, 38, 47, 59, 85, 88, 89, 91, 149, 158, 160, 207, 283, 334], "se3pos": [16, 19, 23, 35, 47, 48, 85, 89, 128, 134, 149, 158, 160, 185, 282], "doc": [16, 73, 83, 91, 161, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 287, 288, 289, 299, 300, 301, 302, 303, 304, 305, 308, 322, 334], "geometr": [16, 23, 47, 88, 91], "inerti": [16, 47, 48, 91], "boot": [16, 24, 35, 47, 60, 91, 96], "antenna": [16, 281], "convent": [16, 85, 89, 91, 187, 190, 282], "llh": 16, "seed": [16, 17, 19, 23, 80, 89, 91, 134, 283, 284], "metric": [16, 19, 55, 68, 82, 89, 91, 97, 111, 148, 162, 208, 278, 293], "repres": [16, 19, 21, 22, 27, 29, 31, 35, 36, 46, 47, 48, 52, 54, 55, 56, 57, 62, 70, 73, 76, 77, 88, 89, 91, 95, 96, 104, 109, 118, 125, 128, 134, 136, 137, 141, 143, 149, 150, 158, 160, 163, 180, 207, 208, 283, 285, 286, 314, 315, 333], "movement": [16, 34, 37, 89, 91, 160], "importantli": 16, "six": [16, 26, 67, 86], "extract": [16, 19, 27, 80, 82, 85, 89, 91, 149, 246, 259, 282, 284, 285, 317], "cartesian": [16, 89, 91, 231], "tangent": 16, "correl": [16, 23, 84, 91, 330], "getloc": [16, 91], "getlocationrespons": [16, 281], "explan": [16, 48, 76, 77, 82, 314], "status_unknown": [16, 54, 73, 91], "No": [16, 27, 29, 32, 35, 37, 54, 56, 62, 76, 81, 84, 87, 88, 89, 91, 134, 159, 181, 210, 243, 266], "status_ok": [16, 54, 91, 143, 165, 226], "status_needs_devic": 16, "status_need_data": [16, 91], "usabl": [16, 27, 55, 89, 272, 281], "status_need_more_data": [16, 91], "status_stal": [16, 89, 91], "raw": [16, 27, 39, 47, 55, 57, 76, 77, 83, 88, 89, 91, 136, 137, 219, 285, 286, 320, 322], "inaccur": [16, 21, 91, 282], "reachabl": [16, 89, 91, 289, 314], "world_object": [16, 89, 185, 282], "hasfield": 16, "gps_properti": [16, 91], "robot_body_loc": [16, 91], "anchor": [16, 20, 80, 89, 134, 148, 259, 281, 283, 284, 285], "optim": [16, 60, 80, 89, 91, 148, 259, 281, 283, 284, 285], "closur": [16, 89, 91], "blue": [16, 19, 29, 31, 91, 282, 285, 286, 313, 330], "openstreetmap": 16, "nois": [16, 46, 91], "systemat": 16, "ecef_tform_waypoint": [16, 91], "gps_set": [16, 91], "tform": [16, 47, 89, 91, 149], "unsatisfi": 16, "signal": [16, 18, 26, 52, 60, 66, 89, 97, 99, 116, 118, 164, 226, 248, 251, 261, 293], "lost": [16, 17, 19, 22, 30, 46, 52, 89, 91, 134, 281], "realsens": [16, 91], "lidar": [16, 17, 19, 21, 22, 23, 57, 59, 60, 68, 89, 91, 134, 158, 284], "reacquir": [16, 89], "interrupt": [16, 17, 18, 34, 54, 66, 89, 91, 257, 314], "present": [16, 29, 40, 54, 55, 56, 66, 78, 88, 89, 91, 121, 141, 234, 242], "misconfigur": [16, 91], "broken": [16, 52, 89], "impair": [16, 89, 158], "getlocalizationst": [16, 17, 20, 23, 91], "centric": 16, "gpslocal": 16, "diagnost": [16, 89], "whatev": [16, 37, 85, 88, 91, 118, 134], "state_ok": [16, 91], "state_bad_fram": [16, 91], "ko": [16, 89, 91], "state_no_gps_object": [16, 91], "state_registration_not_ok": [16, 91], "state_no_gps_st": [16, 91], "state_not_enough_satellit": [16, 91], "state_no_ecef_fram": [16, 91], "state_high_error": [16, 91], "state_stal": [16, 91], "state_internal_error": [16, 91], "navigatetoanchor": [16, 19, 20, 91], "gpsnavigationparam": [16, 134], "goal": [16, 17, 18, 20, 81, 82, 84, 85, 89, 91, 134, 160, 179, 273, 274], "closest": [16, 91, 149, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "gpsstatu": 16, "gps_status_ok": [16, 91], "gps_status_no_coords_in_map": [16, 91], "gpscoordin": 16, "neither": [16, 26, 31, 33, 34, 91], "nor": [16, 26, 31, 33, 34, 87, 91], "gps_status_too_far_from_map": [16, 91], "weretoo": 16, "suffici": [16, 23, 84, 85, 87, 88, 91], "precis": [16, 17, 18, 26, 35, 37, 46, 48, 56, 59, 67, 82, 89, 91, 176, 208, 281], "sub": [16, 52, 54, 88, 89, 91, 95, 110, 140, 141, 142], "magnitud": [16, 48, 91], "processanchor": [16, 91], "param": [16, 29, 35, 36, 84, 85, 89, 95, 97, 102, 106, 112, 114, 116, 134, 137, 140, 148, 150, 160, 165, 210, 213, 217, 219, 221, 223, 282], "re": [16, 17, 21, 31, 37, 42, 52, 54, 55, 59, 75, 77, 81, 82, 83, 84, 85, 86, 87, 89, 91, 96, 99, 101, 105, 116, 122, 153, 164, 184, 273, 285, 315], "downloadgraph": [16, 19, 20, 91], "icon": [16, 34, 61, 62, 71, 78, 86, 91, 270, 293, 298, 313, 319], "live": [16, 18, 26, 41, 44, 45, 46, 55, 56, 76, 81, 82, 91, 111, 116, 122, 141, 276, 281, 282, 313, 315, 318, 322, 330], "moment": [16, 34, 36, 91], "question": [16, 24, 31, 87, 89, 210, 259, 311], "ey": 16, "appear": [16, 18, 26, 29, 31, 34, 35, 36, 46, 55, 57, 59, 68, 80, 81, 88, 89, 91, 134, 269, 282, 298, 310, 313, 315], "infer": [16, 22, 29, 86, 89, 91, 316], "size": [17, 22, 27, 37, 55, 62, 80, 81, 89, 91, 107, 112, 119, 126, 149, 158, 165, 185, 193, 210, 273, 276, 320, 322], "simplest": [17, 45, 76, 77, 88, 160], "decid": [17, 18, 23, 53, 91], "fewest": 17, "longer": [17, 18, 22, 23, 31, 36, 37, 43, 52, 54, 55, 57, 73, 83, 84, 85, 88, 89, 91, 116, 141, 155, 160, 163, 180, 215, 225, 272], "doubl": [17, 31, 32, 35, 82, 83, 91, 136, 159, 168, 193, 251, 316], "distant": 17, "encourag": [17, 48, 55, 88, 89], "resend": [17, 55, 134], "deadlin": [17, 88, 91, 116, 180], "quickli": [17, 18, 21, 34, 36, 37, 55, 57, 68, 73, 76, 81, 89, 91, 313, 322], "disconnect": [17, 31, 34, 38, 89, 91, 128, 268, 283, 311], "reli": [17, 19, 20, 21, 23, 55, 89, 116, 270], "navigationfeedback": [17, 20, 91], "navigationfeedbackrespons": [17, 89, 134], "status_following_rout": [17, 91], "status_reached_go": [17, 91], "exactli": [17, 29, 35, 37, 45, 76, 85, 89, 91, 141, 273, 276, 283], "status_no_rout": [17, 91], "status_no_loc": [17, 91], "status_not_localized_to_rout": [17, 91], "status_command_overridden": [17, 91], "ask": [17, 24, 35, 60, 68, 81, 83, 91, 105, 210, 229, 249, 270, 294], "status_lost": [17, 23, 91], "confid": [17, 81, 83, 84, 89, 91, 296, 297, 316, 320], "status_stuck": [17, 89, 91], "troubl": [17, 34, 86, 134, 319], "status_robot_frozen": [17, 91], "status_robot_fault": 17, "fell": 17, "hardwar": [17, 26, 34, 46, 55, 57, 62, 63, 66, 76, 88, 89, 91, 111, 160, 162, 251, 278, 295, 312, 317, 322, 325], "status_constraint_fault": [17, 23, 91], "choos": [17, 20, 31, 34, 43, 57, 62, 71, 79, 89, 91, 136, 228, 250, 268, 273, 282, 297, 306, 309, 314], "status_lease_error": [17, 91], "status_command_timed_out": [17, 91], "status_robot_impair": [17, 89, 91], "crtical": [17, 91], "percept": [17, 36, 46, 48, 55, 89, 91, 134, 185, 224, 273, 330], "status_area_callback_error": [17, 91], "forklift": [18, 226], "road": [18, 226], "remot": [18, 24, 44, 52, 54, 68, 71, 88, 89, 118, 126, 158, 209, 226, 247, 259, 298], "ml": [18, 60, 62, 81, 83, 84, 85, 86, 226], "approach": [18, 21, 26, 31, 33, 34, 38, 54, 62, 73, 78, 91, 241, 270], "rerout": [18, 44, 91, 134], "elsewher": [18, 82, 212], "regardless": [18, 29, 34, 47, 89, 91, 227], "anytim": [18, 226], "friction": [18, 36, 89, 91, 158], "coeffici": [18, 36, 89, 91, 158], "slipperi": 18, "deleg": [18, 41, 52, 89, 91, 181], "indefinit": [18, 34, 91], "transfer": [18, 26, 42, 81, 82, 85, 91, 99, 181, 284, 285, 286], "retain": [18, 26, 34, 35, 52, 88, 89, 91, 141], "throughout": [18, 26, 35, 52, 54, 55, 77, 89, 91], "contrast": [18, 42, 47, 91, 231, 284, 315], "altogeth": 18, "surround": [18, 33, 55, 63, 89, 91, 226, 320], "pseudocod": [18, 57, 226], "slowli": [18, 26, 37], "confirm": [18, 45, 52, 89, 91, 226, 272, 293, 310, 313], "brighter": [18, 321], "areacallbackservic": [18, 98, 100, 101], "directori": [18, 19, 29, 30, 40, 41, 46, 53, 59, 60, 78, 80, 81, 82, 83, 85, 86, 87, 88, 89, 97, 100, 111, 127, 134, 136, 137, 151, 158, 159, 184, 219, 224, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 249, 251, 252, 256, 260, 268, 270, 271, 272, 276, 282, 283, 284, 285, 286, 287, 288, 289, 293, 296, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, 320, 322, 324, 325, 334], "areacallbackinform": [18, 56, 99, 101, 102], "begincallback": [18, 56, 91, 99, 101], "updatecallback": [18, 91, 101], "repeat": [18, 22, 24, 26, 34, 35, 36, 37, 44, 48, 50, 57, 67, 75, 78, 79, 89, 96, 128, 176, 184, 217, 221, 273, 276, 330], "regularli": [18, 21, 88, 89, 91, 105, 141, 153], "begincontrol": [18, 91, 101], "leaseuseresult": [18, 52, 89, 141, 143], "usag": [18, 26, 27, 43, 45, 60, 76, 91, 143, 250, 265, 269], "endcallback": [18, 91, 99, 101], "earli": [18, 29, 57, 89, 91, 116, 272], "shut": [18, 51, 89, 91, 98, 99, 101, 141, 164, 180, 184, 310], "unregist": [18, 83, 89, 91, 111, 122, 126, 160], "directoryregistrationkeepal": [18, 44, 46, 76, 77, 100, 122], "helper": [18, 35, 41, 44, 47, 57, 59, 60, 76, 77, 80, 84, 85, 88, 91, 93, 95, 96, 97, 99, 100, 112, 113, 116, 122, 123, 136, 140, 142, 153, 154, 158, 159, 160, 164, 167, 184, 214, 226, 228, 251, 252, 272, 293, 310, 313, 314, 315, 317, 325], "inherit": [18, 44, 57, 89, 112, 137], "class": [18, 27, 44, 46, 54, 56, 57, 74, 76, 77, 81, 82, 83, 87, 88, 91, 95, 96, 98, 99, 101, 102, 103, 104, 105, 106, 107, 110, 111, 112, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 207, 208, 210, 211, 213, 214, 215, 217, 221, 223, 226, 250, 251, 293, 320, 322], "areacallbackregionhandlerbas": [18, 99, 101], "areacallbackserviceservic": [18, 99, 100, 101], "grpcservicerunn": [18, 44, 76, 77, 89, 100, 164, 184], "newli": [18, 19, 59, 62, 89, 91, 159, 163, 282, 306, 316], "subclass": [18, 88, 89, 101, 112, 118, 134, 137, 159, 160], "area_callback_builder_fn": [18, 101], "fresh": [18, 26, 52, 89, 182], "share": [18, 19, 24, 26, 48, 51, 55, 91, 141, 188, 247, 273, 283, 286], "recreat": 18, "variou": [18, 19, 22, 31, 39, 52, 53, 56, 75, 79, 88, 89, 91, 158, 224, 253, 260, 307, 308], "emptiv": 18, "had": [18, 19, 85, 86, 89, 91, 116, 134, 160, 272], "chanc": [18, 19, 89, 91], "blockage_skip": [18, 91], "blockage_check": [18, 91], "particularli": [18, 31, 48, 89, 306], "affect": [18, 19, 46, 48, 55, 60, 68, 89, 91, 137, 159, 320], "failur": [18, 24, 35, 43, 46, 52, 57, 84, 87, 89, 91, 116, 126, 137, 141, 164, 179, 211, 215, 313, 325], "impairment_check": [18, 91], "impairment_skip": [18, 91], "incorrect": [18, 45, 76, 77, 83, 87, 89, 91, 96, 99, 113, 115, 125, 191, 257, 314, 315], "spuriou": 18, "entity_wait": [18, 91], "stopconfigur": 18, "major": [18, 54, 88, 91], "event": [18, 19, 21, 35, 41, 51, 66, 77, 89, 99, 111, 116, 118, 120, 140, 150, 159, 170, 172, 173, 217, 219, 221, 223, 254, 302, 305], "react": [18, 33, 46, 52, 89], "block_until_arrived_at_start": [18, 99, 226], "block_until_arrived_at_end": [18, 99, 226], "block_until_control": [18, 99, 226], "safe_sleep": [18, 99, 226], "met": [18, 45, 73, 91], "abort": [18, 34, 89, 91, 134, 269, 270], "rais": [18, 37, 46, 54, 57, 59, 76, 77, 88, 89, 91, 95, 99, 105, 106, 107, 112, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 128, 131, 134, 136, 141, 145, 146, 148, 150, 151, 152, 153, 154, 155, 159, 160, 162, 163, 164, 165, 179, 180, 184, 185, 188, 192, 193, 194, 196, 199, 200, 201, 203, 204, 205, 208, 210, 213, 217, 219, 221, 223, 310, 314], "except": [18, 42, 51, 54, 57, 62, 73, 76, 77, 84, 87, 88, 91, 95, 96, 97, 98, 99, 105, 106, 107, 112, 113, 116, 118, 120, 121, 122, 123, 125, 127, 128, 134, 136, 140, 141, 146, 148, 150, 151, 153, 154, 155, 157, 158, 159, 160, 163, 164, 165, 179, 180, 181, 184, 191, 208, 209, 210, 213, 215, 216, 217, 219, 220, 221, 223, 270, 314], "area_callback_region_handler_bas": [18, 99], "handlererror": [18, 99], "caught": [18, 57, 63, 89, 99, 141], "catch": [18, 26, 77, 89, 99, 116], "cleanup": [18, 61, 77, 86, 89, 116, 164, 184, 226], "sure": [18, 19, 22, 31, 33, 34, 57, 66, 70, 73, 76, 77, 81, 83, 84, 85, 87, 88, 89, 91, 99, 116, 160, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 268, 283, 288, 289, 295, 297, 313], "thread": [18, 26, 62, 76, 83, 88, 89, 91, 99, 101, 116, 118, 122, 125, 137, 140, 141, 153, 159, 163, 164, 172, 180, 184, 226, 293, 313, 320], "sleep": [18, 24, 81, 84, 85, 89, 99, 313, 320, 322], "has_control": [18, 99], "manner": [18, 21, 37, 40, 87, 89, 99, 315], "updatecallbackrequest": [18, 99], "stop_at_start": [18, 99, 226], "control_at_start": [18, 99, 226], "continue_past_start": [18, 99, 226], "stop_at_end": [18, 99, 226], "control_at_end": [18, 99, 226], "continue_past_end": [18, 99, 226], "constructor": [18, 57, 89, 141], "handler": [18, 89, 91, 97, 112, 118, 164, 184], "stop_at_": 18, "control_at_": [18, 226], "continue_past_": [18, 226], "area_callback_crosswalk": [18, 226], "acquir": [18, 26, 41, 43, 51, 52, 55, 57, 77, 88, 89, 91, 105, 111, 113, 114, 115, 122, 141, 144, 153, 160, 217, 221, 243, 245, 281, 283, 293, 295, 309, 320, 325, 331, 334], "wallet": [18, 89, 96, 99, 112, 113, 115, 117, 118, 120, 123, 134, 141, 155, 185, 210, 213], "stage_at_start": [18, 91], "set_localization_at_end": [18, 99], "unrecover": [18, 91, 126], "leaseerror": [18, 96, 123], "pathblock": [18, 89, 99], "restart": [18, 24, 60, 61, 62, 68, 70, 78, 85, 86, 89, 91, 96, 118, 122, 153, 210, 215, 251, 297, 310, 313, 315], "overrid": [18, 56, 57, 89, 96, 134, 137, 147, 160, 174, 176, 188, 210, 212, 226, 258], "route_chang": [18, 99], "Be": [18, 31, 57, 76, 77, 91, 309], "begincallbackrequest": [18, 56, 99], "meaning": 18, "But": [18, 78, 87, 282], "debug": [18, 43, 52, 54, 55, 57, 59, 61, 62, 76, 78, 83, 86, 87, 88, 89, 91, 112, 137, 160, 184, 254, 265, 282, 325, 333], "python3": [18, 57, 62, 75, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "area_callback_test_runn": [18, 226], "py": [18, 19, 26, 29, 30, 35, 45, 47, 57, 59, 62, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 94, 184, 215, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 255, 256, 257, 268, 269, 271, 272, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334], "robot_ip": [18, 32, 57, 62, 70, 75, 76, 77, 78, 86, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 251, 253, 254, 255, 256, 257, 268, 269, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 283, 287, 288, 289, 290, 291, 292, 294, 295, 296, 297, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "instruct": [18, 62, 68, 70, 71, 78, 79, 87, 89, 217, 221, 248, 251, 273, 281, 293, 295, 307, 313, 315, 320, 322], "prompt": [18, 23, 24, 26, 60, 82, 87, 89, 184, 210, 283, 299, 300, 301, 302, 303, 304, 305, 306], "bundl": [19, 62, 91, 111, 299, 300, 301, 302, 303, 304, 305], "apriltag": [19, 22, 47, 55, 89, 91], "imageri": [19, 286], "terrain": [19, 36, 55, 89, 91, 158, 286, 330], "relationship": [19, 47, 50, 88, 91, 282, 286], "color": [19, 29, 31, 35, 37, 55, 84, 89, 169, 185, 286, 320, 330], "viewer": [19, 42, 83, 84, 85, 86, 89, 283, 284], "squar": [19, 22, 91, 227, 286, 330], "label": [19, 24, 35, 80, 81, 82, 83, 84, 85, 86, 89, 91, 96, 118, 150, 286, 296, 314, 316], "startrecord": [19, 20, 91, 96], "afterward": [19, 78, 89], "curvatur": 19, "createwaypoint": [19, 20, 91], "createedg": [19, 20, 91], "kind": [19, 27, 57, 78, 89, 91, 193, 194, 199, 253], "chain": [19, 20, 54, 60, 91, 160, 282, 283], "physic": [19, 31, 54, 55, 59, 73, 76, 77, 86, 89, 91, 293, 325], "hundr": [19, 89], "000": [19, 82, 89, 308], "revers": [19, 37, 42, 91], "processtopologyrequest": [19, 148], "smarter": 19, "decis": [19, 55, 310], "encod": [19, 21, 26, 27, 42, 55, 56, 76, 89, 118, 193, 315], "odometri": [19, 23, 47, 89, 91, 160, 281, 282, 283], "total": [19, 35, 48, 60, 65, 66, 91, 192, 282, 322], "less": [19, 24, 31, 35, 36, 37, 42, 45, 48, 62, 65, 85, 89, 91, 116, 136, 155], "100": [19, 22, 35, 48, 49, 56, 60, 73, 75, 76, 80, 82, 83, 89, 91, 110, 136, 272, 276, 298], "believ": [19, 23, 55, 89, 91, 283], "staircas": [19, 21, 320], "larger": [19, 55, 62, 65, 89, 91, 126, 322], "twice": [19, 23], "app": [19, 21, 23, 25, 61, 68, 78, 79, 86, 89, 126, 163, 307, 313], "adher": [19, 165], "guidelin": [19, 58, 59, 65, 91], "multi": [19, 71, 91], "floor": [19, 35, 36, 37, 84, 89, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 284, 288, 289, 290], "least": [19, 23, 27, 29, 34, 36, 37, 55, 57, 59, 66, 83, 91, 226, 227, 234, 235, 242, 295, 314], "pathwai": 19, "def": [19, 23, 54, 57, 76, 77, 80, 81, 83, 84, 85, 116, 226, 247, 282, 285, 313], "print_anchor": 19, "po": [19, 29], "seed_tform_waypoint": [19, 80, 91], "interpol": [19, 30, 76, 91], "extrapol": [19, 48, 91], "processanchoringrequest": [19, 148, 282], "graph_nav_anchoring_optim": [19, 282], "1km": 19, "yellow": [19, 330], "notic": [19, 51, 68, 84, 86], "segment": [19, 81, 91], "disjoint": [19, 128], "layout": [19, 38, 89, 91, 283], "seed_tform_bodi": [19, 23, 80, 91], "blueprint": [19, 282], "bim": [19, 282], "ply": [19, 284], "graph_nav_extract_point_cloud": 19, "3rdparti": 19, "cloudcompar": [19, 284], "nearest": [19, 22, 55, 89, 91, 283, 315], "replac": [19, 34, 62, 68, 69, 76, 77, 78, 81, 82, 85, 89, 91, 125, 155, 313, 320], "footstep": [19, 89, 91], "hint": [19, 87, 89, 91, 99, 148, 158, 160, 282], "cach": [19, 21, 26, 55, 91, 97, 134, 159, 163], "preserv": [19, 26, 43, 52, 59, 89, 91, 118], "reus": [19, 68, 148, 306, 314], "5gb": [19, 60], "persist": [19, 20, 21, 22, 35, 43, 54, 60, 61, 62, 91, 153, 158, 159, 184, 287, 306, 313, 314], "reboot": [19, 21, 30, 34, 60, 62, 70, 89, 91, 287, 313, 314], "rule": [19, 35, 59, 62, 81, 86, 89, 226, 270], "conclus": 19, "downloadsnapshot": 19, "downloadwaypointsnapshot": [19, 20, 91], "downloadedgesnapshot": [19, 20, 91], "machin": [19, 45, 48, 60, 61, 63, 71, 75, 76, 77, 78, 81, 83, 84, 87, 89, 91, 249, 250, 266, 284, 285, 286, 297, 298, 307, 320], "your_map": [19, 284, 285, 286], "cabl": [19, 268, 284, 285, 286, 311], "waypoint_snapshot": [19, 91, 134, 282, 283, 284, 285, 286], "edge_snapshot": [19, 91, 134, 282, 283, 284, 285, 286], "uploadgraphrequest": 19, "uploadwaypointsnapshot": [19, 20, 89, 91], "uploadedgesnapshot": [19, 20, 89, 91], "graphnavrecord": 20, "togeth": [20, 37, 41, 47, 62, 66, 75, 77, 85, 86, 89, 91, 119, 160, 282, 313], "playback": [20, 24, 29, 34, 80, 89, 91, 217, 221, 225, 310], "adapt": [20, 60, 68, 77, 293, 324], "declar": [20, 23, 44, 73, 91], "scheme": [20, 26, 55, 60], "scale": [20, 22, 29, 36, 37, 80, 84, 91, 136, 169, 228, 282], "dictat": [20, 91], "drastic": [20, 29, 91], "phase": [20, 29, 36, 37, 91], "setloc": [20, 22, 89, 91], "cleargraph": [20, 91], "info": [20, 43, 77, 82, 89, 91, 111, 116, 155, 158, 161, 164, 184, 217, 221, 254, 270, 272, 282, 310, 315], "uploadgraph": [20, 89, 91], "validategraph": [20, 89, 91], "setrecordingenviron": [20, 91], "getrecordstatu": [20, 91], "stoprecord": [20, 91, 134], "gather": [21, 59, 91, 111, 146], "industri": [21, 62, 63], "commerci": 21, "todai": 21, "construct": [21, 31, 42, 62, 85, 89, 91, 96, 99, 128, 158, 160, 228, 283], "oil": 21, "ga": [21, 57, 77], "upon": [21, 32, 63, 65, 77, 84, 85, 86, 89, 91, 306, 314, 320], "visual": [21, 22, 23, 47, 48, 55, 75, 81, 82, 85, 89, 91, 134, 136, 137, 266, 274, 281, 282, 283, 284, 286, 308, 322], "textur": 21, "good": [21, 35, 36, 46, 54, 62, 80, 81, 82, 83, 84, 89, 91, 141, 160, 244, 282, 320], "wider": [21, 36, 65, 81], "corridor": [21, 23], "accumul": 21, "lead": [21, 68, 160], "driven": [21, 36, 38, 50], "subsequ": [21, 35, 37, 46, 48, 52, 55, 89, 91, 141, 163, 210], "fast": [21, 35, 36, 37, 57, 89, 91, 233], "switch": [21, 23, 24, 31, 56, 60, 89, 160, 173, 226, 228, 293, 295, 310, 316], "adjac": [21, 65, 91], "beacon": [21, 91], "assist": [21, 55, 59, 89, 91, 201], "recoveri": [21, 91], "aspect": [21, 31, 80, 91, 224], "overal": [21, 35, 37, 43, 65, 77, 89, 91, 116], "robust": [21, 35, 54, 58, 64, 84, 89, 91], "recov": [21, 89, 91, 175, 257], "significantli": [21, 23, 26, 55, 91], "ones": [21, 44, 89, 91, 224], "latest": [21, 24, 52, 70, 76, 82, 86, 87, 89, 91, 96, 104, 137, 143, 159, 219, 223, 293, 313, 319], "smooth": [21, 91], "primit": [22, 54, 56, 91], "easiest": [22, 34, 60, 76, 316], "fiducialinit": 22, "fiducial_init_nearest": [22, 91], "fiducial_init_nearest_at_target": [22, 91], "fiducial_init_specif": [22, 91, 134], "desert": 22, "qr": [22, 91], "recogn": [22, 57, 76, 81, 89, 91, 126, 208], "tag36h11": 22, "146mm": 22, "glossi": 22, "letter": [22, 68, 283, 313], "sheet": 22, "treat": [22, 26, 73, 89, 91, 141, 160], "sampl": [22, 34, 59, 91, 201, 247, 284], "background": [22, 26, 46, 71, 88, 89, 122, 137, 141, 153, 159, 164, 180, 184, 313], "michigan": 22, "april": [22, 91, 273, 282, 286], "lab": 22, "websit": [22, 91], "tape": [22, 233], "wall": [22, 55, 73, 91, 155, 273, 282], "60cm": 22, "18": [22, 32, 60, 66, 68, 74, 81, 86, 87, 89, 91, 320, 322, 334], "perman": [22, 35, 89, 91, 247], "span": [22, 27, 36], "3m": [22, 23, 82], "featureless": [22, 91], "inconsist": [22, 91, 96, 282], "shadow": [22, 91], "unevenli": 22, "lit": [22, 313], "unreli": [22, 35, 37, 89, 91], "backlit": 22, "bright": [22, 89, 91, 171, 172, 226, 321], "intersect": [22, 89, 91, 157, 308], "furnitur": 22, "equip": [22, 23, 89, 91, 312], "distinguish": 22, "graph_nav": [22, 26, 80, 88, 89, 97, 98, 101, 134, 148, 158], "initial_guess": [22, 91, 134], "algorithm": [22, 50, 82, 91, 177, 179, 313], "unknown": [22, 26, 33, 46, 73, 81, 91, 96, 113, 118, 126, 134, 141, 149, 155, 158, 159, 184, 210, 212, 215, 281, 312], "brute": [22, 89], "max_dist": [22, 91, 134, 136], "max_yaw": [22, 91, 134], "proprietari": 22, "scan": [22, 57, 59, 77, 91, 158], "techniqu": [22, 73, 84, 160], "poorli": [22, 128], "bland": 22, "hallwai": [22, 23, 282], "big": [22, 42, 53, 87, 89, 91, 125], "rich": 22, "fiducial_init_no_fiduci": [22, 91], "cumul": [23, 91], "vari": [23, 35, 37, 43, 46, 48, 50, 89, 91], "got": [23, 83, 84, 86, 160, 270, 296], "neg": [23, 35, 36, 55, 66, 84, 89, 91, 148], "slip": [23, 91], "unpow": [23, 63], "dramat": [23, 37], "dark": [23, 89, 91], "darker": 23, "lack": [23, 91, 320], "imposs": [23, 91], "snow": 23, "assess": 23, "park": 23, "lot": [23, 55, 56, 81, 82, 83, 85, 88, 91, 160], "car": 23, "roughli": [23, 91], "interven": [23, 35], "ascend": [23, 91], "descend": [23, 89, 91], "stairwel": 23, "carefulli": [23, 46, 91], "narrow": [23, 56], "get_graphnav_origin": 23, "graph_nav_cli": [23, 282], "bosdyn_sdk_robot": [23, 76, 137], "ensure_cli": [23, 44, 46, 59, 76, 77, 81, 83, 84, 88, 89, 140, 159, 272, 282, 312], "graphnavcli": [23, 89, 134, 282], "default_service_nam": [23, 44, 46, 59, 76, 77, 81, 83, 84, 88, 96, 98, 103, 105, 106, 107, 113, 115, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 133, 134, 135, 136, 138, 139, 140, 141, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 160, 161, 162, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 185, 210, 213, 272, 282, 312], "get_localization_st": [23, 134], "gn_origin_tform_bodi": 23, "math_help": [23, 47, 84, 85, 89, 128, 149], "from_proto": [23, 89, 125, 149], "complic": [24, 77, 112], "ai": 24, "player": [24, 31], "game": 24, "zero": [24, 27, 36, 37, 43, 48, 51, 56, 82, 85, 86, 89, 91, 136], "children": [24, 56, 91, 215], "child": [24, 47, 56, 89, 91, 128, 215], "thought": [24, 59, 91], "distinct": [24, 35, 81, 91], "subtre": [24, 52, 91], "insert": [24, 27, 31, 43, 68, 89, 91, 155, 226, 251, 295, 298], "bosdynrobotst": 24, "motor": [24, 31, 34, 38, 45, 51, 55, 60, 73, 87, 89, 91, 125, 140, 155, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 269, 273, 288, 289, 290, 295, 309, 321, 323, 331, 334], "entri": [24, 40, 56, 61, 73, 76, 83, 89, 91, 111, 121, 122, 150, 153, 194], "variabl": [24, 29, 42, 43, 50, 73, 78, 82, 85, 87, 89, 116, 118, 125, 184, 193, 215, 217, 219, 221, 223, 246, 247, 249, 282, 290, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 310, 316, 320, 322, 325, 334], "scope": [24, 52, 73, 88, 91, 296, 316], "myvari": 24, "nest": [24, 40, 54], "selector": [24, 31, 35], "retri": [24, 87, 89, 123, 126, 151, 257, 281], "fordur": 24, "simpleparallel": [24, 215], "pivot": [24, 37, 89], "binari": [24, 27, 35, 43, 61, 80, 89, 91, 96, 118, 193, 199, 251, 254], "comparison": [24, 91, 141, 143, 161], "bosdynrobotcommand": 24, "freez": [24, 29, 31, 36, 78, 89, 91, 160, 258], "bosdynpowerrequest": 24, "bosdynnavigateto": 24, "bosdyngraphnavst": [24, 89], "remotegrpc": [24, 89], "supervisor": 24, "street": [24, 89, 285], "ui": [24, 35, 56, 62, 88, 89, 91, 141, 165, 314], "autom": [24, 89, 91, 182, 234, 314], "anywher": 24, "ptz": [24, 40, 89, 167, 175, 297, 319], "aim": [24, 316], "pan": [24, 31, 91, 176, 286, 330], "tilt": [24, 91, 176, 321], "zoom": [24, 31, 56, 91, 176, 286, 297, 330], "spotcamstoremedia": 24, "instal": [24, 48, 60, 61, 66, 68, 74, 75, 77, 81, 82, 86, 89, 91, 111, 144, 178, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 297, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 311, 312, 314, 315, 317, 318, 319, 321, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333], "defineblackboard": [24, 215], "setblackboard": [24, 215], "constantresult": 24, "executechoreographi": [24, 34, 35, 89], "missionuploadchoreographi": [24, 89], "group": [24, 29, 31, 35, 40, 46, 78, 91, 113, 114, 129, 184, 224, 270], "anim": [24, 28, 31, 32, 34, 37, 89, 93, 96, 267], "wrap": [24, 44, 86, 88, 89, 91, 112, 116, 125, 160, 165], "titl": [24, 31, 56, 91], "power_on": [24, 88, 155, 159], "nodes_pb2": [24, 215], "service_nam": [24, 76, 84, 91, 102, 118, 121, 137, 151, 159, 163, 190, 197, 198, 296, 325], "localhost": [24, 71, 82, 86, 285, 296, 310, 315], "power_pb2": [24, 312], "powercommandrequest": [24, 55], "request_on": [24, 55, 91], "power_on_miss": 24, "bosdyn_power_request": [24, 91], "copyfrom": [24, 57, 77, 84, 85, 282], "basic_command_pb2": [24, 84], "standcommand": [24, 89, 160], "mobility_command_pb2": 24, "stand_request": [24, 91], "synchronized_command": 24, "synchronized_command_pb2": 24, "synchronizedcommand": [24, 89, 160], "robot_command": [24, 84, 85, 88, 89, 160, 185], "robot_command_pb2": [24, 160], "stand_miss": 24, "bosdyn_robot_command": [24, 91], "sitcommand": 24, "sit_request": [24, 91], "sit_miss": 24, "demo": [24, 89, 91, 227, 234, 235, 242, 244], "goe": [24, 37, 48, 74, 82, 89, 91, 313], "home": [24, 71, 81, 82, 87], "assum": [24, 26, 29, 43, 56, 63, 71, 78, 80, 84, 85, 87, 88, 89, 91, 122, 182, 226, 268, 282, 311, 313, 314], "inner": [24, 63], "goto": [24, 91], "battery_high_miss": 24, "battery_low_miss": 24, "state_nam": [24, 91], "robot_st": [24, 77, 84, 85, 162], "power_st": [24, 77, 88, 91], "locomotion_charge_percentag": [24, 77, 91], "is_battery_low": 24, "lh": [24, 91], "var": [24, 91, 215], "util_pb2": [24, 215], "variabledeclar": [24, 215], "type_float": [24, 91], "compare_l": [24, 91], "rh": [24, 91], "const": [24, 37, 91], "float_valu": [24, 91], "is_battery_low_miss": 24, "robot_state_miss": 24, "bosdyn_robot_st": [24, 91], "percentag": [24, 83, 89, 91, 160, 168, 276], "selector_miss": 24, "always_restart": [24, 91, 215], "loadmiss": [24, 91], "pausemiss": [24, 91], "restartmiss": [24, 91, 210], "getinfo": [24, 89, 91], "static": [24, 26, 47, 54, 61, 62, 86, 91, 96, 111, 112, 118, 134, 137, 141, 149, 158, 160, 194, 210, 293, 297, 307, 313, 320], "regard": [24, 31, 48, 89, 91, 262], "getmiss": [24, 91], "answerquest": [24, 91], "answer": [24, 89, 91, 174, 210, 259, 282, 311], "establishsess": [24, 91, 310], "cycl": [24, 29, 36, 37, 66, 88, 89, 91, 128, 153, 155, 172, 175, 180, 283, 313, 314], "teardownsess": [24, 91, 310], "forget": [24, 71, 83, 86, 89, 91, 106, 153], "intend": [25, 34, 35, 37, 43, 62, 89, 91, 99, 115, 116, 118, 125, 160, 273, 281, 293, 295, 313], "conclud": [25, 91], "log": [25, 27, 38, 42, 59, 60, 68, 70, 71, 76, 77, 78, 81, 83, 86, 87, 88, 96, 97, 104, 109, 111, 112, 113, 115, 116, 118, 122, 137, 153, 159, 160, 163, 164, 167, 184, 198, 224, 225, 246, 254, 310, 319, 322], "analysi": [25, 43, 47, 91], "knowledg": [26, 47, 55, 89, 274], "materi": [26, 63, 81, 91], "architectur": [26, 57, 60, 61, 62, 88, 89, 270, 281], "glue": 26, "authent": [26, 54, 55, 57, 59, 62, 76, 77, 81, 83, 84, 86, 89, 91, 105, 114, 116, 126, 159, 184, 217, 218, 219, 221, 223, 251, 253, 254, 281, 282, 299, 300, 301, 303, 304, 305, 313, 314, 329], "discoveri": [26, 91], "metadata": [26, 27, 35, 41, 62, 77, 80, 86, 89, 111, 113, 114, 115, 116, 117, 158, 193, 251, 296], "bootstrap": 26, "robotid": [26, 89, 159, 246], "serial_numb": [26, 88, 91], "speci": [26, 88, 91], "robotsoftwarereleas": 26, "software_releas": [26, 88, 91], "nicknam": [26, 87, 88, 89, 91, 217, 221], "serial": [26, 27, 30, 54, 60, 87, 89, 91, 96, 112, 119, 150, 198, 204, 253, 281, 283, 292], "computer_serial_numb": [26, 88, 91], "usernam": [26, 31, 32, 38, 54, 59, 60, 62, 68, 71, 75, 76, 81, 83, 85, 86, 87, 88, 89, 91, 105, 159, 184, 221, 223, 246, 249, 252, 253, 254, 290, 296, 297, 316, 320, 322, 334], "password": [26, 31, 32, 38, 54, 59, 62, 68, 75, 76, 81, 83, 85, 86, 87, 88, 89, 91, 105, 159, 173, 184, 221, 223, 246, 249, 252, 253, 254, 290, 293, 296, 297, 313, 316, 320, 322, 334], "compat": [26, 48, 54, 56, 64, 68, 82, 87, 88, 89, 91, 137, 293], "nearli": [26, 35, 91], "credenti": [26, 31, 32, 59, 60, 61, 68, 70, 75, 76, 77, 78, 86, 87, 88, 89, 91, 105, 110, 153, 159, 184, 221, 223, 251, 281, 290, 296, 297, 306, 314, 316, 318], "jwt": [26, 163], "consol": [26, 31, 59, 61, 68, 70, 75, 89, 91, 118, 153, 184, 248, 293, 312, 314, 325], "refresh": [26, 54, 91, 110, 140, 163, 177, 182], "rate": [26, 30, 36, 48, 54, 89, 91, 126, 262, 313, 320], "attack": [26, 54, 88, 89], "consecut": [26, 37, 283], "status_temporarily_locked_out": [26, 54, 91], "ship": [26, 44, 68], "discov": [26, 47, 54, 76, 77, 91], "serviceentri": [26, 59], "listserviceentri": [26, 59, 91], "quick": [26, 62, 68, 84, 87, 89, 91], "ex": [26, 29, 30, 32, 59, 71, 87, 91, 96, 183, 329], "dir": [26, 80, 81, 82, 83, 88, 111, 251, 252, 270, 281, 293, 296, 297, 307, 313, 315, 316, 319, 320], "authservic": [26, 54, 88, 89, 105], "directoryservic": [26, 88, 121], "directoryregistrationservic": [26, 88, 89, 122], "estop": [26, 31, 45, 84, 87, 88, 89, 97, 111, 155, 159, 217, 221, 226, 283, 320, 327], "estopservic": [26, 88, 89, 125], "friendli": [26, 91, 111], "semant": [26, 52, 55, 88, 296, 316], "imageservic": [26, 41, 57, 76, 88, 89, 136, 165, 325], "http": [26, 43, 60, 64, 65, 68, 70, 71, 75, 76, 77, 82, 86, 87, 88, 89, 91, 114, 193, 216, 217, 220, 221, 273, 285, 293, 296, 298, 313, 316, 320], "column": [26, 31, 40, 57, 87, 91], "startup": [26, 30, 41, 89, 91], "critic": [26, 43, 54, 89, 91, 134, 166], "basi": [26, 54, 73, 88, 89, 91, 118, 184], "think": [26, 48, 84, 91], "16": [26, 31, 37, 42, 66, 68, 86, 91, 136], "01": [26, 85, 86, 91, 310], "wherea": 26, "behind": [26, 46, 91, 157, 244], "15": [26, 51, 55, 66, 68, 81, 84, 86, 87, 91, 215], "expir": [26, 54, 89, 91, 98, 105, 134, 159, 163], "reject": [26, 35, 52, 89, 91, 96, 126, 141, 159, 160, 272], "timesyncupd": [26, 91], "vice": 26, "versa": 26, "drift": [26, 91, 282], "timesyncthread": [26, 180], "spawn": 26, "time_sync": [26, 81, 84, 88, 159, 180, 281], "pure": [26, 27, 48, 59, 91], "permiss": [26, 28, 32, 48, 59, 61, 70, 71, 87, 89, 126, 150, 181, 184, 270, 314], "ntp": [26, 59], "ownership": [26, 52, 89, 91, 123, 134, 141, 155, 158], "owner": [26, 52, 89, 91, 141], "reliabl": [26, 31, 36, 37, 46, 54, 60, 81, 89, 91], "ultim": [26, 57, 313], "reclaim": 26, "revok": [26, 52, 89, 91, 141, 179], "blob": [27, 89, 91, 118, 254, 292, 296, 316], "pod": [27, 43, 91, 187, 193], "plain": [27, 43, 91], "float": [27, 56, 57, 80, 84, 91, 96, 99, 101, 114, 116, 118, 137, 140, 146, 149, 155, 159, 160, 165, 166, 169, 172, 176, 179, 180, 185, 193, 208, 215], "cheap": 27, "thu": [27, 89, 91], "predict": [27, 82, 83], "disk": [27, 41, 43, 81, 89, 91, 96, 251, 282], "cpu": [27, 66, 82, 83, 173], "recover": [27, 89, 91], "di": 27, "cut": [27, 45, 60, 88, 89, 91, 125, 159, 269, 273, 296, 321, 323], "meant": [27, 57, 91, 96, 125, 140, 249, 251], "arbitrari": [27, 37, 43, 55, 89, 91, 117, 157, 181, 254, 282, 314], "effici": [27, 43, 81, 89, 91], "littl": [27, 36, 42, 43, 68, 83, 91], "streamabl": 27, "seek": [27, 63, 89, 205], "checksum": [27, 91, 188, 191, 205], "content": [27, 56, 57, 60, 71, 78, 80, 82, 87, 95, 96, 193, 254, 270], "int64": [27, 91], "address": [27, 31, 32, 43, 46, 54, 59, 60, 68, 71, 75, 76, 77, 81, 83, 85, 88, 89, 91, 100, 109, 110, 111, 112, 122, 163, 174, 217, 221, 226, 246, 251, 272, 281, 296, 297, 298, 310, 313, 314, 315, 316, 317, 319], "broad": [27, 54], "seriesidentifi": [27, 190, 191, 194], "series_typ": [27, 91, 190, 191, 193, 194, 195, 197, 201, 204], "spec": [27, 89, 102, 116, 137, 165, 180, 188, 193, 194, 208, 210, 213], "impli": [27, 88, 89], "robot_id": [27, 88, 89, 161], "robotidrequest": [27, 88, 246], "operatorcom": [27, 246], "channel": [27, 35, 40, 43, 54, 57, 77, 80, 88, 89, 91, 97, 109, 112, 118, 126, 137, 159, 163, 168, 187, 190, 192, 193, 194, 199, 203, 204, 219, 223], "bit": [27, 29, 32, 42, 68, 71, 91, 136, 173, 188, 194, 205, 310, 312], "sha1": [27, 91], "k1": [27, 91], "k2": [27, 91], "v2": [27, 43, 91, 320], "utf": [27, 91], "sort": [27, 31, 54, 89, 91, 134], "greatest": [27, 50, 117], "reserv": [27, 43, 59, 60, 62, 73, 86, 91], "namespac": [27, 73, 91, 184, 217, 221], "s2": [27, 91], "unifi": [27, 51, 91], "descriptorblock": [27, 189, 205], "datadescriptor": [27, 194, 205], "belong": [27, 91], "endian": [27, 42, 91], "magic": 27, "fileformatdescriptor": 27, "fileindex": [27, 188, 193, 194], "endmag": 27, "byte": [27, 42, 57, 76, 77, 89, 91, 116, 117, 118, 119, 137, 164, 184, 192, 196, 203, 205], "unsign": [27, 42, 91, 136], "int": [27, 42, 57, 76, 83, 84, 91, 96, 100, 110, 112, 113, 114, 115, 116, 118, 119, 129, 134, 136, 137, 140, 150, 160, 163, 164, 165, 177, 180, 184, 185, 192, 193, 194, 196, 199, 200, 202, 203, 208, 210, 215, 217, 219, 221], "fddb": 27, "digest": [27, 91], "56": [27, 40, 49, 50, 91], "0x00": [27, 60], "0x01": 27, "r": [27, 60, 62, 68, 70, 71, 78, 80, 82, 84, 86, 87, 91, 137, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "descriptor": [27, 91, 188, 194, 199, 205, 215], "0x02": 27, "submessag": [27, 91], "0xff": 27, "63": [27, 49], "timestamp_nsec": [27, 192, 193, 194, 196, 199, 200, 201, 202, 203, 204], "file_offset": [27, 91, 194], "choreograph": [28, 35, 36, 37, 91, 95, 96, 267, 327], "routin": [28, 31, 35, 38, 89, 91, 160, 179, 327], "licens": [28, 32, 33, 34, 48, 68, 87, 88, 97, 111, 126, 134, 150, 158], "music": [28, 32, 35, 38, 91], "gif": [28, 37, 85, 91], "customgait": [28, 35, 36, 37], "setup": [28, 45, 60, 62, 81, 82, 84, 86, 89, 91, 247, 270, 293, 322, 334], "uploadanim": 29, "readabl": [29, 30, 35, 41, 55, 57, 91, 118, 158, 159, 165, 185, 314], "cha": [29, 30, 34, 35, 94, 95, 96, 225], "separ": [29, 35, 40, 41, 51, 57, 59, 62, 73, 78, 84, 87, 89, 91, 95, 174, 181, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 249, 250, 274, 288, 289, 290, 309, 315, 322, 327], "dance_directori": [29, 30], "bourree_arm": [29, 30], "my_anim": [29, 30], "animation_file_to_proto": [29, 30, 35, 94, 95, 96], "output": [29, 39, 49, 50, 53, 54, 57, 60, 62, 66, 76, 80, 82, 83, 84, 85, 86, 87, 88, 89, 91, 109, 111, 116, 118, 136, 137, 149, 219, 233, 249, 250, 270, 271, 281, 284, 296, 297, 307, 308, 310, 315, 316, 320, 322], "filenam": [29, 40, 42, 62, 80, 81, 89, 91, 96, 109, 114, 136, 181, 184, 188, 192, 247, 271, 306, 314], "referenc": [29, 30, 40, 42, 57, 60, 66, 88, 89, 91, 134, 148, 212, 231, 273], "underscor": 29, "word": [29, 73, 141], "capit": [29, 68, 313, 314], "blank": [29, 89, 91, 134], "tab": [29, 31, 33, 34, 36, 38, 62, 70, 71, 78, 82, 243, 295, 306, 315, 331], "widget": [29, 53, 57, 91], "frequenc": [29, 48, 66, 91, 155, 159, 160, 172, 226, 271, 281], "slice": [29, 36, 37, 91, 96], "\u00bc": [29, 35], "beat": [29, 30, 35, 37, 91], "bpm": [29, 35, 91], "neutral": [29, 34, 36, 37, 91], "track1": 29, "track_n": 29, "mandatori": 29, "nomin": [29, 37, 55, 60, 89, 91, 160, 290], "stretch": [29, 31, 37, 91], "truncat": [29, 81, 91, 96, 208], "shorten": [29, 91], "display_rgb": 29, "green": [29, 79, 84, 87, 91, 269, 282, 286, 297, 313], "255": [29, 37, 59, 83, 84, 91, 185, 313], "hz": [29, 48, 84, 91, 160, 172], "retime_to_integer_slic": [29, 91], "rescal": [29, 91], "absent": [29, 91], "pad": [29, 31, 36, 38, 89, 91, 334], "neutral_start": [29, 91], "footprint": [29, 37, 88, 89, 91, 160], "precise_step": [29, 91], "expens": [29, 53, 73, 91], "balanc": [29, 36, 37, 89, 91, 160, 177], "timing_adjust": [29, 89, 91], "track_swing_trajectori": [29, 91], "swing": [29, 36, 37, 65, 89, 91], "liftoff": [29, 35, 36, 37, 91], "touchdown": [29, 35, 36, 37, 91], "arm_playback": [29, 91], "jointspac": [29, 91], "workspace_dance_fram": 29, "danc": [29, 30, 33, 34, 35, 37, 38, 88, 89, 91, 96, 327], "arm_requir": [29, 91], "arm_prohibit": [29, 91], "no_loop": [29, 91], "greater": [29, 71, 75, 91, 136, 320, 322], "starts_sit": [29, 91], "custom_gait_cycl": [29, 91], "gait": [29, 37, 89, 91], "style": [29, 36, 37, 43, 72, 73, 91, 92, 298], "panel": [29, 36, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289, 309], "coincid": [29, 91], "animateparam": 29, "parameter_nam": 29, "minimum_valu": 29, "default_valu": [29, 56, 91, 165], "maximum_valu": 29, "predefin": [29, 30, 31, 56, 91, 320, 322], "multipli": [29, 47, 85, 91, 168], "offset_slic": [29, 91], "body_entry_slic": [29, 91], "spend": [29, 37, 81], "smoothli": [29, 37, 89, 91], "body_exit_slic": [29, 91], "translation_multipli": [29, 91], "rotation_multipli": [29, 91], "pitch": [29, 47, 59, 88, 89, 91, 149, 207, 334], "body_tracking_stiff": [29, 91], "arm_entry_slic": [29, 91], "shoulder_0_offset": [29, 91], "sh0": [29, 37, 50, 91, 160], "shoulder_1_offset": [29, 91], "sh1": [29, 91, 160], "elbow_0_offset": [29, 91], "el0": [29, 91, 160], "elbow_1_offset": [29, 91], "el1": [29, 50, 91, 160], "wrist_0_offset": [29, 91], "wr0": [29, 37, 50, 91, 160], "wrist_1_offset": [29, 91], "wr1": [29, 50, 89, 91, 160], "gripper_offset": [29, 91], "gripper_multipli": [29, 91], "gripper_strength_fract": [29, 91], "fraction": [29, 36, 37, 80, 91, 149, 160, 208], "strength": [29, 50, 86, 89, 91, 248], "arm_dance_frame_id": [29, 91], "parser": [29, 35, 76, 77, 80, 81, 83, 84, 86, 89, 111, 130, 184], "mutual": [29, 37, 43, 91], "exclus": [29, 37, 43, 91, 217, 221], "arm_joint": 29, "shoulder0": 29, "shoulder1": 29, "elbow0": 29, "elbow1": 29, "wrist0": 29, "wrist1": 29, "hand_po": 29, "hand_quat_wxyz": 29, "quat": [29, 85, 89, 149, 282], "hand_quat_xyzw": 29, "hand_euler_rpi": 29, "body_po": [29, 91], "com_po": [29, 91], "body_quat_wxyz": 29, "body_quat_xyzw": 29, "body_euler_rpi": 29, "dimens": [29, 37, 47, 55, 76, 77, 83, 89, 91, 136, 193, 201, 248], "leg_joint": 29, "fr": [29, 36, 91], "hr": [29, 36, 66, 91, 304], "foot_po": [29, 91], "customiz": [30, 31], "predetermin": [30, 31, 165], "knob": [30, 56, 89, 91], "exact": [30, 36, 45, 47, 91], "intro": 30, "autodesk": [30, 89], "maya": [30, 89], "kaleidoscop": 30, "fine": [30, 89, 91, 297], "grain": [30, 89, 91], "keyfram": [30, 89, 91], "dens": [30, 57], "spars": [30, 57, 91, 284], "dialog": [30, 81], "termin": [30, 57, 71, 82, 83, 84, 87, 88, 89, 91, 101, 111, 126, 146, 164, 219, 221, 223, 226, 243, 283, 291, 293, 295, 310, 325, 331], "startrecordingst": [30, 35, 91], "stoprecordingst": [30, 35, 91], "downloadrobotstatelog": [30, 35, 91], "compress": [30, 55, 89, 177, 270, 315], "npz": 30, "dictionari": [30, 47, 91, 95, 111, 160, 163, 166, 217, 219, 221, 223], "choreographystatelog": [30, 35, 96], "txt": [30, 75, 78, 86, 87, 89, 91, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "linux": [31, 32, 60, 62, 68, 76, 78, 87, 88, 247, 249, 251, 252, 269, 273, 293, 315, 329], "test": [31, 36, 54, 68, 73, 75, 80, 81, 82, 83, 84, 85, 86, 89, 91, 110, 141, 143, 215, 226, 228, 233, 253, 260, 261, 276, 299, 300, 301, 302, 303, 304, 305, 310, 315, 320, 334], "procedur": [31, 33, 34, 37, 54, 68, 88, 91, 126], "plenti": [31, 33, 34, 35], "consequ": [31, 56], "experi": [31, 55, 88, 89, 91, 111, 146, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 287, 288, 289, 291, 308, 315, 322, 334], "smaller": [31, 36, 37, 62, 84, 89, 91], "energet": 31, "checkbox": [31, 34, 56], "welcom": 31, "comfort": 31, "listd": 31, "stock": 31, "categori": [31, 35, 46, 293], "blovk": 31, "reloc": [31, 89], "shrunk": 31, "extrem": [31, 55, 89, 91], "song": [31, 37, 91], "tap": [31, 37, 38], "row": [31, 40, 57, 76, 84, 91, 137], "volum": [31, 60, 61, 78, 86, 168, 184], "toggl": [31, 34, 60, 89, 91, 250, 264, 273], "statist": [31, 91], "unselect": 31, "stat": [31, 60], "audio": [31, 35, 89, 167, 272, 319], "simultan": [31, 35, 36, 89, 91, 227], "modular": 31, "divid": [31, 35, 42, 91], "thin": [31, 73], "dash": 31, "conveni": [31, 32, 76, 82, 83, 87, 91, 137, 159, 162, 184, 283, 297, 307, 320], "pace": [31, 89, 91], "bar": [31, 38, 68, 91, 215, 313, 315], "delin": 31, "thick": 31, "4th": 31, "16th": [31, 35], "quarter": 31, "thicker": 31, "portrai": 31, "grid": [31, 47, 89, 91, 97, 111, 330], "rectangl": [31, 37, 81, 91, 165], "extent": [31, 65, 80, 91], "arrai": [31, 37, 80, 83, 84, 89, 91, 110, 132, 136, 137, 149, 157, 185, 193, 200, 201, 282, 285], "arrow": [31, 62, 79, 83, 91, 286, 297, 316], "beneath": [31, 80, 91], "append": [31, 43, 52, 59, 76, 78, 80, 83, 84, 86, 89, 91, 96, 114, 128, 134, 136, 141, 217, 221, 315, 333], "hover": 31, "ghost": 31, "hit": [31, 33, 89, 91, 308], "esc": [31, 309], "onto": [31, 36, 37, 55, 62, 63, 70, 80, 83, 87, 89, 91, 107, 153, 160, 210, 226, 257, 314, 320], "resiz": [31, 76, 89, 91, 136], "cursor": [31, 36], "enforc": [31, 35, 91], "numer": [31, 35, 43, 56, 89, 91, 112, 296, 316], "boolean": [31, 35, 55, 56, 57, 89, 91, 95, 96, 114, 116, 134, 137, 141, 142, 143, 158, 160, 165, 169, 180, 184, 185, 273], "pane": 31, "scroll": [31, 34, 62, 297], "wheel": [31, 32, 78, 86, 89], "deselect": 31, "clone": [31, 87, 89], "backspac": 31, "clip": [31, 91], "bottom": [31, 34, 37, 62, 68, 86, 91, 226, 282, 310, 316], "onlin": [31, 53, 81, 82, 83, 313], "metronom": 31, "bmp": 31, "schedul": [31, 89, 217, 221, 264, 304], "drawn": [31, 55, 84, 91, 165, 185, 233, 282, 283], "cancel": [31, 34, 38, 41, 47, 57, 77, 89, 91, 112, 113, 114, 115, 116, 125, 126, 134, 160, 179], "delay_in_second": 31, "proper": [31, 44, 52, 66, 87, 89], "sprawl": [31, 35, 37], "synch": 31, "emerg": [31, 38, 87, 125, 320], "ctrl": [31, 81, 310, 315, 317, 323], "l": [31, 38, 62, 71, 82, 83, 84, 227, 295, 309, 310, 331], "premad": 31, "hotkei": [31, 38], "tabl": [31, 38, 42, 50, 60, 68, 82, 97, 209, 224], "p": [31, 48, 60, 61, 62, 66, 71, 81, 82, 83, 84, 85, 86, 91, 243, 248, 295, 296, 297, 307, 309, 320, 331], "shift": [31, 36, 37, 89, 91, 176], "nudg": 31, "expand": [31, 43, 44, 51, 62, 86], "shrink": 31, "v": [31, 36, 38, 60, 84, 87, 89, 91, 136, 149, 249, 250, 295, 296, 297, 309, 313, 316, 331], "k": [31, 38, 48, 80, 183], "sidestep": 31, "d": [31, 36, 38, 56, 60, 62, 66, 68, 71, 81, 83, 84, 86, 87, 91, 246, 251, 254, 295, 296, 297, 306, 308, 310, 316, 334], "q": [31, 38, 48, 149, 243, 283, 295], "h": [31, 43, 71, 208, 243, 246, 251, 254, 283], "iip": 31, "pasword": 31, "vebos": 31, "ob": [31, 38], "repeatedli": [31, 32, 46], "hn1": 31, "un1": 31, "pw1": 31, "hn2": 31, "un2": 31, "pw2": 31, "hn3": 31, "un3": 31, "pw3": 31, "parameter": [32, 55, 56, 62, 91], "microsoft": 32, "ubuntu": [32, 60, 62, 68, 71, 74, 81, 87, 89, 320, 322, 334], "04": [32, 43, 60, 68, 74, 81, 87, 310, 320, 322, 334], "desktop": [32, 60, 68, 71, 89], "grant": [32, 59, 141, 314], "sudo": [32, 60, 61, 62, 68, 70, 71, 78, 83, 86, 226, 248, 249, 250, 251, 269, 270, 296, 297, 307, 315, 316, 320, 325, 334], "chmod": [32, 61, 70, 86, 314], "flag": [32, 56, 60, 88, 89, 91, 184, 296, 315, 316], "preced": [32, 37, 91], "preview": [33, 38, 276, 313], "upper": [34, 80, 91, 149, 282], "dropdown": 34, "viewabl": 34, "swipe": 34, "minu": 34, "symbol": [34, 36, 54], "caution": [34, 37, 89, 91], "partwai": 34, "stabl": [34, 47, 60, 293], "seat": [34, 37, 88], "gestur": [34, 37], "memori": [34, 62, 82, 86, 89, 91, 96, 173, 181], "hamburg": [34, 79, 83, 85, 297, 310, 316], "unsav": 34, "playabl": [34, 35, 91], "trash": [34, 62], "focus": [35, 57], "seen": [35, 37, 54, 60, 70, 82, 84, 88, 89, 91, 141, 143, 268, 276, 282, 295, 311, 314], "youtub": 35, "bruno": 35, "mar": [35, 82], "uptown": 35, "funk": 35, "contour": 35, "love": [35, 91], "me": [35, 210], "traction": [35, 37], "incompat": [35, 87, 91, 134, 312], "trial": 35, "Not": [35, 54, 71, 82, 84, 88, 89, 91, 160], "400": [35, 81], "slow": [35, 36, 57, 82, 91, 313, 315], "250": [35, 36], "450": 35, "timelin": [35, 36, 43, 91], "jump": [35, 68, 76, 77, 84, 91], "nonsens": 35, "kneel": [35, 91], "clap": [35, 37, 91], "violat": [35, 91], "highlight": [35, 224], "moveparam": [35, 89], "bound": [35, 40, 53, 55, 76, 82, 83, 84, 85, 89, 273, 296, 322, 333], "moveinfo": [35, 89, 95], "listallmov": [35, 91, 96], "uploadchoreographi": [35, 91], "feasibl": [35, 91], "non_strict_pars": [35, 91, 96], "listallsequ": [35, 89, 91], "choreographystatu": [35, 36, 89, 91], "chorographycommand": 35, "command_limit": 35, "choreographycommand": [35, 36, 89, 91], "movecommand": [35, 96], "move_typ": [35, 91], "move_id": [35, 91], "recipi": 35, "savesequ": [35, 89, 91], "categor": 35, "wih": 35, "modifychoreographyinfo": [35, 89, 91], "deletesequ": [35, 89, 91], "delet": [35, 43, 55, 81, 82, 85, 89, 91, 96, 168, 173, 181, 185, 217, 221, 226, 254, 305, 319, 328, 332], "clearallsequencefil": [35, 89, 91], "getchoreographysequ": [35, 89, 91], "animationkeyfram": 35, "uploadanimatedmov": [35, 91, 96], "overwrit": [35, 81, 91, 134, 158, 217, 221], "choreographytimeadjust": [35, 89, 91], "start_tim": [35, 84, 91, 109], "override_start_tim": [35, 91], "validity_tim": [35, 91, 96], "acceptable_time_differ": [35, 91], "purpos": [35, 52, 55, 59, 60, 62, 77, 81, 89, 91, 110, 116, 217, 221, 250, 282, 284, 315], "rare": [35, 122], "isol": 35, "upload_choreographed_sequ": [35, 327], "listallmovesrespons": 35, "min": [35, 42, 56, 60, 83, 84, 89, 91, 95, 158, 297, 298], "entranc": [35, 89], "short": [35, 37, 45, 54, 55, 57, 62, 66, 88, 89, 91, 226, 254, 283, 297], "arbitrarili": [35, 46, 282], "marker": [35, 91, 273, 295], "grei": 35, "int32": [35, 83, 84, 91, 176], "oneof": [35, 89, 91, 160, 215], "none": [35, 45, 54, 57, 76, 80, 84, 85, 88, 89, 91, 96, 98, 102, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 121, 122, 123, 125, 126, 127, 128, 134, 136, 137, 140, 141, 142, 143, 146, 148, 149, 150, 151, 153, 154, 155, 157, 158, 159, 160, 162, 163, 164, 165, 166, 168, 172, 173, 175, 176, 177, 179, 180, 182, 184, 185, 188, 192, 193, 199, 201, 202, 204, 205, 208, 210, 212, 213, 215, 217, 219, 221, 223, 272, 312, 324], "bool": [35, 91, 96, 99, 101, 102, 106, 118, 120, 122, 127, 128, 129, 136, 137, 139, 140, 141, 150, 153, 159, 162, 164, 165, 179, 180, 184, 208, 215, 217, 221], "thrown": [35, 89, 116, 159, 217, 219, 221, 223], "greatli": 36, "steer": [36, 37, 91], "occupi": [36, 91], "cycle_dur": [36, 91], "denot": [36, 47, 91, 126, 157], "reflect": [36, 52, 89, 91], "cyclic": 36, "xbox": [36, 38, 89, 224, 267], "customgaitcommandlimit": 36, "max_veloc": [36, 91], "max_yaw_r": [36, 91], "choreograpi": 36, "hildebrand": 36, "wikipedia": [36, 91], "air": [36, 91], "slider": [36, 37, 56], "pulldown": 36, "reset": [36, 45, 51, 61, 62, 66, 86, 89, 91, 122, 126, 155, 175, 176, 260, 286, 297, 307, 314, 320, 330], "impact": [36, 54, 55, 63, 65, 91], "fewer": [36, 89, 91], "faster": [36, 37, 89, 91, 296, 313, 316, 320, 322], "gradual": 36, "cadenc": [36, 91, 141], "prefer": [36, 44, 56, 57, 73, 88, 91, 254, 304, 315], "duti": [36, 250], "factor": [36, 91, 136, 149], "touchdown_phas": [36, 91], "liftoff_phas": [36, 91], "shorter": [36, 89, 91], "150": 36, "300m": 36, "500m": 36, "diagon": [36, 91], "800m": 36, "averag": [36, 66, 82, 91], "stabil": [36, 87, 89, 91], "decreas": [36, 91, 322], "65": [36, 49, 89], "challeng": [36, 45, 91, 125], "acceleration_sc": [36, 91], "rad": [36, 37, 49, 59, 91, 160], "postur": [36, 37, 91], "shape": [36, 37, 63, 83, 91], "farther": [36, 37, 91, 116], "speciic": 36, "swingparam": 36, "overlai": [36, 60, 80, 89, 91, 268, 311], "mu": [36, 91], "stiff": [36, 89, 91], "unstabl": [36, 91], "flight": [36, 37, 91], "signific": [36, 42, 54, 60, 65, 76, 89, 91, 282], "collis": [36, 48, 89, 91], "placement": [36, 89, 91], "bad": [36, 43, 54, 73, 89, 91, 114, 125, 141, 164], "stumbl": [36, 91], "rectangular": [36, 56, 89, 91, 330], "trip": [36, 91, 180, 326], "aggress": [36, 89, 91], "costum": [36, 91], "slower": [37, 57, 91], "return_to_start_pos": [37, 91], "sharp": [37, 89, 91], "entry_slic": [37, 91], "exit_slic": [37, 91], "forth": [37, 89, 91], "stationari": [37, 62, 89, 273], "profil": 37, "pronounc": [37, 91], "exagger": [37, 91], "closer": [37, 89, 91], "sway_style_standard": [37, 91], "hold_zero_ax": [37, 91], "ax": [37, 47, 80, 91, 282, 286], "random": [37, 43, 88, 89, 91, 251, 310, 313, 315], "chaotic": 37, "amplitud": [37, 91, 149], "speed_vari": [37, 91], "ratio": [37, 49, 76, 80, 82, 89, 91, 136, 250], "slowest": 37, "fastest": [37, 68], "variat": [37, 91], "num_speed_ti": [37, 91], "tier": [37, 91], "tier_vari": [37, 91], "fastest_ti": 37, "robutt": [37, 91], "butt": [37, 91], "circl": [37, 88, 227], "radiu": [37, 64, 91, 185], "beats_per_circl": [37, 91], "number_of_circl": [37, 91], "Will": [37, 91, 125, 134, 158, 257], "clockwis": [37, 91, 233], "starting_angl": [37, 91], "spiral": 37, "outward": 37, "obviou": [37, 46, 91], "fidget": 37, "idl": 37, "breath": 37, "stamp": [37, 89, 91, 280], "preset": [37, 83, 89, 91, 306, 314], "convei": [37, 91], "emot": 37, "min_gaze_pitch": [37, 91], "max_gaze_pitch": [37, 91], "gaze_mean_period": [37, 91], "frequent": [37, 62, 68, 91], "gaze_center_cfp": [37, 91], "gaze": [37, 89, 91, 160, 258], "shift_mean_period": [37, 91], "shift_max_transition_tim": [37, 91], "breath_min_z": [37, 91], "breath_max_z": [37, 91], "leg_gesture_mean_period": [37, 91], "gaze_slew_r": [37, 91], "gaze_position_generation_gain": [37, 91], "brownian": 37, "gaze_roll_generation_gain": [37, 91], "second_foot": [37, 91], "leg_no_leg": [37, 91], "midwai": 37, "touch_offset": [37, 91], "mirror_x": [37, 91], "mirror_i": [37, 91], "swing_waypoint": [37, 91], "waypoint_dwel": [37, 91], "spent": [37, 91], "swing_height": [37, 91], "liftoff_veloc": [37, 91], "touchdown_veloc": [37, 91], "absolute_posit": [37, 91], "absolute_yaw": [37, 91], "step_position_stiff": [37, 91], "duty_cycl": [37, 91], "link_to_next": [37, 91], "yaw_rat": [37, 91], "stand_tim": [37, 91], "2step": 37, "motion_is_absolut": [37, 91], "absolute_mot": [37, 91], "yaw_is_absolut": [37, 91], "swing_veloc": [37, 91], "swing_slic": [37, 91], "ambl": [37, 89, 91, 334], "stance_width": [37, 91], "stance_length": [37, 91], "pre_move_cycl": [37, 91], "spread": [37, 91], "slide": [37, 48, 89, 271], "speed_multipli": [37, 91], "com_height": [37, 91], "tippi": 37, "ballet": 37, "mirror": [37, 91], "tempo": 37, "translation_is_absolut": [37, 91], "absolute_transl": [37, 91], "flight_slic": [37, 91], "land": [37, 68, 89], "split_fract": [37, 91], "split": [37, 42, 52, 62, 82, 84, 89, 91, 112, 119, 193], "lead_leg_pair": [37, 91], "vector": [37, 47, 84, 85, 88, 89, 149, 157, 160, 193, 201, 273, 282], "prep": [37, 89, 91, 123], "smoother": 37, "primarili": [37, 43, 91], "hip_x": [37, 91], "hip_i": [37, 91], "eas": [37, 46, 56, 314], "move2": 37, "left_hip_x": [37, 91], "left_hip_i": [37, 91], "left_kne": [37, 91], "right_hip_x": [37, 91], "right_hip_i": [37, 91], "right_kne": [37, 91], "kneel_clap": 37, "flat_bodi": [37, 91, 149], "clap_dist": [37, 91], "xz": [37, 59, 91], "sagitt": 37, "centerlin": 37, "shoulder": [37, 91], "exclud": [37, 91, 150], "increment": [37, 51, 52, 91, 141, 150], "absolut": [37, 56, 89, 91, 150, 210, 283, 320, 327], "figure8": 37, "beats_per_cycl": [37, 91], "frame_id": [37, 91], "don": [37, 56, 71, 76, 81, 82, 83, 84, 85, 86, 87, 91, 114, 158, 180, 210, 270, 283], "fiducial_numb": [37, 91], "include_each_leg": 37, "compens": [37, 89, 91], "chicken": [37, 91], "oscil": 37, "bob_magnitud": [37, 91], "fade": 37, "left_color": [37, 91], "right_same_as_left": [37, 91], "right_color": [37, 91], "fade_in_slic": [37, 91], "brighten": 37, "fade_out_slic": [37, 91], "darken": 37, "top_color": [37, 91], "topmost": 37, "bottom_color": [37, 91], "bottommost": 37, "dim": 37, "top_left": [37, 91], "upper_mid_left": [37, 91], "lower_mid_left": [37, 91], "bottom_left": [37, 91], "top_right": [37, 91], "upper_mid_right": [37, 91], "lower_mid_right": [37, 91], "ccolor": 37, "bottom_right": [37, 91], "rippl": 37, "secondari": [37, 55, 91], "light_sid": [37, 91], "increment_slic": [37, 91], "fallen": [38, 91, 160], "wasd": [38, 87, 89, 243, 258, 267, 283, 295, 309, 310, 331], "countdown": 38, "soon": [38, 91], "dist_in_met": 38, "gamepad": 38, "gui": [38, 59, 82, 87, 89, 91, 309, 320], "bumper": 38, "mimic": 38, "keypress": 38, "strafe": [38, 295, 309, 331], "keystrok": 38, "acquisit": [39, 44, 47, 55, 56, 62, 75, 76, 78, 79, 80, 91, 96, 97, 111, 224, 296, 307, 313], "bddf": [39, 89, 97, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 253, 263], "downloaded_fil": 40, "teleop_2020": 40, "29t183020z": 40, "spotcam": [40, 42, 91, 97], "pano": [40, 89, 91, 319], "jpg": [40, 76, 81, 82, 83, 88, 136, 270, 319], "ir": [40, 42, 91, 97, 169, 175, 260], "nodata": 40, "2020": [40, 43, 74, 87, 88, 246, 251, 254, 310], "29t185610z_inspect": 40, "group_nam": [40, 41, 91, 113, 114, 213], "teleop_": 40, "teleop": [40, 41, 57, 91, 313], "action_id": [40, 57, 77, 80, 91, 115, 117], "member": [40, 89, 91, 125, 159], "element": [40, 42, 47, 56, 60, 89, 112, 165, 193, 217, 221, 294], "acquiredatarequest": [40, 41, 89, 113], "dataacquisitioncli": [40, 89, 113, 114], "acquire_data": [40, 113], "some_image_channel": 40, "data_id": [40, 57, 77, 80, 91, 116, 117], "another_channel": 40, "my_metadata_channel": 40, "29t18": 40, "27": [40, 49, 86, 88, 296, 310], "786897121z": 40, "action_nam": [40, 41, 80, 91, 113, 114, 219], "panoram": [40, 89], "data_nam": [40, 57, 91], "differenti": [40, 56, 73, 89, 91], "robot_kinemat": [40, 91], "velocity_of_body_in_vis": [40, 91], "0012627621181309223": 40, "29t185610z": 40, "custom_metadata": 40, "laptop1": 40, "flatten": [40, 149], "plugin": [41, 44, 56, 62, 75, 76, 78, 79, 80, 91, 97, 110, 113, 166, 233, 261, 269, 317, 319], "screenshot": [41, 62, 70, 297], "incorrectli": [41, 73, 89, 91, 99, 105, 116, 159, 179], "outcom": 41, "folder": [41, 53, 62, 76, 77, 78, 80, 81, 82, 83, 84, 86, 114, 226, 251, 282, 283, 293, 294, 307, 320, 325, 334], "zip": [41, 43, 62, 78, 82, 87, 89, 296], "architect": 41, "networkcomputebridg": [41, 151], "farm": 41, "databas": [41, 81, 91, 173], "getserviceinfo": [41, 57, 91, 116], "ping": [41, 68, 89, 91, 110], "worker": [41, 53, 83, 89, 91, 99, 151, 251, 296, 297, 316], "listimagesourc": [41, 55, 57, 91, 137], "listavailablemodel": [41, 53, 56, 83, 91], "acquiredata": [41, 91, 113, 114, 115, 116], "break": [41, 52, 81, 82, 83, 84, 85, 88, 91], "getimag": [41, 55, 56, 57, 76, 89, 91, 137, 313], "networkcomput": [41, 53, 83, 89, 91], "acquireplugindata": [41, 57, 91, 116], "getstatu": [41, 57, 89, 91, 114, 116], "cancelacquisit": [41, 91, 116], "getlivedata": [41, 89, 91, 111, 113, 115, 116, 251, 252], "daq": [41, 43, 78, 79, 89, 91, 117, 166, 297, 310], "dataacquisitionpluginservic": [41, 57, 77, 89, 115, 116, 251, 325], "versatil": [42, 58], "jpeg": [42, 55, 57, 76, 83, 89, 91, 136, 137, 271, 276, 319], "analyz": [42, 91, 151], "327": 42, "680": 42, "640x512": 42, "decikelvin": 42, "kelvin": [42, 91, 298], "v3": [42, 87, 88, 89, 271], "throw": [42, 84, 85, 88, 89, 91, 137, 160, 179, 215, 313], "nativ": [42, 89], "grayscal": [42, 55, 83, 84, 89, 137], "lookup": [42, 54, 91, 118, 134], "matplotlib": [42, 80, 89, 282], "promin": 42, "visibl": [42, 86, 89, 91, 295, 298, 313, 319], "hotter": [42, 56], "opencv": [42, 57, 62, 76, 78, 81, 82, 84, 86, 89, 315], "pyplot": [42, 80, 329], "plt": 42, "numpi": [42, 76, 80, 81, 83, 84, 86, 89, 92, 136, 137, 149, 284, 285, 286], "512": [42, 91], "640": [42, 81], "rb": [42, 80, 334], "processed_data": 42, "frombuff": [42, 81, 83], "dtype": [42, 81, 83, 84], "u2": 42, "valueerror": [42, 76, 112, 113, 115, 141, 165, 184, 188], "media": [42, 91, 167, 319], "newlin": 42, "split_buff": 42, "splitlin": 42, "len": [42, 47, 82, 83, 84, 91, 176], "reshap": [42, 83, 84], "imshow": [42, 80, 84], "cm": [42, 55, 91], "inferno": [42, 91], "colormap": [42, 89, 169], "plasma": 42, "viridi": 42, "ocean": 42, "cubehelix": 42, "rainbow": 42, "alloc": [43, 91], "gigabyt": 43, "storag": [43, 60, 75, 89, 91, 116, 141, 181, 247, 254], "exceed": [43, 84, 88, 89, 91, 180], "oldest": [43, 91], "backend": [43, 126, 282], "recordtextmessag": [43, 91], "notabl": [43, 55], "did": [43, 80, 82, 83, 85, 86, 88, 89, 91, 125, 126, 140, 141, 150, 151, 155, 159, 210, 288, 289, 310], "recordoperatorcom": [43, 91], "diari": 43, "enumer": [43, 125, 141, 211, 281], "quasi": [43, 91], "recordev": [43, 51, 89], "schema": [43, 91, 118, 215], "registersignalschema": [43, 91], "recordsignaltick": [43, 91], "type_id": [43, 91, 118], "opaqu": 43, "recorddatablob": [43, 91], "spotcheck": [43, 89, 91, 179], "io": [43, 81, 83, 85, 86, 88, 89, 250, 251, 252, 266, 315], "strip": [43, 54, 91, 118], "from_sec": 43, "from_nsec": 43, "to_sec": 43, "to_nsec": 43, "exce": [43, 66, 91, 150, 158], "3600": 43, "403": 43, "event_level_min": 43, "epoch": [43, 52, 88, 91, 141, 159, 180, 193, 201, 204, 208, 217, 221, 246, 254], "nanosecond": [43, 180, 208, 246, 254], "filter": [43, 47, 55, 84, 89, 118, 136, 184, 185, 251, 280, 284], "schema_nam": [43, 91, 118], "schema_sourc": 43, "grpc_servic": [43, 109], "dataacquisitionobject": 43, "associatedmetadata": [43, 57, 77, 80, 116, 117], "curl": 43, "1601524800": 43, "1601611200": 43, "octob": 43, "00": [43, 60, 86, 91, 251, 310], "am": 43, "gmt": 43, "j": [43, 91, 285], "cat": [43, 68, 70], "third": [44, 46, 68, 87, 88, 156], "parti": [44, 46, 56, 87, 156, 272, 310], "outlin": [44, 46, 48, 50, 55, 71, 91], "spun": 44, "add_servicer_to_server_fn": [44, 76, 77, 164, 184], "image_service_pb2_grpc": [44, 76], "add_imageserviceservicer_to_serv": [44, 76], "service_servic": [44, 76, 164, 184], "webcamimageservic": 44, "service_runn": [44, 76, 77], "logger": [44, 76, 77, 96, 104, 112, 113, 115, 116, 117, 118, 120, 122, 123, 125, 129, 132, 134, 137, 140, 153, 155, 160, 164, 172, 184, 185, 210, 213], "sigint": [44, 164, 184, 315, 317], "run_until_interrupt": [44, 76, 77, 164, 184], "aliv": [44, 46, 52, 55, 83, 84, 89, 91, 97, 100, 118, 122, 141, 153, 179, 251, 315, 317], "dir_reg_cli": [44, 46, 76, 77, 122], "directoryregistrationcli": [44, 46, 76, 77, 83, 122], "keep_al": [44, 46, 76, 77, 91, 110], "directory_nam": [44, 46, 76, 77, 122, 325], "service_typ": [44, 46, 76, 77, 96, 98, 101, 103, 105, 106, 107, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 133, 134, 135, 136, 138, 139, 140, 141, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 185, 210, 213], "service_author": 44, "service_ip": 44, "service_port": 44, "myriad": 44, "ricoh": [44, 57, 62, 89, 261, 266, 325], "theta": [44, 57, 62, 89, 91, 149, 261, 266, 282, 325], "heartbeat": [45, 46, 91, 122], "earlier": [45, 71, 77, 78, 88, 89, 91, 148], "talk": [45, 54, 56, 81, 89, 91, 112, 227, 230, 232, 234, 236, 237, 238, 239, 240, 241, 242, 243, 288, 310], "parlanc": 45, "settle_then_cut": [45, 55, 89, 91, 125], "cours": [45, 217, 221], "estop_nogui": [45, 87, 226, 269], "setestopconfigrequest": 45, "role": [45, 88, 91, 125], "pdb_root": [45, 88, 125], "65530": 45, "firmwar": [45, 48], "forgotten": [45, 89, 91, 153], "registerestopendpointrequest": 45, "target_endpoint": [45, 91], "new_endpoint": [45, 91], "estopcheckinrequest": 45, "compliment": 45, "estopcheckinrespons": 45, "incorrect_challenge_respons": 45, "aris": [46, 59, 89], "overh": [46, 55], "clearabl": [46, 55, 91], "opt": [46, 56, 60, 76, 77, 78, 86, 89, 91, 150, 251, 297, 313], "behalf": [46, 89], "principl": [46, 88], "laid": [46, 91, 314], "watch": [46, 82, 87, 111, 309], "crash": [46, 61, 62, 89, 91, 175, 225, 318], "pertain": [46, 89, 91], "unnecessari": 46, "pertin": 46, "spam": 46, "regular": [46, 55, 88, 89, 91, 101, 104, 141], "effort": [46, 48], "host_ip": [46, 76, 77, 91, 100, 122, 307], "forev": [46, 81, 83, 91, 96, 99, 172], "1m": [47, 91, 273, 283, 323], "adopt": [47, 96, 112, 113, 115, 117, 118, 120, 123, 134, 155, 185, 210, 213, 251], "notat": 47, "illustr": [47, 48, 63, 86], "rendit": 47, "hip": [47, 65, 89, 91], "graviti": [47, 85, 88, 89, 91, 128, 148, 149, 160], "gpe": [47, 91], "se": [47, 91, 128, 149], "xxx": [47, 208, 315], "frontleft": [47, 91], "fishey": [47, 88, 89, 91, 229, 313, 320, 324], "five": [47, 322], "localgrid": 47, "frame_name_local_grid_data": [47, 91], "soccer": 47, "ball": [47, 50, 53, 91, 228, 320], "vision_tform_soccer_bal": 47, "vision_tform_left_camera": 47, "left_camera_tform_soccer_bal": 47, "invert": [47, 91], "vision_tform_bodi": [47, 91], "vision_tform_odom": 47, "body_tform_odom": 47, "mathemat": 47, "4x4": [47, 149, 193], "frame_tree_edg": 47, "parentedg": 47, "parent_tform_child": [47, 91, 128], "vision_tform_special_fram": 47, "vec3": [47, 84, 85, 89, 95, 134, 149], "frame_help": [47, 84, 85, 89, 128], "add_edge_to_tre": [47, 128], "vision_frame_nam": [47, 84, 85, 89], "special_fram": 47, "frametreesnapshot": [47, 89, 128, 159], "child_to_parent_edge_map": [47, 91, 160], "world_obj_special_fram": 47, "worldobject": [47, 185], "21": [47, 66, 86, 91, 310], "specialfram": 47, "transforms_snapshot": [47, 84, 85, 91], "acquisition_tim": [47, 91], "mutat": [47, 55, 57, 89, 95, 137, 141, 143, 156, 164, 185, 266, 333], "world_object_cli": [47, 185], "mutate_world_object": [47, 89, 185, 332], "mutation_req": [47, 185], "make_add_world_object_request": 47, "morphologi": 48, "supplement": [48, 89], "lightweight": [48, 62, 89, 91], "gain": [48, 52, 57, 76, 88, 89, 137, 168, 314], "advic": 48, "jointcommand": 48, "updaterequest": 48, "proport": [48, 91], "deriv": [48, 91, 126, 141, 164, 184], "feed": [48, 89, 91, 177], "pdff": 48, "newton": [48, 91], "bandwidth": [48, 89, 91], "unchang": [48, 89], "qd": 48, "furthermor": [48, 89], "runawai": [48, 91], "sooner": [48, 89, 91], "333": 48, "fidel": 48, "train": [48, 53, 81, 83, 85, 86, 295, 320, 322], "polici": [48, 70, 99, 101, 140, 182, 226, 310], "servo": 48, "satur": [48, 91], "robotstateservic": [48, 50, 88, 162], "urdf": [48, 50, 55, 65, 89, 91, 111], "getrobotstatestream": [48, 89, 91], "pipe": 48, "se3veloc": [48, 128, 149, 160], "primer": 48, "fusion": 48, "echo": [48, 54, 61, 89, 91], "squat": [48, 89, 262], "wiggl": [48, 56, 89, 258, 262], "transmiss": 49, "792900": 49, "776718": 49, "37": [49, 86, 310], "165077": 49, "767442": 49, "26": [49, 86, 87, 88, 247, 298], "290108": 49, "39": [49, 82], "435162": 49, "741984": 49, "793369": 49, "41": [49, 310], "690054": 49, "716526": 49, "29": [49, 310], "285997": 49, "928996": 49, "691068": 49, "767536": 49, "151304": 49, "665610": 49, "237423": 49, "48": 49, "356134": 49, "640152": 49, "695168": 49, "542751": 49, "614694": 49, "35": [49, 66], "140221": 49, "52": [49, 91], "710331": 49, "589236": 49, "36": [49, 87, 125], "572052": 49, "54": 49, "858078": 49, "563778": 49, "990086": 49, "985128": 49, "538320": 49, "393730": 49, "59": [49, 86], "090595": 49, "512862": 49, "40": [49, 55, 56, 60, 91, 184, 228], "782406": 49, "61": 49, "173609": 49, "487404": 49, "155487": 49, "233231": 49, "461946": 49, "512371": 49, "268557": 49, "436488": 49, "852371": 49, "67": 49, "278557": 49, "411030": 49, "174873": 49, "69": 49, "262310": 49, "385572": 49, "47": 49, "479156": 49, "218735": 49, "360114": 49, "764549": 49, "73": 49, "146824": 49, "334656": 49, "030334": 49, "75": [49, 76, 84, 85, 91, 136], "045502": 49, "309198": 49, "51": [49, 50], "275761": 49, "76": [49, 298], "913641": 49, "283740": 49, "500103": 49, "78": 49, "750154": 49, "258282": 49, "53": [49, 86, 87], "702587": 49, "80": [49, 59, 62, 68, 70, 71, 75, 81, 83, 84, 85, 86, 87, 88, 163, 226, 272, 310, 313], "553881": 49, "232824": 49, "882442": 49, "82": 49, "323664": 49, "207366": 49, "038860": 49, "84": 49, "058290": 49, "181908": 49, "57": [49, 87], "171028": 49, "85": 49, "756542": 49, "156450": 49, "278133": 49, "87": 49, "417200": 49, "130992": 49, "359314": 49, "89": [49, 50], "038971": 49, "105534": 49, "413738": 49, "620607": 49, "080076": 49, "440529": 49, "92": 49, "160793": 49, "054618": 49, "62": 49, "438812": 49, "93": 49, "658218": 49, "029160": 49, "407692": 49, "95": [49, 91], "111538": 49, "003702": 49, "346268": 49, "96": 49, "519402": 49, "978244": 49, "253670": 49, "97": 49, "880505": 49, "952786": 49, "66": [49, 86], "128944": 49, "99": [49, 78], "193417": 49, "927328": 49, "971176": 49, "456764": 49, "901870": 49, "779457": 49, "101": [49, 50, 56, 91], "669186": 49, "876412": 49, "68": 49, "552864": 49, "102": [49, 91], "829296": 49, "850954": 49, "290451": 49, "103": 49, "935677": 49, "825496": 49, "991325": 49, "104": 49, "986988": 49, "800038": 49, "70": [49, 60], "654541": 49, "105": 49, "981812": 49, "774580": 49, "279190": 49, "106": 49, "918785": 49, "749122": 49, "864319": 49, "107": 49, "796478": 49, "723664": 49, "72": 49, "409088": 49, "108": 49, "613632": 49, "698206": 49, "912567": 49, "109": [49, 310], "368851": 49, "672748": 49, "373871": 49, "110": [49, 313], "060806": 49, "647290": 49, "792130": 49, "688194": 49, "621832": 49, "74": 49, "166512": 49, "111": 49, "249767": 49, "596374": 49, "496147": 49, "744221": 49, "570916": 49, "780251": 49, "112": 49, "170376": 49, "545458": 49, "017998": 49, "526997": 49, "520000": 49, "208656": 49, "812984": 49, "494542": 49, "351448": 49, "113": 49, "027172": 49, "469084": 49, "445686": 49, "168530": 49, "443626": 49, "490677": 49, "236015": 49, "418168": 49, "485771": 49, "228657": 49, "392710": 49, "430344": 49, "145515": 49, "367252": 49, "323830": 49, "985744": 49, "341794": 49, "165688": 49, "748531": 49, "316336": 49, "955406": 49, "433109": 49, "290878": 49, "692551": 49, "038826": 49, "265420": 49, "376694": 49, "565041": 49, "239962": 49, "007477": 49, "011215": 49, "214504": 49, "584579": 49, "376869": 49, "189046": 49, "107742": 49, "661613": 49, "163588": 49, "576752": 49, "865128": 49, "138130": 49, "991455": 49, "987183": 49, "112672": 49, "351707": 49, "027561": 49, "087214": 49, "657486": 49, "986229": 49, "061756": 49, "908813": 49, "863220": 49, "036298": 49, "105721": 49, "658581": 49, "010840": 49, "248337": 49, "372505": 49, "985382": 49, "336861": 49, "005291": 49, "959924": 49, "371513": 49, "557270": 49, "934466": 49, "352615": 49, "98": [49, 298], "028923": 49, "909008": 49, "280533": 49, "420799": 49, "883550": 49, "155693": 49, "94": 49, "733540": 49, "858092": 49, "978588": 49, "967882": 49, "832634": 49, "749775": 49, "124662": 49, "807176": 49, "469845": 49, "204767": 49, "781718": 49, "139503": 49, "209255": 49, "756260": 49, "759487": 49, "139231": 49, "730802": 49, "330616": 49, "995924": 49, "705344": 49, "853729": 49, "780594": 49, "679886": 49, "329796": 49, "494694": 49, "654428": 49, "759762": 49, "139643": 49, "628970": 49, "49": [49, 282, 298], "144699": 49, "717049": 49, "603512": 49, "485737": 49, "228605": 49, "578054": 49, "784004": 49, "676006": 49, "552596": 49, "040764": 49, "061146": 49, "527138": 49, "257267": 49, "385900": 49, "501680": 49, "434883": 49, "652325": 49, "476222": 49, "38": 49, "574947": 49, "862421": 49, "450764": 49, "678982": 49, "018473": 49, "425306": 49, "34": [49, 87, 88, 310], "748432": 49, "122648": 49, "399848": 49, "784836": 49, "177254": 49, "374390": 49, "789810": 49, "184715": 49, "348932": 49, "28": [49, 83, 87, 91], "764952": 49, "147428": 49, "323474": 49, "711969": 49, "067954": 49, "298016": 49, "632576": 49, "948864": 49, "272558": 49, "528547": 49, "792821": 49, "247100": 49, "401667": 49, "602500": 49, "simul": [50, 89, 91, 233], "linkag": 50, "armless": [50, 91, 160], "88": 50, "23": [50, 66, 310], "f1x": 50, "screw": [50, 67], "rod": 50, "exhibit": [50, 160], "midpoint": 50, "weakest": 50, "flex": 50, "tr": 50, "q_kn": 50, "qd_motor": 50, "qd_kn": 50, "2x2": 50, "jacobian": [50, 91], "qd_sh1": 50, "qd_el0": 50, "qd_motor0": 50, "qd_motor1": 50, "undergo": [51, 91, 140, 160, 162], "checkinrequest": 51, "modifypolicyrequest": 51, "checkin": [51, 91, 140], "poici": 51, "databufferservic": [51, 89, 118], "autoreturnservic": [51, 106], "AND": [51, 56, 91], "stale": [51, 52, 89, 91, 140, 141, 281], "policy_ids_to_remov": [51, 91, 140], "implicitli": 51, "associated_leas": [51, 91], "leasea": [51, 52], "leaseb": [51, 52], "leasestal": 51, "hardcod": [51, 89, 91], "forcefulli": [52, 91, 141], "incom": [52, 83, 89, 91, 96, 99, 116, 141, 143, 160], "older": [52, 89, 91, 116, 141, 319], "workflow": [52, 62], "accident": [52, 57, 89], "acquireleas": [52, 89, 91], "retainleas": [52, 89, 141], "permit": [52, 91], "returnleas": [52, 91], "revoc": 52, "newest": [52, 91, 141], "leaf": [52, 91, 142], "claim": [52, 91, 141], "takeleas": [52, 91, 141], "expressli": 52, "creation": [52, 76, 89, 91, 110, 314], "worri": [52, 81, 84, 180], "highest": [52, 84, 87, 91, 320], "newer": [52, 91, 141, 334], "took": [52, 80, 89, 91, 160, 272], "board": [53, 62, 63, 70, 76, 89, 91, 170], "detector": [53, 60, 82, 86, 89, 91, 266, 320, 322], "tenni": 53, "computation": [53, 73], "room": [53, 89, 91, 201, 282], "output_imag": [53, 89, 91], "other_data": [53, 91], "workercomputerespons": 53, "networkcomputerespons": [53, 83, 89, 151], "spotapp": [53, 57], "android": [53, 57], "divers": [54, 81], "peer": [54, 88, 91], "rj": 54, "db": [54, 91, 137], "gxp": 54, "infrastructur": [54, 73], "join": [54, 81, 83, 91, 137], "attent": [54, 63], "paid": 54, "dead": [54, 83, 91], "zone": [54, 226], "handoff": 54, "consider": [54, 65], "cell": [54, 55, 91], "modem": [54, 60, 89, 251, 261], "radio": [54, 56, 68, 89, 91, 111, 155], "insuffici": [54, 91], "getauthtoken": [54, 91], "getauthtokenrequest": [54, 89], "getauthtokenrespons": [54, 89], "compact": [54, 88], "wire": [54, 55, 60, 88, 334], "deseri": [54, 89, 91, 196, 202, 203], "bind": [54, 76, 81], "requesthead": [54, 73, 164], "mint": [54, 91, 105, 182], "paradigm": 54, "bidirect": [54, 91], "4mb": [54, 91], "hide": [54, 56, 141], "simpler": [54, 274], "authclient": [54, 105], "app_token": 54, "kwarg": [54, 88, 96, 98, 103, 105, 106, 107, 112, 113, 115, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 134, 135, 136, 137, 138, 139, 140, 141, 144, 145, 146, 147, 148, 150, 151, 154, 155, 157, 158, 160, 161, 162, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 184, 185, 210, 213, 214, 217, 221], "combo": [54, 56, 105, 153], "arg": [54, 80, 83, 84, 96, 111, 112, 134, 160, 184, 198, 204, 214, 221], "deprec": [54, 81, 86, 91, 92, 112, 123, 134, 136, 149, 155, 160, 161, 163, 173, 184, 186, 199, 214, 221, 223], "invalidloginerror": [54, 87, 105, 159], "req": [54, 76, 112, 164, 219], "_build_auth_request": 54, "_stub": 54, "_token_from_respons": 54, "_error_from_respons": 54, "caller": [54, 91, 112, 137, 160, 315, 317], "occasion": [54, 57, 65, 89, 91, 116], "robotst": [54, 89, 162], "comment": [54, 85, 89, 91, 111, 118, 120, 159, 254, 292], "inabl": 54, "workaround": [54, 89], "buggi": 54, "bug": [54, 159], "gracefulli": [54, 56, 89], "responsehead": [54, 73, 164], "status_invalid_login": [54, 91], "status_invalid_token": [54, 91], "improperli": [54, 91], "temporarili": [54, 62, 89, 91, 105, 272], "unsuccess": [54, 76, 134], "status_invalid_application_token": [54, 89], "status_expired_application_token": [54, 89], "undefin": [54, 62], "request_head": [54, 88, 91], "googl": [54, 68, 73, 77, 83, 84, 89, 91, 92, 99, 113, 116, 118, 166, 180, 208, 247], "request_received_timestamp": [54, 88, 91], "response_timestamp": [54, 88, 91], "commonerror": [54, 83, 164], "implic": 54, "multiplex": 54, "prioriti": [54, 87, 91], "encrypt": [54, 89, 91, 173], "tls1": 54, "mitm": 54, "verif": [54, 163, 217, 221, 299, 300, 301, 302, 303, 304, 305], "transport": [54, 73, 88, 89, 91, 110], "problemat": 54, "strong": 54, "rj45": 54, "spotti": 54, "mitig": 54, "socket": [54, 66], "pool": [54, 116], "round": [54, 91, 179, 180, 326], "robin": 54, "quic": 54, "battl": 54, "withstand": [54, 65], "adversari": 54, "intermedi": [54, 61, 86, 89, 91, 143], "firewal": [54, 62, 76, 77, 78, 83, 226, 251, 296, 310, 313, 314, 315, 316, 325], "dn": [54, 91], "mdn": 54, "sd": [54, 60], "broadcast": [54, 127, 313], "packet": [54, 59], "announc": [54, 59, 91, 315], "handshak": 54, "provis": 54, "streamlin": [55, 89, 122], "deni": [55, 87, 126, 270, 314], "abruptli": 55, "stop_level": [55, 88, 91, 125], "safepoweroffcommand": [55, 89], "ins": [55, 88, 125, 141], "gentli": [55, 85, 88], "request_off": [55, 91], "commandrespons": 55, "commandfeedbackrequest": 55, "skeleton": [55, 162], "getrobothardwareconfigur": [55, 91], "getrobotst": [55, 89, 91], "batteryst": 55, "powerst": [55, 88, 89], "progress": [55, 73, 89, 91, 116, 224, 225], "commsstat": 55, "estopst": [55, 155], "footstat": 55, "systemfaultst": 55, "histor": [55, 89, 91], "diagnos": [55, 89, 91], "behaviorfaultst": 55, "kinematicst": [55, 89], "systemst": [55, 89], "hot": [55, 89, 272], "getrobotmetr": [55, 91], "retro": [55, 89, 91, 111, 146, 291], "logstatu": 55, "bd": [55, 60, 87, 88, 91], "team": [55, 68], "metricsloggingcli": [55, 150], "greyscal": [55, 91], "intens": [55, 91, 324, 330], "depth_in_visual_fram": [55, 89, 275], "reproject": [55, 91], "transmit": [55, 91], "lossi": [55, 91], "tunabl": 55, "rle": [55, 89, 91, 136], "uncompress": [55, 91], "getlocalgridtyp": [55, 91], "getlocalgrid": [55, 91], "fake": [55, 226], "barrier": 55, "virtual": [55, 57, 87, 89, 91, 226, 248, 320, 322, 329, 334], "truth": [55, 91], "listworldobject": [55, 89, 91, 185], "mutateworldobject": [55, 91], "influenc": [55, 91], "enhanc": [55, 68], "gpu": [55, 81, 82, 86, 91, 173, 296, 297, 316, 320], "3rd": [56, 272, 310], "advertis": [56, 91, 151], "hierarch": [56, 91], "doubleparam": [56, 165], "textbox": 56, "int64param": [56, 165], "render": [56, 91, 330], "pressur": [56, 91, 298], "temperature_celsiu": [56, 91], "212": [56, 91, 179], "celsiu": [56, 91], "mostli": [56, 83, 91, 316, 317], "stringparam": [56, 165], "boolparam": [56, 165], "roi": [56, 91, 165], "regionofinterestparam": [56, 165], "realli": [56, 85, 88], "dictparam": [56, 89, 102, 137, 165, 210], "ephemer": [56, 89, 164, 184], "userinterfaceinfo": [56, 165], "told": 56, "collaps": [56, 88, 91, 165], "won": [56, 85, 91, 96], "oneofparam": [56, 89, 165], "listparam": [56, 89, 165], "homogen": 56, "customparam": [56, 89, 165], "param_b": 56, "double_spec": [56, 91], "min_valu": [56, 91, 165], "max_valu": [56, 91, 165], "ui_info": [56, 91, 165], "display_nam": [56, 91, 165], "tupl": [56, 83, 96, 112, 129, 136, 137, 141, 149, 161, 169, 170, 184, 185, 215, 285], "list_of_tupl": 56, "list_spec": [56, 91, 165], "element_spec": [56, 91, 165], "dict_spec": [56, 91, 165], "param_a": 56, "string_spec": [56, 91], "display_ord": [56, 91, 165], "int_spec": [56, 91], "appl": [56, 296, 316], "min_number_of_valu": [56, 91, 165], "max_number_of_valu": [56, 91, 165], "ncb": [56, 84, 91, 316], "alarm": 56, "listimagesourcesrespons": 56, "imagesourc": [56, 89, 136, 137, 165], "imagerequest": [56, 76, 89, 136, 137], "custom_parameter_image_serv": [56, 315], "modeldata": [56, 83], "workercomput": [56, 89, 91], "computeparamet": 56, "custom_parameter_ncb_work": 56, "getremotemissionserviceinfo": [56, 89, 91], "getremotemissionserviceinforespons": [56, 213], "tickrequest": 56, "hello_world_mission_servic": [56, 310], "coerc": [56, 165, 310], "stringspec": 56, "service_customization_help": [56, 165], "string_param_coerce_to": [56, 165], "make_string_param_spec": [56, 165], "service_customization_pb2": [56, 137, 165], "imageacquistioncap": 57, "image_service_help": [57, 76, 89, 137], "visualimagesourc": [57, 76, 89, 137], "decod": [57, 76, 89, 91, 137, 163, 184, 217, 221, 276], "exposur": [57, 76, 89, 91, 137, 177], "camerabaseimageservic": [57, 76, 137], "blocking_captur": [57, 76, 137], "image_decod": [57, 76, 89, 137], "image_data": [57, 76, 137], "acquisition_time_second": 57, "image_proto": [57, 76, 89, 136, 137], "image_pb2": [57, 76, 83, 84, 89, 136, 137, 164], "image_format": [57, 76, 89, 91, 136, 137], "quality_perc": [57, 76, 89, 91, 136], "format_raw": [57, 76, 83, 84, 91], "lastli": [57, 76, 77, 83, 91, 251, 313, 315, 325], "format_jpeg": [57, 76, 83, 91], "use_background_capture_thread": [57, 137], "pixelformat": [57, 89, 136, 137], "imageformat": 57, "create_capture_thread": [57, 137], "visual_source1": 57, "source1": [57, 276], "camera_interface_object": 57, "visual_source2_not_thread": 57, "visualimagesource2": 57, "source2": [57, 276], "unexpectedli": [57, 61, 89, 91], "tester": [57, 78, 89, 251, 261, 313, 315], "tester_program": [57, 78, 89], "image_service_test": [57, 76, 78, 325], "data_acquisition_plugin_servic": [57, 77, 97, 116, 251], "dataidentifi": [57, 77, 89, 115, 116, 117], "channel_nam": [57, 77, 91, 199, 202, 204], "laser": [57, 77, 91], "kcapabl": 57, "laser_scan_spars": 57, "laser_scan_dens": 57, "data_collect_fn": [57, 116], "acquireplugindatarequest": [57, 77, 116], "store_help": [57, 77, 116], "dataacquisitionstorehelp": [57, 77, 116], "acquisition_request": [57, 91, 113, 114, 115], "datacaptur": 57, "data_acquisition_pb2": [57, 77, 114, 116], "cancel_check": [57, 77, 116], "cleanli": [57, 91, 99, 116, 164, 184], "store_data": [57, 116, 117], "serializetostr": 57, "bytes_data": 57, "store_metadata": [57, 77, 91, 116, 117], "reference_id": [57, 77, 91], "special_data": 57, "coupl": [57, 68, 89, 91, 238, 313, 315], "piksi": [57, 91, 251], "pointcloud": [57, 154, 251], "dataerror": [57, 116, 191], "add_error": [57, 116], "make_error": [57, 116], "unrel": [57, 283], "status_internal_error": [57, 91], "pluginerror": 57, "status_sav": [57, 77, 91, 116], "set_statu": [57, 77, 116], "getstatusrespons": [57, 77, 116], "plugin_test": [57, 77, 78, 325], "status_timedout": [57, 91], "acquire_response_fn": [57, 116], "acquireplugindatarespons": [57, 116], "timeout_deadlin": [57, 91], "async": [57, 89, 96, 97, 103, 106, 112, 113, 115, 116, 117, 118, 120, 123, 124, 125, 127, 131, 134, 135, 136, 138, 139, 140, 141, 145, 147, 150, 151, 154, 155, 157, 158, 160, 162, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 185, 210, 213, 260], "associated_metadata_proto": 57, "get_imag": [57, 136, 217, 221, 276], "rail": [58, 250, 283], "inert": 58, "openvpn": 58, "docker": [58, 60, 69, 86, 89, 226, 270, 281, 293, 297, 306, 314], "resolut": [59, 76, 89, 91, 284, 313, 315, 320], "getserviceentri": [59, 91], "registerservic": [59, 91], "unregisterservic": [59, 91], "deregist": [59, 91, 125], "updateservic": [59, 91], "listpayload": [59, 91], "registerpayload": [59, 91], "getpayloadauthtoken": [59, 91], "config": [59, 60, 82, 83, 91, 99, 101, 102, 123, 125, 152, 153, 278, 307], "conf": [59, 84], "192": [59, 60, 62, 68, 70, 71, 75, 78, 81, 83, 84, 85, 86, 87, 88, 163, 226, 249, 272, 281, 297, 310, 313], "168": [59, 60, 62, 68, 70, 71, 75, 78, 81, 83, 84, 85, 86, 87, 88, 163, 226, 249, 272, 281, 297, 310, 313], "iburst": 59, "minpol": 59, "maxpol": 59, "akin": 59, "digit": [59, 282, 284], "autogener": [59, 89, 314], "thereaft": 59, "payload_registration_cli": [59, 159], "payloadregistrationcli": [59, 153], "payload_proto": 59, "payload_secret": [59, 62, 70, 91, 306], "read_or_create_payload_credenti": [59, 89, 184, 314], "payload_credentials_file_1": 59, "register_payload": [59, 153], "label_prefix": [59, 91], "test_payload": 59, "is_author": [59, 91], "is_en": [59, 91], "is_noncompute_payload": [59, 91], "payload_cli": 59, "payloadcli": [59, 152], "list_payload": [59, 152], "remoteservic": 59, "malici": 59, "ap": [59, 91], "eap": [59, 68, 89], "fluke": 59, "sv600": 59, "netmask": [59, 91], "gatewai": [59, 68, 91], "20000": [59, 82], "443": [59, 88, 89, 159], "tcp": [59, 62, 132, 281], "21000": [59, 62, 71], "22000": [59, 62], "30000": 59, "31000": 59, "32000": 59, "23000": 59, "23100": 59, "23199": 59, "24000": 59, "24100": 59, "24199": 59, "25000": 59, "25100": 59, "25199": 59, "traffic": [59, 68, 89, 296, 316], "20022": [59, 60, 61, 62, 71], "20080": 59, "20443": 59, "30022": 59, "30080": 59, "30443": 59, "23022": 59, "23080": 59, "23443": 59, "24022": 59, "24080": 59, "24443": 59, "25022": 59, "25080": 59, "25443": 59, "masquerad": 59, "sender": 59, "lan": 59, "259": 59, "nbsp": [59, 97], "156": 59, "071": 59, "xx": [59, 91, 208], "0125249699": 59, "00340958": 59, "yy": [59, 91], "0186853204": 59, "yz": [59, 91], "zz": [59, 91], "0156701095": 59, "045": 59, "183": 59, "117": 59, "095": 59, "088": 59, "067": 59, "filesystem": [60, 91, 173, 181], "partit": [60, 82], "temporari": [60, 84, 89, 91, 96], "eras": [60, 91, 134], "enable_overlayroot": 60, "rm": [60, 61, 62, 86, 297, 307, 320], "cred": [60, 61, 78, 110, 281], "100mb": 60, "4gb": 60, "400gb": 60, "compart": [60, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "skipauth": 60, "identitiesonli": 60, "ye": [60, 61, 62, 71, 86, 91, 297, 307, 320], "systemctl": [60, 68, 71], "benchtop": 60, "subnet": [60, 91], "hdmi": 60, "displayport": 60, "48v": 60, "graphic": [60, 71, 82, 87, 246, 324], "networkmanag": [60, 68, 71, 293], "ipv4": [60, 68, 88, 91], "nmcli": [60, 68, 293], "gnome": [60, 71, 293], "org": [60, 68, 71, 87, 91, 293, 298], "html": [60, 85, 91, 293], "ifconfig": 60, "dongl": [60, 89, 293], "ssid": [60, 89, 91, 272, 313], "sshd": 60, "sshd_config": 60, "copi": [60, 61, 62, 71, 75, 76, 77, 78, 80, 81, 82, 83, 85, 86, 89, 91, 96, 103, 107, 116, 124, 147, 160, 166, 248, 249, 250, 268, 272, 273, 296, 307, 311, 314, 316, 317, 320], "velodyn": [60, 68, 89, 91, 251, 265], "lib": [60, 83, 88, 273], "systemd": [60, 71, 83], "velodyne_servic": [60, 68], "administr": [60, 71, 87, 89, 91, 270], "passwd": 60, "useradd": [60, 62], "usermod": [60, 270], "apt": [60, 61, 62, 71, 78, 86, 249, 269, 297, 307, 320, 334], "pip": [60, 76, 78, 81, 82, 86, 89, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "dedic": [60, 62, 66, 89], "arm64v8": [60, 61], "slim": [60, 78], "dev_env": 60, "entrypoint": [60, 61, 78, 86, 89, 250], "bin": [60, 61, 62, 71, 75, 76, 77, 78, 81, 82, 83, 86, 87, 294, 320], "bash": [60, 61, 62, 78, 86], "detach": [60, 89, 91, 153], "exec": [60, 71], "playground": 60, "spx": [60, 61, 62, 78, 86, 252, 270, 281, 293, 297, 307, 315, 319, 320], "playground_extens": 60, "coreio_playground": 60, "tegra": 60, "l4t": [60, 62, 86, 89, 249, 297, 315, 319, 320], "pin": [60, 67, 89], "3v": [60, 250], "resistor": [60, 66], "puls": [60, 250], "5v": [60, 250], "12v": [60, 250], "24v": [60, 250], "sda": 60, "scl": 60, "schemat": [60, 66], "cn": 60, "cn2": 60, "cn3": 60, "cn4": 60, "unreg": 60, "gnd": [60, 66], "jumper": [60, 66], "advers": [60, 89], "inhibit": 60, "ohm": 60, "imped": [60, 91, 258], "oh": 60, "2v": 60, "cco": 60, "0v": 60, "24ma": 60, "ab": 60, "ol": [60, 313], "50ma": 60, "vcc": 60, "100ma": 60, "usr": [60, 71, 86, 87, 273, 320], "gpiopowerutil": 60, "sh": [60, 71, 78, 86, 297, 314], "gpiopwmutil": 60, "gpio_contain": 60, "sy": [60, 80, 81, 83, 84, 250], "gpiochip0": 60, "gpiochip1": 60, "gpiochip2": 60, "card": [60, 293], "daisi": 60, "bu": [60, 66, 86, 91], "chip": 60, "dozen": [60, 91], "shell": [60, 66, 246], "i2cdetect": 60, "6d": 60, "0x6d": 60, "i2cget": 60, "nvidia": [60, 62, 82, 86, 89, 296, 316, 320], "xavier": [60, 86], "nx": 60, "volta": 60, "384": [60, 82, 181], "cuda": [60, 62, 81, 82, 85, 86, 296, 316], "benchmark": 60, "jetson": 60, "fire": [60, 89, 251, 266, 296], "extinguish": [60, 89, 251, 266, 296], "fire_ext_detector": [60, 297], "network_mod": [60, 61, 78, 86], "payload_credenti": [60, 76, 77, 78, 86, 89, 91, 251, 297, 313], "payload_guid_and_secret": [60, 76, 77, 78, 86, 89, 251, 297, 313], "driver": [60, 68, 82, 86, 89, 91, 217, 221, 296, 303, 313, 316, 334], "alpin": 61, "apk": 61, "mkdir": [61, 62, 76, 77, 81, 82, 83, 86], "mknod": 61, "tun": 61, "200": [61, 82, 88, 321], "600": 61, "workdir": [61, 78, 86], "openvpn_cli": 61, "cap_add": 61, "net_admin": 61, "ovpn": 61, "ve": [61, 81, 83, 84, 85, 86, 87, 88, 91, 134, 153, 233], "scp": [61, 62], "manifest": [61, 86, 270], "png": [61, 270, 282, 293], "tar": [61, 62, 68, 70, 78, 82, 86, 251, 252, 270, 293, 297, 307, 315, 320], "gz": [61, 82, 86, 252, 270, 293, 297, 307, 315, 320], "arm64": [61, 62, 86, 89, 249, 252, 270, 293, 307], "qemu": [61, 62, 86, 297, 307, 320], "binfmt": [61, 86, 297, 307, 320], "privileg": [61, 62, 68, 86, 250, 297, 307, 320], "multiarch": [61, 62, 86, 297, 307, 320], "x86": [61, 62, 78, 281], "bash_sourc": [61, 78, 86], "script_path": [61, 86], "dirnam": [61, 78, 83, 86], "cd": [61, 75, 76, 77, 78, 81, 82, 85, 86, 87, 297, 307, 320], "export": [61, 75, 76, 77, 78, 83, 84, 85, 86, 87, 89, 217, 221, 247, 251, 264, 283, 307, 319, 320, 325], "pigz": [61, 62, 78, 86, 249, 270, 297, 307], "cvzf": [61, 86], "portal": [61, 78, 86], "your_cred_fil": 61, "spots_ip": 61, "ssh": [61, 62, 68, 70, 71, 293, 313, 320], "cp": [61, 71, 82, 83, 85, 86, 307, 320], "suggest": [62, 78, 91, 158, 306, 313, 314, 315], "container": 62, "stone": 62, "duplic": [62, 91, 160, 184, 193, 268], "buildx": 62, "dockerfil": [62, 78, 86, 89, 226, 251, 252, 270, 281, 293, 296, 297, 307, 315, 316, 319, 320], "amd": [62, 281], "jetpack": [62, 89], "r32": [62, 86, 89], "fairli": 62, "base_imag": 62, "opencv_vers": 62, "impos": 62, "unintent": 62, "leak": [62, 89], "image_nam": [62, 70, 137, 251], "multiarchbuild": 62, "prebuilt": [62, 86], "rerun": [62, 313], "tgz": [62, 78, 249, 281, 319], "payload_guid": [62, 70, 91, 315], "local_ip": 62, "massless": [62, 76, 77], "21443": [62, 68, 71, 86], "aw": [62, 79, 89, 270, 307], "bucket": [62, 86, 89, 247, 307], "decoupl": 62, "v4": [62, 89, 290], "generate_extension_data": 62, "yml": [62, 86, 270, 320], "build_extens": [62, 89, 252, 281, 293, 297, 307, 315, 319, 320], "udev": [62, 86, 89, 270], "public": [62, 90, 91, 126, 293], "dockerhub": [62, 270], "inclus": [62, 150, 217, 221], "udev_rul": [62, 78, 270], "creator": 62, "ing": [62, 70, 320], "zcfv": [62, 78], "extension_nam": 62, "hidden": [62, 91], "hidden_file1": 62, "hidden_file2": 62, "subpanel": 62, "uninstal": [62, 82, 87], "plug": [62, 68, 78, 91, 293, 313, 315], "untar": [62, 320], "xzfm": 62, "path_to_spx_fil": 62, "reload": [62, 71], "udevadm": 62, "status": [62, 73, 89, 91, 116, 137, 160, 272, 312], "application_fil": 62, "TO": [62, 91, 320], "sustain": 63, "dual": 63, "outer": [63, 73], "polycarbon": 63, "blend": [63, 149], "plastic": 63, "foam": [63, 64], "durabl": 63, "diffus": 63, "rigid": 63, "absorb": 63, "sculpt": 63, "polyethylen": 63, "experienc": [63, 91, 126, 134, 141], "henc": [63, 88], "pai": 63, "interconnect": [63, 86], "solder": 63, "pcba": 63, "indoor": 63, "outdoor": 63, "seal": 63, "splash": 63, "surviv": 63, "pinch": 63, "accordingli": [63, 89, 91], "guidanc": 63, "cad": [64, 65, 91], "articl": [64, 65, 76, 77, 91, 293], "defeatur": [64, 65], "shield": 64, "mold": 64, "environment": [64, 247], "overmold": 64, "ridg": 64, "3mm": [64, 67], "tall": [64, 91, 288], "21mm": 64, "63mm": 64, "5mm": 64, "gasket": 64, "conjunct": [65, 89, 165], "cap": [65, 66, 95, 314], "190mm": 65, "scallop": 65, "elev": [65, 91, 298], "pink": 65, "studi": 65, "overhang": 65, "maneuver": 65, "distribut": [65, 73, 88, 91, 163], "agil": 65, "climb": [65, 91, 158, 225], "weigh": 65, "db25": 66, "mate": 66, "male": 66, "59vabsolut": 66, "72vmax": 66, "3a": 66, "pinmax": 66, "portbulk": 66, "capacit": 66, "150uf": 66, "17": [66, 82, 88, 91], "tpp": 66, "5ppmpp": 66, "1hz": [66, 226, 281], "interlockmotor": 66, "interlockextra": 66, "eth0_d_n": 66, "eth0_d_p": 66, "eth0_b_n": 66, "eth0_b_p": 66, "pl_safety_o": 66, "mp_safety_o": 66, "extra_safety_a": 66, "p_gnd": 66, "extra_safety_b": 66, "pwr": 66, "unregul": 66, "eth0_c_n": 66, "eth0_c_p": 66, "eth0_a_n": 66, "eth0_a_p": 66, "pl_safety_in": 66, "mp_safety_in": 66, "mh1": 66, "mh2": 66, "600w": 66, "lithium": 66, "ion": 66, "circuit": [66, 88], "35v": 66, "discharg": [66, 91], "regen": 66, "energi": 66, "72v": 66, "80v": 66, "pl": 66, "IN": [66, 91], "soft": [66, 89, 91], "monoton": [66, 91, 141], "inrush": 66, "bulk": [66, 76, 89], "300uf": 66, "unintend": 66, "spike": 66, "resett": 66, "13a": 66, "overcurr": 66, "mp": 66, "circuitri": 66, "loos": [66, 91, 293], "5ppm": 66, "accommod": 66, "collector": 66, "10ma": 66, "adequ": [66, 314], "aluminum": 67, "slot": 67, "nut": 67, "misumi": 67, "hntr5": 67, "4mm": 67, "diamet": [67, 91, 233], "bolt": 67, "chassi": 67, "25mm": 67, "8mm": 67, "gnu": [68, 273], "lgpl": 68, "readili": 68, "pc": [68, 71, 78, 251, 268, 311], "handi": 68, "vlp": 68, "spotcor": [68, 69, 70, 76, 77, 78, 320], "kernel": 68, "wireless": [68, 293, 313], "vnc": [68, 69, 269], "keyboard": [68, 87, 89, 314], "mous": [68, 286, 330], "condens": 68, "my_wifi": 68, "my_password": 68, "crtl": 68, "unreach": [68, 84, 87, 126, 251, 310, 313, 315], "enp2s0": 68, "lowest": [68, 89, 91], "interf": 68, "outbound": 68, "portain": [68, 315], "unfortun": [68, 78, 89], "And": [68, 87, 91, 247, 258, 282], "journalctl": 68, "cockpit": [69, 71], "preload": 70, "troubleshoot": [70, 82, 83, 84, 314], "upgrad": [70, 82, 87, 89, 91, 319], "21900": 70, "host_computer_ip": [70, 307, 313, 315], "perspect": [70, 88, 89], "statement": [70, 89, 91, 160, 164, 226], "preconfigur": 71, "vncpasswd": 71, "15100": 71, "5900": 71, "vncviewer64": 71, "tunnel": 71, "fn": 71, "127": [71, 91], "standalon": [71, 297], "xorg": 71, "xstartup": 71, "xresourc": 71, "xrdb": 71, "vncconfig": 71, "dbu": 71, "polkit": 71, "localauthor": 71, "pkla": 71, "freedesktop": 71, "resultani": 71, "auth_admin_keep": 71, "resultinact": 71, "resultact": 71, "controlcent": 71, "5901": 71, "kill": [71, 77, 88, 314], "remainafterexit": 71, "successexitstatu": 71, "pidfil": 71, "pid": [71, 83, 91, 125, 314], "execstartpr": 71, "su": 71, "null": [71, 78], "execstart": [71, 83], "execstop": [71, 83], "wantedbi": 71, "daemon": 71, "tutori": [71, 73, 74, 76, 77, 78, 79, 80, 82, 83, 86, 88, 89, 251, 296, 302, 316], "proto3": 73, "widest": 73, "shall": 73, "indent": 73, "suffix": [73, 136], "disambigu": [73, 91], "almost": [73, 82, 91, 126], "precondit": 73, "internal_server_error": 73, "invalid_request": 73, "timesync": [73, 89, 91, 96, 114, 123, 134, 160, 180, 185, 210], "mk": 73, "java": [73, 91], "classnam": 73, "fooouterclass": 73, "foo": [73, 215], "java_outer_classnam": 73, "fooproto": 73, "rational": 73, "rapid": 73, "stall": [73, 88, 141, 160], "powerservic": [73, 89, 155, 175], "powercommand": [73, 91, 111], "powercommandfeedback": [73, 91], "lowercas": 73, "subdirectori": [73, 306, 314], "agre": [73, 102], "obei": [73, 89, 91], "flatter": 73, "doesn": [73, 82, 84, 91, 96, 134, 159, 160], "deeper": [74, 91], "lt": [74, 81, 87, 89, 91], "maco": [74, 87, 88, 89, 320, 322, 334], "mojav": [74, 87], "catalina": 74, "Of": 74, "life": [74, 89], "webcam": [75, 76, 89], "md": [75, 76, 81, 82, 83, 85, 296, 316], "virtualenv": [75, 81, 82, 83, 273, 320, 322, 329, 334], "bosdyn_client_usernam": [75, 85, 87, 89, 249, 251, 296, 297, 316, 320, 322, 334], "bosdyn_client_password": [75, 85, 87, 89, 249, 251, 296, 297, 316, 320, 322, 334], "hello_spot": [75, 81, 87, 88, 89, 288], "my_spot_env": [75, 76, 77, 81, 82, 83, 87], "wherev": [75, 81, 87], "de": [75, 89], "self_ip": [75, 76, 77, 78, 325], "cred_fil": [75, 76, 77, 78], "spot_dev_cr": 75, "uuid4": [75, 325], "printf": 75, "ahead": [76, 77, 91], "camerainterfac": [76, 89, 137], "data_captur": [76, 77, 80, 91], "web_cam_image_servic": 76, "cv2": [76, 81, 83, 84], "np": [76, 80, 81, 83, 84, 85, 282, 285], "directory_registr": [76, 77, 83, 122], "setup_log": [76, 77, 184], "server_util": [76, 77, 89, 164, 184, 214], "convert_rgb_to_grayscal": [76, 89, 137], "_logger": [76, 77], "getlogg": [76, 77], "__name__": [76, 77, 80, 81, 83, 84], "videocaptur": 76, "__init__": [76, 77, 83, 313], "device_nam": [76, 315], "video0": [76, 78, 79, 80, 315], "simplic": [76, 88], "err": 76, "image_source_nam": [76, 91, 136, 137], "device_name_to_source_nam": 76, "isopen": 76, "camera_exposur": 76, "camera_gain": 76, "cap_prop_gain": 76, "cap_prop_exposur": 76, "cap_prop_frame_height": 76, "col": [76, 84, 91, 137], "cap_prop_frame_width": 76, "default_jpeg_qu": 76, "capture_tim": [76, 137], "percent": [76, 89, 91, 136, 272, 276], "image_req": [76, 137], "pixel_format": [76, 83, 89, 91, 136, 137], "converted_image_data": 76, "pixel_format_greyscale_u8": [76, 83, 91], "cvtcolor": [76, 83, 84], "color_bgr2rgb": 76, "pixel_format_unknown": [76, 91], "pixel_format_rgb_u8": [76, 83, 91, 276], "resize_ratio": [76, 89, 91, 136], "inter_area": 76, "ndarrai": 76, "tobyt": 76, "elif": [76, 81, 83], "format_unknown": [76, 91], "encode_param": 76, "imwrite_jpeg_qu": 76, "imencod": 76, "unsupport": [76, 83, 89, 91], "nice": 76, "str": [76, 83, 91, 100, 102, 129, 140, 151, 164, 165, 166, 213, 215, 217, 219, 221, 223, 282, 285], "basenam": [76, 83], "make_webcam_image_servic": 76, "image_sourc": [76, 81, 84, 89, 91, 136, 137], "web_cam": 76, "img_src": 76, "run_servic": [76, 77, 100], "add_web_cam_argu": 76, "add_argu": [76, 80, 81, 83, 84, 86], "narg": [76, 83, 86], "__main__": [76, 77, 80, 81, 83, 84, 87, 88], "argpars": [76, 77, 80, 81, 83, 84, 86, 217, 221], "argumentpars": [76, 77, 80, 81, 83, 84, 86, 184], "allow_abbrev": 76, "add_base_argu": [76, 77, 81, 83, 84, 86, 89, 184], "add_payload_credentials_argu": [76, 77, 86, 89, 184], "add_service_endpoint_argu": [76, 77, 184], "parse_arg": [76, 77, 80, 81, 83, 84, 184], "verbos": [76, 77, 84, 85, 87, 88, 132, 179, 184, 294, 325], "include_dedup_filt": [76, 184], "create_standard_sdk": [76, 77, 81, 83, 84, 88, 163, 282], "imageservicesdk": 76, "create_robot": [76, 77, 81, 83, 84, 88, 163, 281, 282], "authenticate_from_payload_credenti": [76, 77, 86, 159], "get_guid_and_secret": [76, 86, 89, 184, 281], "runner": [76, 97, 164, 184, 226], "runnabl": 76, "master": [76, 77, 87, 91, 296, 316], "invoc": [76, 77, 152, 153, 154], "webcam_port": [76, 78], "5000": [76, 78], "unsur": [76, 77, 81], "haven": [77, 91, 201], "battery_servic": 77, "json_format": 77, "data_acquisition_plugin_service_pb2_grpc": 77, "data_acquisition_stor": [77, 117], "dataacquisitionstorecli": [77, 114, 116, 117], "robotstatecli": [77, 84, 88, 155, 162], "battery_plugin": 77, "batteryadapt": 77, "sdk_robot": 77, "get_battery_data": 77, "actionidentifi": 77, "requestcancellederror": [77, 116], "battery_percentag": [77, 80], "battery_runtim": 77, "messagetojson": 77, "locomotion_estimated_runtim": [77, 91], "status_complet": [77, 91], "make_servic": 77, "add_dataacquisitionpluginserviceservicer_to_serv": 77, "batteryplugin": 77, "battery_port": [77, 78], "5050": [77, 78], "libsm6": 78, "libglib2": 78, "libxrender1": 78, "libxext6": 78, "cmd": [78, 88], "docker_requir": 78, "tgx": 78, "device_path": 78, "orig_video_dev": 78, "video99": 78, "count": [78, 91, 319], "regener": 78, "solv": [78, 89, 91, 282], "symlink": 78, "setup_device_nam": 78, "subsystem": 78, "video4linux": 78, "attr": 78, "lm1e": 78, "probabl": [78, 81, 82, 91], "daq_tutori": 78, "script_dir": 78, "pwd": [78, 249], "orig_devic": 78, "readlink": 78, "sed": 78, "env": [78, 158, 249, 296, 297, 316], "tpl": 78, "templat": [78, 79, 89, 272, 297, 310], "tp": 78, "typo": [78, 89], "wrote": [79, 81, 83], "pop": [79, 81, 83, 89], "till": [79, 91], "web_cam_batteri": 79, "daq_tutorial_miss": 79, "process_data": 80, "plot": [80, 322], "pil": [80, 83, 88, 288], "map_pb2": [80, 282], "extract_data": 80, "json_data": 80, "out_data": 80, "service_video0": 80, "image_act": 80, "image_fil": [80, 248], "odom_loc": 80, "tweak": [80, 88], "plot_data": 80, "action_data": 80, "image_s": 80, "anchor_posit": 80, "wp_seed": 80, "from_wp": 80, "from_waypoint": [80, 91, 158], "to_wp": 80, "to_waypoint": [80, 91, 158], "battery_perc": 80, "data_dir": 80, "sx": 80, "asarrai": 80, "zorder": 80, "va": 80, "draw_batteri": 80, "dict": [80, 91, 113, 114, 115, 128, 159, 165, 166, 188, 193, 194, 215, 217, 219, 221, 223, 285, 320], "box_x": 80, "box_i": 80, "load_graph": 80, "parsefromstr": 80, "unzip": [80, 82, 87], "densiti": 80, "dog": [81, 82, 83, 84, 85, 91], "toi": [81, 82, 83, 84, 85, 86], "shelf": [81, 85], "towel": 81, "5x5": 81, "evalu": [81, 82, 91], "viewpoint": [81, 83], "capture_imag": 81, "imagecli": [81, 88, 89, 136], "argv": [81, 83, 84], "frontleft_fisheye_imag": [81, 84, 88, 276, 296], "image_captur": [81, 91, 116], "sync_with_directori": [81, 89, 159], "wait_for_sync": [81, 84, 88, 180], "image_cli": [81, 88], "stuff": 81, "counter": [81, 91], "image_respons": [81, 84, 88, 89, 91, 136], "get_image_from_sourc": [81, 88, 136], "uint8": [81, 83, 84], "img": [81, 84], "shot": [81, 84, 88, 91, 297], "imdecod": [81, 83, 84], "rotate_90_clockwis": 81, "rotate_180": 81, "image_saved_path": 81, "4d": 81, "imwrit": [81, 83], "unpack": [81, 83, 84, 91, 226], "upright": [81, 91, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 276, 282, 288, 289], "dogtoi": [81, 82, 83, 84, 85, 86], "right_fisheye_imag": [81, 84, 88], "right_fisheye_image_0000": 81, "right_fisheye_image_0001": 81, "right_fisheye_image_0004": 81, "right_fisheye_image_0076": 81, "right_fisheye_image_0077": 81, "frontright_fisheye_imag": [81, 84, 88], "left_fisheye_imag": [81, 84, 88], "back_fisheye_imag": [81, 84, 88, 276], "labelimg": [81, 82], "pyqt5": [81, 89, 246, 269, 282, 329], "sip": 81, "del": 81, "xml": [81, 82, 298], "gt": [81, 91], "left_fisheye_image_0000": [81, 82], "480": 81, "bndbox": 81, "xmin": 81, "312": 81, "ymin": 81, "357": 81, "xmax": 81, "441": 81, "ymax": 81, "427": 81, "rearrang": 81, "thumb": 81, "threw": [81, 87, 91, 151], "fly": 81, "didn": [81, 82, 84, 87, 91], "tensorflow": [82, 83, 85, 86, 89, 224, 266, 296, 297, 316, 320], "pretti": 82, "slight": [82, 86], "cudnn": 82, "excel": [82, 87], "418": 82, "tensorboard": 82, "tf": [82, 83], "offici": [82, 334], "pycocotool": 82, "lvi": 82, "headless": 82, "num": 82, "list_physical_devic": 82, "revis": [82, 87, 88, 91], "precompil": 82, "research": [82, 83, 85, 86, 296, 316], "xbb": 82, "9815ea67e2122dfd3eb2003716add29987e7daa1": 82, "protoc": [82, 314], "object_detect": [82, 83, 85, 296, 316], "python_out": [82, 314], "tf2": [82, 86, 89], "grossli": 82, "left_fisheye_image_0001": 82, "right_fisheye_image_0027": 82, "right_fisheye_image_0009": 82, "split_dataset": 82, "randomli": [82, 91], "painstakingli": 82, "pbtxt": [82, 83, 84, 85, 86], "generate_tfrecord": 82, "xml_dir": 82, "image_dir": 82, "labels_path": 82, "label_map": [82, 83, 84, 85, 86], "output_path": 82, "scratch": 82, "huge": 82, "ssd": [82, 320], "resnet50": 82, "fpn": 82, "640x640": 82, "zoo": 82, "zxvf": 82, "ssd_resnet50_v1_fpn_640x640_coco17_tpu": [82, 85, 86], "my_ssd_resnet50_v1_fpn": [82, 83], "pipelin": [82, 83, 261, 296, 320], "num_class": 82, "batch_siz": 82, "fine_tune_checkpoint": 82, "checkpoint": [82, 83], "ckpt": 82, "fine_tune_checkpoint_typ": 82, "train_input_read": 82, "label_map_path": 82, "input_path": 82, "eval_input_read": 82, "checklist": [82, 83], "model_main_tf2": 82, "model_dir": [82, 83, 86, 296, 316], "pipeline_config_path": [82, 83], "num_train_step": 82, "340": [82, 310], "323": 82, "352": 82, "028": 82, "854": 82, "smi": 82, "logdir": 82, "bind_al": 82, "6006": 82, "cuda_visible_devic": 82, "checkpoint_dir": 82, "okai": [82, 282], "chart": 82, "trustworthi": 82, "overlap": [82, 241], "feel": [82, 91, 304], "convolut": 82, "cudnn_status_internal_error": 82, "tf_force_gpu_allow_growth": 82, "kera": [82, 296, 297], "load_weight": 82, "cast": [82, 89, 91, 97, 136, 266], "lah": 82, "rw": 82, "exporter_main_v2": 83, "input_typ": 83, "image_tensor": 83, "trained_checkpoint_dir": 83, "output_directori": [83, 271], "eval": 83, "saved_model": [83, 84, 85, 86], "went": [83, 87, 91, 121, 122, 127, 153, 155], "bunch": [83, 85, 86], "saw": 83, "network_compute_bridg": [83, 297], "network_compute_serv": [83, 84, 85, 86], "network_compute_bridge_service_pb2_grpc": 83, "network_compute_bridge_pb2": [83, 84], "header_pb2": [83, 164], "concurr": [83, 91, 146], "queue": [83, 89, 91, 320, 322], "wrappers_pb2": [83, 84], "label_map_util": 83, "kserviceauthor": 83, "tensorflowobjectdetectionmodel": 83, "model_path": 83, "label_path": 83, "detect_fn": 83, "category_index": 83, "create_category_index_from_labelmap": 83, "use_display_nam": 83, "input_tensor": 83, "convert_to_tensor": 83, "newaxi": 83, "process_thread": 83, "request_queu": 83, "response_queu": 83, "this_model": 83, "model_nam": [83, 84, 91, 296], "isinst": 83, "listavailablemodelsrequest": [83, 151], "out_proto": 83, "listavailablemodelsrespons": [83, 151], "repli": [83, 91], "input_data": [83, 84, 89, 91], "err_str": 83, "code_invalid_request": [83, 89, 91], "pil_imag": 83, "bytesio": [83, 88], "color_gray2rgb": 83, "image_width": 83, "image_height": 83, "num_object": 83, "batch": 83, "tensor": [83, 91], "num_detect": 83, "detection_box": 83, "detection_class": 83, "score": [83, 91], "detection_scor": 83, "wonki": 83, "min_confid": [83, 84, 89, 91], "tolist": 83, "point1": 83, "point2": 83, "point3": 83, "point4": 83, "out_obj": 83, "object_in_imag": [83, 84, 89, 91], "obj": [83, 84, 91, 162, 282], "_label_": [83, 84], "vertex1": 83, "image_properti": [83, 84, 91, 296], "vertex": [83, 84, 91, 296], "vertex2": 83, "vertex3": 83, "vertex4": 83, "floatvalu": [83, 84, 91], "additional_properti": [83, 84, 91], "no_debug": 83, "polygon": [83, 84], "polylin": [83, 84], "caption": [83, 84], "3f": [83, 84], "left_x": 83, "top_i": 83, "puttext": [83, 84], "font_hershey_simplex": [83, 84], "debug_image_filenam": 83, "network_compute_server_output": 83, "networkcomputebridgeworkerservic": [83, 151], "thread_input_queu": 83, "thread_output_queu": 83, "super": [83, 91, 140, 141, 143], "register_with_robot": 83, "get_self_ip": [83, 89, 112], "tensorflow_serv": [83, 296, 297, 316], "directory_cli": [83, 102], "directorycli": [83, 121], "directory_registration_cli": [83, 122], "networkcomputebridgework": [83, 251], "ourselv": 83, "default_port": [83, 86], "50051": [83, 85, 296, 315, 316], "labels_fil": [83, 86], "store_tru": [83, 86], "isdir": 83, "threadpoolexecutor": [83, 116], "max_work": [83, 164], "add_networkcomputebridgeworkerservicer_to_serv": 83, "add_insecure_port": 83, "basicconfig": 83, "reenter": 83, "ufw": [83, 226, 251, 325], "uncompl": 83, "vendor": 83, "enab": 83, "fri": 83, "2021": [83, 87, 91, 310], "02": [83, 87, 88, 91, 298], "07": [83, 246, 254], "est": 83, "14875": 83, "init": [83, 91], "26704": 83, "quiet": 83, "inact": [83, 91, 313], "renam": [84, 87, 206, 221, 223, 310], "math": [84, 85, 88, 89, 97], "robotcommandcli": [84, 88, 155, 160, 240], "robotcommandbuild": [84, 85, 88, 89, 160], "block_until_arm_arr": [84, 85, 89, 160], "geometry_pb2": [84, 85, 149, 160, 185], "leasecli": [84, 88, 141, 282], "leasekeepal": [84, 88, 89, 141, 272, 282, 312], "network_compute_bridge_cli": [84, 151], "networkcomputebridgecli": [84, 151], "manipulation_api_cli": [84, 147], "manipulationapicli": [84, 147, 234, 242], "manipulation_api_pb2": [84, 147], "kimagesourc": [84, 85], "get_obj_and_img": [84, 85], "network_compute_cli": [84, 85], "image_source_and_servic": [84, 91], "imagesourceandservic": [84, 89], "networkcomputeinputdata": 84, "rotate_imag": [84, 91], "rotate_image_align_horizont": [84, 91], "server_data": 84, "networkcomputeserverconfigur": 84, "process_img_req": 84, "networkcomputerequest": [84, 89, 151], "server_config": [84, 91], "resp": [84, 112, 164], "network_compute_bridge_command": [84, 151], "externalservererror": [84, 151], "intermitt": [84, 91], "best_obj": 84, "highest_conf": 84, "best_vision_tform_obj": 84, "get_bounding_box_imag": 84, "image_ful": 84, "waitkei": 84, "obj_label": 84, "conf_msg": 84, "vision_tform_obj": 84, "get_a_tform_b": [84, 85, 89, 128], "frame_name_image_coordin": [84, 91], "validateframetreeerror": [84, 128], "fromstr": 84, "bgr": 84, "color_gray2bgr": 84, "min_x": 84, "inf": 84, "min_i": 84, "grai": [84, 308], "find_center_px": 84, "max_x": [84, 91], "max_i": [84, 91], "vert": 84, "fab": 84, "imperfect": 84, "block_for_trajectory_cmd": [84, 85, 89, 160], "command_cli": [84, 85, 88, 155, 160], "cmd_id": [84, 85, 160], "timeout_sec": [84, 85, 88, 137, 155, 159, 160, 164, 179, 180, 184], "status_at_go": [84, 91], "matter": [84, 85, 91, 160], "end_tim": [84, 85, 91, 99, 109, 123], "feedback_resp": 84, "robot_command_feedback": [84, 160], "current_st": [84, 91], "mobility_feedback": 84, "se2_trajectory_feedback": [84, 91], "current_state_str": 84, "se2trajectorycommand": [84, 160], "current_tim": 84, "1f": 84, "sec": [84, 89, 91, 208, 272], "namedwindow": 84, "spotfetchcli": 84, "register_service_cli": [84, 163], "robot_state_cli": [84, 85, 102], "lease_cli": [84, 88, 89, 141], "rope": 84, "vision_tform_hand_at_drop": [84, 85], "holding_toi": 84, "vision_tform_dogtoi": 84, "ml_servic": [84, 85], "confidence_dogtoi": 84, "pose_dist": [84, 85], "hasn": 84, "stow_cmd": [84, 85], "arm_stow_command": [84, 85, 160], "walk_rt_vis": 84, "heading_rt_vis": [84, 85], "compute_stand_location_and_yaw": [84, 85], "distance_margin": [84, 85], "se2_pos": [84, 85], "se2pos": [84, 85, 128, 134, 149, 160], "vec2": [84, 85, 89, 149, 160], "move_cmd": [84, 85], "synchro_se2_trajectory_command": [84, 85, 160], "frame_nam": [84, 85, 91, 128, 157, 160, 185], "get_walking_param": [84, 85], "end_time_sec": [84, 85, 114, 160], "center_px_x": 84, "center_px_i": 84, "pick_vec": 84, "pickobjectinimag": 84, "pixel_xi": [84, 91], "transforms_snapshot_for_camera": [84, 91], "frame_name_image_sensor": [84, 91], "camera_model": [84, 91], "pinhol": [84, 91], "halfwai": 84, "bigger": [84, 91], "shoe": 84, "grasp_param": [84, 91], "grasp_palm_to_fingertip": [84, 91], "fingertip": [84, 91], "axis_on_gripper_ewrt_gripp": [84, 91], "axis_to_align_with_ewrt_vis": 84, "allowable_orient": [84, 91], "vector_alignment_with_toler": [84, 91], "axis_to_align_with_ewrt_fram": [84, 91], "threshold_radian": [84, 91], "grasp_params_frame_nam": [84, 91], "promis": 84, "toler": [84, 91, 134, 282], "grasp_request": 84, "manipulationapirequest": [84, 147], "pick_object_in_imag": [84, 91], "cmd_respons": 84, "manipulation_api_command": [84, 147], "manipulation_api_request": [84, 147], "grasp_don": 84, "time_start": 84, "feedback_request": 84, "manipulationapifeedbackrequest": [84, 147], "manipulation_cmd_id": [84, 91], "manipulation_api_feedback_command": [84, 147], "manipulation_api_feedback_request": [84, 147], "manipulationfeedbackst": [84, 89], "stdout": 84, "flush": [84, 118], "failed_st": 84, "manip_state_grasp_fail": [84, 91], "manip_state_grasp_planning_no_solut": [84, 91], "manip_state_grasp_failed_to_raycast_into_map": [84, 91], "manip_state_grasp_planning_waiting_data_at_edg": [84, 91], "manip_state_grasp_succeed": [84, 91], "carry_cmd": 84, "arm_carry_command": [84, 160], "arm_grasp": [84, 234], "ty": [84, 91], "graspabl": 84, "happi": 84, "congratul": [85, 86, 87], "teach": 85, "yield": [85, 91, 119], "bonu": 85, "mscoco_label_map": [85, 86], "yike": 85, "fetch_serv": 85, "lover": 85, "deliv": [85, 158], "vision_tform_person": 85, "person_model": 85, "confidence_person": 85, "geometry_and_fram": [85, 91], "drop_position_rt_vis": 85, "wait_position_rt_vis": 85, "wait_heading_rt_vis": 85, "hand_ewrt_flat_bodi": 85, "qw": [85, 160, 281, 283], "707": 85, "qx": [85, 160, 281, 283], "qy": [85, 160, 281, 283], "qz": [85, 160, 281, 283], "flat_body_q_hand": 85, "flat_body_tform_hand": 85, "vision_tform_flat_bodi": 85, "kinematic_st": [85, 89, 91], "grav_aligned_body_frame_nam": 85, "from_obj": [85, 89, 149], "oppos": 85, "arm_pose_command": [85, 160], "rot": [85, 149, 282], "claw_gripper_open_fraction_command": [85, 160], "build_synchro_command": [85, 160], "arm_concept": 85, "vision_tform_target": 85, "vision_tform_robot": 85, "robot_rt_person_ewrt_vis": 85, "subtract": [85, 91], "linalg": 85, "norm": 85, "robot_rt_person_ewrt_vision_hat": 85, "transform_point": [85, 149], "guard": 85, "divis": 85, "xhat": 85, "zhat": 85, "yhat": 85, "mat": [85, 149], "transpos": 85, "from_matrix": [85, 149, 282], "to_yaw": [85, 149], "algebra": 85, "orthogon": 85, "negat": 85, "euler": [85, 91, 149, 207], "8212": 85, "obvious": [85, 89], "strictli": [85, 91], "worst": [85, 91], "mistak": 85, "pose1": 85, "pose2": 85, "diff_vec": 85, "max_linear_vel": [85, 160], "max_rotation_vel": 85, "max_vel_linear": 85, "max_vel_se2": 85, "se2veloc": [85, 128, 149], "vel_limit": [85, 89, 91, 158, 215], "se2velocitylimit": [85, 89, 134, 158], "max_vel": [85, 91, 160], "mobility_param": [85, 89, 91, 160], "pickup": [85, 86, 91], "uncom": [85, 307], "conenct": 86, "offboard": 86, "payload_credentials_fil": [86, 184, 314], "coreio_extens": 86, "nvcr": [86, 89], "py3": [86, 89], "setuptool": 86, "certifi": 86, "2022": [86, 246, 298], "charset": 86, "grpcio": [86, 314], "conflict": [86, 91], "idna": 86, "pyjwt": [86, 89, 92, 163], "urllib3": [86, 217, 221, 270], "wrapt": 86, "pillow": [86, 137, 288], "emul": 86, "aarch64": 86, "fetch_detector": 86, "fetch_detector_imag": 86, "rebuild": 86, "couldn": [86, 185], "pythonpath": [86, 320], "create_extens": 86, "fetch_dir": 86, "rf": [86, 243], "coco": [86, 320, 322], "tare": 86, "webpag": [86, 87, 91, 159, 281, 314], "cosol": 86, "08": 86, "01t19": 86, "150841720z": 86, "150396": 86, "stream_executor": 86, "dso_load": 86, "cc": [86, 88], "libcudart": 86, "746030301z": 86, "745487": 86, "libcuda": 86, "750924622z": 86, "750486": 86, "cuda_gpu_executor": 86, "1001": 86, "numa": 86, "751010254z": 86, "750671": 86, "common_runtim": 86, "gpu_devic": 86, "1734": 86, "751046894z": 86, "pcibusid": 86, "0000": 86, "computecap": 86, "751058702z": 86, "coreclock": 86, "109ghz": 86, "corecount": 86, "devicememorys": 86, "45gib": 86, "devicememorybandwidth": 86, "10gib": 86, "751089006z": 86, "750804": 86, "754844443z": 86, "754675": 86, "libcubla": 86, "754998332z": 86, "754847": 86, "libcublaslt": 86, "758325927z": 86, "758082": 86, "libcufft": 86, "759084714z": 86, "758951": 86, "libcurand": 86, "763559097z": 86, "763253": 86, "libcusolv": 86, "766903301z": 86, "766619": 86, "libcuspars": 86, "767628199z": 86, "767451": 86, "libcudnn": 86, "767854600z": 86, "767739": 86, "768139817z": 86, "767993": 86, "768297418z": 86, "768127": 86, "1872": 86, "770893107z": 86, "770684": 86, "771066195z": 86, "770846": 86, "771105523z": 86, "771119155z": 86, "771229364z": 86, "771027": 86, "771577461z": 86, "771366": 86, "771636085z": 86, "771441": 86, "771737142z": 86, "771559": 86, "463620133z": 86, "463273": 86, "1258": 86, "streamexecutor": 86, "463732677z": 86, "463369": 86, "1264": 86, "463750150z": 86, "463402": 86, "1277": 86, "463926950z": 86, "463786": 86, "464228135z": 86, "464103": 86, "464412680z": 86, "464303": 86, "464568200z": 86, "464460": 86, "1418": 86, "replica": 86, "5377": 86, "mb": [86, 89, 110], "pci": 86, "ssd_resnet": 86, "foundat": 86, "hope": 86, "fun": [86, 87], "excit": 86, "glove": 86, "laundri": 86, "wsl": [87, 88], "www": [87, 293], "launcher": 87, "former": 87, "pathnam": 87, "latter": 87, "path_on_your_comput": 87, "preinstal": [87, 320], "anaconda": 87, "deactiv": [87, 320, 322, 334], "yourcomput": 87, "oct": 87, "gcc": [87, 88], "copyright": [87, 88], "credit": [87, 88], "bat": 87, "pypi": 87, "orbit": [87, 92, 116, 217, 218, 219, 221, 223, 224], "version_str": 87, "reinstal": [87, 269], "grep": 87, "findstr": 87, "jan": [87, 88], "2019": [87, 88], "20180414": [87, 88], "experiment": [87, 88, 89, 215], "trunk": [87, 88], "259383": [87, 88], "traceback": [87, 88, 89, 112, 164], "stdin": [87, 184], "modulenotfounderror": 87, "sale": 87, "unbox": 87, "sticker": 87, "caviti": 87, "fan": [87, 91, 155, 267], "90490007": [87, 88], "19904": [87, 88], "9903": [87, 88], "beta29": [87, 88], "b11205d698e": [87, 88], "06": [87, 298], "retryableunavailableerror": [87, 89, 126], "_inactiverpcerror": [87, 88], "unavail": [87, 89, 91, 126, 159], "transient": [87, 88, 89, 91, 126], "git": [87, 89, 273], "zipfil": 87, "03": [87, 88], "283": 87, "189": 87, "spell": 87, "nogui": 87, "estop_gui": [87, 269, 283], "stood": 87, "sat": 87, "glide": 87, "friend": 87, "fledg": 87, "programm": [87, 89], "unintention": 87, "diff": 87, "571": 88, "glob": [88, 91, 163], "610": 88, "615": 88, "facil": 88, "microservic": 88, "underli": [88, 89, 91, 125, 134, 196, 199], "616": 88, "robotidservic": [88, 161], "getrobotid": [88, 91], "request_timestamp": [88, 91], "1585258227": 88, "nano": 88, "616570624": 88, "client_nam": [88, 91, 141], "bosdynclientbblank02": 88, "28906": 88, "650": 88, "1585258226": 88, "224952738": 88, "224990830": 88, "code_ok": [88, 91], "type_url": 88, "googleapi": 88, "n6": 88, "014": [88, 308], "010": 88, "363": 88, "275": 88, "364": 88, "005": 88, "020": 88, "276": 88, "246": 88, "002": 88, "022": 88, "major_vers": [88, 91], "changeset_d": [88, 91], "1583941992": 88, "changeset": [88, 91], "install_d": [88, 91], "1583953617": 88, "leaseservic": [88, 141], "robotidcli": [88, 161], "id_client": 88, "get_id": [88, 159, 161], "0001": 88, "mnt": 88, "spot_v2_0": 88, "bblank_spot_v2_0_env": 88, "290": 88, "rpc_method": [88, 112, 118], "_channel": 88, "826": 88, "__call__": 88, "_end_unary_response_block": 88, "729": 88, "statuscod": 88, "deadline_exceed": 88, "debug_error_str": 88, "1585323526": 88, "280242100": 88, "src": [88, 89, 293, 315], "file_lin": 88, "1056": 88, "grpc_messag": 88, "grpc_statu": 88, "underpin": 88, "get_robot_state_async": [88, 89, 162, 279], "fut": 88, "get_id_async": [88, 161], "intercept": 88, "state_cli": [88, 155, 162], "1585324337": 88, "644209920": 88, "list_image_sourc": [88, 136], "back_depth": 88, "back_depth_in_visual_fram": 88, "frontleft_depth": [88, 276], "frontleft_depth_in_visual_fram": 88, "frontright_depth": 88, "frontright_depth_in_visual_fram": 88, "left_depth": 88, "left_depth_in_visual_fram": 88, "right_depth": 88, "right_depth_in_visual_fram": 88, "shorthand": 88, "estop_cli": [88, 125], "get_statu": [88, 113, 115, 125, 140, 173], "estop_level_cut": [88, 91, 125, 269], "stop_level_detail": [88, 91], "estop_endpoint": 88, "estopendpoint": [88, 125], "my_estop": 88, "estop_timeout": [88, 125], "force_simple_setup": [88, 125], "assur": 88, "sole": 88, "unique_id": [88, 91, 125, 159], "cut_power_timeout": [88, 91], "time_since_valid_respons": [88, 91], "estopkeepal": [88, 89, 125], "estop_keep_al": 88, "estop_level_non": [88, 91, 125], "996009984": 88, "keep_running_cb": [88, 125, 141], "frozen": [88, 89, 91, 316], "holder": [88, 91, 141], "commenc": 88, "list_leas": [88, 141], "zbewqfkjbtznjrxu": 88, "lease_own": [88, 91, 141], "lease_keep_al": 88, "hellospotclientlaptop": 88, "kbrandes01": 88, "32049": 88, "shore": [88, 91], "is_powered_on": [88, 155, 159], "skew": [88, 91, 149, 180, 208, 326], "robotcommandservic": [88, 155, 160], "selfright": [88, 91, 160], "safe_power_off": [88, 89, 91, 155], "blocking_stand": [88, 160], "quit": [88, 283], "trivial": 88, "eulerzxi": [88, 160, 207], "footprint_r_bodi": [88, 160], "synchro_stand_command": [88, 89, 160], "body_height": [88, 160], "power_off": [88, 155, 159], "cut_immedi": [88, 159], "return_animation_names_onli": [89, 91, 96], "getchoreographysequencerequest": 89, "correspondingli": 89, "getanim": [89, 91, 96], "contact_st": [89, 91], "robotstatestreamrespons": 89, "publish": [89, 91, 118], "nmeapars": 89, "baud": 89, "webhook": [89, 217, 218, 219, 221, 264], "power_off_robot": [89, 155], "safe_power_off_robot": [89, 155], "energ": 89, "shutdown": [89, 99, 101, 122, 125, 140, 141, 153, 159, 164, 184, 310], "force_sigint_captur": [89, 164, 184], "area_callback_service_util": [89, 102], "traversal_y_offset": [89, 91], "flat_ground": [89, 91, 158], "flip": [89, 91, 160], "logitech": 89, "inc": 89, "hd": 89, "pro": 89, "c920": 89, "site_el": 89, "siteel": 89, "logannotationservic": 89, "application_token": 89, "ground_mu_hint": [89, 91, 158], "grated_floor": [89, 158], "foot_height_result": 89, "leg_pair_result": 89, "gpio": [89, 265], "coreio": [89, 261, 319, 320], "133": 89, "148": 89, "440": 89, "320": 89, "453": 89, "focu": [89, 91, 176, 287], "focus_st": [89, 91], "spotcamalign": 89, "target_stow_behavior": [89, 91], "disable_post_action_clos": [89, 91], "completedrout": 89, "paramat": [89, 91], "post_webhook": [89, 217, 221], "calendar": [89, 217, 221, 302], "correspons": 89, "post_calendar_ev": [89, 217, 221], "get_calendar": [89, 217, 221], "gsof": 89, "ubx": 89, "oem7": 89, "swing_height_auto": [89, 91], "swingheight": 89, "descentprefer": 89, "stairdata": 89, "descent_preference_prefer_revers": [89, 91], "descent_preference_non": [89, 91], "descent": 89, "catwalk": 89, "signal_help": 89, "unit_help": 89, "test_signals_help": 89, "querystoredcaptur": [89, 91], "querymaxcaptureid": [89, 91], "largest": [89, 91, 165], "disable_velocity_limit": [89, 91], "disable_safety_check": [89, 91], "armimpedancecommand": [89, 160], "unsaf": [89, 91], "status_trajectory_cancel": [89, 91], "instabl": [89, 91], "network_compute_status_analysis_fail": [89, 91], "networkcomputestatu": 89, "blurri": 89, "retry_count": [89, 91], "failurebehavior": 89, "make_list_param_spec": [89, 165], "dict_params_to_dict": [89, 165], "double_spec_to_default": [89, 165], "coercion": [89, 165], "int_param_coerce_to": [89, 165], "dict_param_coerce_to": [89, 165], "resetsafetystop": [89, 91], "srsf": [89, 91, 155, 312], "blockag": 89, "entiti": [89, 91], "reconnect": 89, "compositorcli": [89, 169], "coord": [89, 91, 169, 298], "compabl": 89, "set_ir_meter_overlai": [89, 169], "set_ir_meter_overlay_async": [89, 169], "ptzclient": [89, 175, 176], "focus_mod": [89, 176], "set_ptz_focus_st": [89, 176], "set_ptz_focus_state_async": [89, 176], "to_numpi": [89, 149], "from_numpi": [89, 149], "get_info": [89, 210], "getinfoaschunk": [89, 91], "unimpl": [89, 310], "add_payload_credentials_file_argu": [89, 184], "hr0": 89, "number_of_step": [89, 91], "pixel_to_camera_spac": [89, 136], "imagecaptureandsourc": [89, 136], "imagerespons": [89, 136, 137, 164, 324], "outputimag": 89, "root_id": [89, 91], "elementidentifi": 89, "navigation_id": [89, 91], "optionslist": 89, "options_list": [89, 91], "custom_param": [89, 91, 137, 210], "impl": [89, 91, 99, 212], "create_strict_vers": [89, 161], "distutil": [89, 161], "version_tupl": [89, 161], "arm0": [89, 91], "spotarm": [89, 91], "authenticate_with_api_token": [89, 217, 221], "authenticate_with_password": [89, 221], "favor": [89, 91, 160], "site_walk": 89, "get_site_walk": [89, 217, 221], "circular": [89, 91, 158], "versu": [89, 226, 231], "weather": [89, 298], "redund": [89, 91], "lte": 89, "leica": [89, 281], "ga03": [89, 281], "hypothet": 89, "mileag": 89, "pptx": [89, 271], "slideshow": [89, 271], "archiv": [89, 217, 221, 264, 270, 281, 293, 319], "fanoffservic": 89, "harmless": 89, "_clear_graph_and_cach": 89, "_navigate_to_gps_coord": 89, "_parse_gps_goal_from_arg": 89, "_navigate_to_parsed_gps_coord": 89, "bubbl": 89, "networkrequestcallbackservic": 89, "poweroffservic": 89, "trajectory_command": 89, "pgm": [89, 136], "localgridrespons": 89, "min_timeout": [89, 91, 113], "propag": 89, "path_following_mod": [89, 91, 215], "ground_clutter_mod": [89, 91, 215], "most_restrictive_travel_param": [89, 215], "get_run_archives_by_id": [89, 217, 221], "crank": [89, 91, 228], "status_not_detect": [89, 91], "doorcommand": 89, "object_lifetim": [89, 91], "status_invalid_graph": [89, 91], "validationstatu": 89, "forgiv": 89, "exit_st": [89, 91], "sequenceinfo": 89, "execution_id": [89, 91], "executechoreographyrespons": [89, 96], "choreographystatusrespons": 89, "activemov": 89, "custom_gait_param": [89, 91], "leg_joint_param": [89, 91], "is_loop": [89, 91], "entrance_st": [89, 91], "choreographysequ": [89, 96], "explicit": [89, 91], "icmp": 89, "liveness_timeout_sec": [89, 91, 122], "unping": 89, "ipv4_address": [89, 91], "link_spe": [89, 91], "negoti": 89, "irmeteroverlai": 89, "streamparam": 89, "availablemodel": 89, "dataacquisitionstor": [89, 91, 251], "clearbehaviorfault": 89, "unclear": [89, 91, 160], "startrequest": 89, "impairedstatu": 89, "blackboard": [89, 91, 215], "set_localization_full_respons": [89, 134], "recordingcli": 89, "start_recording_ful": [89, 158], "get_cached_hardware_hardware_configur": [89, 159], "send_add_mutation_request": [89, 185], "send_delete_mutation_request": [89, 185], "loadmissionaschunks2": [89, 91], "getmissionaschunk": [89, 91], "assembl": [89, 119], "straightforward": 89, "input_data_bridg": [89, 91], "image_rotation_angl": [89, 91], "alert_data": [89, 91, 296], "roi_output_data": [89, 91], "grippercameraparam": [89, 135], "cameramod": 89, "straightstaircas": 89, "staircasewithland": 89, "precise_tim": [89, 91], "is_stal": [89, 91], "leaseresourc": [89, 141], "basecli": [89, 96, 98, 103, 105, 106, 107, 112, 113, 115, 117, 118, 120, 121, 122, 123, 124, 125, 127, 131, 133, 134, 135, 136, 138, 139, 140, 141, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 168, 169, 170, 171, 173, 174, 175, 176, 177, 178, 179, 180, 185, 210, 213], "chunk_messag": [89, 112, 119], "data_chunk": [89, 112, 119], "request_trim_for_log": [89, 112], "response_trim_for_log": [89, 112], "prematur": [89, 91], "status_keep_alive_motor_off": 89, "status_estop": [89, 91], "keepalivemotorsofferror": [89, 155], "estoppederror": [89, 155], "unknowndnsnameerror": [89, 126], "rpcerror": [89, 106, 107, 110, 113, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125, 126, 127, 131, 134, 136, 145, 148, 150, 151, 152, 153, 154, 155, 159, 160, 162, 180, 185, 210, 213], "unabletoconnecttoroboterror": [89, 126, 314], "dataacquisitioncap": [89, 116], "unregisteredservicenameerror": [89, 159], "unlimit": [89, 91], "1e6": 89, "venv": [89, 273, 320], "synchro": [89, 160], "localnav": 89, "mess": 89, "introductori": [89, 238, 288, 299, 300, 301, 303, 304, 305], "nogo": 89, "arm_constrained_manipul": 89, "impedence_control": 89, "compositor": [89, 167, 319], "reticl": [89, 169], "exposure_mod": 89, "exposure_dur": [89, 91], "streamqualitycommand": 89, "refrect": 89, "prohibit": 89, "reprocess": 89, "unus": [89, 91, 116], "pyqt": [89, 329], "spring": [89, 91], "peg": [89, 91], "hole": [89, 91], "armsurfacecontact": [89, 103, 233], "overrod": [89, 272], "30cm": 89, "willing": [89, 91], "perceiv": [89, 91, 273], "cord": 89, "known_sequ": [89, 91], "updatedockingparam": 89, "dockingcommandfeedbackrequest": 89, "status_error_stuck": [89, 91], "dockingcommandfeedbackrespons": [89, 123], "matrixf": 89, "matrixint64": 89, "matrixint32": 89, "refin": [89, 91, 134], "setlocalizationrequest": 89, "icp": [89, 91, 134], "status_visual_alignment_fail": [89, 91], "setlocalizationrespons": 89, "blocked_path_wait_tim": [89, 91], "route_following_statu": [89, 91], "blockage_statu": [89, 91], "clientmetadata": 89, "recording_started_on": [89, 91], "waypointsnapshot": [89, 134], "disable_directed_explor": [89, 91, 215], "startrecordingrespons": 89, "impaired_st": [89, 91], "getrecordstatusrespons": 89, "strict": [89, 91], "respect_child_failur": [89, 91], "bosdynrecordev": 89, "succed_earli": 89, "additional_paramet": [89, 91], "bosdyngrippercameraparamsst": 89, "setgrippercameraparam": 89, "cleared_cause_fall_blackboard_nam": [89, 91], "cleared_cause_hardware_blackboard_nam": [89, 91], "cleared_cause_lease_timeout_blackboard_nam": [89, 91], "formatblackboard": 89, "stair_mod": 89, "mobilityparam": [89, 160], "state_arm_joint_check": [89, 91], "spotcheckfeedbackrespons": [89, 179], "endstop": [89, 91, 179], "underwai": [89, 91], "error_arm_check_collis": [89, 91], "error_arm_check_timeout": [89, 91], "error_encoder_shift": [89, 91], "error_collis": [89, 91], "jointkinematiccheckresult": 89, "kin": [89, 91], "cal": [89, 91, 179], "status_calibration_verification_fail": [89, 91], "cameracalibrationfeedbackrespons": 89, "autowalkcli": [89, 107], "logginghandl": [89, 118], "data_buff": [89, 118, 253], "invalidgravityalignmenterror": [89, 148], "map_process": [89, 148], "disagre": [89, 148], "payloadregistrationkeepal": [89, 153], "toomanyrequestserror": [89, 126], "powercli": [89, 155, 175, 272, 312], "fancontroltemperatureerror": [89, 155], "robotimpairederror": [89, 134, 158], "graphnavrecordingservicecli": [89, 158], "sync_with_services_list": [89, 159], "update_secure_channel_port": [89, 159], "payload_estimation_command": [89, 160], "exc_callback": [89, 164], "responsecontext": [89, 164, 214], "cameraspotchecktimedouterror": [89, 179], "cameraspotcheckfeedbackerror": [89, 179], "cameracalibrationresponseerror": [89, 179], "spot_check": [89, 179], "remotecli": [89, 209, 213, 310], "processor": [89, 91, 96, 97, 112, 113, 115, 117, 118, 120, 123, 134, 141, 155, 159, 185, 210, 213, 313, 322], "_build_establish_session_request": 89, "_build_tick_request": 89, "remote_cli": [89, 213], "lease_resource_hierarchi": [89, 142], "lease_valid": [89, 143], "spot_cam": [89, 97, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 319], "lights_help": [89, 172], "stair_hint": [89, 91, 160], "stairs_mod": [89, 91, 160], "logannotationhandl": 89, "ambigu": [89, 91, 155], "safe_power_off_motor": [89, 155], "_should_send_app_token_on_each_request": 89, "crlf": 89, "blink": [89, 172, 250, 313], "undock": [89, 91, 123, 257], "graphnava": 89, "webrtc": [89, 319], "relianc": 89, "cli": [89, 184, 247, 313, 324], "stitch": [89, 91, 266, 313, 319], "rebuilt": 89, "occlud": 89, "safepoweroff": 89, "poweroff": 89, "unsafe_force_command": [89, 91], "disable_stair_error_auto_desc": [89, 91], "terrainst": 89, "is_unsafe_to_sit": [89, 91], "prove": 89, "frustrat": 89, "stale_tim": [89, 91], "disappear": 89, "dataacquisitionrequest": 89, "networkcomputecaptur": 89, "status_unsupported_pixel_format_request": [89, 91], "status_unsupported_resize_ratio_request": [89, 91], "alertdata": [89, 117], "storealertdata": [89, 91], "liststoredalertdata": [89, 91], "grippercameraparamservic": [89, 135], "raycastservic": [89, 157], "rai": [89, 97, 266], "selfrightcommand": 89, "standingst": 89, "enable_robot_locomot": [89, 91], "constrainedmanipulationcommand": 89, "bodyassistformanipul": 89, "bodycontrolparam": [89, 160], "base_offset_rt_footprint": [89, 91], "depth_image_to_pointcloud": [89, 136], "arm_joint_move_help": [89, 160], "blocking_sit": [89, 160], "blocking_selfright": [89, 160], "read_payload_credenti": [89, 184], "draw_spher": [89, 185], "draw_oriented_bounding_box": [89, 185], "must_acquir": [89, 141], "return_at_exit": [89, 141, 282], "dockproperti": 89, "from_prior": [89, 91], "status_error_unrefined_prior": [89, 91], "status_incompatible_sensor": [89, 91], "scanner": 89, "sensorcompatibilitystatu": 89, "status_record": [89, 91], "state_gripper_c": [89, 91], "state_sit_down_after_run": [89, 91], "error_gripper_cal_timeout": [89, 91], "error_invalid_range_of_mot": [89, 91], "followarmcommand": 89, "disable_walk": [89, 91], "reproduc": [89, 91], "enable_body_yaw_assist_for_manipul": [89, 91], "enable_hip_height_assist_for_manipul": 89, "enable_": [89, 91], "_for_manipul": [89, 91], "finer": [89, 91], "swing_direction_insw": [89, 91], "swing_direction_outsw": [89, 91], "swing_direction_pul": [89, 91], "swing_direction_push": [89, 91], "concern": 89, "add_common_argu": [89, 184], "bddf_download": [89, 109, 246], "unrecongizedcommanderror": [89, 134], "unrecognizedcommanderror": [89, 134], "message_read": [89, 199], "channel_name_to_series_decriptor": [89, 199], "channel_name_to_series_descriptor": [89, 199], "absenc": 89, "listleas": [89, 91], "status_resource_already_claim": [89, 91], "level_settle_then_cut": 89, "safer": 89, "queryabl": [89, 159, 173, 315], "illumin": 89, "notreadyyeterror": [89, 158], "cleaner": 89, "getsystemlog": [89, 91], "factori": [89, 91], "diagnosi": [89, 91], "se2trajectori": 89, "colormap_inferno": [89, 91], "colormap_turbo": [89, 91], "base_tform_sensor": [89, 91], "base_tfrom_sensor": [89, 91], "decode_token": [89, 163], "log_token_time_remain": [89, 163], "naviagatetoanchor": 89, "shortest": [89, 91, 140], "regain": 89, "handwritten": 89, "lever": [89, 91], "cabinet": [89, 91, 228], "setptzfocu": 89, "getptzfocu": 89, "mountframenam": 89, "updatepayloadattach": [89, 91], "status_stop": [89, 91, 160], "stopmiss": [89, 91], "bosdynnavigaterout": 89, "spotcaml": 89, "spotcamresetautofocu": 89, "autofocu": [89, 91, 175, 176], "storemetadata": 89, "dataacquisit": [89, 114], "restartwhenpaus": 89, "irenabledis": [89, 91], "emiss": [89, 91], "systemfault": 89, "hinder": 89, "robotimpairedst": 89, "natur": [89, 91, 324], "navigationfeedbackstatu": 89, "routefollowingparam": 89, "navigaterouterequest": 89, "navigate_to_ful": [89, 134], "navigate_route_ful": [89, 134], "navigaterouterespons": [89, 134], "status_no_path": [89, 91], "status_not_localized_to_map": [89, 91], "downloadwaypointsnapshotrequest": 89, "status_too_far_from_existing_map": [89, 91], "chunk": [89, 91, 97, 112, 270], "loadmissionrequest": 89, "failednod": 89, "planner": [89, 91], "carriabl": [89, 91], "apigraspoverrid": 89, "not_carri": 89, "carriable_and_stow": 89, "dock_status_undock": [89, 91], "link_status_detect": [89, 91], "ongo": 89, "dockingcommandrespons": [89, 123], "status_error_gripper_holding_item": [89, 91], "status_error_not_avail": [89, 91], "status_error_system": [89, 91], "docking_command_ful": [89, 123], "docking_command_feedback_ful": [89, 123], "acquire_data_from_request": [89, 113], "dataservic": [89, 120], "status_overridden": [89, 91], "manipulationapi": [89, 91, 147], "safe_power_cycle_robot": [89, 155], "obstacleparam": 89, "logpreservehint": [89, 118], "persistentrpcerror": [89, 126], "retryablerpcerror": [89, 126], "ensure_secure_channel": [89, 159], "status_invalid_request": [89, 91], "robotcommandrespons": 89, "invalidrequesterror": [89, 126, 134, 157, 159, 160], "status_motors_on": [89, 91], "payloadregistr": [89, 153], "429": 89, "test_active_leas": [89, 141, 143], "make_subleas": 89, "sublease_nam": [89, 141], "subleas": [89, 99, 141], "enable_grated_floor": [89, 91], "supersed": 89, "grated_surfaces_mod": [89, 91], "grate": [89, 91, 158], "docking_command_feedback": [89, 123], "dockingcli": [89, 123], "anymor": 89, "payloadcredenti": 89, "set_response_head": 89, "irenabledisableservic": [89, 139], "qt": [89, 269], "cost": [89, 91, 282], "thank": 89, "aaron": 89, "gokasian": 89, "congest": [89, 91, 177], "escap": 89, "initializelen": [89, 91], "recorddatablobsrequest": [89, 164], "commit": [89, 91], "write_sync": [89, 118], "add_blob": [89, 118, 253], "add_protobuf": [89, 118], "databuffercli": [89, 118, 164], "setpowerstatu": [89, 91], "cyclepow": [89, 91], "status_queu": 89, "grow": 89, "max_status_queue_s": [89, 125], "hardwareconfigur": [89, 159, 162], "codec": [89, 315], "substr": [89, 298], "confus": [89, 91], "david": 89, "levata": 89, "silent": 89, "ON": [89, 91], "variant": 89, "setircolormap": [89, 91], "getircolormap": [89, 91], "radiometr": [89, 91], "setirmeteroverlai": [89, 91], "builder": [89, 319], "build_on_command": [89, 160], "merg": [89, 91, 158], "manipulator_st": [89, 91], "has_arm": [89, 96, 159, 162], "armsurfacecontactservic": [89, 103], "payloadestimationcommand": 89, "pixel_format_greyscale_u16": [89, 91], "logpoint": [89, 173, 319], "queu": [89, 91], "queue_statu": [89, 91], "status_error_not_dock": [89, 91], "fiduicial_init_specif": 89, "restrict_fiducial_detections_to_target_waypoint": [89, 91], "destination_waypoint_tform_body_go": [89, 91, 134], "command_id": [89, 91, 123, 134, 155, 272], "status_unrecognized_command": [89, 91], "transform_vec3": [89, 149], "default_rpc_timeout": 89, "starter": 89, "realist": 89, "clearer": [89, 297], "popup": [89, 276], "boiler": [89, 91], "status_near_go": [89, 91], "bodymovementstatu": [89, 160], "bosdyngraphnavloc": 89, "handlestal": 89, "is_estop": [89, 125, 159], "status_unsupported_image_format_request": [89, 91], "status_image_data_error": [89, 91], "ricoh_client_mod": [89, 313], "textmsg": [89, 111], "databuff": [89, 91, 114], "aka": [89, 91], "servicefaultst": 89, "dataset": [89, 320, 322], "microphon": [89, 91, 168], "createwaypointrespons": 89, "jitter": 89, "covari": [89, 91], "spotcheckcommandrespons": 89, "commandtimedouterror": [89, 155, 159, 160], "getfeatureen": [89, 91], "licenseservic": [89, 144], "cause_lease_timeout": [89, 91], "status_run": [89, 91], "se3covari": 89, "sit_command": 89, "synchro_sit_command": [89, 160], "stand_command": 89, "velocity_command": 89, "synchro_velocity_command": [89, 160], "synchro_se2_trajectory_point_command": [89, 160], "reposit": [89, 91, 160, 323], "opengl": [89, 324], "shader": [89, 324], "rightsid": 89, "gone": [89, 91], "logannotationcli": 89, "licensecli": [89, 144], "status_behavior_fault": [89, 91], "behaviorfaulterror": [89, 160], "responseerror": [89, 96, 98, 105, 106, 107, 112, 113, 121, 122, 123, 125, 126, 127, 134, 136, 140, 141, 146, 148, 150, 151, 153, 154, 155, 157, 158, 159, 160, 179, 210, 213], "status_missing_fiduci": [89, 91], "medialogservic": [89, 173], "unstitch": 89, "obsolet": 89, "renew": 89, "gcp": [89, 307], "amazon": [89, 247], "s3": [89, 247, 270], "graph_nav_view_map": 89, "mission_record": [89, 295], "replay_miss": [89, 294, 311], "compositorservic": [89, 169], "streamqualityservic": [89, 177], "ptzservic": [89, 176], "lightingservic": [89, 171], "audioservic": [89, 168], "speaker": [89, 91], "networkservic": [89, 174], "healthservic": [89, 170], "versionservic": [89, 178], "proxi": [89, 91, 126], "directory_modif": [89, 255], "payloadregistrationservic": [89, 153], "await": 89, "worldobjectservic": [89, 185], "fiducial_follow": [89, 273], "add_image_coordin": 89, "localgridservic": [89, 145], "classif": 89, "basic_streaming_visu": [89, 330], "extrins": [89, 91], "intrins": [89, 91, 136], "revamp": 89, "overhead": 89, "outlier": 89, "outag": 89, "cliff": [89, 91], "frametyp": 89, "frame_trajectory_command": [89, 274], "frame_ko": 89, "odom_frame_nam": 89, "frame_vo": 89, "frame_bodi": 89, "body_frame_nam": 89, "permissiondeniederror": [89, 126], "responsetoolargeerror": [89, 126], "notfounderror": [89, 126], "transientfailureerror": [89, 126], "timesyncrequir": [89, 126], "nosuchleas": [89, 141], "leasenotownedbywallet": [89, 141], "roboterror": [89, 159], "nonexistentauthorityerror": [89, 126], "unregisteredserviceerror": [89, 159], "unregisteredservicetypeerror": [89, 159], "unknownframeerror": [89, 157, 160], "vel": [89, 149], "se3trajectorypoint": 89, "labelprefix": 89, "addlogannotationrespons": 89, "vo": 89, "rt": [89, 91], "samplecommon": 89, "get_payload": 89, "self_registr": 89, "estopnogui": 89, "get_mission_st": [89, 277], "asynchron": [89, 91, 104, 105, 112, 116, 146, 322], "get_world_object": [89, 280], "world_object_mut": 89, "xbox_control": [89, 334], "tow": 89, "imagetyp": [89, 137], "payloadservic": [89, 152], "spotcheckservic": [89, 179], "terrainparam": 89, "metal": [89, 91, 158], "flashlight": 89, "ellipt": 89, "curv": 89, "ecdsa": 89, "cryptographi": 89, "unicod": [89, 91], "se2velocitycommand": 89, "slew": 89, "locomotionhint": 89, "jog": [89, 334], "trot": [89, 91], "oauth": 91, "additional_data": 91, "struct": [91, 137], "severity_level_unknown": 91, "ishighest": 91, "severity_level_info": 91, "severity_level_warn": 91, "actionpres": 91, "severity_level_error": 91, "fatal": 91, "severity_level_crit": 91, "immediateattent": 91, "measured_pos_tracking_error": 91, "measured_rot_tracking_error": 91, "measured_pos_distance_to_go": 91, "measured_rot_distance_to_go": 91, "arespecifi": 91, "un": 91, "defaultsto": 91, "withwrist": 91, "theroot_frame_nam": 91, "pose_trajectory_in_task": 91, "task_t_tool": 91, "maximum_acceler": 91, "doublevalu": [91, 95], "max_linear_veloc": 91, "max_angular_veloc": 91, "max_pos_tracking_error": 91, "trajectorybefor": 91, "isexceed": 91, "beignor": 91, "max_rot_tracking_error": 91, "force_remain_near_current_joint_configur": 91, "preferred_joint_configur": 91, "x_axi": 91, "y_axi": 91, "z_axi": 91, "rx_axi": 91, "ry_axi": 91, "rz_axi": 91, "wrench_trajectory_in_task": 91, "boolvalu": [91, 282], "arecommand": 91, "thisprotect": 91, "arm_cartesian_feedback": 91, "arm_joint_move_feedback": 91, "named_arm_position_feedback": 91, "arm_velocity_feedback": 91, "arm_gaze_feedback": 91, "arm_stop_feedback": 91, "arm_drag_feedback": 91, "arm_impedance_feedback": 91, "arm_cartesian_command": [91, 160], "arm_joint_move_command": [91, 160], "named_arm_position_command": 91, "arm_velocity_command": 91, "arm_gaze_command": [91, 160], "arm_stop_command": 91, "arm_drag_command": 91, "arm_impedance_command": 91, "damp": 91, "thefollow": 91, "desired_tool": 91, "desired_tool_at_end": 91, "measured_tool_at_start": 91, "desired_tool_tform_tool": 91, "diagonal_stiffness_matrix": 91, "commanded_wrench_from_stiffness_at_tool_in_desired_tool": 91, "desired_tool_at_end_tform_tool": 91, "measured_tool_at_start_tform_tool_in_task": 91, "thedesired_tool": 91, "nm": [91, 160, 243], "commanded_wrench_from_damping_at_tool_in_desired_tool": 91, "commanded_wrench_from_feed_forward_at_tool_in_desired_tool": 91, "total_commanded_wrench_at_tool_in_desired_tool": 91, "desired_toolfram": 91, "max_force_mag": 91, "max_torque_mag": 91, "total_measured_wrench_at_tool_in_desired_tool": 91, "theunderli": 91, "todetermin": 91, "inhol": 91, "thehol": 91, "couldmov": 91, "link_wr1": 91, "frameat": 91, "whichw": 91, "ofth": 91, "task_tform_desired_tool": 91, "thisdesired_tool": 91, "ourtool": 91, "subject": 91, "byour": 91, "matric": [91, 149], "feed_forward_wrench_at_tool_in_desired_tool": 91, "of6": 91, "6x6": [91, 149], "tx": 91, "tz": 91, "alongth": 91, "diagonal_damping_matrix": 91, "6doubl": 91, "valuesalong": 91, "exert": 91, "thatth": 91, "requestedforc": 91, "60n": 91, "deviatessuch": 91, "therequest": 91, "15nm": 91, "ifdisable_safety_check": 91, "planner_statu": 91, "planned_point": 91, "knot": [91, 160, 241], "andveloc": 91, "fromjoint": 91, "appenda": 91, "theplann": 91, "ofplanned_point": 91, "amov": 91, "plannedpoint": 91, "time_to_go": 91, "formultipl": 91, "thisi": 91, "coast": 91, "deceler": 91, "wise": 91, "cubic": 91, "reference_tim": 91, "referencetim": 91, "beth": 91, "maximum_veloc": 91, "toachiev": 91, "time_since_refer": [91, 160], "disable_body_force_limit": 91, "velocity_in_frame_nam": 91, "linear_veloc": 91, "unitless": 91, "cylindrical_veloc": 91, "cartesian_veloc": 91, "angular_velocity_of_hand_rt_odom_in_hand": 91, "expressedin": 91, "thefin": 91, "twist": 91, "handto": 91, "gazing_at_target": 91, "targetrot": 91, "gaze_to_target_rotation_measur": 91, "hand_position_at_go": 91, "hand_distance_to_goal_measur": 91, "hand_roll_at_go": 91, "hand_roll_to_target_roll_measur": 91, "target_trajectory_in_frame1": 91, "frame1": 91, "frame1_nam": 91, "tool_trajectory_in_frame2": 91, "frame2": 91, "frame2_nam": [91, 160], "wrist_tform_hand": 91, "wrist_tform_hand_camera": 91, "target_trajectory_initial_veloc": 91, "startingposit": 91, "status_trajectory_complet": 91, "status_trajectory_stal": 91, "thetrajectori": 91, "baserobot": 91, "thegoal": 91, "axis_mode_posit": 91, "axis_mode_forc": 91, "desired_toolin": 91, "farfrom": 91, "loweringstiff": 91, "planner_status_unknown": 91, "planner_status_success": 91, "planner_status_modifi": 91, "forexampl": 91, "reallyshort": 91, "butwon": 91, "aminimum": 91, "planner_status_fail": 91, "possiblethat": 91, "optimalsolut": 91, "isavoid": 91, "status_tool_trajectory_stal": 91, "toofar": 91, "continuealong": 91, "status_stalled_holding_item": 91, "notstow": 91, "positions_stow": 91, "carry_st": 91, "carry_state_carri": 91, "thesesitu": 91, "blockingcondit": 91, "andth": 91, "positions_unknown": 91, "positions_carri": 91, "handslightli": 91, "positions_readi": 91, "infront": 91, "xdirect": 91, "insteadof": 91, "carry_state_carriable_and_stow": 91, "allowth": 91, "thehand": 91, "press_force_percentag": 91, "alsob": 91, "xy_admitt": 91, "admitt": 91, "z_admitt": 91, "xy_to_z_cross_term_admitt": 91, "inth": 91, "bias_force_ewrt_bodi": 91, "lean": 91, "canfal": 91, "is_robot_following_hand": 91, "reaction": 91, "stiffer": 91, "admittance_setting_unknown": 91, "admittance_setting_off": 91, "admittance_setting_norm": 91, "admittance_setting_loos": 91, "admittance_setting_stiff": 91, "admittance_setting_very_stiff": 91, "willb": 91, "invalidusernam": 91, "bebecaus": 91, "theuser": 91, "clientsshould": 91, "sinceauthent": 91, "unsuccessfulattempt": 91, "afterth": 91, "http2": 91, "automaticallytrigg": 91, "clear_buff": [91, 106], "invalid_param": 91, "status_invalid_param": 91, "max_displac": 91, "whereautoreturn": 91, "max_dur": [91, 160], "acode_invalid_request": 91, "getconfigur": 91, "treat_warnings_as_error": 91, "thatar": 91, "issueswith": 91, "walkbecaus": 91, "missioncompil": 91, "element_identifi": 91, "inputwalk": 91, "docking_nod": 91, "loop_nod": 91, "mission_id": [91, 217, 221], "status_compile_error": 91, "status_validate_error": 91, "stateless": 91, "remote_grpc": 91, "execute_choreographi": [91, 96], "hadtwo": 91, "actioni": 91, "bothcallback": 91, "parallel": [91, 272, 273, 320, 321], "parametersdirectli": 91, "acquire_data_request": 91, "theelement": 91, "completion_behavior": 91, "last_known_cap": 91, "record_time_imag": 91, "thespec": 91, "servicesevolv": 91, "andprovid": 91, "canva": 91, "fact": [91, 165], "isnot": 91, "sequence_nam": [91, 96], "rpc_timeout": [91, 118], "lease_resourc": [91, 213], "happenif": 91, "specificcamera": 91, "inclin": 91, "robot_body_sit": 91, "robot_body_pos": 91, "spot_cam_l": 91, "spot_cam_ptz": 91, "arm_sensor_point": 91, "spot_cam_align": 91, "joint_trajectori": 91, "commandth": 91, "rough": 91, "platealign": 91, "pose_trajectory_rt_target": 91, "target_tform_measured_offset": 91, "waypointthi": 91, "footprintsin": 91, "body_assist_param": 91, "force_stow_overrid": 91, "runth": 91, "settingthi": 91, "target_tform_bodi": 91, "relativeto": 91, "genericpos": 91, "target_tform_sensor": 91, "final_zoom": 91, "target_sensor_id": 91, "sensor_id": 91, "scene_object_id": 91, "is_skip": 91, "ledmai": 91, "fullbright": 91, "ptz_posit": 91, "battery_start_threshold": 91, "batterylevel": 91, "intim": 91, "battery_stop_threshold": 91, "therobot": 91, "startthreshold": 91, "animated_mov": [91, 96], "dock_id": [91, 123, 257], "uint32": 91, "thefiduci": 91, "beus": 91, "docked_waypoint_id": 91, "robotwhil": 91, "isdock": 91, "target_prep_pos": 91, "targetbefor": 91, "OR": [91, 149, 193, 194, 318], "thenavigateto": 91, "awaypoint": 91, "fornavig": 91, "thedock": 91, "prompt_dur": 91, "successfullydock": 91, "operatordo": 91, "controlshow": 91, "ona": 91, "choosesometh": 91, "target_failure_behavior": 91, "action_wrapp": 91, "action_failure_behavior": 91, "battery_monitor": 91, "returnto": 91, "robotshould": 91, "action_dur": 91, "atimeout": 91, "acquisitioncaptur": 91, "orperform": 91, "ofsuccessfulli": 91, "takean": 91, "amountof": 91, "toautomat": 91, "retrynavig": 91, "thedesir": 91, "theaction": 91, "setto": 91, "optionsin": 91, "missionwil": 91, "defaultbehavior": 91, "default_behavior": 91, "one_of": 91, "minimumdur": 91, "proceed_if_": 91, "return_to_start_and_try_again_lat": 91, "return_to_start_and_termin": 91, "try_again_delai": 91, "safest": 91, "additionalqualifi": 91, "should_autofocus_ptz": 91, "themiss": 91, "therebyimprov": 91, "self_right_attempt": 91, "rightscan": 91, "userdo": 91, "amaximum": 91, "destroi": [91, 137], "byrepeatedli": 91, "post_mission_callback": 91, "thati": 91, "orsend": 91, "email": 91, "skip_act": 91, "thetarget": 91, "associatedact": 91, "govern": 91, "skip_docking_after_complet": 91, "elaps": 91, "missionfinish": 91, "atwhich": 91, "theinterv": 91, "missiontak": 91, "at15": 91, "repetit": 91, "backonc": 91, "oftim": 91, "navigate_to": [91, 134], "navigate_rout": [91, 134], "belief": 91, "travel_param": [91, 134, 215], "waypointth": 91, "destination_waypoint_id": [91, 134], "set_localization_request": 91, "youplan": 91, "global_paramet": 91, "playback_mod": 91, "map_nam": 91, "mission_nam": 91, "AT": 91, "THE": [91, 251], "capturesand": 91, "choreography_item": 91, "target_stow_behavior_unknown": 91, "target_stow_behavior_auto": 91, "heurist": 91, "stowhead": 91, "target_stow_behavior_nev": 91, "target_stow_behavior_alwai": 91, "direction_hint": 91, "desired_wrench_odom_fram": 91, "estimation_activ": 91, "seenenough": 91, "wrenchi": 91, "init_wrench_direction_in_frame_nam": [91, 160], "applieddepend": 91, "thetorqu": 91, "requiredvector": 91, "benorm": 91, "vectorif": 91, "task_type_se3_rotational_torqu": 91, "perpendicular": 91, "theconstraint": 91, "init_wrench_direct": 91, "frame_namewil": 91, "tangential_spe": [91, 160], "rotational_spe": [91, 160], "force_limit": [91, 160], "directionvalu": 91, "positiveif": 91, "torque_limit": [91, 160], "task_typ": [91, 160], "manip": 91, "control_mod": [91, 160], "target_linear_posit": [91, 160], "typetask_type_r3_linear_forc": 91, "target_angl": [91, 160], "thantask_type_r3_linear_forcethi": 91, "accel_limit": 91, "dependingon": 91, "reset_estim": [91, 160], "previousconstrain": 91, "body_offset_from_hand": 91, "andenable_hip_height_assist_for_manipul": 91, "combinationof": 91, "contact_advic": 91, "haveth": 91, "incorrectlys": 91, "num_messages_receiv": 91, "uint64": [91, 117], "arequir": 91, "extrapolation_tim": 91, "detailedexplan": 91, "extrapolation_dur": 91, "extrapolatedesir": 91, "mostextrapolation_dur": 91, "optionallyupd": 91, "notsupport": 91, "user_command_kei": 91, "effecton": 91, "velocity_safety_limit": 91, "orgain": 91, "willtrigg": 91, "orclear": 91, "0will": 91, "k_q_p": 91, "k_qd_p": 91, "2d": [91, 137, 149, 160], "body_movement_statu": 91, "final_goal_statu": 91, "se2_frame_nam": [91, 160], "trajectorymust": 91, "rejectedand": 91, "exectut": 91, "frameidentifi": 91, "planar": [91, 273], "slew_rate_limit": 91, "providedse2_frame_nam": 91, "unsafe_act": 91, "foot_posit": [91, 160], "metersadvis": 91, "05": [91, 137, 160, 185], "5cm": 91, "2cm": 91, "10cm": [91, 284], "converg": [91, 148], "standing_st": 91, "status_drag": 91, "status_grasp_fail": 91, "agood": 91, "regrasp": 91, "thensend": 91, "overcom": 91, "orabov": 91, "status_other_failur": 91, "anapigraspoverrid": 91, "robotknow": 91, "override_hold": 91, "status_fail": 91, "hint_unknown": 91, "hint_right": 91, "hint_left": 91, "status_arm_is_stuck": 91, "directionwher": 91, "afford": 91, "status_grasp_is_lost": 91, "manipulationwil": 91, "control_mode_unknown": 91, "control_mode_posit": 91, "specifiedand": 91, "trapezoidaltrajectori": 91, "task_spe": 91, "control_mode_veloc": 91, "tomaintain": 91, "se3": [91, 149, 160, 185], "task_type_unknown": 91, "task_type_se3_circle_force_torqu": 91, "whereboth": 91, "valv": [91, 228], "solid": [91, 185, 313], "graspthi": 91, "specifiedin": 91, "specifieda": 91, "task_type_r3_circle_extradof_forc": 91, "circlebut": 91, "circleand": 91, "theend": 91, "task_type_r3_circle_forc": 91, "whereth": 91, "rigidor": 91, "task_type_r3_linear_forc": 91, "linebut": 91, "manipulatinga": 91, "freeto": 91, "task_type_hold_pos": 91, "tohold": 91, "manipulationtask": 91, "toconstrain": 91, "onlyb": 91, "controlmov": 91, "receipt": 91, "detec": 91, "advice_unknown": 91, "advice_non": 91, "samebehavior": 91, "advice_in_contact": 91, "advis": 91, "advice_not_in_contact": 91, "status_act": 91, "status_error": 91, "status_process": [91, 160], "status_incompatible_hardwar": 91, "arm_command_feedback": 91, "body_status_unknown": 91, "body_status_mov": 91, "settl": 91, "body_status_settl": 91, "final_goal_status_unknown": 91, "hashappen": 91, "final_goal_status_in_progress": 91, "final_goal_status_achiev": 91, "final_goal_status_block": 91, "itbeliev": 91, "ifa": 91, "nearing": 91, "finalposit": 91, "robotcannot": 91, "status_going_to_go": 91, "status_powered_off": 91, "unsafe_unknown": 91, "unsafe_move_to_safe_posit": 91, "sittingand": 91, "additionalstep": 91, "status_is_sit": 91, "status_stanc": 91, "status_going_to_st": 91, "status_too_far_awai": 91, "standing_unknown": 91, "standing_control": 91, "makesmal": 91, "standing_frozen": 91, "unlesscommand": 91, "thisstat": 91, "status_is_stand": 91, "series_index": [91, 192, 193, 194, 195, 196, 197, 199, 203, 205], "shutter": 91, "additional_index": [91, 193, 194, 204], "additional_index_nam": [91, 193, 194, 204], "file_descriptor": [91, 188], "series_descriptor": [91, 192, 194, 195, 197, 200, 202, 205], "series_block_index": [91, 192, 194, 205], "file_index": [91, 188, 193, 194], "checksum_typ": 91, "checksum_num_byt": 91, "checksum_non": 91, "minor_vers": 91, "patch_level": 91, "summar": 91, "series_identifi": [91, 194], "series_block_index_offset": 91, "series_identifier_hash": 91, "content_typ": [91, 193], "csv": [91, 249, 296, 316], "type_nam": [91, 193, 197, 215], "is_metadata": [91, 193, 204], "datatyp": 91, "pod_typ": [91, 193, 194, 200, 201], "innermost": 91, "outermost": 91, "descriptor_file_offset": 91, "block_entri": 91, "total_byt": [91, 192], "identifier_hash": 91, "uint64_t": 91, "lexicograph": 91, "message_typ": [91, 109, 190, 193, 194, 199], "struct_typ": 91, "logtick": 91, "varnam": 91, "rssi": 91, "composit": 91, "whose": [91, 126, 150], "datablock": 91, "acycl": 91, "dag": [91, 128], "key_to_series_identifier_hash": 91, "checksum_type_unknown": 91, "checksum_type_non": 91, "writer": [91, 187, 194], "checksum_type_sha1": 91, "uncorrupt": 91, "type_unspecifi": 91, "type_int8": 91, "type_int16": 91, "type_int32": 91, "type_int64": 91, "type_uint8": 91, "type_uint16": 91, "type_uint32": 91, "type_uint64": 91, "type_float32": 91, "type_float64": 91, "thedatabuff": 91, "requestsmad": 91, "theacquisit": 91, "request_id": [91, 113, 114, 115, 116], "acquiredmetadata": 91, "whenstor": 91, "requestor": 91, "storedin": 91, "custom_param_error": [91, 112, 126], "status_custom_params_error": 91, "data_sourc": 91, "network_compute_sourc": 91, "network_compute_captur": 91, "captureact": 91, "cancellationrequest": 91, "actionswith": 91, "capturesess": 91, "notspecifi": 91, "populateth": 91, "identif": [91, 125, 296], "purposeswhen": 91, "througheach": 91, "has_live_data": 91, "livedata": 91, "fromth": 91, "error_messag": [91, 96, 98, 105, 106, 107, 112, 113, 121, 122, 125, 126, 127, 134, 136, 137, 140, 141, 146, 148, 150, 151, 153, 154, 155, 157, 158, 160, 179, 210, 213], "error_data": [91, 116], "acrossact": 91, "theaction_id": 91, "crop": 91, "detected_gaug": 91, "individuallyidentifi": 91, "pieceof": 91, "guaranteeuniqu": 91, "necessarilystart": 91, "cancollect": 91, "data_sav": 91, "data_error": [91, 116], "respondswith": 91, "service_error": 91, "network_compute_error": 91, "image_request": [91, 136], "theimageacquisitioncap": 91, "live_data": 91, "available_model": 91, "envelop": 91, "network_compute_statu": 91, "status_unknown_capture_typ": 91, "status_failed_to_cancel": 91, "status_request_id_does_not_exist": 91, "status_acquir": 91, "status_cancel_in_progress": 91, "status_acquisition_cancel": 91, "status_data_error": 91, "status_cancel_acquisition_fail": 91, "status_request_error": 91, "status_network_error": 91, "status_getstatus_error": 91, "thetablet": 91, "listdata": 91, "max_capture_id": [91, 117], "relationbetween": 91, "insideeach": 91, "action1": 91, "group1": 91, "action2": 91, "group2": 91, "andgroup_nam": 91, "orrel": 91, "captures_from_id": 91, "thedata": 91, "newcaptur": 91, "only_include_identifi": 91, "theactual": 91, "include_imag": 91, "include_data": 91, "include_metadata": 91, "include_alert": 91, "capture_id": 91, "file_extens": [91, 116, 117], "from_timestamp": 91, "to_timestamp": 91, "listcaptureact": 91, "liststoreddata": 91, "froman": 91, "storedata": 91, "liststoredimag": 91, "imagesfrom": 91, "thequeri": 91, "storeimag": 91, "liststoredmetadata": 91, "singlequerystoredcapturesrespons": 91, "theservic": 91, "matchingth": 91, "canfit": 91, "emptyquerystoredcapturesrespons": 91, "instantan": 91, "start_timestamp": 91, "end_timestamp": 91, "onset": 91, "log_preserve_hint": [91, 118, 159], "blob_data": 91, "untilth": 91, "operator_com": [91, 159], "tick_data": 91, "text_messag": [91, 118], "schema_id": [91, 118], "is_tim": 91, "sequence_id": [91, 118], "somehow": 91, "segreg": 91, "line_numb": 91, "consequenti": 91, "occurr": 91, "level_unset": 91, "level_low": 91, "level_medium": 91, "level_high": 91, "level_mission_crit": 91, "level_system_crit": 91, "log_preserve_hint_unset": 91, "log_preserve_hint_norm": 91, "thisev": 91, "log_preserve_hint_preserv": 91, "bepreserv": 91, "client_error": 91, "server_error": 91, "invalid_schema_id": 91, "type_unknown": 91, "encoding_unknown": 91, "encoding_raw": 91, "concaten": [91, 119], "level_unknown": 91, "level_debug": 91, "level_info": 91, "level_warn": 91, "level_error": 91, "datagram": 91, "total_s": 91, "sequenti": 91, "msgtype": 91, "channel_glob": 91, "num_data_buffer_pag": 91, "data_buffer_total_byt": 91, "num_com": 91, "num_ev": 91, "blob_spec": 91, "timespan": [91, 109, 180, 208, 246, 254], "page_id": [91, 120], "bytes_delet": 91, "int32valu": 91, "events_limit": 91, "operator_comments_limit": 91, "max_ev": 91, "1024": 91, "max_com": 91, "get_blob_spec": [91, 120], "data_buffer_statu": 91, "data_queri": 91, "event_comment_request": 91, "events_com": 91, "num_tick": 91, "is_open": 91, "is_download": 91, "deleted_timestamp": 91, "download_started_timestamp": 91, "request_preserv": 91, "status_delet": 91, "status_deletion_fail": 91, "status_not_found": 91, "compression_unknown": 91, "compression_non": 91, "compression_gzip": 91, "gzip": 91, "compression_zstd": 91, "zstd": 91, "format_bddf_fil": 91, "getdataindex": 91, "geteventscom": 91, "getdatabufferstatu": 91, "getdatapag": 91, "pf": 91, "deletedatapag": 91, "65535": 91, "service_entri": 91, "reciev": [91, 293, 316], "discover": 91, "among": [91, 149, 281], "aservic": 91, "anaddress": 91, "last_upd": [91, 122], "timebas": 91, "user_token_requir": [91, 122], "containa": 91, "a401": 91, "user_token": [91, 159, 181], "auth_servicedo": 91, "permission_requir": 91, "musthav": 91, "liveif": 91, "host_payload_guid": 91, "updatedvia": 91, "unknowni": 91, "getservic": 91, "status_nonexistent_servic": 91, "status_already_exist": 91, "privat": [91, 125, 251, 313, 315], "therecord": 91, "servicerecord": 91, "directorymanag": 91, "id_start": 91, "id_end": 91, "dock_typ": 91, "power_statu": 91, "docking_command_id": 91, "update_docking_param": 91, "particualar": 91, "clock_identifi": [91, 123, 180], "rpcsthi": 91, "require_fiduci": [91, 123, 158], "dock_config": 91, "dock_stat": 91, "dock_status_unknown": 91, "dock_status_dock": 91, "link_status_unknown": 91, "link_status_connect": 91, "link_status_error": 91, "dock_type_unknown": 91, "dock_type_contact_prototyp": 91, "prototyp": 91, "spotdock": 91, "dock_type_spot_dock": 91, "dock_type_spot_doghous": 91, "hous": 91, "prep_pose_only_pos": 91, "status_misalign": 91, "misalign": 91, "status_old_docking_command": 91, "status_error_dock_lost": 91, "status_error_leas": 91, "status_error_command_timed_out": 91, "status_error_no_timesync": 91, "status_error_too_dist": 91, "executionthi": 91, "dockingcommandcheck": 91, "status_error_dock_not_found": 91, "prep_pose_unknown": 91, "prep_pose_use_pos": 91, "prep_pose_skip_pos": 91, "target_config_id": [91, 125], "deregistr": 91, "resons": 91, "assert": [91, 125, 134, 140], "ocu": 91, "patrol": 91, "ocu01": 91, "offhandl": 91, "priorto": 91, "estop_level_settle_then_cutwhich": 91, "disablingmotor": 91, "disconnectedimmedi": 91, "defaultto": 91, "levelassert": 91, "estopconfigrequest": 91, "active_config": 91, "status_success": [91, 310], "status_endpoint_mismatch": 91, "status_config_mismatch": 91, "status_endpoint_unknown": 91, "status_incorrect_challenge_respons": 91, "estop_level_unknown": [91, 125], "estop_level_settle_then_cut": [91, 125], "status_invalid_endpoint": 91, "status_invalid_id": 91, "ato": 91, "denial": 91, "registerestopendpoint": 91, "deregisterestopendpoint": 91, "estopcheckin": 91, "requesta": 91, "getestopconfig": 91, "setestopconfig": 91, "getestopsystemstatu": 91, "triggerservicefault": 91, "clearservicefault": 91, "stop_feedback": 91, "freeze_feedback": 91, "selfright_feedback": 91, "safe_power_off_feedback": 91, "battery_change_pose_feedback": 91, "payload_estimation_feedback": 91, "constrained_manipulation_feedback": 91, "joint_feedback": 91, "stop_request": 91, "freeze_request": 91, "selfright_request": 91, "safe_power_off_request": 91, "battery_change_pose_request": 91, "payload_estimation_request": 91, "constrained_manipulation_request": 91, "joint_request": 91, "dimension": [91, 149, 228], "isfix": 91, "sax": 91, "frame_name_tform_box": 91, "theful": 91, "coordinatefram": 91, "center_pt": 91, "polar": 91, "coordiat": 91, "mathworld": 91, "wolfram": 91, "azimuth": [91, 243], "coordiant": 91, "reckon": 91, "frae": 91, "concatent": 91, "syntax": [91, 128, 246, 250], "forest": 91, "parent_frame_nam": [91, 128], "1d": 91, "concav": 91, "counterclockwis": [91, 233, 276], "min_vel": 91, "rx": 91, "ry": 91, "rz": 91, "rxrx": 91, "rxry": 91, "rxrz": 91, "rxx": 91, "rxy": 91, "rxz": 91, "ryrx": 91, "ryri": 91, "ryrz": 91, "ryx": 91, "ryi": 91, "ryz": 91, "rzrx": 91, "rzry": 91, "rzrz": 91, "rzx": 91, "rzy": 91, "rzz": 91, "xrx": 91, "xry": 91, "xrz": 91, "yrx": 91, "yry": 91, "yrz": 91, "yx": 91, "zrx": 91, "zry": 91, "zrz": 91, "zx": 91, "zy": [91, 282], "symmetr": [91, 149], "yaw_vari": 91, "varianc": 91, "cov_rzrz": 91, "removedin": 91, "fixm": 91, "sberard": 91, "atlassian": 91, "brows": 91, "12523": 91, "cov_xx": 91, "cov_xi": 91, "cov_xz": 91, "cov_yx": 91, "cov_yi": 91, "cov_yz": 91, "cov_zx": 91, "cov_zi": 91, "cov_zz": 91, "data_point": [91, 131], "ratecan": 91, "gps_devic": [91, 131], "dump": [91, 269], "peripher": 91, "newgpsdata": 91, "magnetomet": 91, "north": 91, "sbodi": 91, "timestamp_gp": 91, "timestamp_cli": 91, "connectedto": 91, "timestamp_robot": 91, "body_tform_gp": [91, 132, 281], "prn": 91, "snr": 91, "duro": 91, "microstrain": 91, "iscalcul": 91, "filter_unknown": 91, "filter_non": 91, "filter_duro_in": 91, "spp": 91, "dgnss": 91, "fixed_rtk": 91, "float_rtk": 91, "dead_reckon": 91, "fixed_posit": 91, "gps_l1ca": 91, "gps_l2cm": 91, "sbas_l1ca": 91, "glonass_l1ca": 91, "glonass_l2ca": 91, "gps_l1p": 91, "gps_l2p": 91, "bds2_b1": 91, "beidou": 91, "bds2_b2": 91, "galileo_e1b": 91, "galileo_e7i": 91, "latest_data": 91, "ecef_p_bodi": 91, "positionand": 91, "historical_data": 91, "wiki": 91, "gps_state": 91, "reportingwon": 91, "isfilt": 91, "status_need_devic": 91, "transfrom": 91, "resetregistr": 91, "begin_callback": [91, 98], "begin_control": [91, 98], "update_callback": [91, 98], "end_callback": [91, 98], "areacallback": [91, 98, 99, 100], "required_lease_resourc": [91, 102], "default_stop": 91, "map_config": 91, "region_info": 91, "recorded_data": 91, "ifempti": 91, "matchareacallbackinform": 91, "region_id": 91, "unfinished_rout": 91, "face_direct": 91, "face_stairs_if_pres": 91, "face_yaw_offset": 91, "andhow": 91, "callbackinstruct": 91, "callendcallback": 91, "error_leas": 91, "at_start": 91, "at_end": 91, "end_config": 91, "option_continu": 91, "error_unknown": 91, "error_transport": 91, "error_respons": 91, "error_servic": 91, "blockage_unknown": 91, "ableto": 91, "passabl": 91, "unlessit": 91, "cantreat": 91, "impass": 91, "entity_waiting_unknown": 91, "entity_waiting_dis": 91, "entity_waiting_en": 91, "impairment_unknown": 91, "navdetect": 91, "began": 91, "status_invalid_configur": 91, "suppliedconfiguration_data": 91, "status_expired_end_tim": 91, "status_invalid_command_id": 91, "status_missing_lease_resourc": 91, "status_shutdown_callback_fail": 91, "shutdownsign": 91, "acknowledg": 91, "face_direction_unknown": 91, "face_direction_along_rout": 91, "face_direction_waypoint_exact": 91, "face_direction_waypoint_auto": 91, "theopposit": 91, "face_direction_region_end": 91, "stage_unknown": 91, "stage_to_start": 91, "stage_to_end": 91, "stage_at_end": 91, "error_block": 91, "error_callback_fail": 91, "error_timed_out": 91, "option_unknown": 91, "option_stop": 91, "option_control": 91, "reportedvia": 91, "localization_unknown": 91, "localization_at_end": 91, "config_data": 91, "intocustom_param": 91, "arerequir": 91, "calliniti": 91, "controli": 91, "callbackimplement": 91, "isrun": 91, "routechang": [91, 101], "isblock": 91, "thismight": 91, "callbackreport": 91, "live_gps_st": 91, "map_gps_stat": 91, "ecef_tform_bodi": 91, "timeof": 91, "latitude_longitude_height": 91, "state_unknown": 91, "specififi": 91, "missing_servic": 91, "registeredbut": 91, "faulted_servic": 91, "edge_snapshot_id": [91, 134], "overwhelm": [91, 313], "theminto": 91, "anedgesnapshot": 91, "waypoint_snapshot_id": [91, 134], "download_imag": [91, 134], "fromeach": 91, "compress_point_cloud": 91, "smallestavail": 91, "do_not_download_point_cloud": [91, 134], "awaypointsnapshot": 91, "goal_llh": 91, "goal_yaw": 91, "bearingaround": 91, "east": 91, "west": [91, 298], "pi": 91, "max_distance_from_map": 91, "onintern": 91, "waypoint_id": [91, 134], "request_live_point_cloud": [91, 134], "usedto": 91, "request_live_imag": [91, 134], "ofloc": 91, "request_live_terrain_map": [91, 134], "request_live_world_object": [91, 134], "reqeuest": 91, "request_live_robot_st": [91, 134], "compress_live_point_cloud": 91, "smallest": [91, 165], "clouddata": 91, "request_gps_st": [91, 134], "localizationwil": 91, "remote_cloud_statu": 91, "outif": 91, "lost_detector_st": 91, "eventuallyit": 91, "truststhat": 91, "isavail": 91, "is_lost": 91, "rejectnavigateto": 91, "route_follow_param": [91, 134], "waypointin": 91, "thedestin": 91, "theoffset": 91, "continuationof": 91, "robot_impair": 91, "error_waypoint_id": 91, "error_edge_id": 91, "status_invalid_edg": 91, "area_callback_error": 91, "seed_tform_go": [91, 134], "robotachiev": 91, "gps_navigation_param": [91, 134], "travelparamswil": 91, "goal_waypoint_rt_seed_ewrt_seed_toler": [91, 134], "route_param": [91, 134], "gps_statu": 91, "route_blocked_behavior": [91, 134], "remaining_rout": 91, "completed_rout": 91, "visualizationof": 91, "conditionsedg": 91, "forstatus_reached_go": 91, "remaining_route_length": 91, "last_ko_tform_go": 91, "active_region_inform": 91, "stuck_reason": 91, "region_statu": 91, "exists_in_directori": 91, "withth": 91, "has_data": 91, "new_cmd_behavior": 91, "existing_cmd_behavior": 91, "map_has_lidar_data": 91, "robot_configured_for_lidar": 91, "ko_tform_bodi": [91, 134], "initialloc": 91, "suppliedin": 91, "neighborhoodof": 91, "yawin": 91, "fiducial_init": [91, 134], "use_fiducial_id": [91, 134], "status_no_matching_fiduci": 91, "status_fiducial_too_far_awai": 91, "fiducial_too_old": 91, "fiducial_pose_uncertain": 91, "do_ambiguity_check": [91, 134], "considerfiduci": 91, "waypointsmai": 91, "refine_fiducial_result_with_icp": [91, 134], "fiducialwa": 91, "refine_with_visual_featur": [91, 134], "error_report": 91, "suspected_ambigu": 91, "sensor_statu": 91, "themap": 91, "status_impairedwil": 91, "quality_check_result": 91, "statusher": 91, "checkdo": 91, "alternate_robot_tform_waypoint": 91, "theresult": 91, "reachedth": 91, "ignore_final_yaw": 91, "velocity_limit": [91, 134], "achieveth": 91, "feature_quality_toler": 91, "disable_alternate_route_find": [91, 215], "clutter": 91, "map_stat": 91, "withoutunderli": 91, "generate_new_anchor": [91, 134], "treat_validation_warnings_as_error": 91, "bydefault": 91, "loaded_waypoint_snapshot_id": 91, "unknown_waypoint_snapshot_id": 91, "loaded_edge_snapshot_id": 91, "unknown_edge_snapshot_id": 91, "license_statu": 91, "validation_statu": 91, "thegraph": 91, "navigateon": 91, "missing_waypoint_ids_in_edg": 91, "idsreferenc": 91, "missing_waypoint_ids_in_anchor": 91, "thesear": 91, "edge_ids_invalid_transform": 91, "from_tform_to": [91, 158, 282], "uploadedthat": 91, "waypoint_anchors_invalid_transform": 91, "idsthat": 91, "object_anchors_invalid_transform": 91, "achor": 91, "duplicate_waypoint_id": 91, "thewaypoint": 91, "listth": 91, "duplicate_waypoint_anchor_id": 91, "duplicate_object_anchor_id": 91, "duplicate_edge_id": 91, "idswhich": 91, "numberof": 91, "impossibleto": 91, "invalid_waypoint_ids_self_edg": 91, "selfedg": 91, "has_empty_waypoint_id": 91, "has_empty_edge_id": 91, "has_empty_waypoint_anchor_id": 91, "has_empty_object_anchor_id": 91, "malformed_staircase_edge_id": 91, "rerecord": 91, "verify_refinement_qu": 91, "callstoprecord": 91, "status_snapshot_does_not_exist": 91, "status_no_timesync": 91, "status_expir": 91, "status_too_dist": 91, "status_unknown_route_el": 91, "status_feature_desert": 91, "uniniti": [91, 134], "status_could_not_update_rout": 91, "wrestl": 91, "differentrout": 91, "gps_status_unknown": 91, "inwaypoint": 91, "gpsdata": 91, "status_no_anchor": 91, "differentwaypoint": 91, "status_invalid_pos": 91, "unachiev": [91, 134], "upsid": 91, "status_invalid_gps_command": 91, "status_unknown_waypoint": 91, "weren": 91, "status_navig": 91, "status_wait": 91, "status_callback_in_control": 91, "blockage_status_unknown": 91, "blockage_status_route_clear": 91, "blockage_status_route_blocked_temporarili": 91, "blockage_status_stuck": 91, "route_following_status_unknown": 91, "route_following_status_following_rout": 91, "orfrom": 91, "route_following_status_returning_to_rout": 91, "becauseit": 91, "route_following_status_following_alternate_rout": 91, "waypointsto": 91, "partof": 91, "route_following_status_explor": 91, "arounda": 91, "duringnavig": 91, "impared_statu": 91, "mid": 91, "recoverfrom": 91, "stuck_reason_unknown": 91, "stuck_reason_obstacl": 91, "stuck_reason_area_callback_block": 91, "stuck_reason_area_callback_fail": 91, "toother": 91, "stuck_reason_goal_block": 91, "toreach": 91, "resume_unknown": 91, "resume_return_to_unfinished_rout": 91, "thefurthest": 91, "resume_fail_when_not_on_rout": 91, "route_blocked_unknown": 91, "route_blocked_rerout": 91, "desinationthat": 91, "pointaft": 91, "followth": 91, "aresimilarli": 91, "route_blocked_fail": 91, "start_unknown": 91, "start_goto_start": 91, "usingedg": 91, "therout": 91, "start_goto_rout": 91, "pointthat": 91, "fromthat": 91, "willpref": 91, "start_fail_when_not_on_rout": 91, "fiducial_init_unknown": 91, "quality_check_unknown": 91, "statusenum": 91, "quality_check_success": 91, "quality_check_poor_point_cloud_match": 91, "locationof": 91, "quality_check_poor_gravity_align": 91, "fiducialb": 91, "wrongli": 91, "simu": 91, "miscalibr": 91, "setlocalizationrpc": 91, "quality_check_skip": 91, "quality_check_bad_height": 91, "theclient": 91, "status_abort": 91, "status_fiducial_too_old": 91, "atth": 91, "status_fiducial_pose_uncertain": 91, "unreliablepos": 91, "thatwer": 91, "uncertain": 91, "detectionsat": 91, "fiducialnear": 91, "sensorsetup": 91, "sensorstatu": 91, "tolerance_unknown": 91, "tolerance_default": 91, "tolerance_ignore_poor_feature_qu": 91, "status_map_too_large_licens": 91, "examplewould": 91, "viceversa": 91, "thecurr": 91, "formor": 91, "ram": [91, 134], "seed_tform_object": [91, 282], "notnecessarili": 91, "session_nam": [91, 158], "usermai": 91, "regionthat": 91, "client_usernam": [91, 158], "client_software_vers": [91, 158], "client_id": [91, 158], "client_typ": [91, 158], "mutabl": 91, "snapshot_id": 91, "understood": 91, "direction_constraint": [91, 158], "facewhen": 91, "require_align": [91, 158], "shouldn": [91, 158, 284], "overobstacl": 91, "override_mobility_param": 91, "fieldmask": 91, "isstor": 91, "terrain_param": 91, "beannot": 91, "meansal": 91, "conserv": 91, "limitstor": 91, "usedfor": 91, "edge_sourc": 91, "sharedacross": 91, "straight_staircas": 91, "staircase_with_land": 91, "descent_prefer": 91, "thisstaircas": 91, "withrespect": 91, "straightlin": 91, "immut": 91, "foot_stat": 91, "planar_ground": 91, "alternate_waypoint": 91, "alternate_edg": 91, "waypoint_anchor": 91, "object_anchor": [91, 282], "total_path_length": 91, "loadedmap": 91, "num_byt": 91, "raminsid": 91, "waypoint_tform_ko": 91, "kitchen": 91, "fridg": 91, "creation_tim": 91, "icp_vari": 91, "recordtim": 91, "scan_match_region": 91, "waypoint_sourc": 91, "client_metadata": [91, 158], "loop_closure_set": 91, "ata": 91, "disable_gps_loc": 91, "availableto": 91, "default_region": [91, 158], "nospeci": 91, "trait": 91, "dist_2d": [91, 158], "disable_loop_closur": 91, "disable_collision_check": 91, "closuresfrom": 91, "max_edge_length": 91, "nonzero": 91, "loopclosur": 91, "max_odometry_path_length": 91, "shortcut": 91, "robot_local_grid": 91, "is_point_cloud_process": 91, "version_id": 91, "itha": 91, "has_remote_point_cloud_sensor": 91, "body_tform_remote_point_cloud_sensor": 91, "srefer": 91, "annotation_state_unknown": 91, "annotation_state_set": 91, "deliber": 91, "annotation_state_non": 91, "subfield": 91, "direction_constraint_unknown": 91, "direction_constraint_no_turn": 91, "direction_constraint_forward": 91, "direction_constraint_revers": 91, "direction_constraint_non": 91, "ground_clutter_unknown": 91, "ground_clutter_off": 91, "ground_clutter_from_footfal": 91, "footfal": 91, "path_mode_unknown": 91, "path_mode_default": 91, "path_mode_strict": 91, "descent_preference_unknown": 91, "descent_preference_always_revers": 91, "routecould": 91, "constraintscr": 91, "causesnavig": 91, "byth": 91, "adjacentconstraint": 91, "forwarddirect": 91, "edge_source_unknown": 91, "edge_source_odometri": 91, "edge_source_small_loop_closur": 91, "edge_source_fiducial_loop_closur": 91, "edge_source_alternate_route_find": 91, "edge_source_user_request": 91, "edge_source_loc": 91, "edgeof": 91, "waypoint_source_unknown": 91, "waypoint_source_robot_path": 91, "waypoint_source_user_request": 91, "waypoint_source_alternate_route_find": 91, "se3_covari": 91, "gaussian": 91, "uncertainti": 91, "confidence_bound": 91, "thiswil": 91, "diagonalmatrix": 91, "unconstrain": 91, "x_bound": 91, "y_bound": 91, "z_bound": 91, "yaw_bound": 91, "initial_hint": [91, 148, 282], "modify_anchoring_on_serv": [91, 148, 282], "stream_intermediate_result": [91, 148, 282], "apply_gps_result_to_waypoints_on_serv": 91, "thisoptim": 91, "ecef_tform_waypointcan": 91, "gps_result": 91, "ecef_tform_se": 91, "navigateus": 91, "proces": 91, "optimizer_param": 91, "measurement_param": 91, "optimize_existing_anchor": [91, 282], "initialguess": 91, "waypointwhich": 91, "onth": 91, "gravity_ewrt_se": 91, "optimzi": 91, "use_kinematic_odometri": 91, "odometryfram": 91, "use_visual_odometri": 91, "framewil": 91, "use_gyroscope_measur": 91, "appar": [91, 282], "use_loop_closur": 91, "use_world_object": 91, "anotherwhen": 91, "co": [91, 282], "use_gp": 91, "tohelp": 91, "max_it": 91, "max_time_second": 91, "kinematic_odometry_weight": 91, "visual_odometry_weight": 91, "world_object_weight": 91, "hint_weight": 91, "gyroscope_weight": 91, "loop_closure_weight": 91, "gps_weight": 91, "waypoint_result": [91, 282], "world_object_result": [91, 282], "anchoring_on_server_was_modifi": 91, "serverwa": 91, "duringprocess": 91, "resultsback": 91, "nonlinear": 91, "final_iter": 91, "violated_waypoint_constraint": 91, "violated_object_constraint": 91, "missing_snapshot_id": 91, "missing_waypoint_id": 91, "themto": 91, "invalid_hint": 91, "unorgan": 91, "inconsistent_edg": 91, "incorrectloop": 91, "optmiz": 91, "optimz": 91, "num_measurements_us": 91, "subgraph": [91, 148], "modify_map_on_serv": [91, 148], "presenc": 91, "check_edges_for_collis": 91, "collision_check_robot_radiu": 91, "sphere": [91, 185, 308, 330], "aloop": 91, "spheric": 91, "linefrom": 91, "collision_check_height_vari": 91, "ramp": [91, 230], "alongit": 91, "min_loop_closure_path_length": 91, "fromon": 91, "max_loop_closure_edge_length": 91, "candid": [91, 174], "thecandid": 91, "max_fiducial_dist": 91, "tous": 91, "max_loop_closure_height_chang": 91, "arewil": 91, "prune_edg": 91, "areawil": 91, "icp_it": 91, "max_point_match_dist": 91, "toaccept": 91, "max_loop_closure_path_length": 91, "onewaypoint": 91, "beyondthi": 91, "unwil": 91, "trust": 91, "num_extra_loop_closure_iter": 91, "isus": 91, "nearbyloop": 91, "processtopologyrpc": 91, "do_odometry_loop_closur": 91, "odometry_loop_closure_param": 91, "icp_param": 91, "do_fiducial_loop_closur": 91, "fiducial_loop_closure_param": 91, "collision_check_param": 91, "whichcollid": 91, "timeout_second": 91, "secondswil": 91, "bereturn": 91, "timed_out": 91, "bycal": 91, "processtopologi": 91, "new_subgraph": 91, "viastream": 91, "map_on_server_was_modifi": 91, "againto": 91, "representingth": 91, "seed_tform_waypoint_uncertainti": 91, "seed_tform_waypoint_constraint": 91, "theoveral": 91, "ensurethat": 91, "perfectli": 91, "seed_tform_object_uncertainti": 91, "seed_tform_object_constraint": 91, "gps_status_not_enough_measur": 91, "status_missing_waypoint_snapshot": 91, "status_optimization_failur": 91, "minima": 91, "ill": [91, 126], "status_constraint_viol": 91, "status_max_iter": 91, "status_max_tim": 91, "status_invalid_hint": 91, "status_map_modified_during_process": 91, "status_invalid_gravity_align": 91, "mapwith": 91, "edge_id": [91, 134], "not_in_map": 91, "existin": 91, "waypoint_tform_bodi": 91, "startingfiduci": 91, "aleas": 91, "error_existing_edg": 91, "status_exist": 91, "waypoint_nam": [91, 158], "recording_environ": [91, 158], "waypointand": 91, "idsar": 91, "verifyingthat": 91, "created_waypoint": 91, "created_edg": 91, "missing_fiduci": 91, "fiducialswer": 91, "bad_pose_fiduci": 91, "status_fiducial_pose_not_ok": 91, "beloc": 91, "recordingwil": 91, "createwaypointresponsei": 91, "licensestatu": 91, "is_record": 91, "recordinga": 91, "session_start_tim": 91, "shouldb": 91, "name_prefix": 91, "prepend": [91, 270], "waypoint_environ": 91, "edge_environ": [91, 158], "alledg": 91, "waypointsand": 91, "started_recording_on": 91, "timestmap": 91, "generatedaft": 91, "messg": 91, "currentlyvis": 91, "startrecordingi": 91, "recordingrequest": 91, "sessionstart": 91, "error_waypoint_localized_id": 91, "thestartrecordingrequest": 91, "status_not_record": 91, "status_missing_transform": 91, "status_could_not_create_waypoint": 91, "status_remote_cloud_failure_not_in_directori": 91, "status_remote_cloud_failure_no_data": 91, "map_state_unknown": 91, "map_state_ok": 91, "map_state_too_large_for_licens": 91, "forsom": 91, "status_not_localized_to_existing_map": 91, "startingto": 91, "status_not_localized_to_end": 91, "beforew": 91, "status_not_ready_yet": 91, "moveth": 91, "getmapstatu": 91, "downloadwaypoint": 91, "aresuffici": 91, "environmn": 91, "recordedso": 91, "grippercameragetparam": 91, "camera_mod": 91, "exposure_auto": 91, "exposure_absolut": 91, "exposure_roi": 91, "acertain": 91, "focus_auto": 91, "focus_absolut": 91, "infin": 91, "focal": 91, "focus_roi": 91, "draw_focus_roi_rectangl": 91, "hdr": 91, "exposurein": 91, "framer": 91, "led_mod": 91, "led_torch_bright": 91, "torch": 91, "led_mode_off": 91, "white_balance_temperature_auto": 91, "balanceunset": 91, "white_balance_temperatur": 91, "roi_percentage_in_imag": 91, "lefthand": 91, "righthand": 91, "window_s": 91, "mode_unknown": 91, "mode_640_480": 91, "640x480": 91, "mode_640_480_120fps_uyvi": 91, "mode_1280_720": 91, "1280x720": 91, "mode_1280_720_60fps_uyvi": 91, "mode_1920_1080": 91, "1920x1080": 91, "mode_1920_1080_60fps_mjpg": 91, "mode_3840_2160": 91, "3840x2160": 91, "mode_3840_2160_30fps_mjpg": 91, "mode_4096_2160": 91, "4096x2160": 91, "mode_4096_2160_30fps_mjpg": 91, "mode_4208_3120": 91, "4208x3120": 91, "mode_4208_3120_20fps_mjpg": 91, "led_mode_unknown": 91, "led_mode_torch": 91, "constantli": [91, 294, 320, 322], "hdr_unknown": 91, "hdr_off": 91, "hdr_auto": 91, "hdr_manual_1": 91, "hdr_manual_2": 91, "hdr_manual_3": 91, "hdr_manual_4": 91, "roi_window_size_unknown": 91, "roi_window_size_1": 91, "roi_window_size_2": 91, "roi_window_size_3": 91, "roi_window_size_4": 91, "roi_window_size_5": 91, "roi_window_size_6": 91, "roi_window_size_7": 91, "roi_window_size_8": 91, "setparam": 91, "getparam": 91, "specifiedwith": 91, "observesveloc": 91, "piecewisecub": 91, "polynomi": 91, "eachtrajectori": 91, "trajectorypoint": 91, "accelerationconstraint": 91, "stillobei": 91, "5708": [91, 160], "openveloc": 91, "maximum_open_close_veloc": 91, "maximum_open_close_acceler": 91, "maximum_torqu": 91, "disable_force_on_contact": [91, 160], "detectionand": 91, "claw_gripper_feedback": 91, "claw": 91, "claw_gripper_command": [91, 160], "status_applying_forc": 91, "facilit": 91, "trend": 91, "asymbol": 91, "identifyth": 91, "disable_rpc_log": 91, "recordedin": 91, "theresponsehead": 91, "strippeddown": 91, "code_unspecifi": 91, "code_internal_server_error": 91, "microsecond": 91, "impliesth": 91, "ssensor": 91, "acquist": 91, "capture_param": 91, "androbot": 91, "collectedfrom": 91, "1280x720the": 91, "compatibli": 91, "greyscale_u8": 91, "rgb_u8": 91, "robotat": 91, "depth_scal": [91, 136], "rectilinear": 91, "image_typ": [91, 137], "princip": 91, "descrb": 91, "focal_length": 91, "principal_point": 91, "optic": 91, "format_rl": 91, "pixel_format_rgba_u8": 91, "pixel_format_depth_u16": 91, "uint16": 91, "status_unknown_camera": 91, "status_source_data_error": 91, "willnot": 91, "thebest": 91, "serviceshould": 91, "image_type_unknown": 91, "image_type_visu": 91, "image_type_depth": 91, "sourcesth": 91, "request_unknown": 91, "record_ev": 91, "controlled_motors_off": 91, "immediate_robot_off": 91, "lease_stal": 91, "policy_id": [91, 140], "controllingth": 91, "haltrobot": 91, "timer": [91, 140], "last_checkin": 91, "active_control_act": 91, "actionsmai": 91, "to_add": [91, 140], "mismatch": [91, 134, 212], "added_polici": 91, "removed_polici": 91, "user_id": 91, "status_invalid_policy_id": 91, "policy_control_action_unknown": 91, "policy_control_action_auto_return": 91, "policy_control_action_motors_off": 91, "policy_control_action_robot_off": 91, "status_invalid_leas": 91, "theactiv": 91, "modifypolici": [91, 140], "thepolici": 91, "resource_already_claim": 91, "epochat": 91, "receiev": 91, "user_nam": 91, "sepcif": 91, "beacquir": 91, "leasethat": 91, "wantto": 91, "retent": 91, "thegetstatusrespons": 91, "leaseretain": 91, "attempted_leas": 91, "previous_leas": 91, "latest_known_leas": [91, 143], "latest_resourc": 91, "include_full_lease_info": [91, 141], "resource_tre": 91, "sub_resourc": 91, "retainownership": 91, "happenedif": 91, "newleas": 91, "methodimmedi": 91, "status_invalid_resourc": 91, "listleaseresourc": 91, "knownresourc": 91, "status_not_authoritative_servic": 91, "authorit": [91, 141], "status_old": 91, "status_revok": [91, 141], "status_unmanag": 91, "unmanag": 91, "status_wrong_epoch": 91, "isset": 91, "leasei": 91, "status_not_active_leas": 91, "thenew": 91, "retainleasemethod": 91, "possess": 91, "feature_cod": 91, "currentlyload": 91, "feature_en": 91, "indicatingif": 91, "robot_seri": 91, "not_valid_befor": 91, "not_valid_aft": 91, "licensed_featur": 91, "status_valid": 91, "status_not_yet_valid": 91, "status_malform": 91, "status_serial_mismatch": 91, "status_no_licens": 91, "getlicenseinfo": 91, "licensecurr": 91, "loadedlicens": 91, "local_grid_typ": 91, "local_grid_request": 91, "local_grid_respons": 91, "num_local_grid_error": 91, "local_grid_type_nam": [91, 145], "quadrant": 91, "xi": 91, "num_cells_x": 91, "yj": 91, "cell_siz": 91, "cell_format": 91, "rle_count": 91, "thebyt": 91, "cell_value_scal": 91, "cell_value_offset": 91, "num_cells_i": 91, "gridcel": 91, "totla": 91, "cell_format_unknown": 91, "cell_format_float32": 91, "cell_format_float64": 91, "cell_format_int8": 91, "cell_format_uint8": 91, "cell_format_int16": 91, "cell_format_uint16": 91, "encoding_rl": 91, "status_no_such_grid": 91, "status_data_unavail": 91, "status_data_invalid": 91, "log_status": 91, "past_dur": 91, "status_id_not_found": 91, "bundler": 91, "status_receiv": 91, "status_sync": 91, "status_don": 91, "status_termin": 91, "type_experi": 91, "type_retro": 91, "retroact": 91, "status_experiment_log_run": 91, "status_concurrency_limit_reach": 91, "status_log_termin": 91, "getlogstatu": [91, 146], "getactivelogstatus": [91, 146], "startretrolog": [91, 146], "logstarttim": 91, "t_rpc": 91, "t_buffer": 91, "recept": 91, "startexperimentlog": [91, 146], "todisk": 91, "watchdog": 91, "callingupdateexperimentlog": 91, "updateexperimentlog": [91, 146], "durationof": 91, "terminatelog": [91, 146], "sky": 91, "cup": 91, "wouldn": 91, "ewrt": 91, "tolerance_z": 91, "horizon": [91, 296], "rotation_with_toler": 91, "squeeze_grasp": 91, "override_request": 91, "api_grasp_overrid": 91, "carry_state_overrid": 91, "not_hold": 91, "carry_state_overridemessag": 91, "thingslik": 91, "gripperupsid": 91, "goodgrasp": 91, "position_constraint": 91, "userrequest": 91, "grasp_position_constraint_fixed_at_user_posit": 91, "graspthat": 91, "selectionhelp": 91, "manipulation_camera_sourc": 91, "willattempt": 91, "transforms_snapshot_manipulation_data": 91, "walkto_raycast_intersect": 91, "walktoobject": 91, "raycast": [91, 157, 308], "grasp_planning_solut": 91, "gripper_nearest_object": 91, "ballpark": 91, "walk_to_object_ray_in_world": 91, "walk_to_object_in_imag": 91, "pick_object": 91, "pick_object_ray_in_world": 91, "mostconfigur": 91, "pick_object_execute_plan": 91, "object_rt_fram": 91, "eachimag": 91, "transformsnapshot": 91, "walk_gaze_mod": 91, "ray_start_rt_fram": 91, "thismessag": 91, "ray_end_rt_fram": 91, "beforeperform": 91, "pick_auto_walk_and_gaz": 91, "pick_auto_gaz": 91, "pick_no_auto_walk_or_gaz": 91, "soconsid": 91, "rotation_ewrt_fram": 91, "disallow": 91, "NO": 91, "squeeze_grasp_disallow": 91, "gripperto": 91, "offset_dist": 91, "willwalk": 91, "override_unknown": 91, "override_not_hold": 91, "grasp_position_constraint_unknown": 91, "grasp_position_constraint_norm": 91, "manipulation_camera_source_unknown": 91, "manipulation_camera_source_stereo": 91, "manipulation_camera_source_hand": 91, "manip_state_unknown": 91, "manip_state_don": 91, "manip_state_searching_for_grasp": 91, "manip_state_moving_to_grasp": 91, "manip_state_grasping_object": 91, "manip_state_placing_object": 91, "manip_state_grasp_planning_succeed": 91, "differentgrasp": 91, "thecamera": 91, "retarget": 91, "thegrasp": 91, "gazeto": 91, "manip_state_walking_to_object": 91, "manip_state_attempting_raycast": 91, "manip_state_moving_to_plac": 91, "manip_state_place_failed_to_raycast_into_map": 91, "manip_state_place_succeed": 91, "manip_state_place_fail": 91, "pick_walk_gaze_unknown": 91, "locationmust": 91, "pick_plan_onli": 91, "manipulationapifeedback": 91, "overridegrasp": 91, "absolutemetr": 91, "timestamp_start": 91, "metricsof": 91, "changein": 91, "firsttim": 91, "timestamp_end": 91, "sequence_numb": [91, 150], "itwil": 91, "trackwhat": 91, "robot_serial_numb": 91, "robot_speci": 91, "thesesequence_numb": 91, "parameterswhich": 91, "include_ev": [91, 150], "missing_kei": 91, "first_sequence_numb": 91, "last_sequence_numb": 91, "getstoresequencerang": 91, "getabsolutemetricsnapshot": 91, "getmetr": 91, "fingerprint": 91, "delmin": 91, "singnatur": 91, "outstand": 91, "question_id": [91, 210], "answer_cod": 91, "impl_typenam": 91, "mission_info": 91, "history_upper_tick_bound": 91, "int64valu": 91, "history_lower_tick_bound": 91, "history_past_tick": 91, "inforamt": 91, "user_data": 91, "pause_tim": 91, "oftenthei": 91, "for_autonomous_process": 91, "ahuman": 91, "understandingof": 91, "answered_quest": 91, "histori": 91, "tick_count": 91, "accepted_answer_cod": 91, "tick_start_timestamp": 91, "node_st": 91, "result_failur": 91, "result_error": 91, "whyth": 91, "status_invalid_question_id": 91, "status_invalid_cod": 91, "status_already_answ": 91, "status_incompatible_answ": 91, "status_no_mission_plai": 91, "status_no_miss": 91, "status_failur": 91, "status_paus": 91, "outsideof": 91, "status_non": 91, "completedsuccessfulli": 91, "notstatus_stop": 91, "loadmissionaschunk": 91, "failfor": 91, "useloadmissionaschunks2": 91, "preferredmethod": 91, "missionsbecaus": 91, "responsear": 91, "streamingstream": 91, "THe": 91, "aredeseri": 91, "breakth": 91, "bedeseri": 91, "reiniti": 91, "localization_request": 91, "usedar": 91, "recalcul": 91, "allow_bad_qu": 91, "andif": 91, "response_bb_kei": 91, "theblackboard": 91, "gripper_param": 91, "navigation_feedback_response_blackboard_kei": 91, "messageto": 91, "navigate_route_response_blackboard_kei": 91, "toa": 91, "route_gen_param": 91, "navigate_to_response_blackboard_kei": 91, "apiev": 91, "start_timeand": 91, "starttim": 91, "succeed_earli": 91, "beevalu": 91, "motor_power_st": 91, "robot_state_blackboard_nam": 91, "ofclear": 91, "cause_fal": 91, "cause_hardwar": 91, "handle_stal": 91, "group_name_format": 91, "generatea": 91, "valuespecifi": 91, "willreplac": 91, "brace": [91, 283], "telop": 91, "loop_count": 91, "arepeat": 91, "request_name_in_blackboard": 91, "acquiredatarequestaft": 91, "metadata_name_in_blackboard": 91, "action_name_format": 91, "generatean": 91, "action_namevalu": 91, "blackboardwil": 91, "variablefrom": 91, "disable_cancel_on_pause_or_stop": 91, "outgo": 91, "nodei": 91, "ispaus": 91, "outgoingacquiredatareqeust": 91, "format_metadata": 91, "stringformat": 91, "interupt": 91, "thechild": 91, "willalwai": 91, "request_when_interrupt": 91, "andformat_metadata": 91, "pause_mission_metadata": 91, "restart_mission_metadata": 91, "load_mission_metadata": 91, "stop_mission_metadata": 91, "lease_use_error_metadata": 91, "play_mission_timeout_metadata": 91, "child_node_error_metadata": 91, "child_node_exception_metadata": 91, "default_metadata": 91, "keys_for_lease_use_error_messag": 91, "theerror": 91, "datetim": [91, 208, 219, 223], "iso8601": 91, "blackboard_vari": 91, "thischild": 91, "itreturn": 91, "docking_command_response_blackboard_kei": 91, "anddocking_command_feedback_response_blackboard_kei": 91, "command_status_nam": 91, "tobosdyn": 91, "thisnam": 91, "feedback_status_nam": 91, "whiledock": 91, "statusvalu": 91, "namei": 91, "docking_command_feedback_response_blackboard_kei": 91, "time_remaining_nam": 91, "blackboardvari": 91, "asa": 91, "timeout_child": 91, "nodewil": 91, "generatestr": 91, "blackboard_variable_nam": 91, "decim": 91, "float_vari": 91, "2f": 91, "tbdselect": 91, "13_loop_3": 91, "2148320923085": 91, "2158320923085": 91, "0f": 91, "71828": 91, "iff": 91, "node_refer": 91, "thenth": 91, "retain_leas": [91, 141], "for_dur": 91, "bosdyn_dock_st": 91, "set_blackboard": [91, 215], "date_to_blackboard": 91, "define_blackboard": [91, 215], "format_blackboard": 91, "constant_result": 91, "bosdyn_navigate_rout": 91, "bosdyn_navigate_to": 91, "bosdyn_graph_nav_st": 91, "bosdyn_graph_nav_loc": 91, "bosdyn_record_ev": 91, "simple_parallel": [91, 215], "spot_cam_store_media": 91, "spot_cam_focus_st": 91, "spot_cam_reset_autofocu": 91, "data_acquisition_on_interrupt": 91, "restart_when_paus": 91, "clear_behavior_fault": [91, 160], "bosdyn_gripper_camera_params_st": 91, "set_gripper_camera_param": [91, 287], "parallel_and": 91, "set_grasp_overrid": 91, "mission_upload_choreographi": 91, "parameter_valu": [91, 287], "childrenrequir": 91, "finish_every_nod": 91, "wholeparalleland": 91, "allth": 91, "always_reprompt": 91, "unansw": 91, "adoor": 91, "informationabout": 91, "alertingthi": 91, "todownload": 91, "rescu": 91, "question_name_in_blackboard": 91, "remotemiss": [91, 213], "servicetreat": 91, "max_start": 91, "op": [91, 141, 181], "start_counter_state_nam": 91, "whetheror": 91, "childsucce": 91, "max_attempt": 91, "attempt_counter_state_nam": 91, "dereferenc": 91, "runtimeinsid": 91, "runtimevari": 91, "intoth": 91, "registeredwith": 91, "grasp_override_request": [91, 147], "params_in_blackboard_kei": 91, "new_param": 91, "run_secondary_node_onc": 91, "beforeth": 91, "restart_after_stop": 91, "thatmessag": 91, "adjust_paramet": 91, "adjustfeatur": 91, "localization_varnam": 91, "messagefor": 91, "acquire_data_request_nam": 91, "therefer": 91, "metadata_nam": 91, "metadata_json": 91, "metadata_channel": 91, "subtl": [91, 282], "implment": 91, "astut": 91, "reader": [91, 187], "IF": [91, 320], "earil": 91, "pivot_valu": 91, "executeth": 91, "changewhich": 91, "int_children": 91, "default_child": 91, "compare_unknown": 91, "compare_eq": 91, "compare_n": 91, "compare_lt": 91, "compare_gt": 91, "compare_g": 91, "handle_stale_unknown": 91, "read_anywai": 91, "handle_stale_read_anywai": 91, "handle_stale_run_until_fresh": 91, "handle_stale_fail": 91, "complete_unknown": 91, "complete_after_sav": 91, "complete_after_acquir": 91, "butit": 91, "session_id": [91, 213], "missing_lease_resourc": 91, "missing_input": 91, "params_error": 91, "coher": 91, "missioncan": 91, "generatedbi": 91, "strive": 91, "status_missing_input": 91, "status_missing_leas": 91, "notprovid": 91, "status_invalid_session_id": 91, "torn": 91, "unload": 91, "tickedin": 91, "missionrecord": 91, "string_valu": 91, "int_valu": 91, "bool_valu": 91, "msg_valu": 91, "nodeinfodownload": 91, "bytestr": 91, "bloat": 91, "source_represent": 91, "analogi": 91, "runtime_var": 91, "result_unknown": [91, 215], "result_run": 91, "result_success": 91, "type_str": 91, "type_int": 91, "type_bool": 91, "type_messag": 91, "se2_velocity_feedback": 91, "sit_feedback": 91, "stand_feedback": 91, "stance_feedback": 91, "follow_arm_feedback": 91, "se2_velocity_request": 91, "stance_request": 91, "follow_arm_request": 91, "throughto": 91, "reference_imag": 91, "theinput": 91, "month": [91, 251], "neccessarilli": 91, "rightnow": 91, "valuesfor": 91, "modeldeprec": 91, "available_label": 91, "output_image_spec": 91, "firstat": 91, "thisconfid": 91, "suppress": [91, 122], "frametreesnapshotdefin": 91, "image_sources_and_servic": 91, "imageresponseswil": 91, "workeri": 91, "rotatedfor": 91, "network_compute_status_custom_params_error": 91, "list_available_models_status_unknown": 91, "list_available_models_status_success": 91, "list_available_models_status_external_service_not_found": 91, "list_available_models_status_external_server_error": 91, "rotate_image_unknown": 91, "rotate_image_no_rot": 91, "rotate_image_align_with_bodi": 91, "imageso": 91, "ifth": 91, "network_compute_status_unknown": 91, "network_compute_status_success": 91, "network_compute_status_external_service_not_found": 91, "network_compute_status_external_server_error": 91, "network_compute_status_rotation_error": 91, "aretri": 91, "seper": 91, "diverg": 91, "mac_address": 91, "mac": [91, 273, 324], "connected_tim": 91, "rx_signal_dbm": 91, "rx_signal_avg_dbm": 91, "rx_beacon_signal_avg_dbm": 91, "expected_bits_per_second": 91, "throughput": 91, "rx_byte": 91, "rx_packet": 91, "rx_bits_per_second": 91, "unicast": 91, "tx_byte": 91, "tx_packet": 91, "tx_bits_per_second": 91, "tx_retri": 91, "tx_fail": 91, "beacons_receiv": 91, "beacon_loss_count": 91, "tx_power_dbm": 91, "countabl": 91, "uint_valu": 91, "limb": 91, "occurbetween": 91, "margin": [91, 134, 273], "providedin": 91, "intertia": 91, "moi": 91, "thepayload": 91, "thefunct": 91, "recordsar": 91, "body_tform_payload": 91, "mount_tform_payload": 91, "mount_frame_nam": 91, "mountfram": 91, "pingif": 91, "mbp": 91, "mass_volume_properti": 91, "preset_configur": 91, "total_mass": 91, "com_pos_rt_payload": 91, "moi_tensor": 91, "inertia": 91, "payloadcent": 91, "bounding_box": 91, "specifyingmust": 91, "joint_limit": 91, "developmentpurpos": 91, "preset_nam": 91, "isdisplai": 91, "mount_frame_unknown": 91, "mount_frame_body_payload": 91, "mount_frame_gripper_payload": 91, "mount_frame_wr1": 91, "estimated_payload": 91, "payloadestim": 91, "1min": 91, "error_non": 91, "error_failed_stand": 91, "error_no_result": 91, "status_small_mass": 91, "tonot": 91, "estaimted_payload": 91, "validaft": 91, "updated_vers": [91, 153], "updatepayloadvers": 91, "status_invalid_credenti": 91, "paylod": 91, "registeredpayload": 91, "status_payload_not_author": 91, "request_attach": 91, "request_detach": 91, "status_does_not_exist": 91, "webserv": [91, 306], "updatepayload": 91, "getpointcloud": 91, "point_cloud_request": [91, 154], "point_cloud_respons": 91, "point_cloud_sourc": [91, 154], "num_point": 91, "encoding_paramet": 91, "scale_factor": 91, "remap": 91, "xyz_4sc": 91, "xyz_5sc": 91, "boxcent": 91, "max_z": 91, "half": 91, "dimensionsof": 91, "thesedimens": 91, "remapping_const": 91, "xyz_5c": 91, "bytes_per_point": 91, "point_cloud_source_nam": [91, 154], "accross": 91, "frame_name_sensor": 91, "vision_tform_sensor": 91, "computedbi": 91, "transformationsto": 91, "encoding_xyz_32f": 91, "float32": 91, "allowsth": 91, "pointnumb": 91, "encoding_xyz_4sc": 91, "int8": 91, "p1_x": 91, "p1_y": 91, "p1_z": 91, "p1": 91, "p2": 91, "mod": 91, "cpoint": 91, "xyz_32f": 91, "resolutionand": 91, "isapproxim": 91, "encoding_xyz_5sc": 91, "upan": 91, "status_point_cloud_data_error": 91, "status_unknown_sourc": 91, "listpointcloudsourc": 91, "desired_end_tim": 91, "ifstop": 91, "overriden": 91, "early_stop_tim": 91, "commandstop": 91, "itwa": 91, "percent_pow": [91, 155, 272], "fansmai": 91, "power_command_id": [91, 155], "blocking_fault": 91, "safety_stop_typ": [91, 155, 312], "status_temperature_stop": 91, "status_overridden_by_command": 91, "wasup": 91, "status_temperature_too_high": 91, "request_off_motor": 91, "request_on_motor": 91, "request_off_robot": 91, "request_cycle_robot": 91, "request_off_payload_port": 91, "request_on_payload_port": 91, "request_off_wifi_radio": 91, "request_on_wifi_radio": 91, "status_shore_power_connect": 91, "status_battery_miss": 91, "status_command_in_progress": 91, "cant": 91, "status_fault": 91, "faultstat": [91, 155], "status_license_error": 91, "incompatible_hardware_error": 91, "caseof": 91, "status_keepalive_motors_off": 91, "safety_stop_unknown": 91, "safety_stop_primari": [91, 312], "safety_stop_redund": [91, 312], "status_incompatible_hardware_error": 91, "status_unknown_stop_typ": 91, "beforeanoth": 91, "fanpowercommand": 91, "fanpowercommandfeedback": 91, "hit_position_in_hit_fram": 91, "hit_fram": 91, "distance_met": 91, "ray_frame_nam": 91, "min_intersection_dist": 91, "intersection_typ": 91, "untilal": 91, "hit_frame_nam": 91, "clientiniti": 91, "thetransform": 91, "totransform": 91, "alltransform": 91, "propertiessubmessag": 91, "type_ground_plan": [91, 308], "type_terrain_map": [91, 308], "type_voxel_map": [91, 308], "voxel": [91, 330], "type_hand_depth": 91, "status_invalid_intersection_typ": 91, "status_unknown_fram": 91, "thesurround": 91, "behavior_fault_id": [91, 160], "behavior_fault": 91, "blocking_system_fault": 91, "joint_command": [91, 160], "full_body_feedback": 91, "synchronized_feedback": 91, "robot_command_id": [91, 160], "compris": 91, "subcommand": [91, 111], "status_clear": [91, 160], "status_not_clear": 91, "steam": 91, "status_inact": 91, "status_unsupport": 91, "status_not_powered_on": 91, "uid": 91, "hassucceed": 91, "jointcontrolstream": 91, "20190601": 91, "api_vers": 91, "build_inform": 91, "signfic": 91, "robotwhich": 91, "withoutrequir": 91, "charge_percentag": 91, "estimated_runtim": 91, "inamp": 91, "volt": 91, "onset_timestamp": 91, "behaviror": 91, "acquisition_timestamp": 91, "todo": 91, "wifi_st": 91, "state_descript": 91, "foot_position_rt_bodi": 91, "ground_mu_est": 91, "foot_slip_distance_rt_fram": 91, "foot_slip_velocity_rt_fram": 91, "ground_contact_normal_rt_fram": 91, "visual_surface_ground_penetration_mean": 91, "penetr": 91, "visualsurfac": 91, "gravel": 91, "sand": 91, "grass": 91, "areposit": 91, "visual_surface_ground_penetration_std": 91, "can_power_command_request_off_robot": 91, "can_power_command_request_cycle_robot": 91, "can_power_command_request_payload_port": 91, "can_power_command_request_wifi_radio": 91, "has_audio_visual_system": 91, "redundant_safety_stop_en": 91, "packet_r": 91, "mounting_link_nam": 91, "position_imu_rt_link": 91, "acceleration_rt_odom_in_link_fram": 91, "mountinglink": 91, "angular_velocity_rt_odom_in_link_fram": 91, "sframe": 91, "odom_rot_link": 91, "sothi": 91, "revolut": 91, "fortransl": 91, "seehttp": 91, "conceptualdocument": 91, "snapshop": 91, "sodometri": 91, "isat": 91, "themiddl": 91, "yplane": 91, "framex": 91, "beconvert": 91, "snaphot": 91, "theorigin": 91, "orein": 91, "distal": 91, "isalign": 91, "velocity_of_body_in_odom": 91, "gripper_open_percentag": 91, "is_gripper_holding_item": 91, "estimated_end_effector_force_in_hand": 91, "stow_stat": 91, "velocity_of_hand_in_vis": 91, "velocity_of_hand_in_odom": 91, "shore_power_st": 91, "robot_power_st": 91, "payload_ports_power_st": 91, "wifi_radio_power_st": 91, "orbas": 91, "robothardwareconfigur": 91, "hardware_configur": 91, "impaired_statu": 91, "system_fault": 91, "status_system_fault": 91, "tostop": 91, "status_service_fault": 91, "causedth": 91, "robotlinkmodel": 91, "link_nam": [91, 162], "shoould": 91, "specifc": 91, "link_model": 91, "robot_metr": 91, "battery_st": 91, "comms_stat": 91, "system_fault_st": 91, "estop_st": 91, "behavior_fault_st": 91, "service_fault_st": 91, "terrain_st": 91, "system_st": 91, "robotstatestream": 91, "inertial_st": 91, "last_command": 91, "received_timestamp": 91, "odom_tform_bodi": 91, "fordetail": 91, "seekinematicst": 91, "historical_fault": 91, "ring": [91, 177], "attribut": [91, 149, 215, 217, 221], "levelof": 91, "obj_model": 91, "file_nam": [91, 96], "file_cont": 91, "codei": 91, "forboston": 91, "staff": 91, "onrobot": 91, "remedi": 91, "attributeseach": 91, "mayhav": 91, "attributesmai": 91, "letu": 91, "gyro": 91, "robotrespons": 91, "severity_warn": 91, "levelseverity_crit": 91, "shutdownimmedi": 91, "motor_temperatur": 91, "offth": 91, "current_mod": 91, "essid": 91, "status_miss": 91, "status_charg": 91, "status_discharg": 91, "status_boot": 91, "cause_unknown": 91, "malfunct": 91, "status_unclear": 91, "state_estop": 91, "state_not_estop": 91, "type_hardwar": 91, "type_softwar": 91, "contact_unknown": 91, "contact_mad": 91, "contact_lost": 91, "stowabl": 91, "carry_state_unknown": 91, "carry_state_not_carri": 91, "stowstate_unknown": 91, "stowstate_stow": 91, "stowstate_deploi": 91, "motor_power_state_unknown": 91, "state_off": 91, "motor_power_state_off": 91, "state_on": 91, "motor_power_state_on": 91, "state_powering_on": 91, "motor_power_state_powering_on": 91, "state_powering_off": 91, "motor_power_state_powering_off": 91, "state_error": 91, "motor_power_state_error": 91, "payload_ports_power_state_unknown": 91, "payload_ports_power_state_on": 91, "payload_ports_power_state_off": 91, "robot_power_state_unknown": 91, "robot_power_state_on": 91, "robot_power_state_off": 91, "state_unknown_shore_pow": 91, "shore_power_state_unknown": 91, "state_on_shore_pow": 91, "toshor": 91, "shore_power_state_on": 91, "state_off_shore_pow": 91, "shore_power_state_off": 91, "router": 91, "wifi_radio_power_state_unknown": 91, "wifi_radio_power_state_on": 91, "wifi_radio_power_state_off": 91, "impaired_status_unknown": 91, "impaired_status_ok": 91, "impaired_status_no_robot_data": 91, "impaired_status_system_fault": 91, "impaired_status_no_motor_pow": 91, "impaired_status_remote_clouds_not_work": 91, "impaired_status_service_fault": 91, "impaired_status_behavior_fault": 91, "impaired_status_entity_detector_not_work": 91, "detectorexist": 91, "severity_unknown": 91, "severity_info": 91, "severity_crit": 91, "mode_access_point": 91, "mode_cli": 91, "getrobotlinkmodel": 91, "aftergetrobothardwareconfigur": 91, "aselect": 91, "dict_valu": [91, 215], "list_valu": 91, "double_valu": 91, "roi_valu": 91, "one_of_valu": 91, "paramt": 91, "roi_spec": 91, "bool_spec": 91, "one_of_spec": 91, "is_hidden_by_default": [91, 165], "infrequ": 91, "min_max": 91, "followthat": 91, "valuesshould": 91, "additon": 91, "addion": 91, "that_specs_kei": 91, "default_kei": [91, 165], "service_and_sourc": [91, 165], "image_col": 91, "sames": 91, "image_row": 91, "imageothertim": 91, "thosecas": 91, "default_area": [91, 165], "allows_rectangl": [91, 165], "prim": 91, "constrainwhich": 91, "typeswon": 91, "freeform": 91, "thedictparam": 91, "bemachin": 91, "behuman": 91, "incombin": 91, "anddictionari": 91, "status_invalid_combin": 91, "status_unsupported_paramet": 91, "status_invalid_valu": 91, "status_invalid_typ": 91, "fault_id": 91, "clear_all_service_fault": [91, 127], "clear_all_payload_fault": [91, 127], "bedisplai": 91, "theseattribut": 91, "withparticular": 91, "moreattribut": 91, "breakageresult": 91, "payloadx": 91, "anunexpect": 91, "serveritylevel": 91, "nolong": 91, "occassion": 91, "fault_nam": 91, "levelfault": 91, "theservice_nam": 91, "minor": 91, "status_fault_not_act": 91, "triggerd": 91, "status_fault_already_act": 91, "psia": 91, "sample_r": 91, "signal_spec": 91, "signal_data": [91, 166], "acronym": 91, "abbrevi": 91, "pt1": 91, "transduc": 91, "binary_descriptor": 91, "neighborhood": 91, "reference_keypoint": 91, "live_keypoint": 91, "reference_index": 91, "live_index": 91, "match_unknown": 91, "match_orb": 91, "orb": 91, "rotatedbrief": 91, "match_lightglu": 91, "lightglu": 91, "keypoint_unknown": 91, "keypoint_simpl": 91, "havedescriptor": 91, "keypoint_orb": 91, "keypoint_disk": 91, "discret": [91, 254], "animation_nam": [91, 96], "finalanim": 91, "specificax": 91, "alongspecif": 91, "parameteroverrid": 91, "theexpens": 91, "stringvalu": 91, "enable_animation_dur": 91, "enable_leg_tim": 91, "enable_stance_shap": 91, "armmov": 91, "shoulder_0": 91, "shoulder_1": 91, "elbow_0": 91, "elbow_1": 91, "wrist_0": 91, "wrist_1": 91, "bodyhold": 91, "originalpos": 91, "bourre": 91, "buttcircl": 91, "dancemov": 91, "overbeats_per_circl": 91, "bob": 91, "theloc": 91, "crawl": [91, 334], "drive_velocity_bodi": 91, "body_translation_offset": 91, "body_orientation_offset": 91, "maximum_drive_velocity_bodi": 91, "maximum_body_translation_offset": 91, "maximum_body_orientation_offset": 91, "fl_swing": 91, "two_fl_sw": 91, "second_fl_sw": 91, "fr_swing": 91, "two_fr_sw": 91, "second_fr_sw": 91, "hl_swing": 91, "two_hl_sw": 91, "second_hl_sw": 91, "hr_swing": 91, "two_hr_sw": 91, "second_hr_sw": 91, "show_stance_shap": 91, "stance_shap": 91, "body_rotation_offset": 91, "low_speed_body_fract": 91, "general_swing_param": 91, "parameterset": 91, "use_fl_swing_param": 91, "fl_swing_param": 91, "use_fr_swing_param": 91, "fr_swing_param": 91, "use_hl_swing_param": 91, "hl_swing_param": 91, "use_hr_swing_param": 91, "hr_swing_param": 91, "stand_in_plac": 91, "standard_final_st": 91, "show_stability_param": 91, "timing_stiff": 91, "with0": 91, "enable_perception_obstacle_avoid": 91, "obstacle_avoidance_pad": 91, "enable_perception_terrain_height": 91, "enable_perception_step_plac": 91, "maximum_stumble_dist": 91, "trip_sensit": 91, "animated_cycle_param": 91, "breath_max_period": 91, "include_front_left_leg": 91, "include_front_right_leg": 91, "include_hind_left_leg": 91, "include_hind_right_leg": 91, "frontup": 91, "tocomplet": 91, "hop": [91, 334], "lo": 91, "td": 91, "offlight": 91, "theyaw_is_absolut": 91, "deprecatedand": 91, "kneellegmove2": 91, "kneellegmov": 91, "fl_hx": 91, "fl_hy": 91, "fl_kn": 91, "fr_hx": 91, "fr_hy": 91, "fr_kn": 91, "hl_hx": 91, "hl_hy": 91, "hl_kn": 91, "hr_hx": 91, "hr_hy": 91, "hr_kn": 91, "azero": 91, "randomrot": 91, "betweenth": 91, "witha": 91, "thischoreographi": 91, "iti": 91, "runningman": 91, "contralater": 91, "movewith": 91, "front_wider_than_hind": 91, "left_longer_than_right": 91, "left_forward_of_right": 91, "bodyfram": 91, "centerpoint": 91, "swingpath": 91, "ornearli": 91, "swai": 91, "thehead": 91, "thevalu": 91, "liftoff_spe": 91, "vertical_spe": 91, "vertical_acceler": 91, "overlay_outsid": 91, "overlay_forward": 91, "low_speed_fract": 91, "twerk": 91, "dance_frame_id": 91, "arm_move_frame_unknown": 91, "arm_move_frame_center_of_footprint": 91, "arm_move_frame_hand": 91, "arm_move_frame_bodi": 91, "arm_move_frame_should": 91, "arm_move_frame_shadow": 91, "arm_move_frame_d": 91, "easing_unknown": 91, "easing_linear": 91, "easing_quadratic_input": 91, "easing_quadratic_output": 91, "easing_quadratic_in_out": 91, "easing_cubic_input": 91, "easing_cubic_output": 91, "easing_cubic_in_out": 91, "easing_exponential_input": 91, "easing_exponential_output": 91, "easing_exponential_in_out": 91, "preset_unknown": 91, "preset_custom": 91, "preset_interest": 91, "preset_play": 91, "preset_fear": 91, "preset_nerv": 91, "preset_exhaust": 91, "inclusion_unknown": 91, "inclusion_if_st": 91, "inclusion_includ": 91, "inclusion_exclud": 91, "lead_unknown": 91, "lead_auto": 91, "lead_front": 91, "lead_hind": 91, "lead_left": 91, "lead_right": 91, "led_light_unknown": 91, "led_light_left1": 91, "led_light_left2": 91, "led_light_left3": 91, "led_light_left4": 91, "led_light_right1": 91, "led_light_right2": 91, "led_light_right3": 91, "led_light_right4": 91, "leg_unknown": 91, "leg_front_left": 91, "leg_front_right": 91, "leg_hind_left": 91, "leg_hind_right": 91, "pivot_unknown": 91, "pivot_front": 91, "pivot_hind": 91, "pivot_cent": 91, "light_side_unknown": 91, "light_side_left": 91, "light_side_right": 91, "light_side_both_in_sequ": 91, "light_side_both_match": 91, "pattern_unknown": 91, "pattern_flash": 91, "pattern_snak": 91, "pattern_alternate_color": 91, "pattern_fine_grained_alternate_color": 91, "side_unknown": 91, "side_left": 91, "side_right": 91, "sway_style_unknown": 91, "sway_style_fast_out": 91, "sway_style_fast_return": 91, "sway_style_squar": 91, "sway_style_spik": 91, "sway_style_plateau": 91, "legal": 91, "custom_gait_command_limit": 91, "joint_angl": 91, "hand_pos": [91, 160], "euler_angl": 91, "gripper_angl": 91, "thefoot": 91, "anglesor": 91, "animation_keyfram": 91, "ofeach": 91, "controls_arm": 91, "controls_leg": 91, "controls_bodi": 91, "controls_gripp": 91, "liftoffand": 91, "assume_zero_roll_and_pitch": 91, "footheight": 91, "needn": 91, "aninteg": 91, "slightlyto": 91, "minimum_paramet": 91, "willalso": 91, "validatethat": 91, "default_paramet": 91, "maximum_paramet": 91, "forleg": 91, "controlof": 91, "afutur": 91, "gaitto": 91, "themark": 91, "themov": 91, "textual": 91, "alpha": 91, "music_fil": 91, "music_start_slic": 91, "fortim": 91, "choreography_start_slic": 91, "commandmultipl": 91, "command_end_tim": 91, "slices_per_minut": 91, "correspondto": 91, "choreography_info": 91, "moveaccept": 91, "key_fram": 91, "anexecut": 91, "thestartrecordingst": 91, "specifiedbi": 91, "fromexecutechoreographyrespons": 91, "current_slic": 91, "active_mov": 91, "sequence_slic": 91, "sequence_slices_per_minut": 91, "timedefin": 91, "theacceptable_time_differ": 91, "override_validity_tim": 91, "sclock": 91, "theoverrid": 91, "executechoreographystart": 91, "executechoreographyrequesttim": 91, "timeb": 91, "overridevalid": 91, "canb": 91, "be60": 91, "thoseissu": 91, "withparamet": 91, "responsestatu": 91, "log_typ": [91, 96], "anchoreographystatelog": 91, "choreography_sequence_nam": 91, "cansynchron": 91, "choreography_starting_slic": [91, 96], "therequir": 91, "move_param_config": 91, "moveparamsconfig": 91, "beendeprec": 91, "sequence_info": 91, "fr_contact": 91, "fl_contact": 91, "hr_contact": 91, "hl_contact": 91, "foot_contact_st": 91, "animation_tform_bodi": 91, "definedbas": 91, "add_label": [91, 96], "remove_label": [91, 96], "custom_gait_command": 91, "move_length_slic": 91, "move_length_tim": 91, "is_extend": 91, "ormove_length_tim": 91, "min_move_length_slic": 91, "max_move_length_slic": 91, "min_tim": 91, "max_tim": 91, "admiss": 91, "controls_light": 91, "controls_annot": 91, "animated_move_generated_id": 91, "useto": 91, "start_slic": 91, "requested_slic": 91, "movewa": 91, "thesequ": 91, "activemovesin": 91, "isintend": 91, "jump_param": 91, "rotate_body_param": 91, "step_param": 91, "butt_circle_param": 91, "turn_param": 91, "pace_2step_param": 91, "twerk_param": 91, "chicken_head_param": 91, "clap_param": 91, "front_up_param": 91, "sway_param": 91, "body_hold_param": 91, "arm_move_param": 91, "kneel_leg_move_param": 91, "running_man_param": 91, "kneel_circle_param": 91, "hop_param": 91, "random_rotate_param": 91, "crawl_param": 91, "side_param": 91, "bourree_param": 91, "workspace_arm_move_param": 91, "figure8_param": 91, "kneel_leg_move2_param": 91, "fidget_stand_param": 91, "goto_param": 91, "frame_snapshot_param": 91, "set_color_param": 91, "ripple_color_param": 91, "fade_color_param": 91, "independent_color_param": 91, "animate_param": 91, "saved_st": 91, "toretain": 91, "otherinterfac": 91, "continue_recording_dur": 91, "beextend": 91, "recording_session_id": 91, "willstop": 91, "clearth": 91, "continueto": 91, "clientand": 91, "animationprotobuf": 91, "protobufmessag": 91, "reuploadanim": 91, "animatedmov": 91, "status_animation_validation_fail": 91, "whichpart": 91, "ananim": 91, "hasoth": 91, "invalidrequest": 91, "thencertain": 91, "orparamet": 91, "arm_playback_default": 91, "jointspaceand": 91, "arm_playback_jointspac": 91, "arm_playback_workspac": 91, "arm_playback_workspace_dance_fram": 91, "bemost": 91, "category_unknown": 91, "category_bodi": 91, "category_step": 91, "category_dynam": 91, "category_transit": 91, "category_kneel": 91, "category_arm": 91, "category_anim": 91, "category_mpc": 91, "category_light": 91, "category_annot": 91, "status_accepted_with_modif": 91, "status_no_matching_mov": 91, "status_invalid_command": 91, "status_already_expir": 91, "status_danc": 91, "status_completed_sequ": 91, "status_prep": 91, "status_waiting_for_start_tim": 91, "status_interrupt": 91, "status_fallen": 91, "status_oth": 91, "status_before_current_tim": 91, "status_exceeds_validity_tim": 91, "status_override_time_unset": 91, "status_failed_to_delet": 91, "status_unknown_sequ": 91, "status_already_temporari": 91, "status_permanent_sequ": 91, "log_type_unknown": 91, "log_type_manu": 91, "fillingup": 91, "log_type_last_choreographi": 91, "downloadthi": 91, "status_no_recorded_inform": 91, "status_incomplete_data": 91, "recordingbuff": 91, "wasrecord": 91, "bufferwa": 91, "status_invalid_uploaded_choreographi": 91, "status_robot_command_issu": 91, "status_unknown_anim": 91, "status_failed_to_upd": 91, "andchang": 91, "revert": 91, "transition_state_unknown": 91, "transition_state_stand": 91, "transition_state_kneel": 91, "transition_state_sit": 91, "transition_state_sprawl": 91, "status_failed_to_sav": 91, "saved_state_unknown": 91, "saved_state_temporari": 91, "saved_state_retain": 91, "loadedto": 91, "saved_state_perman": 91, "extendeddur": 91, "status_unknown_recording_session_id": 91, "recordinglog": 91, "status_recording_buffer_ful": 91, "5minut": 91, "status_ping_respons": 91, "search_ray_start_in_fram": 91, "search_ray_end_in_fram": 91, "hinge_sid": 91, "swing_direct": 91, "push_point_in_fram": 91, "distance_past_threshold": 91, "doorfram": 91, "whenth": 91, "finishingsid": 91, "auto_grasp_command": 91, "warmstart_command": 91, "auto_push_command": 91, "handle_typ": 91, "door_command": 91, "door_command_id": 91, "opendoorrespons": 91, "willkeep": 91, "stateindefinit": 91, "handle_type_unknown": 91, "handle_type_lev": 91, "handle_type_knob": 91, "handle_type_fixed_grasp": 91, "hinge_side_unknown": 91, "hinge_side_left": 91, "hinge_side_right": 91, "swing_direction_unknown": 91, "status_robot_command_error": 91, "status_door_plane_not_detect": 91, "forward_command": 91, "reverse_command": 91, "opendoor": 91, "opendoorfeedback": 91, "beeither": 91, "root_tform_scen": 91, "optionalscen": 91, "aretherefor": 91, "inversekinemat": 91, "framedefin": 91, "scene_tform_task": 91, "scenefram": 91, "nominal_arm_configur": 91, "solver": 91, "arm_config_curr": 91, "nominal_arm_configuration_overrid": 91, "jointswil": 91, "scene_tform_body_nomin": 91, "fixed_st": 91, "on_ground_plane_st": 91, "wrist_mounted_tool": 91, "body_mounted_tool": 91, "tool_pose_task": 91, "tool_gaze_task": 91, "body_tform_tool": 91, "toolfram": 91, "fl_rt_scene": 91, "ifunspecifi": 91, "fr_rt_scene": 91, "hl_rt_scene": 91, "hr_rt_scene": 91, "scene_tform_ground": 91, "unspecifiedth": 91, "target_in_task": 91, "beconstrain": 91, "thewrist": 91, "robot_configur": 91, "joint_statessubfield": 91, "arm_config_unknown": 91, "arm_config_readi": 91, "definedwith": 91, "facingforward": 91, "status_no_solution_found": 91, "thegeometr": 91, "wrt": 91, "calcuat": 91, "footloc": 91, "body_assist_for_manipul": 91, "onlyavail": 91, "aninerti": 91, "root_frame_nameset": 91, "aarmcartesiancommand": 91, "anarmjointmovecommand": 91, "heightand": 91, "body_pos": [91, 160], "besatur": 91, "effectwhen": 91, "todefault": 91, "rotation_set": 91, "orbody_pos": 91, "enable_body_yaw_assist": 91, "enable_hip_height_assist": 91, "base_offset_rt_root": 91, "odd": 91, "external_force_ind": [91, 160], "external_force_overrid": 91, "knownto": 91, "causeth": 91, "wouldb": 91, "theforc": 91, "body_control": 91, "locomotion_hint": [91, 160], "stairs_mode_off": 91, "stairs_mode_auto": 91, "allow_degraded_percept": 91, "obstacle_param": 91, "disallow_stair_track": 91, "stairtrack": 91, "external_force_param": [91, 160], "disallow_non_stairs_pitch_limit": 91, "rearward": 91, "disable_nearmap_cliff_avoid": 91, "nearmap": 91, "disable_vision_foot_obstacle_avoid": 91, "disable_vision_foot_constraint_avoid": 91, "disable_vision_body_obstacle_avoid": 91, "disable_vision_foot_obstacle_body_assist": 91, "disable_vision_negative_obstacl": 91, "postiv": 91, "ifnecessari": 91, "grated_surfaces_modeth": 91, "rotation_setting_unknown": 91, "rotation_setting_offset": 91, "rotation_setting_absolut": 91, "external_force_non": [91, 160], "external_force_use_estim": [91, 160], "external_force_use_overrid": [91, 160], "hint_auto": 91, "hint_trot": 91, "hint_speed_select_trot": 91, "hint_crawl": 91, "hint_speed_select_crawl": 91, "hint_ambl": 91, "hint_speed_select_ambl": 91, "hint_jog": 91, "aerial": 91, "hint_hop": 91, "hint_auto_trot": 91, "forbackward": 91, "hint_auto_ambl": 91, "stairs_mode_unknown": 91, "stairs_mode_on": 91, "swing_height_unknown": 91, "swing_height_low": 91, "swing_height_medium": 91, "swing_height_high": 91, "grated_surfaces_mode_unknown": 91, "grated_surfaces_mode_off": 91, "grated_surfaces_mode_on": 91, "grated_surfaces_mode_auto": 91, "cameracalibrationcommand": 91, "cameracalibrationfeedback": 91, "severity_scor": 91, "foot_height_error_from_mean": 91, "grippercameracalibrationcommand": 91, "anygrippercameracalibr": 91, "grippercameracalibr": 91, "grippercameracalibrationfeedback": 91, "obstruct": 91, "old_offset": 91, "health_scor": 91, "unhealthi": 91, "calibration1": 91, "perfect": 91, "calibrationtyp": 91, "leg_pair_distance_chang": 91, "loadcel": [91, 179], "old_zero": 91, "extra_payload": 91, "hasposit": 91, "spotcheckcommand": 91, "spotcheckfeedback": 91, "waiting_for_command": 91, "camera_result": 91, "frontright": 91, "load_cell_result": 91, "hxa": 91, "hya": 91, "kna": 91, "kinematic_cal_result": 91, "payload_result": 91, "hip_range_of_motion_result": 91, "checkth": 91, "last_cal_timestamp": 91, "command_unknown": 91, "command_start": 91, "command_cancel": 91, "andi": 91, "status_user_cancel": 91, "status_power_error": 91, "movearound": 91, "possiblyencount": 91, "moredetail": 91, "status_calibration_error": 91, "ifcalibr": 91, "calibrationprocedur": 91, "extraordinari": 91, "status_camera_focus_error": 91, "status_target_not_cent": 91, "status_target_not_in_view": 91, "status_target_not_gravity_align": 91, "status_target_upside_down": 91, "status_never_run": 91, "status_camera_not_detect": 91, "status_intrinsic_write_fail": 91, "status_extrinsic_write_fail": 91, "status_warn": 91, "status_initialization_error": 91, "itpersist": 91, "error_obstruct": 91, "error_clutch_slip": 91, "clutch": 91, "collsion": 91, "error_zero_out_of_rang": 91, "error_mass_discrep": 91, "discrep": 91, "command_abort": 91, "command_revert_c": 91, "ocur": 91, "error_unexpected_power_chang": 91, "error_init_imu_check": 91, "error_init_not_sit": 91, "error_loadcell_timeout": 91, "error_power_on_failur": 91, "error_endstop_timeout": 91, "error_camera_timeout": 91, "error_ground_check": 91, "error_power_off_failur": 91, "error_revert_failur": 91, "error_fgkc_failur": 91, "eg": 91, "state_user_abort": 91, "state_start": 91, "state_loadcell_c": 91, "state_endstop_c": 91, "state_camera_check": 91, "state_body_pos": 91, "state_finish": 91, "state_reverting_c": 91, "state_waiting_for_command": 91, "state_hip_range_of_motion_check": 91, "recalibr": 91, "bothrecalibr": 91, "backresult": 91, "joint_index_fl_hx": 91, "joint_index_fl_hi": 91, "joint_index_fl_kn": 91, "joint_index_fr_hx": 91, "joint_index_fr_hi": 91, "joint_index_fr_kn": 91, "joint_index_hl_hx": 91, "joint_index_hl_hi": 91, "joint_index_hl_kn": 91, "joint_index_hr_hx": 91, "joint_index_hr_hi": 91, "joint_index_hr_kn": 91, "joint_index_a0_sh0": 91, "joint_index_a0_sh1": 91, "joint_index_a0_el0": 91, "joint_index_a0_el1": 91, "joint_index_a0_wr0": 91, "joint_index_a0_wr1": 91, "joint_index_a0_f1x": 91, "leg_index_fl": 91, "leg_index_fr": 91, "leg_index_hl": 91, "leg_index_hr": 91, "overwrittenwith": 91, "wav": [91, 168, 319], "ismultipli": 91, "stare": 91, "theidentifi": 91, "audio_channel_unknown": 91, "audio_channel_internal_m": 91, "audio_channel_external_m": 91, "base_frame_nam": 91, "theframetreesnapshot": 91, "namingconvent": 91, "frametre": [91, 128], "direction": 91, "ingeometri": 91, "synthet": 91, "panorama": 91, "center_point": 91, "distort": [91, 320], "coefficeint": 91, "en": 91, "distortion_": 91, "software_correctionif": 91, "k3": 91, "k4": 91, "ie": 91, "min_angl": 91, "max_angl": 91, "thewindow": 91, "xoffset": 91, "yoffset": 91, "thisresolut": 91, "describedin": 91, "takesplac": 91, "auto_scal": [91, 169], "theset": 91, "delta": 91, "colormap_unknown": 91, "colormap_greyscal": 91, "maximumvalu": 91, "colormap_jet": 91, "jet": [91, 319], "valuesclos": 91, "lightyellow": 91, "252": 91, "164": 91, "blind": 91, "turbo": 91, "minumum": 91, "asfals": 91, "band": [91, 293], "tempunit_unknown": 91, "tempunit_celsiu": 91, "tempunit_fahrenheit": 91, "tempunit_kelvin": 91, "degred": 91, "necessesarili": 91, "millidegre": 91, "enable_temperatur": 91, "enable_humid": 91, "humid": [91, 173, 298], "enable_bit": 91, "volatil": 91, "memoryand": 91, "enable_shock": 91, "shock": [91, 173], "enable_system_stat": 91, "statscpu": 91, "utilizationnowow": 91, "enable_led_stat": 91, "image_param": 91, "basefrom": 91, "intendednam": 91, "definedin": 91, "tile": 91, "c0": 91, "c4": 91, "rgb24": 91, "passphras": [91, 173], "toremount": 91, "remount": 91, "laterit": 91, "th": 91, "queued_unknown": 91, "queued_rend": 91, "queued_disk": 91, "stillimag": 91, "ic": [91, 174, 319], "ssl": [91, 163, 174], "ascii": 91, "armor": 91, "stun": 91, "mackei": 91, "accesstoken": 91, "uint32valu": 91, "mask": 91, "mtu": [91, 293], "mtuif": 91, "1500": 91, "transport_unknown": 91, "transport_udp": 91, "transport_tcp": 91, "effectpow": 91, "aux1": [91, 175], "aux2": [91, 175], "external_m": [91, 175], "pan_limit": 91, "validlimit": 91, "tilt_limit": 91, "zoom_limit": 91, "mech": [91, 319], "eo": 91, "focus_posit": [91, 176], "settabl": [91, 176], "ptz_focus_manu": [91, 176], "modethi": 91, "approx_dist": 91, "modeapprox_dist": 91, "20mapprox_dist": 91, "differand": 91, "1x": 91, "30x": 91, "ptz_focus_undefin": 91, "ptz_focus_auto": 91, "playsound": 91, "soundrequest": 91, "effectst": 91, "loadsound": 91, "wavfil": 91, "riff": 91, "arguement": 91, "theentir": 91, "soundfield": 91, "deletesound": 91, "listsound": 91, "setvolum": 91, "getvolum": 91, "setaudiocapturechannel": 91, "getaudiocapturechannel": 91, "setaudiocapturegain": 91, "getaudiocapturegain": 91, "setscreen": 91, "getscreen": 91, "listscreen": 91, "getvisiblecamera": 91, "getirmeteroverlai": 91, "gettemperatur": 91, "thermomet": [91, 170], "theymeasur": 91, "getbitstatu": 91, "systemi": 91, "usbstorag": 91, "clearbitev": 91, "bitstatu": [91, 170], "possibleissu": 91, "themanufactur": 91, "setledbright": 91, "getledbright": 91, "mainli": [91, 241], "enabledebug": 91, "diskutil": 91, "mortum": 91, "listcamera": 91, "retrieverawdata": 91, "listlogpoint": 91, "setpassphras": 91, "ecryptf": 91, "symmetri": 91, "onlythi": 91, "ext4": 91, "ntf": [91, 173], "unimplementederror": [91, 126], "seticeconfigur": 91, "turnservic": 91, "geticeconfigur": 91, "stunand": 91, "componentturn": 91, "getpowerstatu": 91, "setptzposit": 91, "setposit": 91, "getptzposit": 91, "getposit": 91, "setptzveloc": 91, "getptzveloc": 91, "listptz": 91, "setptzfocusst": 91, "getptzfocusst": 91, "postprocess": [91, 177], "setstreamparam": 91, "getstreamparam": 91, "enablecongestioncontrol": 91, "getsoftwarevers": 91, "enable_congestion_control": [91, 177], "targetbitr": 91, "bp": [91, 177], "refreshinterv": [91, 177], "macroblock": 91, "idrinterv": [91, 177], "idr": [91, 177], "awb": 91, "auto_exposur": [91, 177], "sync_exposur": 91, "intoaccount": 91, "manual_exposur": [91, 177], "brightness_target": 91, "whichcontrol": 91, "setpoint": 91, "algorithmif": 91, "sensibl": 91, "incandesc": 91, "fluoresc": 91, "warm_fluoresc": 91, "daylight": 91, "cloudi": 91, "twilight": 91, "shade": 91, "frame_tform_stair": 91, "knowledge_typ": 91, "stair_tform": 91, "riser": 91, "average_ris": 91, "average_run": 91, "average_width": 91, "equat": 91, "bounded_width": 91, "stairs_tform_landing_cent": 91, "landing_extent_x": 91, "landing_extent_i": 91, "bottom_land": 91, "top_land": 91, "from_ko_tform_stair": 91, "lowermost": 91, "toalign": 91, "uppermost": 91, "knowledge_type_unknown": 91, "knowledge_type_map": 91, "knowledge_type_tracked_ongo": 91, "knowledge_type_tracked_complet": 91, "knowledge_type_oth": 91, "bounded_width_unknown": 91, "bounded_width_neith": 91, "bounded_width_west": 91, "bounded_width_east": 91, "bounded_width_both": 91, "mobility_command_feedback": 91, "gripper_command_feedback": 91, "round_trip_tim": [91, 180], "server_rx": 91, "server_tx": 91, "unpopul": 91, "clock_skew": [91, 180], "client_tx": 91, "client_rx": 91, "best_estim": 91, "measurement_tim": 91, "previous_round_trip": [91, 180], "assignon": 91, "previous_estim": 91, "andecho": 91, "status_more_samples_need": 91, "status_service_not_readi": 91, "lag": 91, "alon": 91, "exchang": [91, 174], "serverround": 91, "bein": 91, "thecommand": 91, "pos_interpol": 91, "ang_interpol": 91, "automaticallyselect": 91, "starting_veloc": 91, "ending_veloc": 91, "linear_spe": 91, "chosenserv": 91, "ang_interp_unknown": 91, "ang_interp_linear": 91, "ang_interp_cubic_eul": 91, "pos_interp_unknown": 91, "pos_interp_linear": 91, "pos_interp_cub": 91, "is_rel": 91, "showup": 91, "fahrenheit": 91, "noteth": 91, "temper": 91, "degreeshott": 91, "anyfahrenheit": 91, "pressure_unknown": 91, "pressure_psi": 91, "pound": 91, "inch": [91, 233], "pressure_kpa": 91, "kilopasc": 91, "pressure_bar": 91, "temperature_unknown": 91, "temperature_kelvin": [91, 183], "temperature_fahrenheit": 91, "tag_id": 91, "thetag": 91, "famili": 91, "36h11": 91, "theheight": 91, "frame_name_fiduci": 91, "fiducial_pose_statu": 91, "unfilt": 91, "frame_name_fiducial_filt": 91, "fiducial_filtered_pose_statu": 91, "frame_name_camera": 91, "detection_covari": 91, "tzwhich": 91, "thegiven": 91, "detection_covariance_reference_fram": 91, "size_ewrt_fram": 91, "frame_name_dock": 91, "unconfirm": 91, "oval": 91, "capsul": 91, "cylind": 91, "arrow_length": 91, "arrow_radiu": 91, "wirefram": [91, 185], "drawabl": [91, 185], "linestrip": 91, "frame_name_draw": 91, "beinclud": 91, "rgba": [91, 185], "transpar": 91, "camera_sourc": 91, "eitherclockwis": 91, "object_typ": [91, 96, 185], "requestspecif": 91, "timestamp_filt": 91, "timeal": 91, "mutated_object_id": 91, "disable_foot_obstacle_gener": 91, "disable_body_obstacle_gener": 91, "disable_foot_obstacle_infl": 91, "exacts": 91, "inflat": 91, "approx": 91, "lifeth": 91, "sassoci": 91, "eachof": 91, "objectwil": 91, "isrel": 91, "isad": 91, "drawable_properti": 91, "apriltag_properti": 91, "nogo_region_properti": 91, "dock_properti": 91, "ray_properti": 91, "isknown": 91, "bounding_box_properti": 91, "staircase_properti": 91, "status_ambigu": 91, "status_high_error": 91, "action_unknown": 91, "action_add": 91, "action_chang": 91, "isonli": 91, "notobject": 91, "action_delet": 91, "getobjectlistrespons": 91, "status_invalid_mutation_id": 91, "thisobject": 91, "theobject": 91, "status_no_permiss": 91, "anobject": 91, "status_invalid_world_object": 91, "unallow": 91, "world_object_unknown": 91, "world_object_draw": 91, "world_object_apriltag": 91, "world_object_image_coordin": 91, "world_object_dock": 91, "world_object_user_nogo": 91, "world_object_staircas": 91, "php": 91, "rubi": 91, "float64": 91, "ineffici": 91, "sint32": 91, "bignum": 91, "fixnum": 91, "sint64": 91, "uint": [91, 136], "ulong": 91, "fixed32": 91, "fixed64": 91, "eight": 91, "sfixed32": 91, "sfixed64": 91, "trueclass": 91, "falseclass": 91, "8bit": 91, "choreography_sequence_pb2": [94, 96], "animation_file_conversion_help": 94, "start_time_handl": 94, "val": [94, 180, 208, 246, 254], "animation_fram": 94, "fl_angles_handl": 94, "fr_angles_handl": 94, "hl_angles_handl": 94, "hr_angles_handl": 94, "fl_pos_handl": 94, "fr_pos_handl": 94, "hl_pos_handl": 94, "hr_pos_handl": 94, "gripper_handl": 94, "fl_contact_handl": 94, "fr_contact_handl": 94, "hl_contact_handl": 94, "hr_contact_handl": 94, "sh0_handler": 94, "sh1_handler": 94, "el0_handl": 94, "el1_handl": 94, "wr0_handler": 94, "wr1_handler": 94, "fl_hx_handler": 94, "fl_hy_handl": 94, "fl_kn_handler": 94, "fr_hx_handler": 94, "fr_hy_handl": 94, "fr_kn_handler": 94, "hl_hx_handler": 94, "hl_hy_handl": 94, "hl_kn_handler": 94, "hr_hx_handler": 94, "hr_hy_handl": 94, "hr_kn_handler": 94, "fl_x_handler": 94, "fl_y_handl": 94, "fl_z_handler": 94, "fr_x_handler": 94, "fr_y_handl": 94, "fr_z_handler": 94, "hl_x_handler": 94, "hl_y_handl": 94, "hl_z_handler": 94, "hr_x_handler": 94, "hr_y_handl": 94, "hr_z_handler": 94, "body_x_handl": 94, "body_y_handl": 94, "body_z_handl": 94, "com_x_handl": 94, "com_y_handl": 94, "com_z_handl": 94, "body_quat_x_handl": 94, "body_quat_y_handl": 94, "body_quat_z_handl": 94, "body_quat_w_handl": 94, "body_roll_handl": 94, "body_pitch_handl": 94, "body_yaw_handl": 94, "body_pos_handl": 94, "com_pos_handl": 94, "body_euler_rpy_angles_handl": 94, "body_quaternion_xyzw_handl": 94, "body_quaternion_wxyz_handl": 94, "leg_angles_handl": 94, "foot_pos_handl": 94, "contact_handl": 94, "arm_joints_handl": 94, "hand_x_handl": 94, "hand_y_handl": 94, "hand_z_handl": 94, "hand_quat_x_handl": 94, "hand_quat_y_handl": 94, "hand_quat_z_handl": 94, "hand_quat_w_handl": 94, "hand_roll_handl": 94, "hand_pitch_handl": 94, "hand_yaw_handl": 94, "hand_pos_handl": 94, "hand_euler_rpy_angles_handl": 94, "hand_quaternion_xyzw_handl": 94, "hand_quaternion_wxyz_handl": 94, "controls_opt": 94, "file_line_split": 94, "bpm_option": 94, "extendable_opt": 94, "truncatable_opt": 94, "neutral_start_opt": 94, "precise_steps_opt": 94, "precise_timing_opt": 94, "timing_adjustability_opt": 94, "no_looping_opt": 94, "arm_required_opt": 94, "arm_prohibited_opt": 94, "starts_sitting_opt": 94, "track_swing_trajectories_opt": 94, "assume_zero_roll_and_pitch_opt": 94, "track_hand_rt_body_opt": 94, "track_hand_rt_feet_opt": 94, "arm_playback_opt": 94, "display_rgb_opt": 94, "frequency_opt": 94, "retime_to_integer_slices_opt": 94, "description_opt": 94, "custom_gait_cycle_opt": 94, "animationfileformaterror": 95, "create_move_info_proto": 95, "choreography_sequ": 95, "set_proto": 95, "proto_object": 95, "attribute_nam": 95, "attribute_valu": 95, "handle_nested_double_value_param": 95, "read_animation_param": 95, "read_and_find_animation_param": 95, "animate_move_params_fil": 95, "filepath_input": 95, "filepath": [95, 136, 219, 225, 283, 307, 315, 327], "convert_animation_file_to_proto": 95, "animated_fil": 95, "write_animation_to_dest": 95, "choreographycli": 96, "license_nam": 96, "choreographyservic": 96, "update_from": [96, 103, 107, 112, 113, 115, 117, 118, 120, 123, 124, 134, 147, 155, 159, 160, 185, 210, 213], "timesync_endpoint": [96, 134, 160, 185, 210], "accessor": [96, 159, 160, 185, 197, 210], "list_all_mov": 96, "list_all_moves_async": 96, "time_start_point": [96, 185], "list_all_sequ": 96, "list_all_sequences_async": 96, "upload_choreographi": 96, "choreography_seq": 96, "uploadchoreographyrespons": 96, "upload_choreography_async": 96, "upload_animated_mov": 96, "generated_id": 96, "animationuploadhelp": 96, "uploadanimatedmoverespons": 96, "upload_animated_move_async": 96, "get_choreography_statu": 96, "get_choreography_status_async": 96, "choreography_log_to_animation_fil": 96, "fpath": 96, "choreography_time_adjust": 96, "override_client_start_tim": 96, "time_differ": 96, "timefram": 96, "executechoreographyrequest": 96, "choreography_time_adjust_async": 96, "choreography_nam": 96, "client_start_tim": 96, "lease_pb2": [96, 140, 141, 143], "execute_choreography_async": 96, "choreography_command": 96, "command_list": 96, "client_end_tim": 96, "choreographycommandrespons": 96, "choreography_command_async": 96, "start_recording_st": 96, "duration_sec": 96, "continue_session_id": 96, "startrecordingstaterespons": 96, "start_recording_state_async": 96, "stop_recording_st": 96, "stoprecordingstaterespons": 96, "stop_recording_state_async": 96, "get_choreography_sequ": 96, "seq_nam": 96, "getchoreographysequencerespons": 96, "get_choreography_sequence_async": 96, "get_anim": 96, "get_animation_async": 96, "save_sequ": 96, "savesequencerespons": 96, "save_sequence_async": 96, "delete_sequ": 96, "deletesequencerespons": 96, "delete_sequence_async": 96, "modify_choreography_info": 96, "choreographyinfo": 96, "modifychoreographyinforespons": 96, "modify_choreography_info_async": 96, "clear_all_sequence_fil": 96, "clearallsequencefilesrespons": 96, "clear_all_sequence_files_async": 96, "build_start_recording_state_request": 96, "duration_second": 96, "startrecordingstaterequest": 96, "download_robot_state_log": 96, "logtyp": 96, "downloadrobotstatelogrespons": 96, "build_choreography_time_adjust_request": 96, "choreographytimeadjustrequest": 96, "build_execute_choreography_request": 96, "build_choreography_command_request": 96, "build_save_sequence_request": 96, "build_modify_choreography_info_request": 96, "animation_move_prefix": 96, "uploadanimatemoverespons": 96, "generate_animation_id": 96, "animation_proto": 96, "invaliduploadedchoreographyerror": 96, "robotcommandissueserror": 96, "animationvalidationfailederror": 96, "norecordedinform": 96, "unknownrecordingsessionid": 96, "recordingbufferful": 96, "incompletedata": 96, "load_choreography_sequence_from_binary_fil": 96, "file_path": 96, "load_choreography_sequence_from_txt_fil": 96, "save_choreography_sequence_to_fil": 96, "area_callback_servic": 97, "arm_surface_contact_servic": 97, "auth_servic": 97, "auto_return_servic": 97, "data_servic": [97, 120], "data_acquisition_servic": 97, "data_acquisition_store_servic": 97, "data_buffer_servic": 97, "directory_registration_servic": 97, "directory_servic": 97, "docking_servic": 97, "door_servic": 97, "estop_servic": 97, "fault_servic": 97, "graph_nav_servic": 97, "gripper_camera_param_servic": 97, "image_servic": [97, 137], "inverse_kinematics_servic": 97, "ir_enable_disable_servic": 97, "lease_servic": 97, "license_servic": 97, "local_grid_servic": 97, "log_status_servic": 97, "manipulation_api_servic": 97, "map_processing_servic": 97, "network_compute_bridge_servic": 97, "payload_registration_servic": 97, "payload_servic": 97, "point_cloud_servic": 97, "power_servic": 97, "ras_cast_servic": 97, "recording_servic": 97, "robot_command_servic": 97, "robot_id_servic": 97, "robot_state_servic": 97, "spot_check_servic": 97, "time_sync_servic": 97, "world_object_servic": 97, "areacallbackcli": 98, "area_callback_inform": [98, 99, 102], "areacallbackresponseerror": 98, "invalidcommandiderror": 98, "invalidconfigerror": 98, "expiredendtimeerror": 98, "missingleaseresourceserror": 98, "shutdowncallbackfailederror": 98, "incorrectusag": 99, "shutdown_ev": 99, "updatecallbackrespons": 99, "callbackend": 99, "callbacktimedouterror": 99, "routechangedresult": 99, "areacallbackserviceconfig": [99, 101, 102], "areacallbackregionhandl": 99, "update_respons": 99, "discard": 99, "enum_type_wrapp": [99, 166], "enumtypewrapp": [99, 166], "0x7f2560f40580": 99, "area_callback_pb2": [99, 226], "configuration_data": 99, "begincallbackrespons": 99, "routechangerequest": 99, "set_complet": 99, "cede": 99, "sleep_time_sec": 99, "hang": 99, "will_get_control": 99, "internal_begin_complet": 99, "internal_set_stag": 99, "0x7f2560f404c0": 99, "internal_set_end_tim": 99, "internal_give_control": 99, "internal_run_wrapp": 99, "area_callback_service_runn": 100, "area_callback_service_servic": 101, "callabl": [101, 141, 163, 165, 208], "log_begin_callback_data": 102, "parse_param": 102, "handle_service_fault": 102, "fault_client": [102, 137, 281], "prereq_servic": 102, "arm_surface_contact": [103, 240], "armsurfacecontactcli": [103, 240], "arm_surface_contact_command": 103, "arm_surface_contact_pb2": 103, "armsurfacecontactrequest": 103, "arm_surface_contact_command_async": 103, "async_task": 104, "asynctask": 104, "add_task": 104, "asyncgrpctask": 104, "futurewrapp": [104, 112], "asyncperiodicgrpctask": 104, "period_sec": 104, "periodic_sec": 104, "asyncperiodicqueri": 104, "query_nam": 104, "stub": [105, 161], "invalidtokenerror": [105, 159], "authresponseerror": 105, "temporarilylockedouterror": 105, "auth_async": 105, "auth_with_token": 105, "auth_with_token_async": 105, "auto_return": [106, 140], "autoreturnresponseerror": 106, "invalidparametererror": 106, "autoreturncli": 106, "auto_return_pb2": 106, "configurerespons": 106, "configure_async": 106, "get_configur": 106, "getconfigurationrespons": 106, "get_configuration_async": 106, "startrespons": 106, "start_async": 106, "configure_error": 106, "start_error": 106, "autowalkresponseerror": 107, "compilationerror": [107, 210], "validationerror": [107, 210, 212], "autowalkservic": 107, "compile_autowalk": 107, "data_chunk_byte_s": [107, 112, 119, 210], "1000000": [107, 210], "walks_pb2": [107, 217, 221], "load_autowalk": 107, "download_data": 109, "start_nsec": [109, 180], "end_nsec": [109, 180], "timespan_spec": [109, 180, 208], "output_filenam": 109, "robot_tim": [109, 180], "show_progress": 109, "robot_clock": [109, 208], "refreshingaccesstokenauthmetadataplugin": 110, "token_cb": 110, "authmetadataplugin": 110, "create_secure_channel_cr": 110, "create_secure_channel": 110, "channelcredenti": 110, "create_insecure_channel": 110, "insecur": 110, "translate_except": 110, "rpc_error": 110, "generate_channel_opt": 110, "max_send_message_length": [110, 164, 184], "max_receive_message_length": [110, 164, 184], "keep_alive_ping_time_m": 110, "command_lin": [111, 319], "subpars": 111, "command_dict": 111, "need_authent": 111, "directorycommand": 111, "directorylistcommand": 111, "directorygetcommand": 111, "directoryregistercommand": 111, "directoryunregistercommand": 111, "payloadcommand": 111, "payloadlistcommand": 111, "payloadregistercommand": 111, "faultcommand": 111, "faultshowcommand": 111, "faultwatchcommand": 111, "logstatuscommand": 111, "getlogcommand": 111, "getactivelogstatusescommand": 111, "experimentlogcommand": 111, "starttimedexperimentlogcommand": 111, "startcontinuousexperimentlogcommand": 111, "handle_keyboard_interrupt": 111, "log_id": [111, 291], "startretrologcommand": 111, "terminatelogcommand": 111, "robotidcommand": 111, "databuffercommand": 111, "textmsgcommand": 111, "operatorcommentcommand": 111, "dataservicecommand": 111, "getdatabuffereventscommentscommand": 111, "pretty_print": 111, "getdatabuffercommentscommand": 111, "getdatabuffereventscommand": 111, "getdatabufferstatuscommand": 111, "robotstatecommand": 111, "fullstatecommand": 111, "hardwareconfigurationcommand": 111, "robotmodel": 111, "mesh": 111, "metricscommand": 111, "timesynccommand": 111, "licensecommand": 111, "leasecommand": 111, "leaselistcommand": 111, "becomeestopcommand": 111, "ctl": 111, "imagecommand": 111, "listimagesourcescommand": 111, "getimagecommand": 111, "localgridcommand": 111, "local_grid": [111, 145], "listlocalgridtypescommand": 111, "getlocalgridscommand": 111, "dataacquisitioncommand": 111, "dataacquisitionrequestcommand": 111, "dataacquisitionservicecommand": 111, "dataacquisitionstatuscommand": 111, "dataacquisitiongetlivedatacommand": 111, "hostcomputeripcommand": 111, "powerrobotcommand": 111, "powerpayloadscommand": 111, "powerwifiradiocommand": 111, "common_header_error": 112, "streaming_common_header_error": 112, "response_iter": 112, "common_lease_error": 112, "streaming_common_lease_error": 112, "custom_params_error": 112, "status_valu": 112, "status_field_nam": 112, "error_field_nam": 112, "total_respons": 112, "error_pair": 112, "docstr": 112, "error_factori": 112, "status_to_str": 112, "status_to_error": 112, "seriou": 112, "defaultdict": 112, "examin": [112, 293], "error_constructor": 112, "handle_unset_status_error": 112, "statustyp": 112, "decor": 112, "handle_common_header_error": 112, "func": 112, "handle_lease_use_result_error": 112, "handle_custom_params_error": 112, "maybe_rais": 112, "exc": 112, "print_respons": 112, "process_kwarg": 112, "stub_creation_func": 112, "update_request_iter": 112, "request_iter": 112, "is_block": 112, "copy_request": 112, "update_response_iter": 112, "value_from_respons": 112, "error_from_respons": 112, "assemble_typ": 112, "handle_respons": 112, "handle_response_stream": 112, "call_async": 112, "add_done_callback": 112, "cb": 112, "robot_hostnam": [112, 217, 221, 281], "data_acquisit": [113, 115], "dataacquisitionresponseerror": 113, "requestiddoesnotexisterror": [113, 115, 146], "unknowncapturetypeerror": 113, "cancellationfailederror": [113, 115], "dataacquisitionservic": [113, 115], "make_acquire_data_request": 113, "data_timestamp": [113, 114], "acquisitionrequestlist": [113, 114, 115], "acquire_data_async": 113, "acquiredatarespons": 113, "acquire_data_from_request_async": 113, "get_status_async": [113, 115, 125, 140, 173], "get_service_info": [113, 115, 213], "getserviceinforespons": [113, 115, 116], "get_service_info_async": [113, 115, 213], "cancel_acquisit": [113, 115], "cancel_acquisition_async": [113, 115], "get_live_data": [113, 115], "get_live_data_async": [113, 115], "metadata_to_proto": 113, "acquire_data_error": 113, "get_request_id": 113, "data_acquisition_help": 114, "issue_acquire_data_request": 114, "data_acq_cli": 114, "captureactionid": [114, 115, 117], "acquire_and_process_request": 114, "data_acquisition_cli": 114, "block_until_complet": 114, "cancel_acquisition_request": 114, "clean_filenam": 114, "make_time_query_param": 114, "start_time_sec": 114, "data_acquisition_store_pb2": [114, 164], "dataqueryparam": [114, 117], "make_time_query_params_from_group_nam": 114, "data_store_cli": 114, "download_data_rest": 114, "query_param": 114, "destination_fold": 114, "additional_param": 114, "datastor": 114, "data_acquisition_plugin": 115, "dataacquisitionplugincli": 115, "acquire_plugin_data": 115, "data_identifi": 115, "acquire_plugin_data_async": 115, "wait_for_stores_complet": 116, "error_msg": [116, 164], "requestst": 116, "knonerror": 116, "set_complete_if_no_error": 116, "add_sav": 116, "dataid": 116, "has_data_error": 116, "is_cancel": 116, "store_cli": 116, "cancel_interv": 116, "data_id_future_pair": 116, "store_imag": [116, 117], "imagecaptur": [116, 117, 136], "executor": 116, "live_response_fn": 116, "dataacquisitionpluginserviceservic": 116, "heart": 116, "livedatarequest": 116, "request_manag": 116, "requestmanag": 116, "validate_param": 116, "clientcontext": [116, 137], "getstatusrequest": 116, "getserviceinforequest": 116, "cancelacquisitionrequest": 116, "cancelacquisitionrespons": 116, "livedatarespons": [116, 166], "lifecycl": 116, "tempt": 116, "fiddl": 116, "lint": 116, "add_request": 116, "get_request_st": 116, "get_status_proto": 116, "mark_request_cancel": 116, "mark_request_finish": 116, "cleanup_request": 116, "older_than_tim": 116, "dataacquisitionstoreservic": 117, "list_capture_act": 117, "list_capture_actions_async": 117, "list_stored_imag": 117, "list_stored_images_async": 117, "list_stored_images_act": 117, "list_stored_metadata": 117, "list_stored_metadata_async": 117, "list_stored_alertdata": 117, "list_stored_alertdata_async": 117, "list_stored_data": 117, "list_stored_data_async": 117, "storeimagerespons": 117, "store_image_async": 117, "associated_metadata": 117, "storemetadatarespons": 117, "store_metadata_async": 117, "store_alertdata": 117, "associated_alert_data": 117, "associatedalertdata": 117, "storealertdatarespons": 117, "store_alertdata_async": 117, "storedatarespons": 117, "store_data_async": 117, "query_stored_captur": 117, "query_max_capture_id": 117, "querymaxcaptureidresult": 117, "skipe": 117, "query_max_capture_id_async": 117, "invalidargu": [118, 120], "log_ev": [118, 159], "event_typ": [118, 159], "start_timestamp_sec": [118, 159], "end_timestamp_sec": [118, 159], "id_str": [118, 159], "make_paramet": 118, "add_text_messag": 118, "textmessag": 118, "add_text_messages_async": 118, "add_operator_com": 118, "msg": [118, 212, 215], "robot_timestamp": [118, 208], "add_operator_comment_async": 118, "add_blob_async": 118, "serializ": 118, "add_protobuf_async": 118, "add_ev": 118, "add_events_async": 118, "register_signal_schema": 118, "signalschema": 118, "register_signal_schema_async": 118, "add_signal_tick": 118, "hunk": 118, "signaltick": 118, "lookuperror": 118, "add_signal_tick_async": 118, "now_in_robot_basi": 118, "msg_type": 118, "data_buffer_cli": 118, "time_sync_endpoint": [118, 180], "msg_num_limit": 118, "msg_age_limit": 118, "skip_rpc": 118, "logannotationtextmessag": 118, "notset": 118, "timesyncendpoint": [118, 180, 326], "log_annot": 118, "emit": 118, "notimplementederror": 118, "tidi": 118, "_handler": 118, "is_thread_al": 118, "assertionerror": 118, "fallback_log": 118, "record_to_msg": 118, "logrecord": 118, "record_level_to_proto_level": 118, "record_level": 118, "is_not_text_log": 118, "recordmessag": 118, "is_not_rpc": 118, "sdk_name": 118, "robot_nam": 118, "split_seri": 119, "chunk_seri": 119, "datachunk": 119, "parse_from_chunk": 119, "iterable_chunk": 119, "out_msg": 119, "serialized_from_messag": 119, "iterable_messag": 119, "serialized_from_chunk": 119, "serialized_from_str": 119, "iterable_str": 119, "dataservicecli": 120, "get_data_index": 120, "dataqueri": 120, "get_data_index_async": 120, "get_data_pag": 120, "time_rang": 120, "get_data_pages_async": 120, "delete_data_pag": 120, "delete_data_pages_async": 120, "get_events_com": 120, "eventscommentsspec": 120, "get_events_comments_async": 120, "get_data_buffer_statu": 120, "get_data_buffer_status_async": 120, "directoryresponseerror": 121, "nonexistentserviceerror": 121, "list_async": 121, "get_entri": 121, "get_entry_async": 121, "directoryregistrationresponseerror": 122, "servicealreadyexistserror": 122, "servicedoesnotexisterror": 122, "reset_service_registr": 122, "rpc_timeout_second": [122, 125, 140], "rpc_interval_second": [122, 125, 140, 141], "reset_servic": 122, "5x": 122, "is_al": [122, 141, 153, 182], "dockingservic": 123, "docking_command": 123, "station_id": 123, "dockingcommandrequest": 123, "expiri": 123, "leasewallet": [123, 141], "docking_command_async": 123, "docking_command_full_async": 123, "docking_command_feedback_full_async": 123, "docking_command_feedback_async": 123, "get_docking_config": 123, "configrang": 123, "get_docking_config_async": 123, "get_docking_st": 123, "dockstat": 123, "get_docking_state_async": 123, "blocking_dock_robot": 123, "num_retri": 123, "commandfailederror": [123, 160], "blocking_go_to_prep_pos": 123, "blocking_undock": 123, "get_dock_id": 123, "doorclient": 124, "open_door": 124, "door_pb2": 124, "opendoorcommandrequest": 124, "opendoorcommandrespons": 124, "leaseuseerror": [124, 126, 134, 141], "open_door_async": 124, "open_door_feedback": 124, "opendoorfeedbackrequest": 124, "opendoorfeedbackrespons": 124, "open_door_feedback_async": 124, "estopresponseerror": 125, "endpointunknownerror": 125, "incorrectchallengeresponseerror": 125, "endpointmismatcherror": 125, "configmismatcherror": 125, "invalidendpointerror": 125, "invalididerror": 125, "estopconfig": 125, "motorsonerror": 125, "stoplevel": 125, "intenum": [125, 211], "estopcli": 125, "estop_pb2": 125, "register_async": 125, "deregister_async": 125, "get_config": 125, "get_config_async": 125, "set_config": 125, "set_config_async": 125, "estopsystemstatu": 125, "check_in": [125, 140], "suppress_incorrect": 125, "status_invalid": 125, "check_in_async": [125, 140], "first_checkin": 125, "estop_cut_power_timeout": 125, "required_rol": 125, "last_set_level": 125, "set_challeng": 125, "get_challeng": 125, "check_in_at_level": 125, "stop_async": [125, 213], "settle_then_cut_async": 125, "allow_async": 125, "check_in_at_level_async": 125, "to_proto": [125, 149], "_unique_id": 125, "_endpoint": 125, "keepalivestatu": 125, "response_from_challeng": 125, "licenseerror": 126, "servererror": 126, "internalservererror": [126, 141], "unsetstatuserror": [126, 136, 154], "original_error": 126, "certainli": 126, "clientcancelledoperationerror": 126, "invalidclientcertificateerror": 126, "nonexist": 126, "proxyconnectionerror": 126, "serviceunavailableerror": 126, "servicefailedduringexecutionerror": 126, "timedouterror": [126, 180, 314], "allot": 126, "offlin": 126, "unauthenticatederror": 126, "domain": 126, "transient_failur": 126, "seem": 126, "customparamerror": [126, 165], "faultresponseerror": 127, "servicefaultalreadyexistserror": 127, "servicefaultdoesnotexisterror": 127, "faultclient": [127, 137], "faultservic": 127, "trigger_service_fault": 127, "service_fault": [127, 318], "servicefault": [127, 137], "triggerservicefaultrespons": 127, "trigger_service_fault_async": 127, "clear_service_fault": 127, "service_fault_id": 127, "servicefaultid": 127, "clearservicefaultrespons": 127, "clear_service_fault_async": 127, "validateframetreeunknownframeerror": 128, "validateframetreecycleerror": 128, "validateframetreedisjointerror": 128, "validate_frame_tree_snapshot": 128, "frame_tree_snapshot": [128, 160], "misus": 128, "frame_a": 128, "frame_b": 128, "get_se2_a_tform_b": 128, "express_se2_velocity_in_new_fram": 128, "frame_c": 128, "vel_of_a_in_b": 128, "velocity_of_a_in_c": 128, "express_se3_velocity_in_new_fram": 128, "get_odom_tform_bodi": 128, "get_vision_tform_bodi": 128, "generatetreeerror": 128, "childframeintre": 128, "child_frame_nam": 128, "get_frame_nam": 128, "is_gravity_aligned_frame_nam": 128, "log_throttle_tim": [129, 132], "nmea_message_group_to_gps_data_point": 129, "nmea_messag": 129, "time_convert": [129, 132, 281], "robottimeconvert": [129, 132, 180, 208], "gpsdatapoint": [129, 131, 132], "new_data": 129, "aggregator_cli": 131, "aggregatorcli": 131, "aggregatorservic": 131, "new_gps_data": 131, "gpsdevic": 131, "newgpsdatarespons": 131, "new_gps_data_async": 131, "gps_listen": [132, 281], "nmeastreamread": 132, "read_data": 132, "gpslisten": 132, "registration_cli": 133, "registrationcli": 133, "registrationservic": 133, "get_loc": [133, 281], "get_location_async": 133, "reset_registr": 133, "reset_registration_async": 133, "initial_guess_loc": 134, "verify_visual_features_qu": 134, "set_loc": 134, "set_localization_async_full_respons": 134, "nav_pb2": 134, "robotfaultederror": 134, "unknownmapinformationerror": 134, "graphnavserviceresponseerror": 134, "set_localization_async": 134, "get_localization_state_async": 134, "cmd_durat": 134, "notimesyncerror": [134, 160, 185], "commandexpirederror": 134, "toodistanterror": [134, 160], "isrecordingerror": 134, "unknownrouteelementserror": 134, "invalidedgeerror": 134, "nopatherror": 134, "robotnotlocalizedtorouteerror": 134, "constraintfaulterror": 134, "routenavigationerror": 134, "navigate_route_async": 134, "navigate_route_full_async": 134, "routegenparam": 134, "unknownwaypointerror": [134, 158], "navigate_to_async": 134, "navigatetorespons": 134, "navigate_to_full_async": 134, "navigate_to_anchor": 134, "noanchoringerror": 134, "invalidposeerror": 134, "navigate_to_anchor_async": 134, "navigation_feedback": 134, "navigation_feedback_async": 134, "clear_graph": 134, "clear_graph_async": 134, "upload_graph": 134, "upload_graph_async": 134, "upload_waypoint_snapshot": 134, "upload_edge_snapshot": 134, "edgesnapshot": 134, "download_graph": 134, "download_graph_async": 134, "download_waypoint_snapshot": 134, "download_edge_snapshot": 134, "write_graph_and_snapshot": 134, "generate_travel_param": 134, "build_rout": 134, "waypoint_id_list": 134, "edge_id_list": 134, "uploadwaypointsnapshoterror": 134, "uploadgrapherror": 134, "maptoolargelicenseerror": [134, 158], "invalidgrapherror": [134, 148], "incompatiblesensorserror": 134, "areacallbackmaperror": 134, "requestabortederror": 134, "requestfailederror": 134, "timeerror": 134, "robotstateerror": 134, "cannotmodifymapduringrecordingerror": 134, "routeerror": 134, "unkownrouteelementserror": 134, "featuredeserterror": 134, "routenotupdatingerror": 134, "robotlosterror": 134, "invalidgpserror": 134, "robotstuckerror": 134, "gripper_camera_param": 135, "grippercameraparamcli": 135, "set_camera_param": 135, "gripper_camera_param_request": 135, "gripper_camera_param_pb2": 135, "grippercameraparamrequest": 135, "grippercameraparamrespons": 135, "set_camera_params_async": 135, "gripper_camera_param_service_command": 135, "get_camera_param": 135, "gripper_camera_get_param_request": 135, "grippercameragetparamrequest": 135, "grippercameragetparamrespons": 135, "get_camera_params_async": 135, "gripper_camera_get_param_service_command": 135, "imageresponseerror": 136, "unknownimagesourceerror": 136, "sourcedataerror": [136, 154], "imagedataerror": 136, "unsupportedimageformatrequestederror": 136, "unsupportedpixelformatrequestederror": 136, "unsupportedresizeratiorequestederror": 136, "list_image_sources_async": 136, "get_image_from_sources_async": 136, "get_image_async": 136, "build_image_request": 136, "write_pgm_or_ppm": 136, "include_pixel_format": 136, "sourcenam": 136, "write_image_data": 136, "save_images_as_fil": 136, "pixel_x": 136, "pixel_i": 136, "min_dist": [136, 157], "image_data_rgb_np": 137, "formula": 137, "image_data_np": 137, "abc": 137, "threadsaf": 137, "capture_lock": 137, "keyword": [137, 217, 221, 270], "camera_interfac": 137, "param_spec": [137, 165], "rapidli": [137, 322, 325], "set_logg": 137, "initialize_fault": 137, "trigger_fault": 137, "service_fault_pb2": 137, "clear_fault": 137, "get_image_and_timestamp": 137, "capture_func_kwarg": 137, "capture_funct": 137, "image_decode_with_error_check": 137, "stop_captur": 137, "make_image_sourc": 137, "source_nam": 137, "make_capture_paramet": 137, "request_custom_param": 137, "captureparamet": 137, "accomod": 137, "threadcaptureoutput": 137, "is_valid": [137, 215], "imagecapturethread": 137, "get_latest_captured_imag": 137, "capture_func": 137, "capture_period_sec": 137, "start_captur": 137, "maybe_update_thread": 137, "set_last_captured_imag": 137, "image_fram": 137, "background_capture_param": 137, "imageserviceservic": 137, "blocking_capture_funct": 137, "listimagesourcesrequest": 137, "getimagerequest": 137, "inverse_kinemat": 138, "inversekinematicscli": 138, "inversekinematicsservic": 138, "inversekinematicsrequest": 138, "inversekinematicsrespons": 138, "inverse_kinematics_async": 138, "ir_enable_dis": 139, "irenabledisableservicecli": [139, 256], "emitt": [139, 256], "set_ir_en": 139, "set_ir_enabled_async": 139, "keepaliveresponseerror": 140, "invalidleaseerror": [140, 141], "invalidpolicyerror": 140, "add_associated_leas": 140, "add_controlled_motors_off_act": 140, "add_immediate_robot_off_act": 140, "add_record_event_act": 140, "add_auto_return_act": 140, "add_lease_stale_act": 140, "shortest_action_delai": 140, "pol": 140, "keepalivecli": 140, "keepaliveservic": 140, "modify_polici": 140, "modify_policy_async": 140, "modify_policy_error": 140, "check_in_error": 140, "policykeepal": 140, "remove_policy_on_exit": 140, "policy_keepal": 140, "run_my_cod": 140, "remove_polici": 140, "remove_all_polici": 140, "keepalive_cli": 140, "leaseresponseerror": 141, "displacedleaseerror": 141, "invalidresourceerror": 141, "notauthoritativeserviceerror": 141, "resourcealreadyclaimederror": 141, "revokedleaseerror": 141, "unmanagedresourceerror": 141, "wrongepocherror": 141, "notactiveleaseerror": 141, "lease_st": 141, "lease_proto": 141, "ignore_is_valid_check": 141, "accompani": 141, "recenc": 141, "lamport": 141, "compareresult": 141, "super_leas": 141, "sub_leas": 141, "different_resourc": 141, "different_epoch": 141, "other_leas": 141, "ignore_resourc": 141, "create_new": 141, "returned_leas": 141, "create_subleas": 141, "is_valid_leas": 141, "is_valid_proto": 141, "compare_result_to_lease_use_result_statu": 141, "compare_result": 141, "allow_super_leas": [141, 143], "leasest": 141, "lease_statu": 141, "lease_curr": 141, "leaseown": 141, "unown": 141, "self_own": 141, "other_own": 141, "not_manag": 141, "status_unown": 141, "status_self_own": 141, "status_other_own": 141, "status_not_manag": 141, "update_from_lease_use_result": 141, "get_leas": 141, "get_lease_st": 141, "on_lease_use_result": 141, "set_client_nam": 141, "lease_wallet": [141, 282], "acquire_async": 141, "take_async": 141, "return_leas": 141, "return_lease_async": 141, "retain_lease_async": 141, "list_leases_async": 141, "list_leases_ful": 141, "listleasesrespons": 141, "list_leases_full_async": 141, "leasewalletrequestprocessor": 141, "resource_list": 141, "leasewalletresponseprocessor": 141, "add_lease_wallet_processor": 141, "host_nam": 141, "on_failure_callback": 141, "wedg": 141, "_periodic_check_in": 141, "wait_until_don": 141, "incoming_lease_proto": 141, "active_leas": 141, "nonetyp": 141, "resourcehierarchi": 142, "resource_tree_proto": 142, "has_resourc": 142, "has_sub_resourc": 142, "get_resourc": [142, 217, 221], "get_resource_tre": 142, "leaf_resourc": 142, "get_hierarchi": 142, "leasevalid": 143, "get_active_leas": 143, "incoming_leas": 143, "allow_different_epoch": 143, "test_and_set_active_leas": 143, "leasevalidatorresponseprocessor": 143, "get_license_info": 144, "get_feature_en": 144, "feature_list": 144, "localgridcli": 145, "get_local_grid_typ": 145, "get_local_grid_types_async": 145, "get_local_grid": 145, "localgridresponseproto": 145, "get_local_grids_async": 145, "log_statu": [146, 291], "logstatusresponseerror": 146, "experimentalreadyrunningerror": 146, "inactivelogerror": 146, "concurrencylimitreachederror": 146, "logstatuscli": 146, "logstatusservic": 146, "get_log_statu": 146, "get_log_status_async": 146, "get_active_log_status": 146, "get_active_log_statuses_async": 146, "start_experiment_log": 146, "start_experiment_log_async": 146, "start_retro_log": 146, "start_retro_log_async": 146, "update_experi": 146, "update_experiment_async": 146, "terminate_log": 146, "terminate_log_async": 146, "get_log_status_error": 146, "get_active_log_statuses_error": 146, "start_experiment_log_error": 146, "start_retro_log_error": 146, "update_experiment_log_error": 146, "terminate_log_error": 146, "manipulationapirespons": 147, "manipulation_api_command_async": 147, "manipulationapifeedbackrespons": 147, "manipulation_api_feedback_command_async": 147, "grasp_override_command": 147, "apigraspoverriderequest": 147, "apigraspoverriderespons": 147, "grasp_override_command_async": 147, "mapprocessingserviceresponseerror": 148, "missingsnapshotserror": 148, "optimizationfailureerror": 148, "invalidparamserror": 148, "maxiterationserror": 148, "maxtimeerror": 148, "invalidhintserror": 148, "constraintviolationerror": 148, "mapmodifiederror": 148, "mapprocessingservicecli": [148, 282], "mapprocessingservic": 148, "process_topologi": 148, "processtopologyrespons": 148, "process_anchor": [148, 282], "apply_gps_result": 148, "anchoringhint": [148, 282], "processanchoringrespons": [148, 282], "recenter_value_mod": 149, "recenter_angle_mod": 149, "angle_diff": 149, "a1": 149, "a2": 149, "angle_diff_degre": 149, "to_obj": 149, "a_tform_b": 149, "b_tform_a": 149, "mult": 149, "b_tform_c": 149, "a_tform_c": 149, "to_rot_matrix": 149, "to_matrix": 149, "3x3": 149, "to_adjoint_matrix": 149, "adjoint": 149, "velocity_in_frame_b": 149, "velocity_in_frame_a": 149, "a_adjoint_b": 149, "get_closest_se3_transform": 149, "height_z": 149, "to_vector": 149, "3x1": 149, "from_vector": 149, "se2_vel_vector": 149, "lin_x": 149, "lin_i": 149, "lin_z": 149, "ang_x": 149, "ang_i": 149, "ang_z": 149, "6x1": 149, "se3_vel_vector": 149, "from_se2": 149, "transform_cloud": 149, "nx3": 149, "transform_cloud_from_matrix": 149, "from_ident": 149, "get_transl": 149, "get_closest_se2_transform": 149, "interp": 149, "from_rol": 149, "from_pitch": 149, "from_yaw": 149, "to_rol": 149, "to_pitch": 149, "to_axis_angl": 149, "other_quat": 149, "closest_yaw_only_quaternion": 149, "slerp": 149, "from_two_vector": 149, "u_in": 149, "v_in": 149, "conj": 149, "pose_to_xyz_yaw": 149, "is_within_threshold": 149, "pose_3d": 149, "max_translation_met": 149, "max_yaw_degre": 149, "recenter_angl": 149, "lower_limit": 149, "upper_limit": 149, "skew_matrix_3d": 149, "vec3_proto": 149, "skew_matrix_2d": 149, "vec2_proto": 149, "2x1": 149, "transform_se2veloc": 149, "a_adjoint_b_matrix": 149, "se2_velocity_in_b": 149, "transform_se3veloc": 149, "se3_velocity_in_b": 149, "quat_to_eulerzyx": 149, "metrics_log": 150, "missingkeyserror": 150, "unabletooptouterror": 150, "metricsloggingrobotservic": 150, "get_metr": 150, "getmetricsrespons": 150, "get_metrics_async": 150, "get_store_sequence_rang": 150, "get_store_sequence_range_async": 150, "get_absolute_metric_snapshot": 150, "signed_proto_pb2": 150, "signedproto": 150, "absolute_metric_pb2": 150, "absolutemetricssnapshot": 150, "get_absolute_metric_snapshot_async": 150, "make_parameter_upd": 150, "is_increment": 150, "externalservicenotfounderror": 151, "networkcomputerotationerror": 151, "networkcomputeanalysisfailederror": 151, "networkcomputebridgeservic": 151, "list_available_model": 151, "list_available_models_async": 151, "list_available_models_command": 151, "list_request": 151, "list_available_models_command_async": 151, "network_compute_request": 151, "network_compute_bridge_command_async": 151, "registri": [152, 153], "kw_arg": [152, 153, 154], "list_payloads_async": 152, "payload_registr": 153, "payloadregistrationresponseerror": 153, "invalidpayloadcredentialserror": [153, 159], "payloadnotauthorizederror": 153, "payloadalreadyexistserror": 153, "payloaddoesnotexisterror": 153, "register_payload_async": 153, "update_payload_vers": 153, "update_payload_version_async": 153, "get_payload_auth_token": 153, "attach_payload": 153, "attach_payload_async": 153, "detach_payload": 153, "detach_payload_async": 153, "pay_reg_cli": 153, "registration_interval_sec": 153, "rpc_timeout_sec": 153, "reconfigur": [153, 296, 316], "runtimeerror": 153, "point_cloud": 154, "pointcloudresponseerror": 154, "unknownpointcloudsourceerror": 154, "pointcloudsourc": 154, "pointclouddataerror": 154, "pointcloudcli": [154, 329], "pointcloudservic": 154, "list_point_cloud_sourc": 154, "list_point_cloud_sources_async": 154, "get_point_cloud_from_sourc": 154, "get_point_cloud_from_sources_async": 154, "get_point_cloud": 154, "pointcloudrequest": 154, "get_point_cloud_async": 154, "build_pc_request": 154, "powerresponseerror": [155, 159], "shorepowerconnectederror": 155, "batterymissingerror": 155, "commandinprogresserror": 155, "overriddenerror": 155, "faultederror": 155, "powererror": 155, "safetystopincompatiblehardwareerror": 155, "safetystop": 155, "safetystopfailederror": 155, "safetystopunknownstoptypeerror": 155, "power_command": 155, "power_command_async": 155, "power_command_feedback": 155, "power_command_feedback_async": 155, "fan_power_command": [155, 272], "fan_power_command_async": 155, "fan_power_command_feedback": [155, 272], "fan_power_command_feedback_async": 155, "reset_safety_stop": [155, 312], "reset_safety_stop_async": 155, "update_frequ": [155, 159, 160, 179], "robotcommandresponseerror": [155, 159, 160], "power_cli": [155, 159, 272, 312], "power_on_motor": 155, "power_off_motor": 155, "power_cycle_robot": 155, "power_off_payload_port": 155, "power_on_payload_port": 155, "power_off_wifi_radio": 155, "power_on_wifi_radio": 155, "addrequesthead": 156, "client_name_func": 156, "ray_cast": 157, "raycastresponseerror": 157, "invalidintersectiontypeerror": 157, "raycastcli": 157, "default_author": 157, "ray_origin": 157, "ray_direct": 157, "raycast_typ": 157, "raycastrespons": 157, "raycast_async": 157, "waypointregion": 158, "empty_region": 158, "circle_region": 158, "start_record": 158, "recordingenviron": 158, "start_recording_async": 158, "start_recording_full_async": 158, "stop_record": 158, "stop_recording_async": 158, "get_record_statu": 158, "get_record_status_async": 158, "set_recording_environ": 158, "set_recording_environment_async": 158, "create_waypoint": 158, "create_waypoint_async": 158, "create_edg": 158, "from_t_to": 158, "create_edge_async": 158, "make_recording_environ": 158, "waypoint_env": 158, "edge_env": 158, "make_waypoint_environ": 158, "make_client_metadata": 158, "make_edge_environ": 158, "make_edg": 158, "from_waypoint_id": 158, "to_waypoint_id": 158, "recordingserviceresponseerror": 158, "couldnotcreatewaypointerror": 158, "notrecordingerror": 158, "edgeexistserror": 158, "edgemissingtransformerror": 158, "notlocalizedtoenderror": 158, "followingrouteerror": 158, "notlocalizedtoexistingmaperror": 158, "toofarfromexistingmaperror": 158, "remotecloudfailurenotindirectoryerror": 158, "remotecloudfailurenodataerror": 158, "missingfiducialserror": 158, "fiducialposeerror": 158, "setup_token_cach": 159, "token_cach": [159, 181], "service_endpoint": 159, "get_cached_robot_id": 159, "ensure_channel": 159, "writefailederror": [159, 181], "authenticate_with_token": 159, "authenticate_from_cach": 159, "notincacheerror": [159, 181], "update_user_token": 159, "get_cached_usernam": 159, "id_service_nam": 159, "list_servic": 159, "services_list": 159, "register_payload_and_authent": 159, "start_time_sync": 159, "time_sync_interval_sec": [159, 180], "stop_time_sync": 159, "time_sec": 159, "timestamp_sec": 159, "notestablishederror": [159, 180], "get_frame_tree_snapshot": [159, 160], "secure_channel_port": 159, "expirederror": 160, "notpoweredonerror": 160, "dockederror": 160, "notclearederror": 160, "unsupportederror": 160, "commandfailederrorwithfeedback": 160, "robot_command_async": 160, "robot_command_feedback_async": 160, "clear_behavior_fault_async": 160, "robotcommandstreamingcli": 160, "robotcommandstreamingservic": 160, "send_joint_control_command": 160, "command_iter": 160, "stop_command": 160, "freeze_command": 160, "selfright_command": 160, "battery_change_pose_command": 160, "dir_hint": 160, "safe_power_off_command": 160, "constrained_manipulation_command": 160, "goal_x": 160, "goal_i": 160, "goal_head": 160, "full_body_command": 160, "goal_se2": 160, "synchro_trajectory_command_in_body_fram": 160, "goal_x_rt_bodi": 160, "goal_y_rt_bodi": 160, "goal_heading_rt_bodi": 160, "v_x": 160, "v_y": 160, "v_rot": 160, "stance_command": 160, "pos_fl_rt_fram": 160, "pos_fr_rt_fram": 160, "pos_hl_rt_fram": 160, "pos_hr_rt_fram": 160, "follow_arm_command": 160, "arm_ready_command": 160, "frame2_tform_desired_hand": 160, "max_angular_vel": 160, "max_accel": 160, "vec3trajectori": 160, "arm_pose_command_from_pos": 160, "arm_wrench_command": 160, "force_x": 160, "force_i": 160, "force_z": 160, "torque_x": 160, "torque_i": 160, "torque_z": 160, "claw_gripper_open_command": 160, "max_acc": 160, "claw_gripper_close_command": 160, "max_torqu": 160, "open_fract": 160, "claw_gripper_open_angle_command": 160, "gripper_q": 160, "create_arm_joint_trajectory_point": 160, "time_since_reference_sec": 160, "arm_joint_command": 160, "joint_posit": 160, "joint_veloc": 160, "ref_tim": 160, "armjointmoverequest": 160, "arm_cartesian_move_help": 160, "se3_pos": 160, "se3_veloc": 160, "frame_tre": 160, "gotten": 160, "claw_gripper_command_help": 160, "gripper_posit": 160, "gripper_veloc": 160, "clawgrippercommandrequest": 160, "arm_joint_freeze_command": 160, "armcommand": 160, "bodyexternalforceparam": 160, "stairsmod": 160, "bodypos": 160, "build_body_external_forc": 160, "override_external_force_vec": 160, "spot_command_pb2": 160, "intellig": 160, "blocking_command": 160, "check_status_fn": 160, "full_bodi": 160, "robotcommandfeedbackstatu": 160, "robotcommandfeedbackrespons": 160, "namedarmpositionscommand": 160, "trajectory_end_status": 160, "body_movement_status": 160, "feedback_interval_sec": 160, "printout": 160, "strictvers": 161, "get_robot_metr": 162, "get_robot_metrics_async": 162, "get_robot_hardware_configur": 162, "get_robot_hardware_configuration_async": 162, "get_robot_link_model": 162, "objmodel": 162, "get_robot_link_model_async": 162, "get_robot_joint_model_async": 162, "get_hardware_config_with_link_info": 162, "robot_state_pb2": 162, "robotstatestreamingcli": 162, "robotstatestreamingservic": 162, "get_robot_state_stream": 162, "sdkerror": 163, "unsetapptokenerror": 163, "unabletoloadapptokenerror": 163, "generate_client_nam": 163, "client_name_prefix": 163, "service_cli": 163, "cert_resource_glob": 163, "ioerror": 163, "set_max_message_length": 163, "max_message_length": 163, "creation_func": 163, "load_robot_cert": 163, "resource_path_glob": 163, "clear_robot": 163, "rpc_logger": 164, "channel_prefix": 164, "serviceservic": [164, 184], "spin": [164, 184], "sigterm": 164, "sigquit": 164, "populate_response_head": 164, "error_cod": 164, "strip_large_bytes_field": 164, "proto_messag": 164, "get_bytes_field_allowlist": 164, "strip_image_respons": 164, "strip_get_image_respons": 164, "getimagerespons": 164, "strip_local_grid_respons": 164, "local_grid_pb2": 164, "getlocalgridsrespons": 164, "strip_store_image_request": 164, "storeimagerequest": 164, "strip_store_data_request": 164, "storedatarequest": 164, "strip_record_signal_tick": 164, "data_buffer_pb2": 164, "recordsignalticksrequest": 164, "strip_record_data_blob": 164, "invalidcustomparamspecerror": 165, "invalidcustomparamvalueerror": 165, "proto_error": 165, "validate_dict_spec": 165, "create_value_valid": 165, "validate_valu": 165, "besid": 165, "dict_param": 165, "list_params_to_list": 165, "list_param": 165, "oneof_param_to_dict": 165, "oneof_param": 165, "oneof_spec": 165, "check_types_match": 165, "proto_typ": [165, 195, 197], "custom_spec_to_default": 165, "dict_spec_to_default": 165, "list_spec_to_default": 165, "int_spec_to_default": 165, "intparam": 165, "string_spec_to_default": 165, "roi_spec_to_default": 165, "bool_spec_to_default": 165, "one_of_spec_to_default": 165, "list_param_coerce_to": 165, "double_param_coerce_to": 165, "roi_param_coerce_to": 165, "tricki": 165, "one_of_param_coerce_to": 165, "custom_param_coerce_to": 165, "make_custom_param_spec": 165, "make_dict_child_spec": 165, "childspec": 165, "make_dict_param_spec": 165, "make_one_of_child_spec": 165, "dict_param_spec": 165, "make_one_of_param_spec": 165, "make_int64_param_spec": 165, "make_double_param_spec": 165, "make_bool_param_spec": 165, "make_region_of_interest_param_spec": 165, "serviceandsourc": 165, "areai": 165, "make_user_interface_info": 165, "make_roi_service_and_sourc": 165, "signals_help": 166, "build_max_alert_spec": 166, "0x7f2560f5a110": 166, "alertconditionspec": 166, "build_simple_sign": 166, "max_warn": 166, "max_crit": 166, "build_capability_live_data": 166, "capability_nam": 166, "capabilitylivedata": 166, "build_live_data_respons": 166, "live_data_cap": 166, "get_data": 166, "signaldata": 166, "audiocli": 168, "list_sound": 168, "list_sounds_async": 168, "set_volum": [168, 319], "set_volume_async": 168, "get_volum": [168, 319], "get_volume_async": 168, "play_sound": 168, "play_sound_async": 168, "delete_sound": 168, "delete_sound_async": 168, "load_sound": 168, "max_chunk_s": 168, "1048576": 168, "set_audio_capture_channel": 168, "audio_pb2": 168, "audiocapturechannel": 168, "set_audio_capture_channel_async": 168, "get_audio_capture_channel": 168, "get_audio_capture_channel_async": 168, "set_audio_capture_gain": 168, "set_audio_capture_gain_async": 168, "get_audio_capture_gain": 168, "get_audio_capture_gain_async": 168, "set_screen": 169, "set_screen_async": 169, "get_screen": 169, "get_screen_async": 169, "list_screen": 169, "list_screens_async": 169, "get_visible_camera": 169, "get_visible_cameras_async": 169, "set_ir_colormap": 169, "min_temp": 169, "max_temp": 169, "compositor_pb2": 169, "ircolormap": 169, "set_ir_colormap_async": 169, "get_ir_colormap": 169, "get_ir_colormap_async": 169, "tempunit": 169, "set_multi_ir_meter_overlai": 169, "set_multi_ir_meter_overlay_async": 169, "get_ir_meter_overlai": 169, "get_ir_meter_overlay_async": 169, "healthclient": 170, "clear_bit_ev": 170, "clear_bit_events_async": 170, "get_bit_statu": 170, "degrad": 170, "get_bit_status_async": 170, "get_temperatur": 170, "mc": 170, "get_temperature_async": 170, "get_system_log": 170, "get_system_log_async": 170, "lightingcli": [171, 172], "get_led_bright": 171, "get_led_brightness_async": 171, "set_led_bright": 171, "set_led_brightness_async": 171, "lightshelp": [172, 226], "set_lights_with_freq_and_bright": 172, "stop_ev": 172, "lighting_cli": 172, "medialog": 173, "media_log": [173, 319], "medialogcli": 173, "delete_async": 173, "enable_debug": 173, "system_stat": 173, "enable_debug_async": 173, "list_camera": [173, 319], "list_cameras_async": 173, "list_logpoint": [173, 319], "retrieve_raw_data": 173, "set_passphras": 173, "set_passphrase_async": 173, "record_typ": 173, "recordtyp": 173, "store_async": 173, "tag_async": 173, "networkcli": 174, "intermediari": 174, "nat": 174, "get_ice_configur": 174, "get_ice_configuration_async": 174, "set_ice_configur": 174, "ice_serv": 174, "set_ice_configuration_async": 174, "get_power_statu": 175, "get_power_status_async": 175, "set_power_statu": 175, "initialize_len": [175, 176], "set_power_status_async": 175, "cycle_pow": 175, "cycle_power_async": 175, "list_ptz": 176, "list_ptz_async": 176, "get_ptz_posit": 176, "ptz_desc": 176, "get_ptz_position_async": 176, "get_ptz_veloc": 176, "get_ptz_velocity_async": 176, "set_ptz_posit": 176, "set_ptz_position_async": 176, "set_ptz_veloc": 176, "set_ptz_velocity_async": 176, "initialize_lens_async": 176, "get_ptz_focus_st": 176, "ptzfocusmod": 176, "20m": [176, 246], "ptzfocusst": 176, "get_ptz_focus_state_async": 176, "setptzfocusstaterespons": 176, "shift_pan_angl": 176, "streamqualitycli": 177, "set_stream_param": 177, "target_bitr": 177, "refresh_interv": 177, "idr_interv": 177, "awb_mod": 177, "sync_auto_exposur": 177, "awbmodeenum": 177, "autoexposur": 177, "syncautoexposur": 177, "manualexposur": 177, "set_stream_params_async": 177, "get_stream_param": 177, "get_stream_params_async": 177, "enable_congestion_control_async": 177, "versioncli": 178, "get_software_vers": 178, "softwarevers": 178, "get_software_version_async": 178, "get_software_version_ful": 178, "getsoftwareversionrespons": 178, "get_software_version_full_async": 178, "spotcheckerror": 179, "spotcheckresponseerror": 179, "spotcheckunexpectedpowerchangeerror": 179, "spotcheckimucheckerror": 179, "spotchecknotsittingerror": 179, "spotcheckloadcelltimeouterror": 179, "spotcheckpoweronfailur": 179, "spotcheckendstoptimeouterror": 179, "spotcheckstandfailureerror": 179, "spotcheckcameratimeouterror": 179, "spotcheckgroundcheckerror": 179, "spotchecktimedouterror": 179, "cameracalibrationusercancelederror": 179, "cameracalibrationpowererror": 179, "cameracalibrationtargetnotcenterederror": 179, "cameracalibrationrobotcommanderror": 179, "cameracalibrationcalibrationerror": 179, "cameracalibrationinternalerror": 179, "cameracalibrationtimedouterror": 179, "grippercameracalibrationresponseerror": 179, "grippercameracalibrationusercancelederror": 179, "grippercameracalibrationpowererror": 179, "grippercameracalibrationleaseerror": 179, "grippercameracalibrationtargetnotcenterederror": 179, "grippercameracalibrationtargetupsidedownerror": 179, "grippercameracalibrationcalibrationerror": 179, "grippercameracalibrationinitializationerror": 179, "grippercameracalibrationinternalerror": 179, "grippercameracalibrationstuckerror": 179, "spotcheckcli": 179, "spot_check_command": 179, "spot_check_command_async": 179, "spot_check_feedback": 179, "spot_check_feedback_async": 179, "camera_calibration_command": 179, "camera_calibration_command_async": 179, "camera_calibration_feedback": 179, "camera_calibration_feedback_async": 179, "gripper_camera_calibration_command": 179, "gripper_camera_calibration_command_async": 179, "gripper_camera_calibration_feedback": 179, "gripper_camera_calibration_feedback_async": 179, "run_spot_check": 179, "spot_check_cli": 179, "run_camera_calibr": 179, "1200": 179, "timesyncerror": 180, "inactivethreaderror": 180, "timesynccli": 180, "timesyncservic": 180, "get_time_sync_upd": 180, "timesyncroundtrip": 180, "get_time_sync_update_async": 180, "robot_time_range_from_nanosecond": 180, "timerang": 180, "time_spec": 180, "robot_time_range_from_datetim": 180, "start_datetim": 180, "end_datetim": 180, "timespec_to_robot_timespan": 180, "time_sync_cli": [180, 326], "timesyncrespons": 180, "has_established_time_sync": 180, "get_new_estim": 180, "establish_timesync": 180, "max_sampl": 180, "break_on_success": 180, "get_robot_time_convert": [180, 281], "robottimeconvertor": 180, "robot_timestamp_from_local_sec": [180, 208], "local_time_sec": [180, 208], "default_time_sync_interval_sec": 180, "time_sync_service_not_ready_interval_sec": 180, "should_exit": 180, "thread_except": 180, "get_robot_clock_skew": 180, "timesync_timeout_sec": 180, "tokencach": 181, "tokencacheerror": 181, "clearfailederror": 181, "atomic_file_writ": 181, "tokencachefilesystem": 181, "cache_directori": 181, "tokenmanag": 182, "token_manag": 182, "units_help": 183, "units_to_str": 183, "cli_login_prompt": 184, "cli_auth": 184, "askpass": 184, "tty": 184, "deduploggingmessag": 184, "always_print_logger_level": 184, "deem": 184, "does_dedup_filter_exist": 184, "get_logg": 184, "add_credentials_argu": 184, "credentials_no_warn": 184, "oserror": 184, "get_guid_or_secret": 184, "parsed_opt": 184, "add_service_hosting_argu": 184, "safe_pb_enum_to_str": 184, "pb_enum_obj": 184, "worldobjectcli": 185, "list_world_object": 185, "worldobjecttyp": 185, "list_world_objects_async": 185, "world_object_pb2": 185, "mutateworldobjectrequest": 185, "mutate_world_objects_async": 185, "x_rt_frame_nam": 185, "y_rt_frame_nam": 185, "z_rt_frame_nam": 185, "list_objects_now": 185, "mutateworldobjectrespons": 185, "drawable_box_frame_nam": 185, "frame_name_tform_drawable_box": 185, "size_ewrt_box_vec3": 185, "make_add_world_object_req": 185, "world_obj": 185, "make_delete_world_object_req": 185, "make_change_world_object_req": 185, "world_object_arrai": 185, "delete_object_id_arrai": 185, "basedataread": [188, 192, 205], "dataread": [188, 191, 192, 196, 197, 199], "streameddataread": 188, "base_data_read": 188, "infil": [188, 192], "fileformatvers": 188, "read_checksum": [188, 205], "series_spec_to_index": 188, "series_spec": [188, 191, 193, 194, 200, 201, 204], "blockwrit": [189, 194], "block_writ": [189, 194], "outfil": [189, 193, 205], "write_descriptor_block": 189, "write_data_block": 189, "desc_block": 189, "write_head": 189, "write_file_end": 189, "index_offset": 189, "messagechannel": 190, "typedmessagechannel": 190, "grpcrequest": 190, "grpcrespons": 190, "datawrit": [191, 193, 194, 201], "addserieserror": 191, "seriesnotuniqueerror": [191, 193, 194], "checksumerror": 191, "dataformaterror": [191, 193, 201, 204], "parseerror": [191, 192, 196, 199, 200, 203, 205], "seekabl": 192, "data_read": [192, 196, 197, 199, 200, 203], "seriesdescriptor": [192, 194, 199, 200, 202, 205], "num_data_block": [192, 200], "index_in_seri": [192, 195, 196, 199, 200, 202, 203], "datatypedescriptor": [192, 199, 203], "seriesblockindex": [192, 194, 205], "data_writ": [193, 198, 201, 204], "add_message_seri": 193, "add_pod_seri": 193, "type_enum": 193, "podtypeenum": 193, "add_seri": [193, 194], "messagetypedescriptor": [193, 194], "podtypedescriptor": [193, 194, 200], "write_data": 193, "nsec": [193, 201, 204], "run_on_clos": 193, "thunk": 193, "descriptor_index": 194, "series_identifier_to_hash": 194, "add_series_descriptor": 194, "series_block_file_offset": 194, "index_data_block": 194, "nbyte": 194, "make_data_descriptor": 194, "write_index": 194, "grpc_proto_read": 195, "grpcprotoread": [195, 196, 197], "service_read": 195, "num_messag": [195, 202], "get_messag": [195, 196, 202, 203], "datafil": [196, 199, 200, 202, 203], "grpc_reader": [196, 197], "grpcreader": 196, "protobuf_class": 196, "get_proto_read": [196, 197], "proto_nam": 196, "grpc_service_read": 197, "grpcserviceread": 197, "add_proto_read": 197, "grpcserieswrit": 198, "grpc_service_writ": 198, "grpcservicewrit": 198, "log_request": 198, "log_respons": 198, "messageread": [199, 203], "require_protobuf": 199, "series_index_to_descriptor": 199, "get_blob": 199, "pod_series_read": 200, "podseriesread": 200, "read_sampl": 200, "pod_series_writ": 201, "podserieswrit": 201, "data_block_s": 201, "2048": 201, "finish_block": 201, "protobuf_channel_read": 202, "protobufchannelread": 202, "protobuf_read": [202, 203], "protobuf_typ": [202, 203, 204], "channel_read": 202, "protobufread": 203, "protobuf_series_writ": 204, "protobufserieswrit": 204, "stream_data_read": 205, "streamdataread": 205, "stream_file_index": 205, "keyerror": 205, "read_data_block": 205, "eoferror": 205, "read_next_block": 205, "eof": 205, "moved_to": 206, "new_func": 206, "deprecation_kwarg": 206, "renamed_to": 206, "to_quaternion": 207, "to_euler_zxi": 207, "set_clock_sourc": 208, "clock_fn": 208, "duration_str": 208, "duration_to_second": 208, "totimedelta": 208, "seconds_to_dur": 208, "seconds_to_timestamp": 208, "timestamp_str": 208, "sec_to_nsec": 208, "_clock_source_fn": 208, "nsec_to_sec": 208, "now_nsec": 208, "dawn": 208, "now_sec": 208, "set_timestamp_from_now": 208, "timestamp_proto": 208, "now_timestamp": 208, "set_timestamp_from_nsec": 208, "time_nsec": 208, "set_timestamp_from_datetim": 208, "date_tim": 208, "nsec_to_timestamp": 208, "timestamp_to_sec": 208, "timestamp_to_nsec": 208, "timestamp_to_datetim": 208, "use_nano": 208, "secs_to_hm": 208, "ss": [208, 251], "distance_str": 208, "km": 208, "format_metr": 208, "datetimeparseerror": 208, "parse_datetim": 208, "time_format_desc": 208, "parse_timespan": 208, "robot_clock_skew_nsec": 208, "robot_timestamp_from_local_nsec": 208, "local_time_nsec": 208, "robot_timestamp_from_loc": 208, "local_timestamp_proto": 208, "convert_timestamp_from_local_to_robot": 208, "robot_seconds_from_local_second": 208, "local_seconds_from_robot_timestamp": 208, "missioncli": [209, 210], "mission_servic": 209, "remote_servic": 209, "missionresponseerror": 210, "invalidquestionid": 210, "invalidanswercod": 210, "questionalreadyansw": 210, "customparamserror": 210, "incompatibleansw": 210, "nomissionerror": 210, "nomissionplayingerror": 210, "get_stat": 210, "upper_tick_bound": 210, "lower_tick_bound": 210, "past_tick": 210, "get_state_async": 210, "answer_quest": 210, "answer_question_async": 210, "load_miss": 210, "load_mission_async": 210, "load_mission_as_chunk": 210, "load_mission_as_chunks2": 210, "play_miss": 210, "pause_time_sec": 210, "play_mission_async": 210, "restart_miss": 210, "restart_mission_async": 210, "pause_miss": 210, "pause_mission_async": 210, "stop_miss": 210, "stop_mission_async": 210, "get_info_async": 210, "get_miss": 210, "get_mission_async": 210, "compileerror": 212, "node_proto": 212, "node_nam": 212, "node_impl": 212, "get_node_detail": 212, "unknowntyp": 212, "validationerrorreport": 212, "missingparametererror": 212, "target_nam": 212, "target_pb_typ": 212, "stored_pb_typ": 212, "inaccessibleparametererror": 212, "messageoverrideerror": 212, "overriding_messag": 212, "field_nam": 212, "field_typ": 212, "nodeunreferenceableerror": 212, "invalidsessionid": 213, "missinginput": 213, "missingleas": 213, "tree_status_from_tick_statu": 213, "tick_statu": 213, "establish_sess": 213, "keyvalu": 213, "establish_session_async": 213, "tick_async": 213, "teardown_sess": 213, "teardown_session_async": 213, "invalidconvers": 215, "original_valu": 215, "destination_typenam": 215, "tree_to_str": 215, "start_level": 215, "include_statu": 215, "type_to_field_nam": 215, "reconstruct": 215, "proto_from_tupl": 215, "tup": 215, "pack_nod": 215, "test_util": 215, "python_var_to_valu": 215, "constantvalu": 215, "python_type_to_pb_typ": 215, "is_string_identifi": 215, "field_desc_to_pb_typ": 215, "field_desc": 215, "safe_pb_type_to_str": 215, "pb_type": 215, "stringifi": 215, "one_line_str": 215, "node_spec_to_short_str": 215, "node_spec": 215, "maxlen": 215, "resultfromproto": 215, "results_from_proto": 215, "proto_from_result": 215, "proto_enum_to_result_const": 215, "proto_msg": 215, "result_constant_to_proto_enum": 215, "get_value_from_constant_value_messag": 215, "const_proto": 215, "get_value_from_value_messag": 215, "value_msg": 215, "create_valu": 215, "requestexcept": [217, 219, 221, 223], "unauthenticatedclienterror": [217, 218, 219], "post_resourc": [217, 221], "delete_resourc": [217, 221], "get_vers": 217, "get_system_tim": 217, "get_robot": [217, 221], "get_robot_by_hostnam": [217, 221], "get_site_walk_by_id": [217, 221], "get_site_el": [217, 221], "get_site_element_by_id": [217, 221], "get_site_dock": [217, 221], "get_site_dock_by_id": [217, 221], "get_run_ev": [217, 221], "get_run_event_by_id": [217, 221], "runeventuuid": [217, 221], "get_run_captur": [217, 221], "get_run_capture_by_id": [217, 221], "runcaptureuuid": [217, 221], "get_run": [217, 221], "get_run_by_id": [217, 221], "runuuid": [217, 221], "httprespons": [217, 221], "runcaptur": [217, 221], "dataurl": [217, 221], "get_image_respons": [217, 221], "get_webhook": [217, 221], "get_webhook_by_id": [217, 221], "get_robot_info": [217, 221], "robot_nicknam": [217, 221, 303], "post_export_as_walk": [217, 221], "site_walk_uuid": [217, 221], "post_import_from_walk": [217, 221], "post_site_el": [217, 221], "post_site_walk": [217, 221], "post_site_dock": [217, 221], "post_robot": [217, 221], "time_m": [217, 221], "repeat_m": [217, 221], "force_acquire_estop": [217, 221], "require_dock": [217, 221], "schedule_nam": [217, 221], "blackout_tim": [217, 221], "disable_reason": [217, 221], "event_id": [217, 221], "startm": [217, 221], "endm": [217, 221], "post_calendar_events_disable_al": [217, 221], "post_calendar_event_disable_by_id": [217, 221], "eventid": [217, 221], "post_calendar_events_enable_al": [217, 221], "post_calendar_event_enable_by_id": [217, 221], "post_webhook_by_id": [217, 221], "post_return_to_dock_miss": [217, 221], "site_dock_uuid": [217, 221, 303], "post_dispatch_mission_to_robot": [217, 221], "driver_id": [217, 221], "mission_uuid": [217, 221], "delete_miss": [217, 221], "delete_site_walk": [217, 221], "delete_robot": [217, 221], "delete_calendar_ev": [217, 221], "delete_webhook": [217, 221], "create_cli": 217, "webhooksignatureverificationerror": [218, 219], "get_api_token": [219, 223], "get_latest_created_at_for_run_ev": [219, 223], "get_latest_run_capture_resourc": [219, 223], "get_latest_created_at_for_run_captur": [219, 223], "get_latest_run_resourc": [219, 223], "get_latest_run_in_progress": [219, 223], "get_latest_end_time_for_run": [219, 223], "write_imag": 219, "img_raw": 219, "image_fp": 219, "data_capture_urls_from_run_ev": [219, 223], "list_of_channel_nam": [219, 223], "data_url": [219, 223], "data_capture_url_from_run_capture_resourc": [219, 223], "run_capture_resourc": [219, 223], "get_action_names_from_run_ev": 219, "datetime_from_isostr": 219, "datetime_isostr": 219, "signature_head": 219, "max_age_m": 219, "300000": 219, "ag": 219, "scoutclient": [221, 223], "unauthenticatedscoutclienterror": [221, 223], "get_scout_vers": 221, "get_scout_system_tim": 221, "create_scout_cli": 221, "scout_client": [221, 223], "get_credenti": 223, "readm": [224, 270, 273, 315], "acquaint": 224, "fundament": [224, 293], "depress": [225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "characterist": 225, "animation_record": 225, "foldernam": 225, "3hz": 226, "tbd": 226, "beginassistrequest": 226, "beginassistrespons": 226, "placehold": [226, 273, 281], "clear_of_forklift": 226, "sdk_dir": 226, "look_both_wai": 226, "crosswalk_light": 226, "unmodifi": 227, "arm_and_mobility_command": 227, "drawer": 228, "run_constrained_manipul": 228, "arm_door": 229, "force_trajectori": 230, "force_wrench_control": 230, "freezer": 231, "arm_freeze_hand": 231, "arm_gaz": 232, "cfg": 233, "g00": 233, "g01": 233, "g02": 233, "arc": 233, "g03": 233, "m0": 233, "inkscap": 233, "gaffer": 233, "knock": 233, "arm_grasp_carry_overrid": 235, "arm_impedance_control": 236, "arm_joint_mov": 237, "arm_joint_long_trajectori": 237, "arm_simpl": 238, "arm_stow_unstow": 239, "contionu": 241, "arm_trajectori": 241, "arm_long_cartesian_trajectori": 241, "arm_walk_to_object": 242, "arm_wasd": 243, "uo": 243, "jl": 243, "arm_with_body_follow": 244, "force_start_auto_return": 245, "bddf_read": 246, "bourn": 246, "download_bddf": 246, "yyyymmdd_hhmmss": 246, "20200120_120000": [246, 254], "yyyymmdd": [246, 254], "20200120": [246, 254], "nnnnnnnnnn": [246, 254], "nn": [246, 254], "1581869515": [246, 254], "256": [246, 254], "nnnnnnnnnnnnnnnnnnnn": [246, 254], "20201107": [246, 254], "20201108": [246, 254], "1h": [246, 298], "10m": 246, "robotidrespons": 246, "bddf_download_gui": 246, "gui_requir": 246, "upload_to_gcp": 247, "bucket_nam": 247, "source_fil": 247, "destination_fil": 247, "upload_to_aw": 247, "boto3": 247, "google_application_credenti": 247, "bashrc": 247, "aws_bucket_nam": 247, "imagedemo": 247, "cloud_upload": 247, "1196": 247, "ricoh_theta": [247, 313], "comms_image_servic": 248, "robotip": 248, "Or": [248, 257], "port_num": 248, "iperf3": 249, "server_ip": [249, 296], "1234": 249, "comms_test": 249, "comms_test_l4t": 249, "comms_out": 249, "pwm": 250, "dry": 250, "putput": 250, "gpio_exampl": 250, "pwm_control": 250, "gpio_control": 250, "pin_mod": 250, "gpio_pwm": 250, "mp4": 251, "signals_coreio_modem_plugin": 251, "plugin_file_nam": 251, "ip_where_plugin_will_run": 251, "port_the_plugin_will_monitor": 251, "tradit": [251, 272, 310, 313, 315], "weightless": [251, 313], "WILL": 251, "port_numb": [251, 313, 315], "robot_usernam": 251, "robot_password": 251, "save_file_plugin_servic": 251, "full_path_to_a_fil": 251, "data_acquisition_exampl": 251, "rfc": 251, "3339": 251, "yyyi": 251, "ddthh": 251, "sz": 251, "year": 251, "zulu": 251, "timezon": [251, 298], "data_acquisition_download": 251, "09": [251, 298], "01t00": 251, "0z": 251, "04t00": 251, "signals_lt": 252, "signals_lte_arm": 252, "20201030": 254, "20201031": 254, "20201031_115000": 254, "20201031_115950": 254, "hhmmss": 254, "disable_ir_emiss": 256, "engag": [257, 268, 269, 311], "disengag": 257, "dock_my_robot": 257, "purpl": [268, 311], "edit_autowalk": [268, 309], "walk_directori": [268, 311], "walk_filenam": [268, 311], "qpa": 269, "xcb": 269, "eglf": 269, "linuxfb": 269, "minimalegl": 269, "offscreen": 269, "wayland": 269, "egl": 269, "xcomposit": 269, "glx": 269, "webgl": 269, "tarbal": 270, "stem": 270, "artifact": 270, "pushd": 270, "post_docking_callback": [270, 307], "docking_callback": [270, 307], "popd": 270, "aws_docking_callback": [270, 307], "amd64": 270, "image1": 270, "image2": 270, "extra_imag": 270, "images_tarbal": 270, "file1": 270, "file2": 270, "aws_docking_callback_arm64": [270, 307], "protocolerror": 270, "permissionerror": 270, "connectionerror": 270, "typeerror": 270, "httpconnect": 270, "dockerexcept": 270, "gpasswd": 270, "superus": 270, "IT": 270, "acoust": 271, "extract_images_from_walk": 271, "input_fil": 271, "path_to_walk_fil": 271, "directory_for_output": 271, "cool": 272, "BY": 272, "basic_fan_command": 272, "heavili": 272, "fan_control_mission_servic": 272, "endpoint_ip": [272, 310, 314], "aprilrobot": 273, "ld_library_path": 273, "cpython": 273, "36m": 273, "x86_64": 273, "_standup": 273, "_movement_on": 273, "_max_x_spe": 273, "_max_y_spe": 273, "dx": 274, "get_depth_plus_visual_imag": 275, "fisheye_imag": 276, "image_view": 276, "payload_tform_gp": 281, "payload_guid_and_secret_fil": 281, "gps_host": 281, "144": 281, "gps_port": 281, "5018": 281, "gps_servic": 281, "trimble_sps986": 281, "gps_listener_image_arm64": 281, "trimble_listen": 281, "create_fault_cli": 281, "create_stream": 281, "calculate_body_tform_gp": 281, "spatial": 281, "tempor": 281, "realiz": 281, "qt5": 282, "mplbackend": 282, "qt5agg": 282, "importerror": 282, "dll": 282, "_cext": 282, "msvc": 282, "w1": 282, "w2": 282, "w3": 282, "triangl": 282, "twin": [282, 284], "_lease_cli": 282, "fight": 282, "_lease_wallet": 282, "map_processing_cli": 282, "load_graph_and_snapshot": 282, "input_map": 282, "upload_graph_and_snapshot": 282, "optimize_anchor": 282, "opt_info": 282, "map_processing_pb2": 282, "object_hint": 282, "fiducial_id": 282, "get_fiducial_origin": 282, "house_plan": 282, "ruler": 282, "deg2rad": 282, "fiducial_rot": 282, "sin": 282, "rot_matrix": 282, "world_tform_fiduci": 282, "fiducial_posit": 282, "pixels_per_met": 282, "optimized_anchor": 282, "wp": 282, "anchoring_respons": 282, "closet": 282, "bedroom": 282, "blueprint_example_optim": 282, "optimized_anchoring_view": 282, "unoptim": 282, "319": 282, "passiv": 283, "path_to_downloaded_map": 283, "subfold": 283, "downloaded_graph": 283, "snapshot_": 283, "edge_snapshot_": 283, "my_graph_fold": 283, "sight": [283, 295, 309], "latitude_degre": 283, "longitude_degre": 283, "yaw_around_up_radian": 283, "zigzag": 283, "filli": 283, "8ien": 283, "xz8c9pl5tdztqyw": 283, "unambigu": 283, "zf": 283, "hammi": 283, "skink": 283, "ikqi6hgq": 283, "fcbwxjy6mmjqg": 283, "unread": 283, "beagl": 283, "vqfl7nrkvhhpouoo": 283, "ffig": 283, "ub": 283, "prerequisit": [284, 297, 307], "xyz32f": 284, "extract_point_cloud": 284, "path_to_your_map_directori": [284, 285, 286], "meshlab": 284, "ceil": 284, "intention": 284, "view_gp": 285, "8080": 285, "load_map": 285, "get_raw_gps_data": 285, "current_waypoint_snapshot": 285, "get_annotated_gps_data": 285, "current_waypoint": 285, "plot_gps_web_docu": 285, "raw_gps_data_arrai": 285, "annotated_gps_data_arrai": 285, "leaflet": 285, "vtk": [286, 330], "toolkit": 286, "get_gripper_camera_param": 287, "parameter_flag": 287, "set_focus_region": 287, "strike": 288, "rechabl": 289, "noarm_squat": 290, "wiggle_arm": 290, "duration_in_second": 291, "log_spot_data": 292, "sim": 293, "apn": 293, "fivegsetup": 293, "panda": 293, "pandawireless": 293, "metrics_over_coreio": 293, "metric_over_coreio": 293, "metricfilegroup": 293, "metricmanag": 293, "savin": 293, "carrier": 293, "cellular": 293, "2fa": 293, "autent": 293, "build_miss": 294, "path_to_mission_fil": 294, "directory_to_save_miss": 295, "spacebar": 295, "qe": [295, 309, 331], "offload": [296, 316], "neural": [296, 316], "cnn": [296, 316], "identify_object": 296, "retinanet": [296, 297], "simple_alert_serv": 296, "requirements_serv": 296, "requirements_cli": 296, "g3doc": [296, 316], "tf1_detection_zoo": [296, 316], "frozen_inference_graph": [296, 316, 320, 322], "pb": [296, 316, 320, 322], "faster_rcnn_inception_v2_coco": [296, 316, 320, 322], "orang": [296, 316], "server_alert_model_alert_output": 296, "identify_object_without_robot": 296, "obj1_label_person": 296, "1146": 296, "ncb_server": [296, 316], "model_directori": [296, 316], "ncb_client": 296, "start_serv": 297, "retinanet_serv": 297, "fire_extinguisher_serv": 297, "fire_ext_detector_imag": 297, "fire_extinguisher_detector": 297, "ext": 297, "mustcontain": 298, "openweathermap": [298, 304], "repons": 298, "citi": [298, 304], "4941935": 298, "lexington": 298, "lon": 298, "2409": 298, "lat": 298, "4116": 298, "countri": [298, 304], "14400": 298, "sun": 298, "27t09": 298, "28t00": 298, "295": 298, "293": 298, "297": 298, "feels_lik": 298, "296": 298, "81": 298, "1010": 298, "hpa": 298, "wind": 298, "breez": 298, "gust": 298, "240": 298, "wsw": 298, "southwest": 298, "overcast": 298, "3219": 298, "precipit": 298, "rain": 298, "501": 298, "moder": 298, "10d": 298, "lastupd": 298, "27t15": 298, "31": 298, "appid": 298, "vulner": [299, 300, 301, 302, 303, 304, 305], "ca": [299, 300, 301, 302, 303, 304, 305], "export_run_arch": 299, "orbit_ip": [299, 300, 301, 302, 303, 304, 305], "bosdyn_orbit_client_api_token": [299, 300, 301, 302, 303, 304, 305], "hello_orbit": 300, "runs_respons": 301, "schedule_miss": 302, "send_robot_back_to_dock": 303, "forecast": 304, "pyowm": 304, "toggle_mission_based_on_weath": 304, "owmapikei": 304, "api_kei": 304, "hello_webhook": 305, "writeabl": [306, 314], "attach_detach_payload": 306, "aws_access_key_id": 307, "aws_secret_access_kei": 307, "daq_upload_docking_callback": 307, "your_bucket": 307, "spot_ip": 307, "path_to_key_json": 307, "test_fold": 307, "container_id": 307, "docking_callback_arm64": 307, "cast_single_rai": 308, "514": 308, "5136719346046448": 308, "5138996896169675": 308, "016": 308, "516": 308, "5157292485237122": 308, "stitch_front_imag": [309, 324], "record_autowalk": 309, "602": 310, "helloworldservic": 310, "remote_mission_cli": 310, "338": 310, "339": 310, "power_off_mission_servic": 310, "greet": 310, "everyon": 310, "your_ip": 310, "open_port": 310, "577": 310, "585": 310, "695": 310, "009": 310, "inde": 310, "custom_mission_fil": 311, "resetsafetystoprequest": 312, "reset_primary_safety_stop": 312, "reset_redundant_safety_stop": 312, "z1": 313, "test_driv": 313, "wirelessli": 313, "osc": 313, "phone": 313, "thetayl00196843": 313, "wifi_ssid": 313, "wifi_password": 313, "_setaccesspoint": 313, "static_ip": 313, "subnet_mask": 313, "default_gatewai": 313, "cl": 313, "ricoh_theta_image_servic": 313, "theta_ssid": 313, "drain": 313, "quicker": 313, "takepictur": 313, "remind": 313, "wil": 314, "grpc_tool": 314, "grpc_python_out": 314, "announce_servic": 314, "self_register_payload": 314, "name_of_payload": 314, "payload_descript": 314, "endpoint_port": 314, "self_register_servic": 314, "announce_cli": 314, "string_messag": 314, "initialize_payload": 314, "payload_ip": 315, "computer_ip": [315, 317], "camera1": 315, "camera2": 315, "videoxxx": 315, "decompress": 315, "divx": 315, "mjpg": 315, "videoio": 315, "cap_v4l": 315, "cpp": 315, "998": 315, "tryioctl": 315, "v4l2": 315, "video1": 315, "chees": 315, "requirements_server_cpu": 316, "requirements_server_gpu": 316, "daq_plugin_custom_param": 317, "autonomous_robot_en": 319, "get_colormap": 319, "set_colormap": 319, "set_reticl": 319, "store_retriev": 319, "image_uuid": 319, "f0e835c2": 319, "54d4": 319, "11ea": 319, "9365": 319, "00044be03a91": 319, "seq": 319, "xarg": 319, "set_posit": 319, "get_posit": 319, "set_focu": 319, "auto_focu": 319, "manual_focu": 319, "get_focu": 319, "ice_set": 319, "set_ic": 319, "bitrat": 319, "2mbp": 319, "aiortc": 319, "stream_qual": 319, "2000000": 319, "spotcam_video": 319, "aquis": 319, "acquis": 319, "sport": 320, "mobilenet": 320, "rcnn": 320, "incept": 320, "pip3": 320, "spot_detect_and_follow": 320, "path_to_python3_execut": 320, "spot_tensorflow_detector": [320, 322], "path_to_pb": [320, 322], "faster_rcnn_inception_v2_coco_2018_01_28": 320, "tensorflow_object_detect": 320, "x64": 320, "shine": 321, "crude": 321, "spot_light": 321, "brightness_threshold": 321, "comma": 322, "raw_images_queu": 322, "processed_images_queu": 322, "network_delai": 322, "processing_delai": 322, "display_delai": 322, "total_delai": 322, "display_skip": 322, "processing_skip": 322, "stance_in_plac": 323, "payload_nam": 325, "your_new_image_servic": 325, "your_new_data_acquisition_plugin": 325, "terminologi": 327, "csq": 327, "user_nogo_region": 328, "theme": 329, "prism": 330, "world_object_with_image_coordin": 333, "xboxdrv": 334, "xbox360": 334, "xinput": 334}, "objects": {"bosdyn.bddf": [[188, 0, 0, "-", "base_data_reader"], [189, 0, 0, "-", "block_writer"], [190, 0, 0, "-", "bosdyn"], [191, 0, 0, "-", "common"], [192, 0, 0, "-", "data_reader"], [193, 0, 0, "-", "data_writer"], [194, 0, 0, "-", "file_indexer"], [195, 0, 0, "-", "grpc_proto_reader"], [196, 0, 0, "-", "grpc_reader"], [197, 0, 0, "-", "grpc_service_reader"], [198, 0, 0, "-", "grpc_service_writer"], [199, 0, 0, "-", "message_reader"], [200, 0, 0, "-", "pod_series_reader"], [201, 0, 0, "-", "pod_series_writer"], [202, 0, 0, "-", "protobuf_channel_reader"], [203, 0, 0, "-", "protobuf_reader"], [204, 0, 0, "-", "protobuf_series_writer"], [205, 0, 0, "-", "stream_data_reader"]], "bosdyn.bddf.base_data_reader": [[188, 1, 1, "", "BaseDataReader"]], "bosdyn.bddf.base_data_reader.BaseDataReader": [[188, 2, 1, "", "annotations"], [188, 2, 1, "", "checksum"], [188, 2, 1, "", "file_descriptor"], [188, 2, 1, "", "file_index"], [188, 2, 1, "", "filename"], [188, 2, 1, "", "read_checksum"], [188, 3, 1, "", "series_spec_to_index"], [188, 2, 1, "", "version"]], "bosdyn.bddf.block_writer": [[189, 1, 1, "", "BlockWriter"]], "bosdyn.bddf.block_writer.BlockWriter": [[189, 3, 1, "", "close"], [189, 2, 1, "", "closed"], [189, 3, 1, "", "tell"], [189, 3, 1, "", "write_data_block"], [189, 3, 1, "", "write_descriptor_block"], [189, 3, 1, "", "write_file_end"], [189, 3, 1, "", "write_header"]], "bosdyn.bddf.bosdyn": [[190, 1, 1, "", "GrpcRequests"], [190, 1, 1, "", "GrpcResponses"], [190, 1, 1, "", "MessageChannel"], [190, 1, 1, "", "TypedMessageChannel"]], "bosdyn.bddf.bosdyn.GrpcRequests": [[190, 4, 1, "", "KEYS"], [190, 4, 1, "", "MESSAGE_TYPE"], [190, 4, 1, "", "SERIES_TYPE"], [190, 4, 1, "", "SERVICE_NAME"]], "bosdyn.bddf.bosdyn.GrpcResponses": [[190, 4, 1, "", "KEYS"], [190, 4, 1, "", "MESSAGE_TYPE"], [190, 4, 1, "", "SERIES_TYPE"], [190, 4, 1, "", "SERVICE_NAME"]], "bosdyn.bddf.bosdyn.MessageChannel": [[190, 4, 1, "", "CHANNEL"], [190, 4, 1, "", "KEYS"], [190, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.bosdyn.TypedMessageChannel": [[190, 4, 1, "", "CHANNEL"], [190, 4, 1, "", "KEYS"], [190, 4, 1, "", "MESSAGE_TYPE"], [190, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.common": [[191, 5, 1, "", "AddSeriesError"], [191, 5, 1, "", "ChecksumError"], [191, 5, 1, "", "DataError"], [191, 5, 1, "", "DataFormatError"], [191, 5, 1, "", "ParseError"], [191, 1, 1, "", "SeriesIdentifier"], [191, 5, 1, "", "SeriesNotUniqueError"]], "bosdyn.bddf.common.SeriesIdentifier": [[191, 4, 1, "", "KEYS"], [191, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.data_reader": [[192, 1, 1, "", "DataReader"]], "bosdyn.bddf.data_reader.DataReader": [[192, 3, 1, "", "num_data_blocks"], [192, 3, 1, "", "read"], [192, 3, 1, "", "series_block_index"], [192, 3, 1, "", "series_descriptor"], [192, 3, 1, "", "total_bytes"]], "bosdyn.bddf.data_writer": [[193, 1, 1, "", "DataWriter"]], "bosdyn.bddf.data_writer.DataWriter": [[193, 3, 1, "", "add_message_series"], [193, 3, 1, "", "add_pod_series"], [193, 3, 1, "", "add_series"], [193, 2, 1, "", "file_index"], [193, 3, 1, "", "run_on_close"], [193, 3, 1, "", "write_data"]], "bosdyn.bddf.file_indexer": [[194, 1, 1, "", "FileIndexer"]], "bosdyn.bddf.file_indexer.FileIndexer": [[194, 3, 1, "", "add_series"], [194, 3, 1, "", "add_series_descriptor"], [194, 2, 1, "", "descriptor_index"], [194, 2, 1, "", "file_index"], [194, 3, 1, "", "index_data_block"], [194, 3, 1, "", "make_data_descriptor"], [194, 2, 1, "", "series_block_indexes"], [194, 3, 1, "", "series_descriptor"], [194, 3, 1, "", "series_identifier_to_hash"], [194, 3, 1, "", "write_index"]], "bosdyn.bddf.grpc_proto_reader": [[195, 1, 1, "", "GrpcProtoReader"]], "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader": [[195, 3, 1, "", "get_message"], [195, 2, 1, "", "num_messages"]], "bosdyn.bddf.grpc_reader": [[196, 1, 1, "", "GrpcReader"]], "bosdyn.bddf.grpc_reader.GrpcReader": [[196, 2, 1, "", "data_reader"], [196, 3, 1, "", "get_message"], [196, 3, 1, "", "get_proto_reader"]], "bosdyn.bddf.grpc_service_reader": [[197, 1, 1, "", "GrpcServiceReader"]], "bosdyn.bddf.grpc_service_reader.GrpcServiceReader": [[197, 3, 1, "", "add_proto_reader"], [197, 2, 1, "", "data_reader"], [197, 3, 1, "", "get_proto_reader"]], "bosdyn.bddf.grpc_service_writer": [[198, 1, 1, "", "GrpcServiceWriter"]], "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter": [[198, 3, 1, "", "log_request"], [198, 3, 1, "", "log_response"]], "bosdyn.bddf.message_reader": [[199, 1, 1, "", "MessageReader"]], "bosdyn.bddf.message_reader.MessageReader": [[199, 2, 1, "", "channel_name_to_series_decriptor"], [199, 2, 1, "", "channel_name_to_series_descriptor"], [199, 2, 1, "", "data_reader"], [199, 3, 1, "", "get_blob"], [199, 3, 1, "", "series_index"], [199, 3, 1, "", "series_index_to_descriptor"]], "bosdyn.bddf.pod_series_reader": [[200, 1, 1, "", "PodSeriesReader"]], "bosdyn.bddf.pod_series_reader.PodSeriesReader": [[200, 2, 1, "", "num_data_blocks"], [200, 2, 1, "", "pod_type"], [200, 3, 1, "", "read_samples"], [200, 2, 1, "", "series_descriptor"]], "bosdyn.bddf.pod_series_writer": [[201, 1, 1, "", "PodSeriesWriter"]], "bosdyn.bddf.pod_series_writer.PodSeriesWriter": [[201, 3, 1, "", "finish_block"], [201, 2, 1, "", "series_spec"], [201, 2, 1, "", "series_type"], [201, 3, 1, "", "write"]], "bosdyn.bddf.protobuf_channel_reader": [[202, 1, 1, "", "ProtobufChannelReader"]], "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader": [[202, 1, 1, "", "Iterator"], [202, 3, 1, "", "get_message"], [202, 2, 1, "", "num_messages"], [202, 2, 1, "", "series_descriptor"]], "bosdyn.bddf.protobuf_reader": [[203, 1, 1, "", "ProtobufReader"]], "bosdyn.bddf.protobuf_reader.ProtobufReader": [[203, 3, 1, "", "get_message"]], "bosdyn.bddf.protobuf_series_writer": [[204, 1, 1, "", "ProtobufSeriesWriter"]], "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter": [[204, 2, 1, "", "series_spec"], [204, 2, 1, "", "series_type"], [204, 3, 1, "", "write"]], "bosdyn.bddf.stream_data_reader": [[205, 1, 1, "", "StreamDataReader"]], "bosdyn.bddf.stream_data_reader.StreamDataReader": [[205, 2, 1, "", "eof"], [205, 2, 1, "", "read_checksum"], [205, 3, 1, "", "read_data_block"], [205, 3, 1, "", "read_next_block"], [205, 3, 1, "", "series_block_index"], [205, 2, 1, "", "series_block_indexes"], [205, 3, 1, "", "series_descriptor"], [205, 2, 1, "", "stream_file_index"]], "bosdyn.choreography.client": [[94, 0, 0, "-", "animation_file_conversion_helpers"], [95, 0, 0, "-", "animation_file_to_proto"], [96, 0, 0, "-", "choreography"]], "bosdyn.choreography.client.animation_file_conversion_helpers": [[94, 6, 1, "", "arm_joints_handler"], [94, 6, 1, "", "arm_playback_option"], [94, 6, 1, "", "arm_prohibited_option"], [94, 6, 1, "", "arm_required_option"], [94, 6, 1, "", "assume_zero_roll_and_pitch_option"], [94, 6, 1, "", "body_euler_rpy_angles_handler"], [94, 6, 1, "", "body_pitch_handler"], [94, 6, 1, "", "body_pos_handler"], [94, 6, 1, "", "body_quat_w_handler"], [94, 6, 1, "", "body_quat_x_handler"], [94, 6, 1, "", "body_quat_y_handler"], [94, 6, 1, "", "body_quat_z_handler"], [94, 6, 1, "", "body_quaternion_wxyz_handler"], [94, 6, 1, "", "body_quaternion_xyzw_handler"], [94, 6, 1, "", "body_roll_handler"], [94, 6, 1, "", "body_x_handler"], [94, 6, 1, "", "body_y_handler"], [94, 6, 1, "", "body_yaw_handler"], [94, 6, 1, "", "body_z_handler"], [94, 6, 1, "", "bpm_option"], [94, 6, 1, "", "com_pos_handler"], [94, 6, 1, "", "com_x_handler"], [94, 6, 1, "", "com_y_handler"], [94, 6, 1, "", "com_z_handler"], [94, 6, 1, "", "contact_handler"], [94, 6, 1, "", "controls_option"], [94, 6, 1, "", "custom_gait_cycle_option"], [94, 6, 1, "", "description_option"], [94, 6, 1, "", "display_rgb_option"], [94, 6, 1, "", "el0_handler"], [94, 6, 1, "", "el1_handler"], [94, 6, 1, "", "extendable_option"], [94, 6, 1, "", "fl_angles_handler"], [94, 6, 1, "", "fl_contact_handler"], [94, 6, 1, "", "fl_hx_handler"], [94, 6, 1, "", "fl_hy_handler"], [94, 6, 1, "", "fl_kn_handler"], [94, 6, 1, "", "fl_pos_handler"], [94, 6, 1, "", "fl_x_handler"], [94, 6, 1, "", "fl_y_handler"], [94, 6, 1, "", "fl_z_handler"], [94, 6, 1, "", "foot_pos_handler"], [94, 6, 1, "", "fr_angles_handler"], [94, 6, 1, "", "fr_contact_handler"], [94, 6, 1, "", "fr_hx_handler"], [94, 6, 1, "", "fr_hy_handler"], [94, 6, 1, "", "fr_kn_handler"], [94, 6, 1, "", "fr_pos_handler"], [94, 6, 1, "", "fr_x_handler"], [94, 6, 1, "", "fr_y_handler"], [94, 6, 1, "", "fr_z_handler"], [94, 6, 1, "", "frequency_option"], [94, 6, 1, "", "gripper_handler"], [94, 6, 1, "", "hand_euler_rpy_angles_handler"], [94, 6, 1, "", "hand_pitch_handler"], [94, 6, 1, "", "hand_pos_handler"], [94, 6, 1, "", "hand_quat_w_handler"], [94, 6, 1, "", "hand_quat_x_handler"], [94, 6, 1, "", "hand_quat_y_handler"], [94, 6, 1, "", "hand_quat_z_handler"], [94, 6, 1, "", "hand_quaternion_wxyz_handler"], [94, 6, 1, "", "hand_quaternion_xyzw_handler"], [94, 6, 1, "", "hand_roll_handler"], [94, 6, 1, "", "hand_x_handler"], [94, 6, 1, "", "hand_y_handler"], [94, 6, 1, "", "hand_yaw_handler"], [94, 6, 1, "", "hand_z_handler"], [94, 6, 1, "", "hl_angles_handler"], [94, 6, 1, "", "hl_contact_handler"], [94, 6, 1, "", "hl_hx_handler"], [94, 6, 1, "", "hl_hy_handler"], [94, 6, 1, "", "hl_kn_handler"], [94, 6, 1, "", "hl_pos_handler"], [94, 6, 1, "", "hl_x_handler"], [94, 6, 1, "", "hl_y_handler"], [94, 6, 1, "", "hl_z_handler"], [94, 6, 1, "", "hr_angles_handler"], [94, 6, 1, "", "hr_contact_handler"], [94, 6, 1, "", "hr_hx_handler"], [94, 6, 1, "", "hr_hy_handler"], [94, 6, 1, "", "hr_kn_handler"], [94, 6, 1, "", "hr_pos_handler"], [94, 6, 1, "", "hr_x_handler"], [94, 6, 1, "", "hr_y_handler"], [94, 6, 1, "", "hr_z_handler"], [94, 6, 1, "", "leg_angles_handler"], [94, 6, 1, "", "neutral_start_option"], [94, 6, 1, "", "no_looping_option"], [94, 6, 1, "", "precise_steps_option"], [94, 6, 1, "", "precise_timing_option"], [94, 6, 1, "", "retime_to_integer_slices_option"], [94, 6, 1, "", "sh0_handler"], [94, 6, 1, "", "sh1_handler"], [94, 6, 1, "", "start_time_handler"], [94, 6, 1, "", "starts_sitting_option"], [94, 6, 1, "", "timing_adjustability_option"], [94, 6, 1, "", "track_hand_rt_body_option"], [94, 6, 1, "", "track_hand_rt_feet_option"], [94, 6, 1, "", "track_swing_trajectories_option"], [94, 6, 1, "", "truncatable_option"], [94, 6, 1, "", "wr0_handler"], [94, 6, 1, "", "wr1_handler"]], "bosdyn.choreography.client.animation_file_to_proto": [[95, 1, 1, "", "Animation"], [95, 5, 1, "", "AnimationFileFormatError"], [95, 6, 1, "", "convert_animation_file_to_proto"], [95, 6, 1, "", "handle_nested_double_value_params"], [95, 6, 1, "", "main"], [95, 6, 1, "", "read_and_find_animation_params"], [95, 6, 1, "", "read_animation_params"], [95, 6, 1, "", "set_proto"], [95, 6, 1, "", "write_animation_to_dest"]], "bosdyn.choreography.client.animation_file_to_proto.Animation": [[95, 3, 1, "", "create_move_info_proto"]], "bosdyn.choreography.client.choreography": [[96, 1, 1, "", "AnimationUploadHelper"], [96, 5, 1, "", "AnimationValidationFailedError"], [96, 1, 1, "", "ChoreographyClient"], [96, 5, 1, "", "IncompleteData"], [96, 5, 1, "", "InvalidUploadedChoreographyError"], [96, 5, 1, "", "LeaseError"], [96, 5, 1, "", "NoRecordedInformation"], [96, 5, 1, "", "RecordingBufferFull"], [96, 5, 1, "", "RobotCommandIssuesError"], [96, 5, 1, "", "UnknownRecordingSessionId"], [96, 6, 1, "", "load_choreography_sequence_from_binary_file"], [96, 6, 1, "", "load_choreography_sequence_from_txt_file"], [96, 6, 1, "", "save_choreography_sequence_to_file"]], "bosdyn.choreography.client.choreography.AnimationUploadHelper": [[96, 4, 1, "", "ANIMATION_MOVE_PREFIX"], [96, 3, 1, "", "generate_animation_id"], [96, 3, 1, "", "initialize"], [96, 3, 1, "", "upload_animated_move"]], "bosdyn.choreography.client.choreography.ChoreographyClient": [[96, 3, 1, "", "build_choreography_command_request"], [96, 3, 1, "", "build_choreography_time_adjust_request"], [96, 3, 1, "", "build_execute_choreography_request"], [96, 3, 1, "", "build_modify_choreography_info_request"], [96, 3, 1, "", "build_save_sequence_request"], [96, 3, 1, "", "build_start_recording_state_request"], [96, 3, 1, "", "choreography_command"], [96, 3, 1, "", "choreography_command_async"], [96, 3, 1, "", "choreography_log_to_animation_file"], [96, 3, 1, "", "choreography_time_adjust"], [96, 3, 1, "", "choreography_time_adjust_async"], [96, 3, 1, "", "clear_all_sequence_files"], [96, 3, 1, "", "clear_all_sequence_files_async"], [96, 4, 1, "", "default_service_name"], [96, 3, 1, "", "delete_sequence"], [96, 3, 1, "", "delete_sequence_async"], [96, 3, 1, "", "download_robot_state_log"], [96, 3, 1, "", "execute_choreography"], [96, 3, 1, "", "execute_choreography_async"], [96, 3, 1, "", "get_animation"], [96, 3, 1, "", "get_animation_async"], [96, 3, 1, "", "get_choreography_sequence"], [96, 3, 1, "", "get_choreography_sequence_async"], [96, 3, 1, "", "get_choreography_status"], [96, 3, 1, "", "get_choreography_status_async"], [96, 4, 1, "", "license_name"], [96, 3, 1, "", "list_all_moves"], [96, 3, 1, "", "list_all_moves_async"], [96, 3, 1, "", "list_all_sequences"], [96, 3, 1, "", "list_all_sequences_async"], [96, 3, 1, "", "modify_choreography_info"], [96, 3, 1, "", "modify_choreography_info_async"], [96, 3, 1, "", "save_sequence"], [96, 3, 1, "", "save_sequence_async"], [96, 4, 1, "", "service_type"], [96, 3, 1, "", "start_recording_state"], [96, 3, 1, "", "start_recording_state_async"], [96, 3, 1, "", "stop_recording_state"], [96, 3, 1, "", "stop_recording_state_async"], [96, 2, 1, "", "timesync_endpoint"], [96, 3, 1, "", "update_from"], [96, 3, 1, "", "upload_animated_move"], [96, 3, 1, "", "upload_animated_move_async"], [96, 3, 1, "", "upload_choreography"], [96, 3, 1, "", "upload_choreography_async"]], "bosdyn.client": [[98, 0, 0, "-", "area_callback"], [99, 0, 0, "-", "area_callback_region_handler_base"], [100, 0, 0, "-", "area_callback_service_runner"], [101, 0, 0, "-", "area_callback_service_servicer"], [102, 0, 0, "-", "area_callback_service_utils"], [103, 0, 0, "-", "arm_surface_contact"], [104, 0, 0, "-", "async_tasks"], [105, 0, 0, "-", "auth"], [106, 0, 0, "-", "auto_return"], [107, 0, 0, "-", "autowalk"], [108, 0, 0, "-", "bddf"], [109, 0, 0, "-", "bddf_download"], [110, 0, 0, "-", "channel"], [111, 0, 0, "-", "command_line"], [112, 0, 0, "-", "common"], [113, 0, 0, "-", "data_acquisition"], [114, 0, 0, "-", "data_acquisition_helpers"], [115, 0, 0, "-", "data_acquisition_plugin"], [116, 0, 0, "-", "data_acquisition_plugin_service"], [117, 0, 0, "-", "data_acquisition_store"], [118, 0, 0, "-", "data_buffer"], [119, 0, 0, "-", "data_chunk"], [120, 0, 0, "-", "data_service"], [121, 0, 0, "-", "directory"], [122, 0, 0, "-", "directory_registration"], [123, 0, 0, "-", "docking"], [124, 0, 0, "-", "door"], [125, 0, 0, "-", "estop"], [126, 0, 0, "-", "exceptions"], [127, 0, 0, "-", "fault"], [128, 0, 0, "-", "frame_helpers"], [134, 0, 0, "-", "graph_nav"], [135, 0, 0, "-", "gripper_camera_param"], [136, 0, 0, "-", "image"], [137, 0, 0, "-", "image_service_helpers"], [138, 0, 0, "-", "inverse_kinematics"], [139, 0, 0, "-", "ir_enable_disable"], [140, 0, 0, "-", "keepalive"], [141, 0, 0, "-", "lease"], [142, 0, 0, "-", "lease_resource_hierarchy"], [143, 0, 0, "-", "lease_validator"], [144, 0, 0, "-", "license"], [145, 0, 0, "-", "local_grid"], [146, 0, 0, "-", "log_status"], [147, 0, 0, "-", "manipulation_api_client"], [148, 0, 0, "-", "map_processing"], [149, 0, 0, "-", "math_helpers"], [150, 0, 0, "-", "metrics_logging"], [151, 0, 0, "-", "network_compute_bridge_client"], [152, 0, 0, "-", "payload"], [153, 0, 0, "-", "payload_registration"], [154, 0, 0, "-", "point_cloud"], [155, 0, 0, "-", "power"], [156, 0, 0, "-", "processors"], [157, 0, 0, "-", "ray_cast"], [158, 0, 0, "-", "recording"], [159, 0, 0, "-", "robot"], [160, 0, 0, "-", "robot_command"], [161, 0, 0, "-", "robot_id"], [162, 0, 0, "-", "robot_state"], [163, 0, 0, "-", "sdk"], [164, 0, 0, "-", "server_util"], [165, 0, 0, "-", "service_customization_helpers"], [166, 0, 0, "-", "signals_helpers"], [179, 0, 0, "-", "spot_check"], [180, 0, 0, "-", "time_sync"], [181, 0, 0, "-", "token_cache"], [182, 0, 0, "-", "token_manager"], [183, 0, 0, "-", "units_helpers"], [184, 0, 0, "-", "util"], [185, 0, 0, "-", "world_object"]], "bosdyn.client.area_callback": [[98, 1, 1, "", "AreaCallbackClient"], [98, 5, 1, "", "AreaCallbackResponseError"], [98, 5, 1, "", "ExpiredEndTimeError"], [98, 5, 1, "", "InvalidCommandIdError"], [98, 5, 1, "", "InvalidConfigError"], [98, 5, 1, "", "MissingLeaseResourcesError"], [98, 5, 1, "", "ShutdownCallbackFailedError"]], "bosdyn.client.area_callback.AreaCallbackClient": [[98, 3, 1, "", "area_callback_information"], [98, 3, 1, "", "begin_callback"], [98, 3, 1, "", "begin_control"], [98, 4, 1, "", "default_service_name"], [98, 3, 1, "", "end_callback"], [98, 4, 1, "", "service_type"], [98, 3, 1, "", "update_callback"]], "bosdyn.client.area_callback_region_handler_base": [[99, 1, 1, "", "AreaCallbackRegionHandlerBase"], [99, 5, 1, "", "CallbackEnded"], [99, 5, 1, "", "CallbackTimedOutError"], [99, 5, 1, "", "HandlerError"], [99, 5, 1, "", "IncorrectUsage"], [99, 5, 1, "", "PathBlocked"], [99, 1, 1, "", "RouteChangedResult"]], "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase": [[99, 2, 1, "", "area_callback_information"], [99, 3, 1, "", "begin"], [99, 3, 1, "", "block_until_arrived_at_end"], [99, 3, 1, "", "block_until_arrived_at_start"], [99, 3, 1, "", "block_until_control"], [99, 3, 1, "", "check"], [99, 2, 1, "", "config"], [99, 3, 1, "", "continue_past_end"], [99, 3, 1, "", "continue_past_start"], [99, 3, 1, "", "control_at_end"], [99, 3, 1, "", "control_at_start"], [99, 3, 1, "", "end"], [99, 3, 1, "", "has_control"], [99, 3, 1, "", "internal_begin_complete"], [99, 3, 1, "", "internal_give_control"], [99, 3, 1, "", "internal_run_wrapper"], [99, 3, 1, "", "internal_set_end_time"], [99, 3, 1, "", "internal_set_stage"], [99, 3, 1, "", "route_changed"], [99, 3, 1, "", "run"], [99, 3, 1, "", "safe_sleep"], [99, 3, 1, "", "set_complete"], [99, 3, 1, "", "set_localization_at_end"], [99, 2, 1, "", "stage"], [99, 3, 1, "", "stop_at_end"], [99, 3, 1, "", "stop_at_start"], [99, 2, 1, "", "update_response"], [99, 3, 1, "", "will_get_control"]], "bosdyn.client.area_callback_service_runner": [[100, 6, 1, "", "run_service"]], "bosdyn.client.area_callback_service_servicer": [[101, 1, 1, "", "AreaCallbackServiceServicer"]], "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer": [[101, 3, 1, "", "AreaCallbackInformation"], [101, 3, 1, "", "BeginCallback"], [101, 3, 1, "", "BeginControl"], [101, 3, 1, "", "EndCallback"], [101, 3, 1, "", "RouteChange"], [101, 4, 1, "", "SERVICE_TYPE"], [101, 3, 1, "", "Shutdown"], [101, 3, 1, "", "UpdateCallback"]], "bosdyn.client.area_callback_service_utils": [[102, 1, 1, "", "AreaCallbackServiceConfig"], [102, 6, 1, "", "handle_service_faults"]], "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig": [[102, 3, 1, "", "parse_params"]], "bosdyn.client.arm_surface_contact": [[103, 1, 1, "", "ArmSurfaceContactClient"]], "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient": [[103, 3, 1, "", "arm_surface_contact_command"], [103, 3, 1, "", "arm_surface_contact_command_async"], [103, 4, 1, "", "default_service_name"], [103, 4, 1, "", "service_type"], [103, 3, 1, "", "update_from"]], "bosdyn.client.async_tasks": [[104, 1, 1, "", "AsyncGRPCTask"], [104, 1, 1, "", "AsyncPeriodicGRPCTask"], [104, 1, 1, "", "AsyncPeriodicQuery"], [104, 1, 1, "", "AsyncTasks"]], "bosdyn.client.async_tasks.AsyncGRPCTask": [[104, 3, 1, "", "update"]], "bosdyn.client.async_tasks.AsyncPeriodicQuery": [[104, 2, 1, "", "proto"]], "bosdyn.client.async_tasks.AsyncTasks": [[104, 3, 1, "", "add_task"], [104, 3, 1, "", "update"]], "bosdyn.client.auth": [[105, 1, 1, "", "AuthClient"], [105, 5, 1, "", "AuthResponseError"], [105, 5, 1, "", "InvalidLoginError"], [105, 5, 1, "", "InvalidTokenError"], [105, 5, 1, "", "TemporarilyLockedOutError"]], "bosdyn.client.auth.AuthClient": [[105, 3, 1, "", "auth"], [105, 3, 1, "", "auth_async"], [105, 3, 1, "", "auth_with_token"], [105, 3, 1, "", "auth_with_token_async"], [105, 4, 1, "", "default_service_name"], [105, 4, 1, "", "service_type"]], "bosdyn.client.auto_return": [[106, 1, 1, "", "AutoReturnClient"], [106, 5, 1, "", "AutoReturnResponseError"], [106, 5, 1, "", "InvalidParameterError"], [106, 6, 1, "", "configure_error"], [106, 6, 1, "", "start_error"]], "bosdyn.client.auto_return.AutoReturnClient": [[106, 3, 1, "", "configure"], [106, 3, 1, "", "configure_async"], [106, 4, 1, "", "default_service_name"], [106, 3, 1, "", "get_configuration"], [106, 3, 1, "", "get_configuration_async"], [106, 4, 1, "", "service_type"], [106, 3, 1, "", "start"], [106, 3, 1, "", "start_async"]], "bosdyn.client.autowalk": [[107, 1, 1, "", "AutowalkClient"], [107, 5, 1, "", "AutowalkResponseError"], [107, 5, 1, "", "CompilationError"], [107, 5, 1, "", "ValidationError"]], "bosdyn.client.autowalk.AutowalkClient": [[107, 3, 1, "", "compile_autowalk"], [107, 4, 1, "", "default_service_name"], [107, 3, 1, "", "load_autowalk"], [107, 4, 1, "", "service_type"], [107, 3, 1, "", "update_from"]], "bosdyn.client.bddf_download": [[109, 6, 1, "", "download_data"], [109, 6, 1, "", "main"]], "bosdyn.client.channel": [[110, 1, 1, "", "RefreshingAccessTokenAuthMetadataPlugin"], [110, 6, 1, "", "create_insecure_channel"], [110, 6, 1, "", "create_secure_channel"], [110, 6, 1, "", "create_secure_channel_creds"], [110, 6, 1, "", "generate_channel_options"], [110, 6, 1, "", "translate_exception"]], "bosdyn.client.command_line": [[111, 1, 1, "", "BecomeEstopCommand"], [111, 1, 1, "", "Command"], [111, 1, 1, "", "DataAcquisitionCommand"], [111, 1, 1, "", "DataAcquisitionGetLiveDataCommand"], [111, 1, 1, "", "DataAcquisitionRequestCommand"], [111, 1, 1, "", "DataAcquisitionServiceCommand"], [111, 1, 1, "", "DataAcquisitionStatusCommand"], [111, 1, 1, "", "DataBufferCommands"], [111, 1, 1, "", "DataServiceCommands"], [111, 1, 1, "", "DirectoryCommands"], [111, 1, 1, "", "DirectoryGetCommand"], [111, 1, 1, "", "DirectoryListCommand"], [111, 1, 1, "", "DirectoryRegisterCommand"], [111, 1, 1, "", "DirectoryUnregisterCommand"], [111, 1, 1, "", "ExperimentLogCommand"], [111, 1, 1, "", "FaultCommands"], [111, 1, 1, "", "FaultShowCommand"], [111, 1, 1, "", "FaultWatchCommand"], [111, 1, 1, "", "FullStateCommand"], [111, 1, 1, "", "GetActiveLogStatusesCommand"], [111, 1, 1, "", "GetDataBufferCommentsCommand"], [111, 1, 1, "", "GetDataBufferEventsCommand"], [111, 1, 1, "", "GetDataBufferEventsCommentsCommand"], [111, 1, 1, "", "GetDataBufferStatusCommand"], [111, 1, 1, "", "GetImageCommand"], [111, 1, 1, "", "GetLocalGridsCommand"], [111, 1, 1, "", "GetLogCommand"], [111, 1, 1, "", "HardwareConfigurationCommand"], [111, 1, 1, "", "HostComputerIPCommand"], [111, 1, 1, "", "ImageCommands"], [111, 1, 1, "", "LeaseCommands"], [111, 1, 1, "", "LeaseListCommand"], [111, 1, 1, "", "LicenseCommand"], [111, 1, 1, "", "ListImageSourcesCommand"], [111, 1, 1, "", "ListLocalGridTypesCommand"], [111, 1, 1, "", "LocalGridCommands"], [111, 1, 1, "", "LogStatusCommands"], [111, 1, 1, "", "MetricsCommand"], [111, 1, 1, "", "OperatorCommentCommand"], [111, 1, 1, "", "PayloadCommands"], [111, 1, 1, "", "PayloadListCommand"], [111, 1, 1, "", "PayloadRegisterCommand"], [111, 1, 1, "", "PowerCommand"], [111, 1, 1, "", "PowerPayloadsCommand"], [111, 1, 1, "", "PowerRobotCommand"], [111, 1, 1, "", "PowerWifiRadioCommand"], [111, 1, 1, "", "RobotIdCommand"], [111, 1, 1, "", "RobotModel"], [111, 1, 1, "", "RobotStateCommands"], [111, 1, 1, "", "StartContinuousExperimentLogCommand"], [111, 1, 1, "", "StartRetroLogCommand"], [111, 1, 1, "", "StartTimedExperimentLogCommand"], [111, 1, 1, "", "Subcommands"], [111, 1, 1, "", "TerminateLogCommand"], [111, 1, 1, "", "TextMsgCommand"], [111, 1, 1, "", "TimeSyncCommand"], [111, 6, 1, "", "main"]], "bosdyn.client.command_line.BecomeEstopCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.Command": [[111, 4, 1, "", "NAME"], [111, 4, 1, "", "NEED_AUTHENTICATION"], [111, 3, 1, "", "run"]], "bosdyn.client.command_line.DataAcquisitionCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionRequestCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionServiceCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionStatusCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataBufferCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataServiceCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryGetCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryListCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryRegisterCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryUnregisterCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ExperimentLogCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultShowCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultWatchCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FullStateCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetActiveLogStatusesCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetDataBufferCommentsCommand": [[111, 4, 1, "", "NAME"], [111, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferEventsCommand": [[111, 4, 1, "", "NAME"], [111, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand": [[111, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferStatusCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetImageCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetLocalGridsCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetLogCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.HardwareConfigurationCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.HostComputerIPCommand": [[111, 4, 1, "", "NAME"], [111, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.ImageCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LeaseCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LeaseListCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LicenseCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ListImageSourcesCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ListLocalGridTypesCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LocalGridCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LogStatusCommands": [[111, 4, 1, "", "NAME"], [111, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.MetricsCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.OperatorCommentCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadListCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadRegisterCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerPayloadsCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerRobotCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerWifiRadioCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.RobotIdCommand": [[111, 4, 1, "", "NAME"], [111, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.RobotModel": [[111, 4, 1, "", "NAME"], [111, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.RobotStateCommands": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.StartContinuousExperimentLogCommand": [[111, 4, 1, "", "NAME"], [111, 3, 1, "", "handle_keyboard_interruption"]], "bosdyn.client.command_line.StartRetroLogCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.StartTimedExperimentLogCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TerminateLogCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TextMsgCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TimeSyncCommand": [[111, 4, 1, "", "NAME"]], "bosdyn.client.common": [[112, 1, 1, "", "BaseClient"], [112, 1, 1, "", "FutureWrapper"], [112, 6, 1, "", "common_header_errors"], [112, 6, 1, "", "common_lease_errors"], [112, 6, 1, "", "custom_params_error"], [112, 6, 1, "", "error_factory"], [112, 6, 1, "", "error_pair"], [112, 6, 1, "", "get_self_ip"], [112, 6, 1, "", "handle_common_header_errors"], [112, 6, 1, "", "handle_custom_params_errors"], [112, 6, 1, "", "handle_lease_use_result_errors"], [112, 6, 1, "", "handle_unset_status_error"], [112, 6, 1, "", "maybe_raise"], [112, 6, 1, "", "print_response"], [112, 6, 1, "", "process_kwargs"], [112, 6, 1, "", "streaming_common_header_errors"], [112, 6, 1, "", "streaming_common_lease_errors"]], "bosdyn.client.common.BaseClient": [[112, 3, 1, "", "call"], [112, 3, 1, "", "call_async"], [112, 2, 1, "", "channel"], [112, 3, 1, "", "chunk_message"], [112, 3, 1, "", "handle_response"], [112, 3, 1, "", "handle_response_streaming"], [112, 3, 1, "", "request_trim_for_log"], [112, 3, 1, "", "response_trim_for_log"], [112, 3, 1, "", "update_from"], [112, 3, 1, "", "update_request_iterator"], [112, 3, 1, "", "update_response_iterator"]], "bosdyn.client.common.FutureWrapper": [[112, 3, 1, "", "add_done_callback"], [112, 3, 1, "", "cancel"], [112, 3, 1, "", "cancelled"], [112, 3, 1, "", "done"], [112, 3, 1, "", "exception"], [112, 3, 1, "", "result"], [112, 3, 1, "", "running"], [112, 3, 1, "", "traceback"]], "bosdyn.client.data_acquisition": [[113, 5, 1, "", "CancellationFailedError"], [113, 1, 1, "", "DataAcquisitionClient"], [113, 5, 1, "", "DataAcquisitionResponseError"], [113, 5, 1, "", "RequestIdDoesNotExistError"], [113, 5, 1, "", "UnknownCaptureTypeError"], [113, 6, 1, "", "acquire_data_error"], [113, 6, 1, "", "get_request_id"], [113, 6, 1, "", "metadata_to_proto"]], "bosdyn.client.data_acquisition.DataAcquisitionClient": [[113, 3, 1, "", "acquire_data"], [113, 3, 1, "", "acquire_data_async"], [113, 3, 1, "", "acquire_data_from_request"], [113, 3, 1, "", "acquire_data_from_request_async"], [113, 3, 1, "", "cancel_acquisition"], [113, 3, 1, "", "cancel_acquisition_async"], [113, 4, 1, "", "default_service_name"], [113, 3, 1, "", "get_live_data"], [113, 3, 1, "", "get_live_data_async"], [113, 3, 1, "", "get_service_info"], [113, 3, 1, "", "get_service_info_async"], [113, 3, 1, "", "get_status"], [113, 3, 1, "", "get_status_async"], [113, 3, 1, "", "make_acquire_data_request"], [113, 4, 1, "", "service_type"], [113, 3, 1, "", "update_from"]], "bosdyn.client.data_acquisition_helpers": [[114, 6, 1, "", "acquire_and_process_request"], [114, 6, 1, "", "cancel_acquisition_request"], [114, 6, 1, "", "clean_filename"], [114, 6, 1, "", "download_data_REST"], [114, 6, 1, "", "issue_acquire_data_request"], [114, 6, 1, "", "make_time_query_params"], [114, 6, 1, "", "make_time_query_params_from_group_name"]], "bosdyn.client.data_acquisition_plugin": [[115, 1, 1, "", "DataAcquisitionPluginClient"]], "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient": [[115, 3, 1, "", "acquire_plugin_data"], [115, 3, 1, "", "acquire_plugin_data_async"], [115, 3, 1, "", "cancel_acquisition"], [115, 3, 1, "", "cancel_acquisition_async"], [115, 4, 1, "", "default_service_name"], [115, 3, 1, "", "get_live_data"], [115, 3, 1, "", "get_live_data_async"], [115, 3, 1, "", "get_service_info"], [115, 3, 1, "", "get_service_info_async"], [115, 3, 1, "", "get_status"], [115, 3, 1, "", "get_status_async"], [115, 4, 1, "", "service_type"], [115, 3, 1, "", "update_from"]], "bosdyn.client.data_acquisition_plugin_service": [[116, 1, 1, "", "DataAcquisitionPluginService"], [116, 1, 1, "", "DataAcquisitionStoreHelper"], [116, 5, 1, "", "RequestCancelledError"], [116, 1, 1, "", "RequestManager"], [116, 1, 1, "", "RequestState"], [116, 6, 1, "", "make_error"]], "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService": [[116, 3, 1, "", "AcquirePluginData"], [116, 3, 1, "", "CancelAcquisition"], [116, 3, 1, "", "GetLiveData"], [116, 3, 1, "", "GetServiceInfo"], [116, 3, 1, "", "GetStatus"], [116, 4, 1, "", "acquire_response_fn"], [116, 4, 1, "", "capabilities"], [116, 4, 1, "", "data_collect_fn"], [116, 4, 1, "", "executor"], [116, 4, 1, "", "live_response_fn"], [116, 4, 1, "", "logger"], [116, 4, 1, "", "request_manager"], [116, 4, 1, "", "robot"], [116, 4, 1, "", "service_type"], [116, 4, 1, "", "store_client"], [116, 3, 1, "", "validate_params"]], "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper": [[116, 3, 1, "", "cancel_check"], [116, 4, 1, "", "cancel_interval"], [116, 4, 1, "", "data_id_future_pairs"], [116, 4, 1, "", "state"], [116, 4, 1, "", "store_client"], [116, 3, 1, "", "store_data"], [116, 3, 1, "", "store_image"], [116, 3, 1, "", "store_metadata"], [116, 3, 1, "", "wait_for_stores_complete"]], "bosdyn.client.data_acquisition_plugin_service.RequestManager": [[116, 3, 1, "", "add_request"], [116, 3, 1, "", "cleanup_requests"], [116, 3, 1, "", "get_request_state"], [116, 3, 1, "", "get_status_proto"], [116, 3, 1, "", "mark_request_cancelled"], [116, 3, 1, "", "mark_request_finished"]], "bosdyn.client.data_acquisition_plugin_service.RequestState": [[116, 3, 1, "", "add_errors"], [116, 3, 1, "", "add_saved"], [116, 3, 1, "", "cancel_check"], [116, 3, 1, "", "has_data_errors"], [116, 3, 1, "", "is_cancelled"], [116, 4, 1, "", "kNonError"], [116, 3, 1, "", "set_complete_if_no_error"], [116, 3, 1, "", "set_status"]], "bosdyn.client.data_acquisition_store": [[117, 1, 1, "", "DataAcquisitionStoreClient"]], "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient": [[117, 4, 1, "", "default_service_name"], [117, 3, 1, "", "list_capture_actions"], [117, 3, 1, "", "list_capture_actions_async"], [117, 3, 1, "", "list_stored_alertdata"], [117, 3, 1, "", "list_stored_alertdata_async"], [117, 3, 1, "", "list_stored_data"], [117, 3, 1, "", "list_stored_data_async"], [117, 3, 1, "", "list_stored_images"], [117, 3, 1, "", "list_stored_images_async"], [117, 3, 1, "", "list_stored_metadata"], [117, 3, 1, "", "list_stored_metadata_async"], [117, 3, 1, "", "query_max_capture_id"], [117, 3, 1, "", "query_max_capture_id_async"], [117, 3, 1, "", "query_stored_captures"], [117, 4, 1, "", "service_type"], [117, 3, 1, "", "store_alertdata"], [117, 3, 1, "", "store_alertdata_async"], [117, 3, 1, "", "store_data"], [117, 3, 1, "", "store_data_async"], [117, 3, 1, "", "store_image"], [117, 3, 1, "", "store_image_async"], [117, 3, 1, "", "store_metadata"], [117, 3, 1, "", "store_metadata_async"], [117, 3, 1, "", "update_from"]], "bosdyn.client.data_buffer": [[118, 1, 1, "", "DataBufferClient"], [118, 5, 1, "", "InvalidArgument"], [118, 1, 1, "", "LoggingHandler"], [118, 6, 1, "", "is_not_rpc"], [118, 6, 1, "", "is_not_text_log"], [118, 6, 1, "", "log_event"], [118, 6, 1, "", "make_parameter"]], "bosdyn.client.data_buffer.DataBufferClient": [[118, 3, 1, "", "add_blob"], [118, 3, 1, "", "add_blob_async"], [118, 3, 1, "", "add_events"], [118, 3, 1, "", "add_events_async"], [118, 3, 1, "", "add_operator_comment"], [118, 3, 1, "", "add_operator_comment_async"], [118, 3, 1, "", "add_protobuf"], [118, 3, 1, "", "add_protobuf_async"], [118, 3, 1, "", "add_signal_tick"], [118, 3, 1, "", "add_signal_tick_async"], [118, 3, 1, "", "add_text_messages"], [118, 3, 1, "", "add_text_messages_async"], [118, 4, 1, "", "default_service_name"], [118, 3, 1, "", "now_in_robot_basis"], [118, 3, 1, "", "register_signal_schema"], [118, 3, 1, "", "register_signal_schema_async"], [118, 4, 1, "", "service_type"], [118, 3, 1, "", "update_from"]], "bosdyn.client.data_buffer.LoggingHandler": [[118, 3, 1, "", "close"], [118, 3, 1, "", "emit"], [118, 3, 1, "", "fallback_log"], [118, 3, 1, "", "flush"], [118, 3, 1, "", "is_thread_alive"], [118, 3, 1, "", "record_level_to_proto_level"], [118, 3, 1, "", "record_to_msg"], [118, 3, 1, "", "restart"]], "bosdyn.client.data_chunk": [[119, 6, 1, "", "chunk_message"], [119, 6, 1, "", "chunk_serialized"], [119, 6, 1, "", "parse_from_chunks"], [119, 6, 1, "", "serialized_from_chunks"], [119, 6, 1, "", "serialized_from_messages"], [119, 6, 1, "", "serialized_from_strings"], [119, 6, 1, "", "split_serialized"]], "bosdyn.client.data_service": [[120, 1, 1, "", "DataServiceClient"], [120, 5, 1, "", "InvalidArgument"]], "bosdyn.client.data_service.DataServiceClient": [[120, 4, 1, "", "default_service_name"], [120, 3, 1, "", "delete_data_pages"], [120, 3, 1, "", "delete_data_pages_async"], [120, 3, 1, "", "get_data_buffer_status"], [120, 3, 1, "", "get_data_buffer_status_async"], [120, 3, 1, "", "get_data_index"], [120, 3, 1, "", "get_data_index_async"], [120, 3, 1, "", "get_data_pages"], [120, 3, 1, "", "get_data_pages_async"], [120, 3, 1, "", "get_events_comments"], [120, 3, 1, "", "get_events_comments_async"], [120, 4, 1, "", "service_type"], [120, 3, 1, "", "update_from"]], "bosdyn.client.directory": [[121, 1, 1, "", "DirectoryClient"], [121, 5, 1, "", "DirectoryResponseError"], [121, 5, 1, "", "NonexistentServiceError"]], "bosdyn.client.directory.DirectoryClient": [[121, 4, 1, "", "default_service_name"], [121, 3, 1, "", "get_entry"], [121, 3, 1, "", "get_entry_async"], [121, 3, 1, "", "list"], [121, 3, 1, "", "list_async"], [121, 4, 1, "", "service_type"]], "bosdyn.client.directory_registration": [[122, 1, 1, "", "DirectoryRegistrationClient"], [122, 1, 1, "", "DirectoryRegistrationKeepAlive"], [122, 5, 1, "", "DirectoryRegistrationResponseError"], [122, 5, 1, "", "ServiceAlreadyExistsError"], [122, 5, 1, "", "ServiceDoesNotExistError"], [122, 6, 1, "", "reset_service_registration"]], "bosdyn.client.directory_registration.DirectoryRegistrationClient": [[122, 4, 1, "", "default_service_name"], [122, 3, 1, "", "register"], [122, 4, 1, "", "service_type"], [122, 3, 1, "", "unregister"], [122, 3, 1, "", "update"]], "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive": [[122, 3, 1, "", "is_alive"], [122, 3, 1, "", "shutdown"], [122, 3, 1, "", "start"], [122, 3, 1, "", "unregister"]], "bosdyn.client.docking": [[123, 1, 1, "", "DockingClient"], [123, 6, 1, "", "blocking_dock_robot"], [123, 6, 1, "", "blocking_go_to_prep_pose"], [123, 6, 1, "", "blocking_undock"], [123, 6, 1, "", "get_dock_id"]], "bosdyn.client.docking.DockingClient": [[123, 4, 1, "", "default_service_name"], [123, 3, 1, "", "docking_command"], [123, 3, 1, "", "docking_command_async"], [123, 3, 1, "", "docking_command_feedback"], [123, 3, 1, "", "docking_command_feedback_async"], [123, 3, 1, "", "docking_command_feedback_full"], [123, 3, 1, "", "docking_command_feedback_full_async"], [123, 3, 1, "", "docking_command_full"], [123, 3, 1, "", "docking_command_full_async"], [123, 3, 1, "", "get_docking_config"], [123, 3, 1, "", "get_docking_config_async"], [123, 3, 1, "", "get_docking_state"], [123, 3, 1, "", "get_docking_state_async"], [123, 4, 1, "", "service_type"], [123, 3, 1, "", "update_from"]], "bosdyn.client.door": [[124, 1, 1, "", "DoorClient"]], "bosdyn.client.door.DoorClient": [[124, 4, 1, "", "default_service_name"], [124, 3, 1, "", "open_door"], [124, 3, 1, "", "open_door_async"], [124, 3, 1, "", "open_door_feedback"], [124, 3, 1, "", "open_door_feedback_async"], [124, 4, 1, "", "service_type"], [124, 3, 1, "", "update_from"]], "bosdyn.client.estop": [[125, 5, 1, "", "ConfigMismatchError"], [125, 5, 1, "", "EndpointMismatchError"], [125, 5, 1, "", "EndpointUnknownError"], [125, 1, 1, "", "EstopClient"], [125, 1, 1, "", "EstopEndpoint"], [125, 1, 1, "", "EstopKeepAlive"], [125, 5, 1, "", "EstopResponseError"], [125, 5, 1, "", "IncorrectChallengeResponseError"], [125, 5, 1, "", "InvalidEndpointError"], [125, 5, 1, "", "InvalidIdError"], [125, 5, 1, "", "MotorsOnError"], [125, 1, 1, "", "StopLevel"], [125, 6, 1, "", "is_estopped"], [125, 6, 1, "", "response_from_challenge"]], "bosdyn.client.estop.EstopClient": [[125, 3, 1, "", "check_in"], [125, 3, 1, "", "check_in_async"], [125, 4, 1, "", "default_service_name"], [125, 3, 1, "", "deregister"], [125, 3, 1, "", "deregister_async"], [125, 3, 1, "", "get_config"], [125, 3, 1, "", "get_config_async"], [125, 3, 1, "", "get_status"], [125, 3, 1, "", "get_status_async"], [125, 3, 1, "", "register"], [125, 3, 1, "", "register_async"], [125, 4, 1, "", "service_type"], [125, 3, 1, "", "set_config"], [125, 3, 1, "", "set_config_async"]], "bosdyn.client.estop.EstopEndpoint": [[125, 4, 1, "", "REQUIRED_ROLE"], [125, 3, 1, "", "allow"], [125, 3, 1, "", "allow_async"], [125, 3, 1, "", "check_in_at_level"], [125, 3, 1, "", "check_in_at_level_async"], [125, 3, 1, "", "deregister"], [125, 3, 1, "", "deregister_async"], [125, 3, 1, "", "force_simple_setup"], [125, 3, 1, "", "from_proto"], [125, 3, 1, "", "get_challenge"], [125, 2, 1, "", "last_set_level"], [125, 3, 1, "", "register"], [125, 3, 1, "", "set_challenge"], [125, 3, 1, "", "settle_then_cut"], [125, 3, 1, "", "settle_then_cut_async"], [125, 3, 1, "", "stop"], [125, 3, 1, "", "stop_async"], [125, 3, 1, "", "to_proto"], [125, 2, 1, "", "unique_id"]], "bosdyn.client.estop.EstopKeepAlive": [[125, 1, 1, "", "KeepAliveStatus"], [125, 3, 1, "", "allow"], [125, 2, 1, "", "client"], [125, 2, 1, "", "endpoint"], [125, 2, 1, "", "last_set_level"], [125, 2, 1, "", "logger"], [125, 3, 1, "", "settle_then_cut"], [125, 3, 1, "", "shutdown"], [125, 3, 1, "", "stop"]], "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus": [[125, 4, 1, "", "DISABLED"], [125, 4, 1, "", "ERROR"], [125, 4, 1, "", "OK"]], "bosdyn.client.estop.StopLevel": [[125, 4, 1, "", "ESTOP_LEVEL_CUT"], [125, 4, 1, "", "ESTOP_LEVEL_NONE"], [125, 4, 1, "", "ESTOP_LEVEL_SETTLE_THEN_CUT"], [125, 4, 1, "", "ESTOP_LEVEL_UNKNOWN"]], "bosdyn.client.exceptions": [[126, 5, 1, "", "ClientCancelledOperationError"], [126, 5, 1, "", "CustomParamError"], [126, 5, 1, "", "Error"], [126, 5, 1, "", "InternalServerError"], [126, 5, 1, "", "InvalidClientCertificateError"], [126, 5, 1, "", "InvalidRequestError"], [126, 5, 1, "", "LeaseUseError"], [126, 5, 1, "", "LicenseError"], [126, 5, 1, "", "NonexistentAuthorityError"], [126, 5, 1, "", "NotFoundError"], [126, 5, 1, "", "PermissionDeniedError"], [126, 5, 1, "", "PersistentRpcError"], [126, 5, 1, "", "ProxyConnectionError"], [126, 5, 1, "", "ResponseError"], [126, 5, 1, "", "ResponseTooLargeError"], [126, 5, 1, "", "RetryableRpcError"], [126, 5, 1, "", "RetryableUnavailableError"], [126, 5, 1, "", "RpcError"], [126, 5, 1, "", "ServerError"], [126, 5, 1, "", "ServiceFailedDuringExecutionError"], [126, 5, 1, "", "ServiceUnavailableError"], [126, 5, 1, "", "TimeSyncRequired"], [126, 5, 1, "", "TimedOutError"], [126, 5, 1, "", "TooManyRequestsError"], [126, 5, 1, "", "TransientFailureError"], [126, 5, 1, "", "UnableToConnectToRobotError"], [126, 5, 1, "", "UnauthenticatedError"], [126, 5, 1, "", "UnimplementedError"], [126, 5, 1, "", "UnknownDnsNameError"], [126, 5, 1, "", "UnsetStatusError"]], "bosdyn.client.fault": [[127, 1, 1, "", "FaultClient"], [127, 5, 1, "", "FaultResponseError"], [127, 5, 1, "", "ServiceFaultAlreadyExistsError"], [127, 5, 1, "", "ServiceFaultDoesNotExistError"]], "bosdyn.client.fault.FaultClient": [[127, 3, 1, "", "clear_service_fault"], [127, 3, 1, "", "clear_service_fault_async"], [127, 4, 1, "", "default_service_name"], [127, 4, 1, "", "service_type"], [127, 3, 1, "", "trigger_service_fault"], [127, 3, 1, "", "trigger_service_fault_async"]], "bosdyn.client.frame_helpers": [[128, 5, 1, "", "ChildFrameInTree"], [128, 5, 1, "", "Error"], [128, 5, 1, "", "GenerateTreeError"], [128, 5, 1, "", "ValidateFrameTreeCycleError"], [128, 5, 1, "", "ValidateFrameTreeDisjointError"], [128, 5, 1, "", "ValidateFrameTreeError"], [128, 5, 1, "", "ValidateFrameTreeUnknownFrameError"], [128, 6, 1, "", "add_edge_to_tree"], [128, 6, 1, "", "express_se2_velocity_in_new_frame"], [128, 6, 1, "", "express_se3_velocity_in_new_frame"], [128, 6, 1, "", "get_a_tform_b"], [128, 6, 1, "", "get_frame_names"], [128, 6, 1, "", "get_odom_tform_body"], [128, 6, 1, "", "get_se2_a_tform_b"], [128, 6, 1, "", "get_vision_tform_body"], [128, 6, 1, "", "is_gravity_aligned_frame_name"], [128, 6, 1, "", "validate_frame_tree_snapshot"]], "bosdyn.client.gps": [[129, 0, 0, "-", "NMEAParser"], [131, 0, 0, "-", "aggregator_client"], [132, 0, 0, "-", "gps_listener"], [133, 0, 0, "-", "registration_client"]], "bosdyn.client.gps.NMEAParser": [[129, 1, 1, "", "NMEAParser"]], "bosdyn.client.gps.NMEAParser.NMEAParser": [[129, 4, 1, "", "LOG_THROTTLE_TIME"], [129, 3, 1, "", "nmea_message_group_to_gps_data_point"], [129, 3, 1, "", "parse"]], "bosdyn.client.gps.aggregator_client": [[131, 1, 1, "", "AggregatorClient"]], "bosdyn.client.gps.aggregator_client.AggregatorClient": [[131, 4, 1, "", "default_service_name"], [131, 3, 1, "", "new_gps_data"], [131, 3, 1, "", "new_gps_data_async"], [131, 4, 1, "", "service_type"]], "bosdyn.client.gps.gps_listener": [[132, 1, 1, "", "GpsListener"], [132, 1, 1, "", "NMEAStreamReader"]], "bosdyn.client.gps.gps_listener.GpsListener": [[132, 3, 1, "", "run"]], "bosdyn.client.gps.gps_listener.NMEAStreamReader": [[132, 4, 1, "", "LOG_THROTTLE_TIME"], [132, 3, 1, "", "read_data"]], "bosdyn.client.gps.registration_client": [[133, 1, 1, "", "RegistrationClient"]], "bosdyn.client.gps.registration_client.RegistrationClient": [[133, 4, 1, "", "default_service_name"], [133, 3, 1, "", "get_location"], [133, 3, 1, "", "get_location_async"], [133, 3, 1, "", "reset_registration"], [133, 3, 1, "", "reset_registration_async"], [133, 4, 1, "", "service_type"]], "bosdyn.client.graph_nav": [[134, 5, 1, "", "AreaCallbackMapError"], [134, 5, 1, "", "CannotModifyMapDuringRecordingError"], [134, 5, 1, "", "CommandExpiredError"], [134, 5, 1, "", "ConstraintFaultError"], [134, 5, 1, "", "FeatureDesertError"], [134, 1, 1, "", "GraphNavClient"], [134, 5, 1, "", "GraphNavServiceResponseError"], [134, 5, 1, "", "IncompatibleSensorsError"], [134, 5, 1, "", "InvalidEdgeError"], [134, 5, 1, "", "InvalidGPSError"], [134, 5, 1, "", "InvalidGraphError"], [134, 5, 1, "", "InvalidPoseError"], [134, 5, 1, "", "IsRecordingError"], [134, 5, 1, "", "MapTooLargeLicenseError"], [134, 5, 1, "", "NoAnchoringError"], [134, 5, 1, "", "NoPathError"], [134, 5, 1, "", "NoTimeSyncError"], [134, 5, 1, "", "RequestAbortedError"], [134, 5, 1, "", "RequestFailedError"], [134, 5, 1, "", "RobotFaultedError"], [134, 5, 1, "", "RobotImpairedError"], [134, 5, 1, "", "RobotLostError"], [134, 5, 1, "", "RobotNotLocalizedToRouteError"], [134, 5, 1, "", "RobotStateError"], [134, 5, 1, "", "RobotStuckError"], [134, 5, 1, "", "RouteError"], [134, 5, 1, "", "RouteNavigationError"], [134, 5, 1, "", "RouteNotUpdatingError"], [134, 5, 1, "", "TimeError"], [134, 5, 1, "", "TooDistantError"], [134, 5, 1, "", "UnknownMapInformationError"], [134, 5, 1, "", "UnknownRouteElementsError"], [134, 5, 1, "", "UnknownWaypointError"], [134, 5, 1, "", "UnkownRouteElementsError"], [134, 5, 1, "", "UnrecognizedCommandError"], [134, 5, 1, "", "UnrecongizedCommandError"], [134, 5, 1, "", "UploadGraphError"], [134, 5, 1, "", "UploadWaypointSnapshotError"]], "bosdyn.client.graph_nav.GraphNavClient": [[134, 3, 1, "", "build_route"], [134, 3, 1, "", "clear_graph"], [134, 3, 1, "", "clear_graph_async"], [134, 4, 1, "", "default_service_name"], [134, 3, 1, "", "download_edge_snapshot"], [134, 3, 1, "", "download_graph"], [134, 3, 1, "", "download_graph_async"], [134, 3, 1, "", "download_waypoint_snapshot"], [134, 3, 1, "", "generate_travel_params"], [134, 3, 1, "", "get_localization_state"], [134, 3, 1, "", "get_localization_state_async"], [134, 3, 1, "", "navigate_route"], [134, 3, 1, "", "navigate_route_async"], [134, 3, 1, "", "navigate_route_full"], [134, 3, 1, "", "navigate_route_full_async"], [134, 3, 1, "", "navigate_to"], [134, 3, 1, "", "navigate_to_anchor"], [134, 3, 1, "", "navigate_to_anchor_async"], [134, 3, 1, "", "navigate_to_async"], [134, 3, 1, "", "navigate_to_full"], [134, 3, 1, "", "navigate_to_full_async"], [134, 3, 1, "", "navigation_feedback"], [134, 3, 1, "", "navigation_feedback_async"], [134, 4, 1, "", "service_type"], [134, 3, 1, "", "set_localization"], [134, 3, 1, "", "set_localization_async"], [134, 3, 1, "", "set_localization_async_full_response"], [134, 3, 1, "", "set_localization_full_response"], [134, 3, 1, "", "update_from"], [134, 3, 1, "", "upload_edge_snapshot"], [134, 3, 1, "", "upload_graph"], [134, 3, 1, "", "upload_graph_async"], [134, 3, 1, "", "upload_waypoint_snapshot"], [134, 3, 1, "", "write_graph_and_snapshots"]], "bosdyn.client.gripper_camera_param": [[135, 1, 1, "", "GripperCameraParamClient"]], "bosdyn.client.gripper_camera_param.GripperCameraParamClient": [[135, 4, 1, "", "default_service_name"], [135, 3, 1, "", "get_camera_params"], [135, 3, 1, "", "get_camera_params_async"], [135, 4, 1, "", "service_type"], [135, 3, 1, "", "set_camera_params"], [135, 3, 1, "", "set_camera_params_async"]], "bosdyn.client.image": [[136, 1, 1, "", "ImageClient"], [136, 5, 1, "", "ImageDataError"], [136, 5, 1, "", "ImageResponseError"], [136, 5, 1, "", "SourceDataError"], [136, 5, 1, "", "UnknownImageSourceError"], [136, 5, 1, "", "UnsupportedImageFormatRequestedError"], [136, 5, 1, "", "UnsupportedPixelFormatRequestedError"], [136, 5, 1, "", "UnsupportedResizeRatioRequestedError"], [136, 6, 1, "", "build_image_request"], [136, 6, 1, "", "depth_image_to_pointcloud"], [136, 6, 1, "", "pixel_to_camera_space"], [136, 6, 1, "", "save_images_as_files"], [136, 6, 1, "", "write_image_data"], [136, 6, 1, "", "write_pgm_or_ppm"]], "bosdyn.client.image.ImageClient": [[136, 4, 1, "", "default_service_name"], [136, 3, 1, "", "get_image"], [136, 3, 1, "", "get_image_async"], [136, 3, 1, "", "get_image_from_sources"], [136, 3, 1, "", "get_image_from_sources_async"], [136, 3, 1, "", "list_image_sources"], [136, 3, 1, "", "list_image_sources_async"], [136, 4, 1, "", "service_type"]], "bosdyn.client.image_service_helpers": [[137, 1, 1, "", "CameraBaseImageServicer"], [137, 1, 1, "", "CameraInterface"], [137, 1, 1, "", "ImageCaptureThread"], [137, 1, 1, "", "ThreadCaptureOutput"], [137, 1, 1, "", "VisualImageSource"], [137, 6, 1, "", "convert_RGB_to_grayscale"]], "bosdyn.client.image_service_helpers.CameraBaseImageServicer": [[137, 3, 1, "", "GetImage"], [137, 3, 1, "", "ListImageSources"]], "bosdyn.client.image_service_helpers.CameraInterface": [[137, 3, 1, "", "blocking_capture"], [137, 3, 1, "", "image_decode"]], "bosdyn.client.image_service_helpers.ImageCaptureThread": [[137, 3, 1, "", "get_latest_captured_image"], [137, 3, 1, "", "maybe_update_thread"], [137, 3, 1, "", "set_last_captured_image"], [137, 3, 1, "", "start_capturing"], [137, 3, 1, "", "stop_capturing"]], "bosdyn.client.image_service_helpers.VisualImageSource": [[137, 3, 1, "", "clear_fault"], [137, 3, 1, "", "create_capture_thread"], [137, 3, 1, "", "get_image_and_timestamp"], [137, 3, 1, "", "image_decode_with_error_checking"], [137, 3, 1, "", "initialize_faults"], [137, 3, 1, "", "make_capture_parameters"], [137, 3, 1, "", "make_image_source"], [137, 3, 1, "", "set_logger"], [137, 3, 1, "", "stop_capturing"], [137, 3, 1, "", "trigger_fault"]], "bosdyn.client.inverse_kinematics": [[138, 1, 1, "", "InverseKinematicsClient"]], "bosdyn.client.inverse_kinematics.InverseKinematicsClient": [[138, 4, 1, "", "default_service_name"], [138, 3, 1, "", "inverse_kinematics"], [138, 3, 1, "", "inverse_kinematics_async"], [138, 4, 1, "", "service_type"]], "bosdyn.client.ir_enable_disable": [[139, 1, 1, "", "IREnableDisableServiceClient"]], "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient": [[139, 4, 1, "", "default_service_name"], [139, 4, 1, "", "service_type"], [139, 3, 1, "", "set_ir_enabled"], [139, 3, 1, "", "set_ir_enabled_async"]], "bosdyn.client.keepalive": [[140, 5, 1, "", "InvalidLeaseError"], [140, 5, 1, "", "InvalidPolicyError"], [140, 1, 1, "", "KeepaliveClient"], [140, 5, 1, "", "KeepaliveResponseError"], [140, 1, 1, "", "Policy"], [140, 1, 1, "", "PolicyKeepalive"], [140, 6, 1, "", "check_in_error"], [140, 6, 1, "", "modify_policy_error"], [140, 6, 1, "", "remove_all_policies"]], "bosdyn.client.keepalive.KeepaliveClient": [[140, 3, 1, "", "check_in"], [140, 3, 1, "", "check_in_async"], [140, 4, 1, "", "default_service_name"], [140, 3, 1, "", "get_status"], [140, 3, 1, "", "get_status_async"], [140, 3, 1, "", "modify_policy"], [140, 3, 1, "", "modify_policy_async"], [140, 4, 1, "", "service_type"]], "bosdyn.client.keepalive.Policy": [[140, 3, 1, "", "add_associated_lease"], [140, 3, 1, "", "add_auto_return_action"], [140, 3, 1, "", "add_controlled_motors_off_action"], [140, 3, 1, "", "add_immediate_robot_off_action"], [140, 3, 1, "", "add_lease_stale_action"], [140, 3, 1, "", "add_record_event_action"], [140, 2, 1, "", "name"], [140, 3, 1, "", "shortest_action_delay"]], "bosdyn.client.keepalive.PolicyKeepalive": [[140, 3, 1, "", "remove_policy"], [140, 3, 1, "", "shutdown"], [140, 3, 1, "", "start"]], "bosdyn.client.lease": [[141, 5, 1, "", "DisplacedLeaseError"], [141, 5, 1, "", "Error"], [141, 5, 1, "", "InvalidLeaseError"], [141, 5, 1, "", "InvalidResourceError"], [141, 1, 1, "", "Lease"], [141, 1, 1, "", "LeaseClient"], [141, 1, 1, "", "LeaseKeepAlive"], [141, 5, 1, "", "LeaseNotOwnedByWallet"], [141, 5, 1, "", "LeaseResponseError"], [141, 1, 1, "", "LeaseState"], [141, 1, 1, "", "LeaseWallet"], [141, 1, 1, "", "LeaseWalletRequestProcessor"], [141, 1, 1, "", "LeaseWalletResponseProcessor"], [141, 5, 1, "", "NoSuchLease"], [141, 5, 1, "", "NotActiveLeaseError"], [141, 5, 1, "", "NotAuthoritativeServiceError"], [141, 5, 1, "", "ResourceAlreadyClaimedError"], [141, 5, 1, "", "RevokedLeaseError"], [141, 5, 1, "", "UnmanagedResourceError"], [141, 5, 1, "", "WrongEpochError"], [141, 6, 1, "", "add_lease_wallet_processors"], [141, 6, 1, "", "test_active_lease"]], "bosdyn.client.lease.Lease": [[141, 1, 1, "", "CompareResult"], [141, 3, 1, "", "compare"], [141, 3, 1, "", "compare_result_to_lease_use_result_status"], [141, 3, 1, "", "create_newer"], [141, 3, 1, "", "create_sublease"], [141, 3, 1, "", "is_valid_lease"], [141, 3, 1, "", "is_valid_proto"]], "bosdyn.client.lease.Lease.CompareResult": [[141, 4, 1, "", "DIFFERENT_EPOCHS"], [141, 4, 1, "", "DIFFERENT_RESOURCES"], [141, 4, 1, "", "NEWER"], [141, 4, 1, "", "OLDER"], [141, 4, 1, "", "SAME"], [141, 4, 1, "", "SUB_LEASE"], [141, 4, 1, "", "SUPER_LEASE"]], "bosdyn.client.lease.LeaseClient": [[141, 3, 1, "", "acquire"], [141, 3, 1, "", "acquire_async"], [141, 4, 1, "", "default_service_name"], [141, 3, 1, "", "list_leases"], [141, 3, 1, "", "list_leases_async"], [141, 3, 1, "", "list_leases_full"], [141, 3, 1, "", "list_leases_full_async"], [141, 3, 1, "", "retain_lease"], [141, 3, 1, "", "retain_lease_async"], [141, 3, 1, "", "return_lease"], [141, 3, 1, "", "return_lease_async"], [141, 4, 1, "", "service_type"], [141, 3, 1, "", "take"], [141, 3, 1, "", "take_async"]], "bosdyn.client.lease.LeaseKeepAlive": [[141, 3, 1, "", "is_alive"], [141, 2, 1, "", "lease_wallet"], [141, 3, 1, "", "shutdown"], [141, 3, 1, "", "wait_until_done"]], "bosdyn.client.lease.LeaseState": [[141, 4, 1, "", "STATUS_NOT_MANAGED"], [141, 4, 1, "", "STATUS_OTHER_OWNER"], [141, 4, 1, "", "STATUS_REVOKED"], [141, 4, 1, "", "STATUS_SELF_OWNER"], [141, 4, 1, "", "STATUS_UNOWNED"], [141, 1, 1, "", "Status"], [141, 3, 1, "", "create_newer"], [141, 3, 1, "", "update_from_lease_use_result"]], "bosdyn.client.lease.LeaseState.Status": [[141, 4, 1, "", "NOT_MANAGED"], [141, 4, 1, "", "OTHER_OWNER"], [141, 4, 1, "", "REVOKED"], [141, 4, 1, "", "SELF_OWNER"], [141, 4, 1, "", "UNOWNED"]], "bosdyn.client.lease.LeaseWallet": [[141, 3, 1, "", "add"], [141, 3, 1, "", "advance"], [141, 3, 1, "", "get_lease"], [141, 3, 1, "", "get_lease_state"], [141, 3, 1, "", "on_lease_use_result"], [141, 3, 1, "", "remove"], [141, 3, 1, "", "set_client_name"]], "bosdyn.client.lease.LeaseWalletRequestProcessor": [[141, 3, 1, "", "get_lease_state"], [141, 3, 1, "", "mutate"]], "bosdyn.client.lease.LeaseWalletResponseProcessor": [[141, 3, 1, "", "mutate"]], "bosdyn.client.lease_resource_hierarchy": [[142, 1, 1, "", "ResourceHierarchy"]], "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy": [[142, 3, 1, "", "get_hierarchy"], [142, 3, 1, "", "get_resource"], [142, 3, 1, "", "get_resource_tree"], [142, 3, 1, "", "has_resource"], [142, 3, 1, "", "has_sub_resources"], [142, 3, 1, "", "leaf_resources"]], "bosdyn.client.lease_validator": [[143, 1, 1, "", "LeaseValidator"], [143, 1, 1, "", "LeaseValidatorResponseProcessor"]], "bosdyn.client.lease_validator.LeaseValidator": [[143, 3, 1, "", "get_active_lease"], [143, 3, 1, "", "test_active_lease"], [143, 3, 1, "", "test_and_set_active_lease"]], "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor": [[143, 3, 1, "", "mutate"]], "bosdyn.client.license": [[144, 1, 1, "", "LicenseClient"]], "bosdyn.client.license.LicenseClient": [[144, 4, 1, "", "default_service_name"], [144, 3, 1, "", "get_feature_enabled"], [144, 3, 1, "", "get_license_info"], [144, 4, 1, "", "service_type"]], "bosdyn.client.local_grid": [[145, 1, 1, "", "LocalGridClient"]], "bosdyn.client.local_grid.LocalGridClient": [[145, 4, 1, "", "default_service_name"], [145, 3, 1, "", "get_local_grid_types"], [145, 3, 1, "", "get_local_grid_types_async"], [145, 3, 1, "", "get_local_grids"], [145, 3, 1, "", "get_local_grids_async"], [145, 4, 1, "", "service_type"]], "bosdyn.client.log_status": [[146, 5, 1, "", "ConcurrencyLimitReachedError"], [146, 5, 1, "", "ExperimentAlreadyRunningError"], [146, 5, 1, "", "InactiveLogError"], [146, 1, 1, "", "LogStatusClient"], [146, 5, 1, "", "LogStatusResponseError"], [146, 5, 1, "", "RequestIdDoesNotExistError"], [146, 6, 1, "", "get_active_log_statuses_error"], [146, 6, 1, "", "get_log_status_error"], [146, 6, 1, "", "start_experiment_log_error"], [146, 6, 1, "", "start_retro_log_error"], [146, 6, 1, "", "terminate_log_error"], [146, 6, 1, "", "update_experiment_log_error"]], "bosdyn.client.log_status.LogStatusClient": [[146, 4, 1, "", "default_service_name"], [146, 3, 1, "", "get_active_log_statuses"], [146, 3, 1, "", "get_active_log_statuses_async"], [146, 3, 1, "", "get_log_status"], [146, 3, 1, "", "get_log_status_async"], [146, 4, 1, "", "service_type"], [146, 3, 1, "", "start_experiment_log"], [146, 3, 1, "", "start_experiment_log_async"], [146, 3, 1, "", "start_retro_log"], [146, 3, 1, "", "start_retro_log_async"], [146, 3, 1, "", "terminate_log"], [146, 3, 1, "", "terminate_log_async"], [146, 3, 1, "", "update_experiment"], [146, 3, 1, "", "update_experiment_async"]], "bosdyn.client.manipulation_api_client": [[147, 1, 1, "", "ManipulationApiClient"]], "bosdyn.client.manipulation_api_client.ManipulationApiClient": [[147, 4, 1, "", "default_service_name"], [147, 3, 1, "", "grasp_override_command"], [147, 3, 1, "", "grasp_override_command_async"], [147, 3, 1, "", "manipulation_api_command"], [147, 3, 1, "", "manipulation_api_command_async"], [147, 3, 1, "", "manipulation_api_feedback_command"], [147, 3, 1, "", "manipulation_api_feedback_command_async"], [147, 4, 1, "", "service_type"], [147, 3, 1, "", "update_from"]], "bosdyn.client.map_processing": [[148, 5, 1, "", "ConstraintViolationError"], [148, 5, 1, "", "InvalidGraphError"], [148, 5, 1, "", "InvalidGravityAlignmentError"], [148, 5, 1, "", "InvalidHintsError"], [148, 5, 1, "", "InvalidParamsError"], [148, 5, 1, "", "MapModifiedError"], [148, 1, 1, "", "MapProcessingServiceClient"], [148, 5, 1, "", "MapProcessingServiceResponseError"], [148, 5, 1, "", "MaxIterationsError"], [148, 5, 1, "", "MaxTimeError"], [148, 5, 1, "", "MissingSnapshotsError"], [148, 5, 1, "", "OptimizationFailureError"]], "bosdyn.client.map_processing.MapProcessingServiceClient": [[148, 4, 1, "", "default_service_name"], [148, 3, 1, "", "process_anchoring"], [148, 3, 1, "", "process_topology"], [148, 4, 1, "", "service_type"]], "bosdyn.client.math_helpers": [[149, 1, 1, "", "Quat"], [149, 1, 1, "", "SE2Pose"], [149, 1, 1, "", "SE2Velocity"], [149, 1, 1, "", "SE3Pose"], [149, 1, 1, "", "SE3Velocity"], [149, 1, 1, "", "Vec2"], [149, 1, 1, "", "Vec3"], [149, 6, 1, "", "angle_diff"], [149, 6, 1, "", "angle_diff_degrees"], [149, 6, 1, "", "is_within_threshold"], [149, 6, 1, "", "pose_to_xyz_yaw"], [149, 6, 1, "", "quat_to_eulerZYX"], [149, 6, 1, "", "recenter_angle"], [149, 6, 1, "", "recenter_angle_mod"], [149, 6, 1, "", "recenter_value_mod"], [149, 6, 1, "", "skew_matrix_2d"], [149, 6, 1, "", "skew_matrix_3d"], [149, 6, 1, "", "transform_se2velocity"], [149, 6, 1, "", "transform_se3velocity"]], "bosdyn.client.math_helpers.Quat": [[149, 3, 1, "", "closest_yaw_only_quaternion"], [149, 3, 1, "", "conj"], [149, 3, 1, "", "from_matrix"], [149, 3, 1, "", "from_obj"], [149, 3, 1, "", "from_pitch"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "from_roll"], [149, 3, 1, "", "from_two_vectors"], [149, 3, 1, "", "from_yaw"], [149, 3, 1, "", "inverse"], [149, 3, 1, "", "mult"], [149, 3, 1, "", "normalize"], [149, 3, 1, "", "slerp"], [149, 3, 1, "", "to_axis_angle"], [149, 3, 1, "", "to_matrix"], [149, 3, 1, "", "to_obj"], [149, 3, 1, "", "to_pitch"], [149, 3, 1, "", "to_proto"], [149, 3, 1, "", "to_roll"], [149, 3, 1, "", "to_yaw"], [149, 3, 1, "", "transform_point"], [149, 3, 1, "", "transform_vec3"]], "bosdyn.client.math_helpers.SE2Pose": [[149, 3, 1, "", "flatten"], [149, 3, 1, "", "from_matrix"], [149, 3, 1, "", "from_obj"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "get_closest_se3_transform"], [149, 3, 1, "", "inverse"], [149, 3, 1, "", "mult"], [149, 2, 1, "", "position"], [149, 3, 1, "", "to_adjoint_matrix"], [149, 3, 1, "", "to_matrix"], [149, 3, 1, "", "to_obj"], [149, 3, 1, "", "to_proto"], [149, 3, 1, "", "to_rot_matrix"]], "bosdyn.client.math_helpers.SE2Velocity": [[149, 2, 1, "", "angular"], [149, 3, 1, "", "from_obj"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "from_vector"], [149, 2, 1, "", "linear"], [149, 3, 1, "", "to_obj"], [149, 3, 1, "", "to_proto"], [149, 3, 1, "", "to_vector"]], "bosdyn.client.math_helpers.SE3Pose": [[149, 3, 1, "", "from_identity"], [149, 3, 1, "", "from_matrix"], [149, 3, 1, "", "from_obj"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "from_se2"], [149, 3, 1, "", "get_closest_se2_transform"], [149, 3, 1, "", "get_translation"], [149, 3, 1, "", "interp"], [149, 3, 1, "", "inverse"], [149, 3, 1, "", "mult"], [149, 2, 1, "", "position"], [149, 2, 1, "", "rotation"], [149, 3, 1, "", "to_adjoint_matrix"], [149, 3, 1, "", "to_matrix"], [149, 3, 1, "", "to_obj"], [149, 3, 1, "", "to_proto"], [149, 3, 1, "", "transform_cloud"], [149, 3, 1, "", "transform_cloud_from_matrix"], [149, 3, 1, "", "transform_point"], [149, 3, 1, "", "transform_vec3"]], "bosdyn.client.math_helpers.SE3Velocity": [[149, 2, 1, "", "angular"], [149, 3, 1, "", "from_obj"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "from_vector"], [149, 2, 1, "", "linear"], [149, 3, 1, "", "to_obj"], [149, 3, 1, "", "to_proto"], [149, 3, 1, "", "to_vector"]], "bosdyn.client.math_helpers.Vec2": [[149, 3, 1, "", "cross"], [149, 3, 1, "", "dot"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "length"], [149, 3, 1, "", "to_proto"]], "bosdyn.client.math_helpers.Vec3": [[149, 3, 1, "", "cross"], [149, 3, 1, "", "dot"], [149, 3, 1, "", "from_numpy"], [149, 3, 1, "", "from_proto"], [149, 3, 1, "", "length"], [149, 3, 1, "", "to_numpy"], [149, 3, 1, "", "to_proto"]], "bosdyn.client.metrics_logging": [[150, 1, 1, "", "MetricsLoggingClient"], [150, 5, 1, "", "MissingKeysError"], [150, 5, 1, "", "UnableToOptOutError"], [150, 6, 1, "", "make_parameter_update"]], "bosdyn.client.metrics_logging.MetricsLoggingClient": [[150, 4, 1, "", "default_service_name"], [150, 3, 1, "", "get_absolute_metric_snapshot"], [150, 3, 1, "", "get_absolute_metric_snapshot_async"], [150, 3, 1, "", "get_metrics"], [150, 3, 1, "", "get_metrics_async"], [150, 3, 1, "", "get_store_sequence_range"], [150, 3, 1, "", "get_store_sequence_range_async"], [150, 4, 1, "", "service_type"]], "bosdyn.client.network_compute_bridge_client": [[151, 5, 1, "", "ExternalServerError"], [151, 5, 1, "", "ExternalServiceNotFoundError"], [151, 5, 1, "", "NetworkComputeAnalysisFailedError"], [151, 1, 1, "", "NetworkComputeBridgeClient"], [151, 5, 1, "", "NetworkComputeRotationError"]], "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient": [[151, 4, 1, "", "default_service_name"], [151, 3, 1, "", "list_available_models"], [151, 3, 1, "", "list_available_models_async"], [151, 3, 1, "", "list_available_models_command"], [151, 3, 1, "", "list_available_models_command_async"], [151, 3, 1, "", "network_compute_bridge_command"], [151, 3, 1, "", "network_compute_bridge_command_async"], [151, 4, 1, "", "service_type"]], "bosdyn.client.payload": [[152, 1, 1, "", "PayloadClient"]], "bosdyn.client.payload.PayloadClient": [[152, 4, 1, "", "default_service_name"], [152, 3, 1, "", "list_payloads"], [152, 3, 1, "", "list_payloads_async"], [152, 4, 1, "", "service_type"]], "bosdyn.client.payload_registration": [[153, 5, 1, "", "InvalidPayloadCredentialsError"], [153, 5, 1, "", "PayloadAlreadyExistsError"], [153, 5, 1, "", "PayloadDoesNotExistError"], [153, 5, 1, "", "PayloadNotAuthorizedError"], [153, 1, 1, "", "PayloadRegistrationClient"], [153, 1, 1, "", "PayloadRegistrationKeepAlive"], [153, 5, 1, "", "PayloadRegistrationResponseError"]], "bosdyn.client.payload_registration.PayloadRegistrationClient": [[153, 3, 1, "", "attach_payload"], [153, 3, 1, "", "attach_payload_async"], [153, 4, 1, "", "default_service_name"], [153, 3, 1, "", "detach_payload"], [153, 3, 1, "", "detach_payload_async"], [153, 3, 1, "", "get_payload_auth_token"], [153, 3, 1, "", "register_payload"], [153, 3, 1, "", "register_payload_async"], [153, 4, 1, "", "service_type"], [153, 3, 1, "", "update_payload_version"], [153, 3, 1, "", "update_payload_version_async"]], "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive": [[153, 3, 1, "", "is_alive"], [153, 3, 1, "", "shutdown"], [153, 3, 1, "", "start"]], "bosdyn.client.point_cloud": [[154, 1, 1, "", "PointCloudClient"], [154, 5, 1, "", "PointCloudDataError"], [154, 5, 1, "", "PointCloudResponseError"], [154, 5, 1, "", "SourceDataError"], [154, 5, 1, "", "UnknownPointCloudSourceError"], [154, 6, 1, "", "build_pc_request"]], "bosdyn.client.point_cloud.PointCloudClient": [[154, 4, 1, "", "default_service_name"], [154, 3, 1, "", "get_point_cloud"], [154, 3, 1, "", "get_point_cloud_async"], [154, 3, 1, "", "get_point_cloud_from_sources"], [154, 3, 1, "", "get_point_cloud_from_sources_async"], [154, 3, 1, "", "list_point_cloud_sources"], [154, 3, 1, "", "list_point_cloud_sources_async"], [154, 4, 1, "", "service_type"]], "bosdyn.client.power": [[155, 5, 1, "", "BatteryMissingError"], [155, 5, 1, "", "CommandInProgressError"], [155, 5, 1, "", "CommandTimedOutError"], [155, 5, 1, "", "EstoppedError"], [155, 5, 1, "", "FanControlTemperatureError"], [155, 5, 1, "", "FaultedError"], [155, 5, 1, "", "KeepaliveMotorsOffError"], [155, 5, 1, "", "OverriddenError"], [155, 1, 1, "", "PowerClient"], [155, 5, 1, "", "PowerError"], [155, 5, 1, "", "PowerResponseError"], [155, 5, 1, "", "SafetyStopFailedError"], [155, 5, 1, "", "SafetyStopIncompatibleHardwareError"], [155, 5, 1, "", "SafetyStopUnknownStopTypeError"], [155, 5, 1, "", "ShorePowerConnectedError"], [155, 6, 1, "", "is_powered_on"], [155, 6, 1, "", "power_cycle_robot"], [155, 6, 1, "", "power_off"], [155, 6, 1, "", "power_off_motors"], [155, 6, 1, "", "power_off_payload_ports"], [155, 6, 1, "", "power_off_robot"], [155, 6, 1, "", "power_off_wifi_radio"], [155, 6, 1, "", "power_on"], [155, 6, 1, "", "power_on_motors"], [155, 6, 1, "", "power_on_payload_ports"], [155, 6, 1, "", "power_on_wifi_radio"], [155, 6, 1, "", "safe_power_cycle_robot"], [155, 6, 1, "", "safe_power_off"], [155, 6, 1, "", "safe_power_off_motors"], [155, 6, 1, "", "safe_power_off_robot"]], "bosdyn.client.power.PowerClient": [[155, 4, 1, "", "default_service_name"], [155, 3, 1, "", "fan_power_command"], [155, 3, 1, "", "fan_power_command_async"], [155, 3, 1, "", "fan_power_command_feedback"], [155, 3, 1, "", "fan_power_command_feedback_async"], [155, 3, 1, "", "power_command"], [155, 3, 1, "", "power_command_async"], [155, 3, 1, "", "power_command_feedback"], [155, 3, 1, "", "power_command_feedback_async"], [155, 3, 1, "", "reset_safety_stop"], [155, 3, 1, "", "reset_safety_stop_async"], [155, 4, 1, "", "service_type"], [155, 3, 1, "", "update_from"]], "bosdyn.client.processors": [[156, 1, 1, "", "AddRequestHeader"]], "bosdyn.client.processors.AddRequestHeader": [[156, 3, 1, "", "mutate"]], "bosdyn.client.ray_cast": [[157, 5, 1, "", "InvalidIntersectionTypeError"], [157, 5, 1, "", "InvalidRequestError"], [157, 1, 1, "", "RayCastClient"], [157, 5, 1, "", "RayCastResponseError"], [157, 5, 1, "", "UnknownFrameError"]], "bosdyn.client.ray_cast.RayCastClient": [[157, 4, 1, "", "default_authority"], [157, 4, 1, "", "default_service_name"], [157, 3, 1, "", "raycast"], [157, 3, 1, "", "raycast_async"], [157, 4, 1, "", "service_type"]], "bosdyn.client.recording": [[158, 5, 1, "", "CouldNotCreateWaypointError"], [158, 5, 1, "", "EdgeExistsError"], [158, 5, 1, "", "EdgeMissingTransformError"], [158, 5, 1, "", "FiducialPoseError"], [158, 5, 1, "", "FollowingRouteError"], [158, 1, 1, "", "GraphNavRecordingServiceClient"], [158, 5, 1, "", "MapTooLargeLicenseError"], [158, 5, 1, "", "MissingFiducialsError"], [158, 5, 1, "", "NotLocalizedToEndError"], [158, 5, 1, "", "NotLocalizedToExistingMapError"], [158, 5, 1, "", "NotReadyYetError"], [158, 5, 1, "", "NotRecordingError"], [158, 5, 1, "", "RecordingServiceResponseError"], [158, 5, 1, "", "RemoteCloudFailureNoDataError"], [158, 5, 1, "", "RemoteCloudFailureNotInDirectoryError"], [158, 5, 1, "", "RobotImpairedError"], [158, 5, 1, "", "TooFarFromExistingMapError"], [158, 5, 1, "", "UnknownWaypointError"], [158, 1, 1, "", "WaypointRegion"]], "bosdyn.client.recording.GraphNavRecordingServiceClient": [[158, 3, 1, "", "create_edge"], [158, 3, 1, "", "create_edge_async"], [158, 3, 1, "", "create_waypoint"], [158, 3, 1, "", "create_waypoint_async"], [158, 4, 1, "", "default_service_name"], [158, 3, 1, "", "get_record_status"], [158, 3, 1, "", "get_record_status_async"], [158, 3, 1, "", "make_client_metadata"], [158, 3, 1, "", "make_edge"], [158, 3, 1, "", "make_edge_environment"], [158, 3, 1, "", "make_recording_environment"], [158, 3, 1, "", "make_waypoint_environment"], [158, 4, 1, "", "service_type"], [158, 3, 1, "", "set_recording_environment"], [158, 3, 1, "", "set_recording_environment_async"], [158, 3, 1, "", "start_recording"], [158, 3, 1, "", "start_recording_async"], [158, 3, 1, "", "start_recording_full"], [158, 3, 1, "", "start_recording_full_async"], [158, 3, 1, "", "stop_recording"], [158, 3, 1, "", "stop_recording_async"]], "bosdyn.client.recording.WaypointRegion": [[158, 4, 1, "", "CIRCLE_REGION"], [158, 4, 1, "", "DEFAULT_REGION"], [158, 4, 1, "", "EMPTY_REGION"]], "bosdyn.client.robot": [[159, 1, 1, "", "Robot"], [159, 5, 1, "", "RobotError"], [159, 5, 1, "", "UnregisteredServiceError"], [159, 5, 1, "", "UnregisteredServiceNameError"], [159, 5, 1, "", "UnregisteredServiceTypeError"]], "bosdyn.client.robot.Robot": [[159, 3, 1, "", "authenticate"], [159, 3, 1, "", "authenticate_from_cache"], [159, 3, 1, "", "authenticate_from_payload_credentials"], [159, 3, 1, "", "authenticate_with_token"], [159, 3, 1, "", "ensure_channel"], [159, 3, 1, "", "ensure_client"], [159, 3, 1, "", "ensure_secure_channel"], [159, 3, 1, "", "get_cached_hardware_hardware_configuration"], [159, 3, 1, "", "get_cached_robot_id"], [159, 3, 1, "", "get_cached_usernames"], [159, 3, 1, "", "get_frame_tree_snapshot"], [159, 3, 1, "", "get_id"], [159, 3, 1, "", "has_arm"], [159, 2, 1, "", "host"], [159, 3, 1, "", "is_estopped"], [159, 3, 1, "", "is_powered_on"], [159, 3, 1, "", "list_services"], [159, 3, 1, "", "log_event"], [159, 3, 1, "", "operator_comment"], [159, 3, 1, "", "power_off"], [159, 3, 1, "", "power_on"], [159, 3, 1, "", "register_payload_and_authenticate"], [159, 3, 1, "", "setup_token_cache"], [159, 3, 1, "", "shutdown"], [159, 3, 1, "", "start_time_sync"], [159, 3, 1, "", "stop_time_sync"], [159, 3, 1, "", "sync_with_directory"], [159, 3, 1, "", "sync_with_services_list"], [159, 3, 1, "", "time_sec"], [159, 2, 1, "", "time_sync"], [159, 3, 1, "", "update_from"], [159, 3, 1, "", "update_secure_channel_port"], [159, 3, 1, "", "update_user_token"]], "bosdyn.client.robot_command": [[160, 5, 1, "", "BehaviorFaultError"], [160, 5, 1, "", "CommandFailedError"], [160, 5, 1, "", "CommandFailedErrorWithFeedback"], [160, 5, 1, "", "CommandTimedOutError"], [160, 5, 1, "", "DockedError"], [160, 5, 1, "", "Error"], [160, 5, 1, "", "ExpiredError"], [160, 5, 1, "", "NoTimeSyncError"], [160, 5, 1, "", "NotClearedError"], [160, 5, 1, "", "NotPoweredOnError"], [160, 1, 1, "", "RobotCommandBuilder"], [160, 1, 1, "", "RobotCommandClient"], [160, 5, 1, "", "RobotCommandResponseError"], [160, 1, 1, "", "RobotCommandStreamingClient"], [160, 5, 1, "", "TooDistantError"], [160, 5, 1, "", "UnknownFrameError"], [160, 5, 1, "", "UnsupportedError"], [160, 6, 1, "", "block_for_trajectory_cmd"], [160, 6, 1, "", "block_until_arm_arrives"], [160, 6, 1, "", "blocking_command"], [160, 6, 1, "", "blocking_selfright"], [160, 6, 1, "", "blocking_sit"], [160, 6, 1, "", "blocking_stand"]], "bosdyn.client.robot_command.RobotCommandBuilder": [[160, 3, 1, "", "arm_carry_command"], [160, 3, 1, "", "arm_cartesian_move_helper"], [160, 3, 1, "", "arm_gaze_command"], [160, 3, 1, "", "arm_joint_command"], [160, 3, 1, "", "arm_joint_freeze_command"], [160, 3, 1, "", "arm_joint_move_helper"], [160, 3, 1, "", "arm_pose_command"], [160, 3, 1, "", "arm_pose_command_from_pose"], [160, 3, 1, "", "arm_ready_command"], [160, 3, 1, "", "arm_stow_command"], [160, 3, 1, "", "arm_wrench_command"], [160, 3, 1, "", "battery_change_pose_command"], [160, 3, 1, "", "body_pose"], [160, 3, 1, "", "build_body_external_forces"], [160, 3, 1, "", "build_synchro_command"], [160, 3, 1, "", "claw_gripper_close_command"], [160, 3, 1, "", "claw_gripper_command_helper"], [160, 3, 1, "", "claw_gripper_open_angle_command"], [160, 3, 1, "", "claw_gripper_open_command"], [160, 3, 1, "", "claw_gripper_open_fraction_command"], [160, 3, 1, "", "constrained_manipulation_command"], [160, 3, 1, "", "create_arm_joint_trajectory_point"], [160, 3, 1, "", "follow_arm_command"], [160, 3, 1, "", "freeze_command"], [160, 3, 1, "", "joint_command"], [160, 3, 1, "", "mobility_params"], [160, 3, 1, "", "payload_estimation_command"], [160, 3, 1, "", "safe_power_off_command"], [160, 3, 1, "", "selfright_command"], [160, 3, 1, "", "stance_command"], [160, 3, 1, "", "stop_command"], [160, 3, 1, "", "synchro_se2_trajectory_command"], [160, 3, 1, "", "synchro_se2_trajectory_point_command"], [160, 3, 1, "", "synchro_sit_command"], [160, 3, 1, "", "synchro_stand_command"], [160, 3, 1, "", "synchro_trajectory_command_in_body_frame"], [160, 3, 1, "", "synchro_velocity_command"]], "bosdyn.client.robot_command.RobotCommandClient": [[160, 3, 1, "", "clear_behavior_fault"], [160, 3, 1, "", "clear_behavior_fault_async"], [160, 4, 1, "", "default_service_name"], [160, 3, 1, "", "robot_command"], [160, 3, 1, "", "robot_command_async"], [160, 3, 1, "", "robot_command_feedback"], [160, 3, 1, "", "robot_command_feedback_async"], [160, 4, 1, "", "service_type"], [160, 2, 1, "", "timesync_endpoint"], [160, 3, 1, "", "update_from"]], "bosdyn.client.robot_command.RobotCommandStreamingClient": [[160, 4, 1, "", "default_service_name"], [160, 3, 1, "", "send_joint_control_commands"], [160, 4, 1, "", "service_type"]], "bosdyn.client.robot_id": [[161, 1, 1, "", "RobotIdClient"], [161, 6, 1, "", "create_strict_version"], [161, 6, 1, "", "version_tuple"]], "bosdyn.client.robot_id.RobotIdClient": [[161, 4, 1, "", "default_service_name"], [161, 3, 1, "", "get_id"], [161, 3, 1, "", "get_id_async"], [161, 4, 1, "", "service_type"]], "bosdyn.client.robot_state": [[162, 1, 1, "", "RobotStateClient"], [162, 1, 1, "", "RobotStateStreamingClient"], [162, 6, 1, "", "has_arm"]], "bosdyn.client.robot_state.RobotStateClient": [[162, 4, 1, "", "default_service_name"], [162, 3, 1, "", "get_hardware_config_with_link_info"], [162, 3, 1, "", "get_robot_hardware_configuration"], [162, 3, 1, "", "get_robot_hardware_configuration_async"], [162, 3, 1, "", "get_robot_link_model"], [162, 3, 1, "", "get_robot_link_model_async"], [162, 3, 1, "", "get_robot_metrics"], [162, 3, 1, "", "get_robot_metrics_async"], [162, 3, 1, "", "get_robot_state"], [162, 3, 1, "", "get_robot_state_async"], [162, 4, 1, "", "service_type"]], "bosdyn.client.robot_state.RobotStateStreamingClient": [[162, 4, 1, "", "default_service_name"], [162, 3, 1, "", "get_robot_state_stream"], [162, 4, 1, "", "service_type"]], "bosdyn.client.sdk": [[163, 1, 1, "", "Sdk"], [163, 5, 1, "", "SdkError"], [163, 5, 1, "", "UnableToLoadAppTokenError"], [163, 5, 1, "", "UnsetAppTokenError"], [163, 6, 1, "", "create_standard_sdk"], [163, 6, 1, "", "decode_token"], [163, 6, 1, "", "generate_client_name"], [163, 6, 1, "", "log_token_time_remaining"]], "bosdyn.client.sdk.Sdk": [[163, 3, 1, "", "clear_robots"], [163, 3, 1, "", "create_robot"], [163, 3, 1, "", "load_robot_cert"], [163, 3, 1, "", "register_service_client"], [163, 3, 1, "", "set_max_message_length"]], "bosdyn.client.server_util": [[164, 1, 1, "", "GrpcServiceRunner"], [164, 1, 1, "", "ResponseContext"], [164, 6, 1, "", "get_bytes_field_allowlist"], [164, 6, 1, "", "populate_response_header"], [164, 6, 1, "", "strip_get_image_response"], [164, 6, 1, "", "strip_image_response"], [164, 6, 1, "", "strip_large_bytes_fields"], [164, 6, 1, "", "strip_local_grid_responses"], [164, 6, 1, "", "strip_record_data_blob"], [164, 6, 1, "", "strip_record_signal_tick"], [164, 6, 1, "", "strip_store_data_request"], [164, 6, 1, "", "strip_store_image_request"]], "bosdyn.client.server_util.GrpcServiceRunner": [[164, 3, 1, "", "run_until_interrupt"], [164, 3, 1, "", "stop"]], "bosdyn.client.service_customization_helpers": [[165, 5, 1, "", "InvalidCustomParamSpecError"], [165, 5, 1, "", "InvalidCustomParamValueError"], [165, 6, 1, "", "bool_spec_to_default"], [165, 6, 1, "", "check_types_match"], [165, 6, 1, "", "create_value_validator"], [165, 6, 1, "", "custom_param_coerce_to"], [165, 6, 1, "", "custom_spec_to_default"], [165, 6, 1, "", "dict_param_coerce_to"], [165, 6, 1, "", "dict_params_to_dict"], [165, 6, 1, "", "dict_spec_to_default"], [165, 6, 1, "", "double_param_coerce_to"], [165, 6, 1, "", "double_spec_to_default"], [165, 6, 1, "", "int_param_coerce_to"], [165, 6, 1, "", "int_spec_to_default"], [165, 6, 1, "", "list_param_coerce_to"], [165, 6, 1, "", "list_params_to_list"], [165, 6, 1, "", "list_spec_to_default"], [165, 6, 1, "", "make_bool_param_spec"], [165, 6, 1, "", "make_custom_param_spec"], [165, 6, 1, "", "make_dict_child_spec"], [165, 6, 1, "", "make_dict_param_spec"], [165, 6, 1, "", "make_double_param_spec"], [165, 6, 1, "", "make_int64_param_spec"], [165, 6, 1, "", "make_list_param_spec"], [165, 6, 1, "", "make_one_of_child_spec"], [165, 6, 1, "", "make_one_of_param_spec"], [165, 6, 1, "", "make_region_of_interest_param_spec"], [165, 6, 1, "", "make_roi_service_and_source"], [165, 6, 1, "", "make_string_param_spec"], [165, 6, 1, "", "make_user_interface_info"], [165, 6, 1, "", "one_of_param_coerce_to"], [165, 6, 1, "", "one_of_spec_to_default"], [165, 6, 1, "", "oneof_param_to_dict"], [165, 6, 1, "", "roi_param_coerce_to"], [165, 6, 1, "", "roi_spec_to_default"], [165, 6, 1, "", "string_param_coerce_to"], [165, 6, 1, "", "string_spec_to_default"], [165, 6, 1, "", "validate_dict_spec"]], "bosdyn.client.signals_helpers": [[166, 6, 1, "", "build_capability_live_data"], [166, 6, 1, "", "build_live_data_response"], [166, 6, 1, "", "build_max_alert_spec"], [166, 6, 1, "", "build_simple_signal"], [166, 6, 1, "", "get_data"]], "bosdyn.client.spot_cam": [[168, 0, 0, "-", "audio"], [169, 0, 0, "-", "compositor"], [170, 0, 0, "-", "health"], [171, 0, 0, "-", "lighting"], [172, 0, 0, "-", "lights_helper"], [173, 0, 0, "-", "media_log"], [174, 0, 0, "-", "network"], [175, 0, 0, "-", "power"], [176, 0, 0, "-", "ptz"], [177, 0, 0, "-", "streamquality"], [178, 0, 0, "-", "version"]], "bosdyn.client.spot_cam.audio": [[168, 1, 1, "", "AudioClient"]], "bosdyn.client.spot_cam.audio.AudioClient": [[168, 4, 1, "", "default_service_name"], [168, 3, 1, "", "delete_sound"], [168, 3, 1, "", "delete_sound_async"], [168, 3, 1, "", "get_audio_capture_channel"], [168, 3, 1, "", "get_audio_capture_channel_async"], [168, 3, 1, "", "get_audio_capture_gain"], [168, 3, 1, "", "get_audio_capture_gain_async"], [168, 3, 1, "", "get_volume"], [168, 3, 1, "", "get_volume_async"], [168, 3, 1, "", "list_sounds"], [168, 3, 1, "", "list_sounds_async"], [168, 3, 1, "", "load_sound"], [168, 3, 1, "", "play_sound"], [168, 3, 1, "", "play_sound_async"], [168, 4, 1, "", "service_type"], [168, 3, 1, "", "set_audio_capture_channel"], [168, 3, 1, "", "set_audio_capture_channel_async"], [168, 3, 1, "", "set_audio_capture_gain"], [168, 3, 1, "", "set_audio_capture_gain_async"], [168, 3, 1, "", "set_volume"], [168, 3, 1, "", "set_volume_async"]], "bosdyn.client.spot_cam.compositor": [[169, 1, 1, "", "CompositorClient"]], "bosdyn.client.spot_cam.compositor.CompositorClient": [[169, 4, 1, "", "default_service_name"], [169, 3, 1, "", "get_ir_colormap"], [169, 3, 1, "", "get_ir_colormap_async"], [169, 3, 1, "", "get_ir_meter_overlay"], [169, 3, 1, "", "get_ir_meter_overlay_async"], [169, 3, 1, "", "get_screen"], [169, 3, 1, "", "get_screen_async"], [169, 3, 1, "", "get_visible_cameras"], [169, 3, 1, "", "get_visible_cameras_async"], [169, 3, 1, "", "list_screens"], [169, 3, 1, "", "list_screens_async"], [169, 4, 1, "", "service_type"], [169, 3, 1, "", "set_ir_colormap"], [169, 3, 1, "", "set_ir_colormap_async"], [169, 3, 1, "", "set_ir_meter_overlay"], [169, 3, 1, "", "set_ir_meter_overlay_async"], [169, 3, 1, "", "set_multi_ir_meter_overlay"], [169, 3, 1, "", "set_multi_ir_meter_overlay_async"], [169, 3, 1, "", "set_screen"], [169, 3, 1, "", "set_screen_async"]], "bosdyn.client.spot_cam.health": [[170, 1, 1, "", "HealthClient"]], "bosdyn.client.spot_cam.health.HealthClient": [[170, 3, 1, "", "clear_bit_events"], [170, 3, 1, "", "clear_bit_events_async"], [170, 4, 1, "", "default_service_name"], [170, 3, 1, "", "get_bit_status"], [170, 3, 1, "", "get_bit_status_async"], [170, 3, 1, "", "get_system_log"], [170, 3, 1, "", "get_system_log_async"], [170, 3, 1, "", "get_temperature"], [170, 3, 1, "", "get_temperature_async"], [170, 4, 1, "", "service_type"]], "bosdyn.client.spot_cam.lighting": [[171, 1, 1, "", "LightingClient"]], "bosdyn.client.spot_cam.lighting.LightingClient": [[171, 4, 1, "", "default_service_name"], [171, 3, 1, "", "get_led_brightness"], [171, 3, 1, "", "get_led_brightness_async"], [171, 4, 1, "", "service_type"], [171, 3, 1, "", "set_led_brightness"], [171, 3, 1, "", "set_led_brightness_async"]], "bosdyn.client.spot_cam.lights_helper": [[172, 1, 1, "", "LightsHelper"], [172, 6, 1, "", "set_lights_with_freq_and_brightness"]], "bosdyn.client.spot_cam.media_log": [[173, 1, 1, "", "MediaLogClient"]], "bosdyn.client.spot_cam.media_log.MediaLogClient": [[173, 4, 1, "", "default_service_name"], [173, 3, 1, "", "delete"], [173, 3, 1, "", "delete_async"], [173, 3, 1, "", "enable_debug"], [173, 3, 1, "", "enable_debug_async"], [173, 3, 1, "", "get_status"], [173, 3, 1, "", "get_status_async"], [173, 3, 1, "", "list_cameras"], [173, 3, 1, "", "list_cameras_async"], [173, 3, 1, "", "list_logpoints"], [173, 3, 1, "", "retrieve"], [173, 3, 1, "", "retrieve_raw_data"], [173, 4, 1, "", "service_type"], [173, 3, 1, "", "set_passphrase"], [173, 3, 1, "", "set_passphrase_async"], [173, 3, 1, "", "store"], [173, 3, 1, "", "store_async"], [173, 3, 1, "", "tag"], [173, 3, 1, "", "tag_async"]], "bosdyn.client.spot_cam.network": [[174, 1, 1, "", "NetworkClient"]], "bosdyn.client.spot_cam.network.NetworkClient": [[174, 4, 1, "", "default_service_name"], [174, 3, 1, "", "get_ice_configuration"], [174, 3, 1, "", "get_ice_configuration_async"], [174, 4, 1, "", "service_type"], [174, 3, 1, "", "set_ice_configuration"], [174, 3, 1, "", "set_ice_configuration_async"]], "bosdyn.client.spot_cam.power": [[175, 1, 1, "", "PowerClient"]], "bosdyn.client.spot_cam.power.PowerClient": [[175, 3, 1, "", "cycle_power"], [175, 3, 1, "", "cycle_power_async"], [175, 4, 1, "", "default_service_name"], [175, 3, 1, "", "get_power_status"], [175, 3, 1, "", "get_power_status_async"], [175, 4, 1, "", "service_type"], [175, 3, 1, "", "set_power_status"], [175, 3, 1, "", "set_power_status_async"]], "bosdyn.client.spot_cam.ptz": [[176, 1, 1, "", "PtzClient"], [176, 6, 1, "", "shift_pan_angle"]], "bosdyn.client.spot_cam.ptz.PtzClient": [[176, 4, 1, "", "default_service_name"], [176, 3, 1, "", "get_ptz_focus_state"], [176, 3, 1, "", "get_ptz_focus_state_async"], [176, 3, 1, "", "get_ptz_position"], [176, 3, 1, "", "get_ptz_position_async"], [176, 3, 1, "", "get_ptz_velocity"], [176, 3, 1, "", "get_ptz_velocity_async"], [176, 3, 1, "", "initialize_lens"], [176, 3, 1, "", "initialize_lens_async"], [176, 3, 1, "", "list_ptz"], [176, 3, 1, "", "list_ptz_async"], [176, 4, 1, "", "service_type"], [176, 3, 1, "", "set_ptz_focus_state"], [176, 3, 1, "", "set_ptz_focus_state_async"], [176, 3, 1, "", "set_ptz_position"], [176, 3, 1, "", "set_ptz_position_async"], [176, 3, 1, "", "set_ptz_velocity"], [176, 3, 1, "", "set_ptz_velocity_async"]], "bosdyn.client.spot_cam.streamquality": [[177, 1, 1, "", "StreamQualityClient"]], "bosdyn.client.spot_cam.streamquality.StreamQualityClient": [[177, 4, 1, "", "default_service_name"], [177, 3, 1, "", "enable_congestion_control"], [177, 3, 1, "", "enable_congestion_control_async"], [177, 3, 1, "", "get_stream_params"], [177, 3, 1, "", "get_stream_params_async"], [177, 4, 1, "", "service_type"], [177, 3, 1, "", "set_stream_params"], [177, 3, 1, "", "set_stream_params_async"]], "bosdyn.client.spot_cam.version": [[178, 1, 1, "", "VersionClient"]], "bosdyn.client.spot_cam.version.VersionClient": [[178, 4, 1, "", "default_service_name"], [178, 3, 1, "", "get_software_version"], [178, 3, 1, "", "get_software_version_async"], [178, 3, 1, "", "get_software_version_full"], [178, 3, 1, "", "get_software_version_full_async"], [178, 4, 1, "", "service_type"]], "bosdyn.client.spot_check": [[179, 5, 1, "", "CameraCalibrationCalibrationError"], [179, 5, 1, "", "CameraCalibrationInternalError"], [179, 5, 1, "", "CameraCalibrationPowerError"], [179, 5, 1, "", "CameraCalibrationResponseError"], [179, 5, 1, "", "CameraCalibrationRobotCommandError"], [179, 5, 1, "", "CameraCalibrationTargetNotCenteredError"], [179, 5, 1, "", "CameraCalibrationTimedOutError"], [179, 5, 1, "", "CameraCalibrationUserCanceledError"], [179, 5, 1, "", "CameraSpotCheckFeedbackError"], [179, 5, 1, "", "CameraSpotCheckTimedOutError"], [179, 5, 1, "", "GripperCameraCalibrationCalibrationError"], [179, 5, 1, "", "GripperCameraCalibrationInitializationError"], [179, 5, 1, "", "GripperCameraCalibrationInternalError"], [179, 5, 1, "", "GripperCameraCalibrationLeaseError"], [179, 5, 1, "", "GripperCameraCalibrationPowerError"], [179, 5, 1, "", "GripperCameraCalibrationResponseError"], [179, 5, 1, "", "GripperCameraCalibrationStuckError"], [179, 5, 1, "", "GripperCameraCalibrationTargetNotCenteredError"], [179, 5, 1, "", "GripperCameraCalibrationTargetUpsideDownError"], [179, 5, 1, "", "GripperCameraCalibrationUserCanceledError"], [179, 5, 1, "", "SpotCheckCameraTimeoutError"], [179, 1, 1, "", "SpotCheckClient"], [179, 5, 1, "", "SpotCheckEndstopTimeoutError"], [179, 5, 1, "", "SpotCheckError"], [179, 5, 1, "", "SpotCheckGroundCheckError"], [179, 5, 1, "", "SpotCheckImuCheckError"], [179, 5, 1, "", "SpotCheckLoadcellTimeoutError"], [179, 5, 1, "", "SpotCheckNotSittingError"], [179, 5, 1, "", "SpotCheckPowerOnFailure"], [179, 5, 1, "", "SpotCheckResponseError"], [179, 5, 1, "", "SpotCheckStandFailureError"], [179, 5, 1, "", "SpotCheckTimedOutError"], [179, 5, 1, "", "SpotCheckUnexpectedPowerChangeError"], [179, 6, 1, "", "run_camera_calibration"], [179, 6, 1, "", "run_spot_check"]], "bosdyn.client.spot_check.SpotCheckClient": [[179, 3, 1, "", "camera_calibration_command"], [179, 3, 1, "", "camera_calibration_command_async"], [179, 3, 1, "", "camera_calibration_feedback"], [179, 3, 1, "", "camera_calibration_feedback_async"], [179, 4, 1, "", "default_service_name"], [179, 3, 1, "", "gripper_camera_calibration_command"], [179, 3, 1, "", "gripper_camera_calibration_command_async"], [179, 3, 1, "", "gripper_camera_calibration_feedback"], [179, 3, 1, "", "gripper_camera_calibration_feedback_async"], [179, 4, 1, "", "service_type"], [179, 3, 1, "", "spot_check_command"], [179, 3, 1, "", "spot_check_command_async"], [179, 3, 1, "", "spot_check_feedback"], [179, 3, 1, "", "spot_check_feedback_async"]], "bosdyn.client.time_sync": [[180, 5, 1, "", "InactiveThreadError"], [180, 5, 1, "", "NotEstablishedError"], [180, 1, 1, "", "TimeSyncClient"], [180, 1, 1, "", "TimeSyncEndpoint"], [180, 5, 1, "", "TimeSyncError"], [180, 1, 1, "", "TimeSyncThread"], [180, 5, 1, "", "TimedOutError"], [180, 6, 1, "", "robot_time_range_from_datetimes"], [180, 6, 1, "", "robot_time_range_from_nanoseconds"], [180, 6, 1, "", "timespec_to_robot_timespan"]], "bosdyn.client.time_sync.TimeSyncClient": [[180, 4, 1, "", "default_service_name"], [180, 3, 1, "", "get_time_sync_update"], [180, 3, 1, "", "get_time_sync_update_async"], [180, 4, 1, "", "service_type"]], "bosdyn.client.time_sync.TimeSyncEndpoint": [[180, 2, 1, "", "clock_identifier"], [180, 2, 1, "", "clock_skew"], [180, 3, 1, "", "establish_timesync"], [180, 3, 1, "", "get_new_estimate"], [180, 3, 1, "", "get_robot_time_converter"], [180, 2, 1, "", "has_established_time_sync"], [180, 2, 1, "", "response"], [180, 3, 1, "", "robot_timestamp_from_local_secs"], [180, 2, 1, "", "round_trip_time"]], "bosdyn.client.time_sync.TimeSyncThread": [[180, 4, 1, "", "DEFAULT_TIME_SYNC_INTERVAL_SEC"], [180, 4, 1, "", "TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC"], [180, 2, 1, "", "endpoint"], [180, 3, 1, "", "get_robot_clock_skew"], [180, 3, 1, "", "get_robot_time_converter"], [180, 2, 1, "", "has_established_time_sync"], [180, 3, 1, "", "robot_timestamp_from_local_secs"], [180, 2, 1, "", "should_exit"], [180, 3, 1, "", "start"], [180, 3, 1, "", "stop"], [180, 2, 1, "", "stopped"], [180, 2, 1, "", "thread_exception"], [180, 2, 1, "", "time_sync_interval_sec"], [180, 3, 1, "", "wait_for_sync"]], "bosdyn.client.token_cache": [[181, 5, 1, "", "ClearFailedError"], [181, 5, 1, "", "NotInCacheError"], [181, 1, 1, "", "TokenCache"], [181, 5, 1, "", "TokenCacheError"], [181, 1, 1, "", "TokenCacheFilesystem"], [181, 5, 1, "", "WriteFailedError"], [181, 6, 1, "", "atomic_file_write"]], "bosdyn.client.token_cache.TokenCache": [[181, 3, 1, "", "clear"], [181, 3, 1, "", "match"], [181, 3, 1, "", "read"], [181, 3, 1, "", "write"]], "bosdyn.client.token_cache.TokenCacheFilesystem": [[181, 3, 1, "", "clear"], [181, 3, 1, "", "match"], [181, 3, 1, "", "read"], [181, 3, 1, "", "write"]], "bosdyn.client.token_manager": [[182, 1, 1, "", "TokenManager"]], "bosdyn.client.token_manager.TokenManager": [[182, 3, 1, "", "is_alive"], [182, 3, 1, "", "stop"], [182, 3, 1, "", "update"]], "bosdyn.client.units_helpers": [[183, 6, 1, "", "units_to_string"]], "bosdyn.client.util": [[184, 1, 1, "", "DedupLoggingMessages"], [184, 1, 1, "", "GrpcServiceRunner"], [184, 6, 1, "", "add_base_arguments"], [184, 6, 1, "", "add_common_arguments"], [184, 6, 1, "", "add_credentials_arguments"], [184, 6, 1, "", "add_payload_credentials_arguments"], [184, 6, 1, "", "add_payload_credentials_file_argument"], [184, 6, 1, "", "add_service_endpoint_arguments"], [184, 6, 1, "", "add_service_hosting_arguments"], [184, 6, 1, "", "authenticate"], [184, 6, 1, "", "cli_auth"], [184, 6, 1, "", "cli_login_prompt"], [184, 6, 1, "", "does_dedup_filter_exist"], [184, 6, 1, "", "get_guid_and_secret"], [184, 6, 1, "", "get_logger"], [184, 6, 1, "", "read_or_create_payload_credentials"], [184, 6, 1, "", "read_payload_credentials"], [184, 6, 1, "", "safe_pb_enum_to_string"], [184, 6, 1, "", "setup_logging"]], "bosdyn.client.util.DedupLoggingMessages": [[184, 3, 1, "", "filter"]], "bosdyn.client.util.GrpcServiceRunner": [[184, 3, 1, "", "run_until_interrupt"], [184, 3, 1, "", "stop"]], "bosdyn.client.world_object": [[185, 1, 1, "", "WorldObjectClient"], [185, 6, 1, "", "make_add_world_object_req"], [185, 6, 1, "", "make_change_world_object_req"], [185, 6, 1, "", "make_delete_world_object_req"], [185, 6, 1, "", "send_add_mutation_requests"], [185, 6, 1, "", "send_delete_mutation_requests"]], "bosdyn.client.world_object.WorldObjectClient": [[185, 4, 1, "", "default_service_name"], [185, 3, 1, "", "draw_oriented_bounding_box"], [185, 3, 1, "", "draw_sphere"], [185, 3, 1, "", "list_world_objects"], [185, 3, 1, "", "list_world_objects_async"], [185, 3, 1, "", "mutate_world_objects"], [185, 3, 1, "", "mutate_world_objects_async"], [185, 4, 1, "", "service_type"], [185, 2, 1, "", "timesync_endpoint"], [185, 3, 1, "", "update_from"]], "bosdyn": [[206, 0, 0, "-", "deprecated"], [207, 0, 0, "-", "geometry"], [208, 0, 0, "-", "util"]], "bosdyn.deprecated": [[206, 6, 1, "", "moved_to"], [206, 6, 1, "", "renamed_to"]], "bosdyn.geometry": [[207, 1, 1, "", "EulerZXY"], [207, 6, 1, "", "to_euler_zxy"]], "bosdyn.geometry.EulerZXY": [[207, 3, 1, "", "to_quaternion"]], "bosdyn.mission": [[210, 0, 0, "-", "client"], [211, 0, 0, "-", "constants"], [212, 0, 0, "-", "exceptions"], [213, 0, 0, "-", "remote_client"], [214, 0, 0, "-", "server_util"], [215, 0, 0, "-", "util"]], "bosdyn.mission.client": [[210, 5, 1, "", "CompilationError"], [210, 5, 1, "", "CustomParamsError"], [210, 5, 1, "", "IncompatibleAnswer"], [210, 5, 1, "", "InvalidAnswerCode"], [210, 5, 1, "", "InvalidQuestionId"], [210, 1, 1, "", "MissionClient"], [210, 5, 1, "", "MissionResponseError"], [210, 5, 1, "", "NoMissionError"], [210, 5, 1, "", "NoMissionPlayingError"], [210, 5, 1, "", "QuestionAlreadyAnswered"], [210, 5, 1, "", "ValidationError"]], "bosdyn.mission.client.MissionClient": [[210, 3, 1, "", "answer_question"], [210, 3, 1, "", "answer_question_async"], [210, 4, 1, "", "default_service_name"], [210, 3, 1, "", "get_info"], [210, 3, 1, "", "get_info_async"], [210, 3, 1, "", "get_mission"], [210, 3, 1, "", "get_mission_async"], [210, 3, 1, "", "get_state"], [210, 3, 1, "", "get_state_async"], [210, 3, 1, "", "load_mission"], [210, 3, 1, "", "load_mission_as_chunks"], [210, 3, 1, "", "load_mission_as_chunks2"], [210, 3, 1, "", "load_mission_async"], [210, 3, 1, "", "pause_mission"], [210, 3, 1, "", "pause_mission_async"], [210, 3, 1, "", "play_mission"], [210, 3, 1, "", "play_mission_async"], [210, 3, 1, "", "restart_mission"], [210, 3, 1, "", "restart_mission_async"], [210, 4, 1, "", "service_type"], [210, 3, 1, "", "stop_mission"], [210, 3, 1, "", "stop_mission_async"], [210, 2, 1, "", "timesync_endpoint"], [210, 3, 1, "", "update_from"]], "bosdyn.mission.constants": [[211, 1, 1, "", "Result"]], "bosdyn.mission.constants.Result": [[211, 4, 1, "", "ERROR"], [211, 4, 1, "", "FAILURE"], [211, 4, 1, "", "RUNNING"], [211, 4, 1, "", "SUCCESS"]], "bosdyn.mission.exceptions": [[212, 5, 1, "", "CompileError"], [212, 5, 1, "", "Error"], [212, 5, 1, "", "InaccessibleParameterError"], [212, 5, 1, "", "MessageOverrideError"], [212, 5, 1, "", "MissingParameterError"], [212, 5, 1, "", "NodeUnreferenceableError"], [212, 5, 1, "", "UnknownType"], [212, 5, 1, "", "ValidationError"]], "bosdyn.mission.exceptions.CompileError": [[212, 3, 1, "", "get_node_details"], [212, 3, 1, "", "node_impl"], [212, 3, 1, "", "node_name"]], "bosdyn.mission.remote_client": [[213, 5, 1, "", "Error"], [213, 5, 1, "", "InvalidSessionId"], [213, 5, 1, "", "MissingInputs"], [213, 5, 1, "", "MissingLeases"], [213, 1, 1, "", "RemoteClient"], [213, 6, 1, "", "tree_status_from_tick_status"]], "bosdyn.mission.remote_client.RemoteClient": [[213, 4, 1, "", "default_service_name"], [213, 3, 1, "", "establish_session"], [213, 3, 1, "", "establish_session_async"], [213, 3, 1, "", "get_service_info"], [213, 3, 1, "", "get_service_info_async"], [213, 4, 1, "", "service_type"], [213, 3, 1, "", "stop"], [213, 3, 1, "", "stop_async"], [213, 3, 1, "", "teardown_session"], [213, 3, 1, "", "teardown_session_async"], [213, 3, 1, "", "tick"], [213, 3, 1, "", "tick_async"], [213, 3, 1, "", "update_from"]], "bosdyn.mission.server_util": [[214, 1, 1, "", "ResponseContext"]], "bosdyn.mission.util": [[215, 5, 1, "", "Error"], [215, 5, 1, "", "InvalidConversion"], [215, 1, 1, "", "ResultFromProto"], [215, 6, 1, "", "create_value"], [215, 6, 1, "", "define_blackboard"], [215, 6, 1, "", "field_desc_to_pb_type"], [215, 6, 1, "", "get_value_from_constant_value_message"], [215, 6, 1, "", "get_value_from_value_message"], [215, 6, 1, "", "is_string_identifier"], [215, 6, 1, "", "most_restrictive_travel_params"], [215, 6, 1, "", "node_spec_to_short_string"], [215, 6, 1, "", "one_line_str"], [215, 6, 1, "", "proto_enum_to_result_constant"], [215, 6, 1, "", "proto_from_tuple"], [215, 6, 1, "", "python_type_to_pb_type"], [215, 6, 1, "", "python_var_to_value"], [215, 6, 1, "", "result_constant_to_proto_enum"], [215, 6, 1, "", "safe_pb_type_to_string"], [215, 6, 1, "", "set_blackboard"], [215, 6, 1, "", "tree_to_string"], [215, 6, 1, "", "type_to_field_name"]], "bosdyn.mission.util.ResultFromProto": [[215, 4, 1, "", "proto_from_results"], [215, 4, 1, "", "results_from_proto"]], "bosdyn.orbit": [[217, 0, 0, "-", "client"], [218, 0, 0, "-", "exceptions"], [219, 0, 0, "-", "utils"]], "bosdyn.orbit.client": [[217, 1, 1, "", "Client"], [217, 6, 1, "", "create_client"]], "bosdyn.orbit.client.Client": [[217, 3, 1, "", "authenticate_with_api_token"], [217, 3, 1, "", "delete_calendar_event"], [217, 3, 1, "", "delete_resource"], [217, 3, 1, "", "delete_robot"], [217, 3, 1, "", "delete_site_walk"], [217, 3, 1, "", "delete_webhook"], [217, 3, 1, "", "get_calendar"], [217, 3, 1, "", "get_image"], [217, 3, 1, "", "get_image_response"], [217, 3, 1, "", "get_resource"], [217, 3, 1, "", "get_robot_by_hostname"], [217, 3, 1, "", "get_robot_info"], [217, 3, 1, "", "get_robots"], [217, 3, 1, "", "get_run_archives_by_id"], [217, 3, 1, "", "get_run_by_id"], [217, 3, 1, "", "get_run_capture_by_id"], [217, 3, 1, "", "get_run_captures"], [217, 3, 1, "", "get_run_event_by_id"], [217, 3, 1, "", "get_run_events"], [217, 3, 1, "", "get_runs"], [217, 3, 1, "", "get_site_dock_by_id"], [217, 3, 1, "", "get_site_docks"], [217, 3, 1, "", "get_site_element_by_id"], [217, 3, 1, "", "get_site_elements"], [217, 3, 1, "", "get_site_walk_by_id"], [217, 3, 1, "", "get_site_walks"], [217, 3, 1, "", "get_system_time"], [217, 3, 1, "", "get_version"], [217, 3, 1, "", "get_webhook"], [217, 3, 1, "", "get_webhook_by_id"], [217, 3, 1, "", "post_calendar_event"], [217, 3, 1, "", "post_calendar_event_disable_by_id"], [217, 3, 1, "", "post_calendar_event_enable_by_id"], [217, 3, 1, "", "post_calendar_events_disable_all"], [217, 3, 1, "", "post_calendar_events_enable_all"], [217, 3, 1, "", "post_dispatch_mission_to_robot"], [217, 3, 1, "", "post_export_as_walk"], [217, 3, 1, "", "post_import_from_walk"], [217, 3, 1, "", "post_resource"], [217, 3, 1, "", "post_return_to_dock_mission"], [217, 3, 1, "", "post_robot"], [217, 3, 1, "", "post_site_dock"], [217, 3, 1, "", "post_site_element"], [217, 3, 1, "", "post_site_walk"], [217, 3, 1, "", "post_webhook"], [217, 3, 1, "", "post_webhook_by_id"]], "bosdyn.orbit.exceptions": [[218, 5, 1, "", "Error"], [218, 5, 1, "", "UnauthenticatedClientError"], [218, 5, 1, "", "WebhookSignatureVerificationError"]], "bosdyn.orbit.utils": [[219, 6, 1, "", "data_capture_url_from_run_capture_resources"], [219, 6, 1, "", "data_capture_urls_from_run_events"], [219, 6, 1, "", "datetime_from_isostring"], [219, 6, 1, "", "get_action_names_from_run_events"], [219, 6, 1, "", "get_api_token"], [219, 6, 1, "", "get_latest_created_at_for_run_captures"], [219, 6, 1, "", "get_latest_created_at_for_run_events"], [219, 6, 1, "", "get_latest_end_time_for_runs"], [219, 6, 1, "", "get_latest_run_capture_resources"], [219, 6, 1, "", "get_latest_run_in_progress"], [219, 6, 1, "", "get_latest_run_resource"], [219, 6, 1, "", "validate_webhook_payload"], [219, 6, 1, "", "write_image"]], "bosdyn.scout": [[221, 0, 0, "-", "client"], [222, 0, 0, "-", "exceptions"], [223, 0, 0, "-", "utils"]], "bosdyn.scout.client": [[221, 1, 1, "", "ScoutClient"], [221, 6, 1, "", "create_scout_client"]], "bosdyn.scout.client.ScoutClient": [[221, 3, 1, "", "authenticate_with_api_token"], [221, 3, 1, "", "authenticate_with_password"], [221, 3, 1, "", "delete_calendar_event"], [221, 3, 1, "", "delete_resource"], [221, 3, 1, "", "delete_robot"], [221, 3, 1, "", "delete_site_walk"], [221, 3, 1, "", "delete_webhook"], [221, 3, 1, "", "get_calendar"], [221, 3, 1, "", "get_image"], [221, 3, 1, "", "get_image_response"], [221, 3, 1, "", "get_resource"], [221, 3, 1, "", "get_robot_by_hostname"], [221, 3, 1, "", "get_robot_info"], [221, 3, 1, "", "get_robots"], [221, 3, 1, "", "get_run_archives_by_id"], [221, 3, 1, "", "get_run_by_id"], [221, 3, 1, "", "get_run_capture_by_id"], [221, 3, 1, "", "get_run_captures"], [221, 3, 1, "", "get_run_event_by_id"], [221, 3, 1, "", "get_run_events"], [221, 3, 1, "", "get_runs"], [221, 3, 1, "", "get_scout_system_time"], [221, 3, 1, "", "get_scout_version"], [221, 3, 1, "", "get_site_dock_by_id"], [221, 3, 1, "", "get_site_docks"], [221, 3, 1, "", "get_site_element_by_id"], [221, 3, 1, "", "get_site_elements"], [221, 3, 1, "", "get_site_walk_by_id"], [221, 3, 1, "", "get_site_walks"], [221, 3, 1, "", "get_webhook"], [221, 3, 1, "", "get_webhook_by_id"], [221, 3, 1, "", "post_calendar_event"], [221, 3, 1, "", "post_calendar_event_disable_by_id"], [221, 3, 1, "", "post_calendar_event_enable_by_id"], [221, 3, 1, "", "post_calendar_events_disable_all"], [221, 3, 1, "", "post_calendar_events_enable_all"], [221, 3, 1, "", "post_dispatch_mission_to_robot"], [221, 3, 1, "", "post_export_as_walk"], [221, 3, 1, "", "post_import_from_walk"], [221, 3, 1, "", "post_resource"], [221, 3, 1, "", "post_return_to_dock_mission"], [221, 3, 1, "", "post_robot"], [221, 3, 1, "", "post_site_dock"], [221, 3, 1, "", "post_site_element"], [221, 3, 1, "", "post_site_walk"], [221, 3, 1, "", "post_webhook"], [221, 3, 1, "", "post_webhook_by_id"]], "bosdyn.scout.utils": [[223, 6, 1, "", "data_capture_url_from_run_capture_resources"], [223, 6, 1, "", "data_capture_urls_from_run_events"], [223, 6, 1, "", "get_credentials"], [223, 6, 1, "", "get_latest_created_at_for_run_captures"], [223, 6, 1, "", "get_latest_created_at_for_run_events"], [223, 6, 1, "", "get_latest_end_time_for_runs"], [223, 6, 1, "", "get_latest_run_capture_resources"], [223, 6, 1, "", "get_latest_run_in_progress"], [223, 6, 1, "", "get_latest_run_resource"]], "bosdyn.util": [[208, 5, 1, "", "DatetimeParseError"], [208, 1, 1, "", "RobotTimeConverter"], [208, 6, 1, "", "distance_str"], [208, 6, 1, "", "duration_str"], [208, 6, 1, "", "duration_to_seconds"], [208, 6, 1, "", "format_metric"], [208, 6, 1, "", "now_nsec"], [208, 6, 1, "", "now_sec"], [208, 6, 1, "", "now_timestamp"], [208, 6, 1, "", "nsec_to_sec"], [208, 6, 1, "", "nsec_to_timestamp"], [208, 6, 1, "", "parse_datetime"], [208, 6, 1, "", "parse_timespan"], [208, 6, 1, "", "sec_to_nsec"], [208, 6, 1, "", "seconds_to_duration"], [208, 6, 1, "", "seconds_to_timestamp"], [208, 6, 1, "", "secs_to_hms"], [208, 6, 1, "", "set_clock_source"], [208, 6, 1, "", "set_timestamp_from_datetime"], [208, 6, 1, "", "set_timestamp_from_now"], [208, 6, 1, "", "set_timestamp_from_nsec"], [208, 6, 1, "", "timestamp_str"], [208, 6, 1, "", "timestamp_to_datetime"], [208, 6, 1, "", "timestamp_to_nsec"], [208, 6, 1, "", "timestamp_to_sec"]], "bosdyn.util.RobotTimeConverter": [[208, 3, 1, "", "convert_timestamp_from_local_to_robot"], [208, 3, 1, "", "local_seconds_from_robot_timestamp"], [208, 3, 1, "", "robot_seconds_from_local_seconds"], [208, 3, 1, "", "robot_timestamp_from_local"], [208, 3, 1, "", "robot_timestamp_from_local_nsecs"], [208, 3, 1, "", "robot_timestamp_from_local_secs"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:exception", "6": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "exception", "Python exception"], "6": ["py", "function", "Python function"]}, "titleterms": {"spot": [0, 1, 3, 4, 15, 16, 28, 35, 39, 47, 58, 60, 62, 67, 68, 69, 70, 71, 75, 76, 77, 78, 81, 87, 88, 89, 91, 179, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 255, 256, 270, 279, 287, 288, 289, 297, 308, 313, 316, 319, 320, 322, 324], "sdk": [0, 2, 28, 75, 87, 88, 89, 163, 272, 312], "content": [0, 1, 2, 4, 8, 28, 39, 48, 50, 58, 69, 72, 74, 75, 81, 90, 91, 92, 93, 97, 130, 167, 186, 187, 209, 216, 220, 224, 251, 258, 259, 260, 261, 263, 264, 265, 266, 267], "concept": [1, 2, 5, 21, 41, 53], "api": [1, 2, 35, 44, 48, 59, 72, 73, 76, 77, 89, 91, 147, 262, 275, 292, 299, 300, 301, 302, 303, 304, 305, 330], "orbit": [1, 2, 89, 216, 264, 299, 300, 301, 302, 303, 304, 305], "about": [2, 3, 21, 22, 270], "formerli": [2, 89], "scout": [2, 89, 220], "authent": [2, 60, 88], "python": [2, 19, 30, 35, 74, 75, 87, 88, 89, 92, 93, 97, 167, 186, 187, 209, 216, 220, 224, 272, 312], "deprec": [2, 89, 206, 315], "warn": 2, "webhook": [2, 305], "what": [2, 9, 14, 19, 35, 284], "i": [2, 9, 14, 35, 60, 61, 62, 77, 78, 86, 89, 248, 250, 284, 297, 314, 315, 320], "configur": [2, 9, 18, 36, 45, 59, 60, 62, 65, 70, 79, 88, 255, 297, 307, 313], "payload": [2, 3, 57, 58, 59, 62, 63, 65, 66, 75, 76, 77, 89, 91, 152, 153, 265, 306, 314], "event": [2, 43, 91, 246, 253], "action": [2, 24, 33, 41, 51, 79, 91, 297, 319], "complet": [2, 91], "With": [2, 35], "alert": [2, 89, 91, 296], "secur": 2, "http": [2, 54], "v": [2, 42, 88], "should": 2, "us": [2, 9, 16, 21, 25, 33, 34, 35, 54, 57, 62, 71, 74, 248, 251, 253, 254, 272, 276, 278, 280, 283, 291, 306, 307, 310, 312, 313, 315, 326, 329, 333], "when": [2, 9, 14, 29, 248], "schedul": [2, 302], "mission": [2, 12, 16, 24, 33, 56, 79, 89, 91, 209, 259, 272, 277, 294, 295, 299, 302, 303, 304, 310, 311], "kei": [2, 21], "weekli": 2, "repeat": [2, 91], "predict": 2, "start": [2, 44, 61, 71, 294, 310, 314], "time": [2, 26, 35, 59, 180, 246, 254], "prioriti": 2, "gotcha": 2, "run": [2, 18, 31, 32, 57, 61, 62, 76, 77, 86, 87, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 292, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 315, 318, 319, 320, 321, 323, 326, 327, 328, 329, 330, 331, 332, 333], "midnight": 2, "unpredict": 2, "fast": 2, "possibl": 2, "zone": 2, "daylight": 2, "save": [2, 31, 34, 35, 251], "camera": [3, 57, 88, 91, 135, 286, 287, 313, 330], "hip": 3, "joint": [3, 5, 7, 48, 50, 89, 262, 290], "robot": [3, 15, 17, 18, 21, 23, 26, 31, 38, 44, 47, 48, 50, 54, 55, 64, 65, 66, 79, 87, 88, 89, 159, 160, 161, 162, 228, 254, 257, 267, 273, 278, 282, 290, 296, 303, 310, 323, 331, 334], "specif": [3, 7, 29, 56, 66, 334], "dimens": [3, 64, 67], "environ": [3, 21, 60, 75, 76, 77, 87], "power": [3, 55, 66, 88, 89, 91, 155, 175, 272], "sens": 3, "connect": [3, 38, 60, 282, 313], "arm": [4, 5, 6, 7, 29, 37, 65, 89, 103, 227, 229, 231, 232, 235, 236, 237, 238, 239, 240, 241, 243, 244, 258, 290], "gripper": [4, 7, 29, 37, 89, 135, 287], "synchronizedcommand": [5, 91], "request": [5, 41, 87, 91, 246, 298], "feedback": [5, 17, 89, 91], "armcommand": [5, 91], "cartesian": 5, "move": [5, 31, 37, 87, 88, 89], "predefin": 5, "pose": 5, "veloc": 5, "gaze": [5, 232], "stop": [5, 18, 45, 62, 87, 88, 89, 269, 273, 274, 312, 321, 327], "drag": 5, "mobil": [5, 89, 227, 244], "followarmcommand": [5, 91], "hand": [5, 231], "frame": [5, 6, 16, 47, 88, 89, 128, 274], "collis": 5, "avoid": 5, "bodi": [5, 29, 37, 231], "forc": [5, 230], "limit": [5, 49, 91], "safeti": [5, 7, 31, 33, 34, 66, 89, 312], "note": [5, 21, 35, 48, 89], "servic": [6, 9, 11, 12, 15, 16, 18, 20, 24, 26, 35, 41, 43, 44, 45, 46, 51, 52, 55, 56, 57, 59, 60, 68, 76, 77, 78, 88, 89, 91, 100, 101, 102, 116, 120, 137, 165, 197, 198, 248, 251, 253, 254, 255, 260, 272, 276, 278, 280, 283, 289, 291, 306, 310, 313, 314, 315, 318, 319, 325, 326, 329, 333], "manipul": [6, 89, 147, 228, 255], "armsurfacecontact": [6, 91], "door": [6, 89, 91, 124, 229], "invers": [6, 89, 138, 289], "kinemat": [6, 89, 138, 289], "rang": [7, 254], "motion": 7, "link": [7, 89, 91], "length": [7, 65], "how": [7, 9, 12, 14, 18, 60, 88, 248, 283, 295], "big": 7, "an": [7, 12, 16, 18, 57, 87, 88, 242, 253, 269, 294, 309, 310, 325, 334], "object": [7, 55, 88, 185, 228, 242, 266, 280, 322, 330, 332, 333], "can": [7, 19, 87, 89], "grasp": [7, 228, 234, 235], "pinch": 7, "point": [7, 67, 89, 154, 251, 284, 329], "autonomi": [8, 21, 259], "autoreturn": [9, 91], "why": [9, 19], "would": 9, "want": [9, 320], "NOT": 9, "do": [9, 12, 19], "happen": 9, "finish": 9, "safe": [9, 89], "autonom": [10, 17, 25, 84, 89], "navig": [10, 11, 13, 16, 17, 20, 89, 283], "code": [10, 42, 48, 89, 91, 92, 282], "exampl": [10, 18, 19, 24, 30, 35, 42, 43, 44, 48, 53, 56, 57, 59, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 315, 317, 318, 319, 321, 323, 326, 327, 328, 329, 330, 331, 332, 333], "autowalk": [12, 16, 33, 89, 91, 107, 247, 268, 309, 310], "terminologi": [12, 35], "differ": 12, "from": [12, 19, 61, 87, 251, 271], "format": [12, 27, 43, 91], "compon": [12, 13, 48, 53, 293], "element": [12, 91], "rpc": [12, 16, 20, 24, 53, 59, 97, 209], "node": [12, 24, 91, 294], "identifi": [12, 27], "debug": [12, 293, 313, 315], "failur": 12, "break": [12, 89], "go": [12, 328], "here": 12, "thi": [12, 75, 250], "structur": [12, 19, 24, 27, 29, 40, 44, 62, 286], "direct": 14, "explor": 14, "invok": 14, "enabl": [14, 63, 71, 89, 139, 304], "disabl": [14, 89, 139, 256, 304], "dock": [15, 89, 91, 123, 257, 303, 307], "typic": [15, 25], "usag": [15, 48, 52, 89, 272, 283, 293, 312], "undock": 15, "config": [15, 35], "state": [15, 48, 55, 88, 89, 91, 162, 235, 277, 278, 279], "gp": [16, 89, 91, 130, 132, 281, 285], "hardwar": [16, 290], "integr": [16, 57, 89], "receiv": 16, "overview": [16, 31, 35, 41, 43, 71, 75, 293, 295], "attach": [16, 57, 306], "write": [16, 18, 80, 89], "custom": [16, 36, 56, 62, 89, 165, 310, 315, 316, 317], "background": [16, 57, 282], "common": [16, 112, 191, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 288, 289], "refer": [16, 36, 37, 67, 92], "softwar": [16, 59, 62, 68, 71, 88, 290], "registr": [16, 45, 57, 59, 91, 122, 133, 153, 306, 314], "odometri": 16, "graph": [16, 89, 91, 134, 226, 281, 282], "nav": [16, 89, 91, 134, 226, 281, 282], "map": [16, 19, 21, 42, 89, 91, 148, 283, 286], "tablet": [16, 19, 34, 319], "statu": [16, 17, 55, 91, 146, 291], "displai": 16, "record": [16, 18, 19, 79, 89, 91, 158, 225, 226, 283, 295, 309, 310], "graphnav": [17, 18, 19, 20, 21, 22, 23, 89, 283, 284, 285, 286], "locomot": [17, 89, 328], "navigateto": [17, 91], "navigaterout": [17, 91], "navigatetoanchor": 17, "error": [17, 18, 52, 54, 57, 91], "area": [18, 56, 89, 91, 98, 99, 100, 101, 102, 226], "callback": [18, 56, 89, 98, 99, 100, 101, 102, 226, 298, 307, 310], "introduct": [18, 58], "doe": 18, "work": [18, 60], "polici": [18, 51, 91], "crosswalk": [18, 226], "spotcam": [18, 89, 167], "light": [18, 37, 171, 172, 226, 321], "The": [18, 51, 61, 272, 312], "life": 18, "cycl": 18, "startup": 18, "execut": [18, 35, 296, 297, 315, 316, 317, 320, 322, 324, 327, 334], "shutdown": 18, "creat": [18, 19, 24, 57, 61, 62, 71, 78, 79, 88, 269, 302], "behavior": [18, 24, 36, 46, 48, 89, 267], "expect": 18, "blockag": [18, 91], "impair": [18, 91], "check": [18, 68, 89, 179], "entiti": 18, "wait": 18, "": [18, 47, 62, 87, 88], "control": [18, 19, 29, 31, 38, 48, 89, 243, 262, 286, 290, 316, 330, 331, 334], "updat": [18, 23, 89], "local": [18, 21, 22, 23, 55, 60, 62, 78, 91, 145, 248, 295, 315], "report": [18, 57], "handl": [18, 54, 89, 318], "re": 18, "rout": [18, 91], "test": [18, 57, 62, 76, 77, 78, 79, 249, 251, 313, 325], "runner": [18, 100], "script": [18, 30, 62, 80, 270, 314], "within": [18, 36], "view": [19, 65, 88, 282], "modifi": [19, 31], "waypoint": [19, 21, 91], "edg": [19, 21, 23, 63, 91], "process": [19, 79, 80, 148], "topologi": 19, "ar": [19, 88], "loop": [19, 48], "import": 19, "automat": [19, 30, 79], "closur": 19, "ensur": 19, "good": 19, "anchor": [19, 91, 282], "optim": [19, 282], "you": [19, 87, 320], "data": [19, 21, 27, 39, 40, 41, 42, 43, 50, 57, 75, 76, 77, 78, 79, 80, 89, 91, 113, 114, 115, 116, 117, 118, 119, 120, 188, 192, 193, 205, 246, 251, 253, 254, 261, 263, 282, 299, 317, 325], "transfer": [19, 33], "download": [19, 41, 43, 109, 246, 251], "upload": [19, 30, 34, 79, 247, 282, 327], "graphnavservic": [20, 91], "graphnavrecordingservic": [20, 91], "technic": 21, "summari": 21, "initi": [21, 22, 75, 226, 314], "lost": [21, 23], "fiduci": [22, 273, 295], "place": [22, 323], "search": 22, "geometri": [22, 47, 64, 91, 207], "textur": 22, "interv": 23, "featur": [23, 89], "desert": 23, "stuck": 23, "stair": [23, 89, 91], "other": [23, 57, 62, 76, 77, 89, 282], "constraint": 23, "origin": 23, "tree": 24, "blackboard": 24, "type": [24, 35, 42, 43, 56, 91], "simpl": [24, 238, 296], "sequenc": [24, 31, 33, 34, 35, 36, 91, 327], "more": 24, "complex": 24, "missionservic": [24, 91], "remotemissionservic": [24, 91, 310], "case": [25, 63], "base": [26, 99, 188, 304], "id": [26, 87, 88, 91, 161], "auth": [26, 91, 105], "directori": [26, 44, 57, 76, 77, 91, 121, 122, 255], "sync": [26, 180], "leas": [26, 52, 88, 89, 91, 141, 142, 143], "bddf": [27, 43, 91, 108, 109, 187, 246], "motiv": 27, "organ": 27, "seri": [27, 200, 201, 204], "annot": [27, 91], "file": [27, 29, 30, 31, 35, 40, 42, 60, 61, 62, 78, 94, 95, 194, 251, 271], "choreographi": [28, 30, 31, 33, 34, 35, 37, 89, 93, 96, 327], "anim": [29, 30, 33, 35, 91, 94, 95, 225], "choreograph": [29, 30, 31, 32, 34, 38, 89], "name": 29, "extens": [29, 60, 61, 62, 78, 89, 270, 281, 293, 297, 319, 320], "unit": [29, 56, 91, 183], "comment": [29, 43, 246, 253, 313], "option": [29, 89, 91], "section": 29, "support": [29, 43, 74, 89], "keyword": 29, "paramet": [29, 31, 36, 56, 91, 287, 315, 316, 317], "pertain": 29, "all": [29, 61], "track": [29, 31, 35], "keyfram": 29, "column": 29, "particular": 29, "leg": [29, 63, 65, 91], "pipelin": [30, 57], "text": [30, 43], "repres": 30, "log": [30, 35, 43, 55, 62, 89, 91, 146, 150, 173, 253, 263, 291, 292], "boston": [31, 34, 43, 73, 92], "dynam": [31, 34, 37, 43, 73, 92], "develop": [31, 44, 58, 60, 75, 89, 313], "guid": [31, 58, 92, 320, 322, 334], "beginn": 31, "advanc": [31, 52, 89, 224, 283], "mode": [31, 34, 91], "user": [31, 87, 320, 321, 322, 328, 334], "interfac": [31, 44, 59, 64, 66, 283], "slice": [31, 35], "beat": 31, "bpm": 31, "measur": 31, "danc": 31, "timelin": 31, "ad": [31, 33, 34, 47, 89], "block": [31, 88, 189], "preview": 31, "select": [31, 314], "multipl": [31, 87], "copi": [31, 87], "past": 31, "delet": [31, 34, 302], "load": [31, 63, 282], "music": 31, "red": 31, "slider": 31, "perform": [31, 89, 279], "keyboard": [31, 38, 60, 243, 295, 309, 331], "edit": [31, 268, 302], "wasd": 31, "drive": [31, 34, 36, 62], "command": [31, 48, 55, 62, 87, 88, 89, 91, 111, 160, 229, 230, 232, 236, 237, 267, 269, 272, 274, 283, 291, 295, 312], "line": [31, 62, 89, 111, 269, 283], "argument": [31, 270, 271, 325], "instal": [32, 62, 71, 76, 78, 87, 247, 270, 296, 307, 313, 316, 320, 322, 324, 334], "system": [32, 41, 46, 53, 60, 68, 87, 296, 316], "requir": [32, 65, 66, 75, 76, 87, 307, 313, 324], "store": [33, 89, 117, 251], "ui": 34, "plai": [34, 81, 85], "your": [34, 35, 76, 77, 87], "own": 34, "manag": [34, 62, 68, 70, 87, 182], "remov": [34, 51, 62, 89], "label": 34, "reliabl": 35, "layer": 35, "entri": 35, "exit": 35, "condit": [35, 91], "interact": [35, 310, 313, 321], "dure": [35, 47, 303], "adjust": [35, 323], "client": [35, 53, 89, 93, 97, 130, 131, 133, 147, 151, 167, 209, 210, 213, 217, 221, 296, 314], "moveinfoconfig": 35, "txt": 35, "moveparamsconfig": 35, "gait": 36, "diagram": [36, 296, 316], "preset": 36, "tip": [36, 57, 313, 315], "rotate_bodi": 37, "rotate_body_sharp": 37, "body_hold": 37, "body_const": 37, "swai": 37, "random_rot": 37, "twerk": 37, "butt_circl": 37, "fidget_stand": 37, "step": [37, 87, 91, 282, 310, 313, 324], "goto": 37, "trot": 37, "pace": 37, "turn_2step": 37, "pace_2step": 37, "crawl": 37, "running_man": 37, "bourre": 37, "hop": 37, "jog": 37, "skip": 37, "front_up": 37, "jump": 37, "transit": 37, "sit": 37, "stand_up": 37, "sit_to_sprawl": 37, "random_stretch": 37, "stand_to_kneel": 37, "kneel_to_stand": 37, "kneel_to_stand_fast": 37, "self_right": 37, "leg_pos": 37, "kneel": 37, "kneel_leg_mov": 37, "kneel_leg_move2": 37, "kneel_circl": 37, "nod": 37, "stow": [37, 239], "unstow": 37, "shoulder_left": 37, "shoulder_right": 37, "arm_mov": 37, "arm_move_no_gripp": 37, "arm_move_rel": 37, "workspace_arm_mov": 37, "figure8_mov": 37, "frame_snapshot": 37, "chicken_head": 37, "set_color": 37, "fade_color": 37, "independent_color": 37, "ripple_color": 37, "custom_gait": 37, "joystick": 38, "acquisit": [40, 41, 43, 57, 77, 89, 113, 114, 115, 116, 117, 251, 261, 317, 325], "output": [40, 61, 275], "zip": 40, "metadata": [40, 57, 91], "json": [40, 78], "csv": 40, "high": 41, "level": [41, 91], "captur": [41, 57, 75, 76, 77, 88], "capabl": [41, 57], "group": [41, 60], "channel": [41, 110, 202], "architectur": [41, 78], "implement": [41, 56], "thermal": 42, "raw": [42, 43], "understand": [42, 52, 76, 77, 80, 88, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 281, 282, 284, 285, 286, 287, 288, 289, 299, 300, 301, 302, 303, 304, 305, 308], "pgm": 42, "render": 42, "scale": 42, "color": [42, 91], "palett": 42, "buffer": [43, 54, 89, 118, 253], "messag": [43, 88, 199, 330], "oper": [43, 45, 47, 246, 253], "signal": [43, 91, 166, 252], "blob": [43, 253], "intern": 43, "author": [43, 59, 88, 89], "grpc": [44, 54, 195, 196, 197, 198, 246], "basic": [44, 52, 90, 237, 241, 246, 260, 272, 330], "infrastructur": 44, "server": [44, 53, 60, 71, 164, 214, 296, 297, 310], "regist": [44, 59, 75, 76, 77, 88, 314], "e": [45, 87, 88, 269, 273, 274, 321, 327], "checkin": 45, "fault": [46, 59, 89, 127, 318], "guidelin": [46, 63, 73], "world": [47, 55, 185, 231, 266, 280, 332, 333], "transform": 47, "between": [47, 314], "math": [47, 149], "beta": [48, 51, 89], "stream": [48, 91, 205, 330], "close": 48, "knee": [49, 50], "torqu": [49, 50], "supplement": 50, "order": 50, "morphologi": 50, "transmiss": 50, "detail": [50, 233], "gear": 50, "ratio": 50, "max": 50, "motor": [50, 66, 88], "coupl": 50, "sh1": 50, "el0": 50, "keepal": [51, 91, 140], "timer": 51, "backward": 51, "compat": 51, "resourc": [52, 71, 142], "addit": [52, 68, 89, 295], "pattern": [52, 91], "represent": 52, "machin": 53, "learn": 53, "bridg": [53, 56, 89, 151, 251, 296, 316], "extern": [53, 63, 273], "comput": [53, 56, 62, 89, 151, 251, 296, 316], "definit": [53, 90], "networkcomputebridg": [53, 89, 91], "networkcomputebridgework": [53, 91], "parameter": 53, "network": [54, 56, 59, 60, 68, 89, 91, 151, 174, 251, 296, 298, 316], "choic": 54, "protocol": [54, 72, 91], "2": [54, 69, 75, 76, 82, 87, 89, 282], "tl": 54, "tcp": 54, "discoveri": 54, "estop": [55, 91, 125], "metrics_log": [55, 91], "imag": [55, 56, 57, 62, 75, 76, 78, 88, 89, 91, 136, 137, 248, 271, 275, 276, 313, 315, 324, 325, 333], "grid": [55, 145], "languag": 56, "spec": [56, 91], "doubl": 56, "int": 56, "string": 56, "bool": 56, "region": [56, 99, 328], "interest": 56, "dictionari": 56, "One": 56, "Of": 56, "list": [56, 57, 88], "param": [56, 91, 135], "worker": 56, "remot": [56, 91, 213, 272, 310], "coercion": 56, "camerainterfac": 57, "thread": 57, "non": 57, "collect": [57, 75, 78, 79, 80], "function": [57, 88, 89], "plugin": [57, 77, 89, 115, 116, 251, 325], "new": [57, 89], "directoryservic": [59, 91], "directoryregistrationservic": [59, 91], "payloadservic": [59, 91], "payloadregistrationservic": [59, 91], "synchron": 59, "self": [59, 63], "devic": 59, "port": [59, 62, 65, 66], "forward": 59, "tabl": [59, 91], "mass": 59, "properti": 59, "posit": [59, 91], "m": 59, "orient": [59, 64], "radian": 59, "total": 59, "kg": 59, "center": 59, "moment": 59, "inertia": 59, "tensor": 59, "m2": 59, "bound": [59, 91], "box": 59, "zxy": 59, "xyz": 59, "extent": 59, "core": [60, 61, 62, 68, 69, 70, 71, 77, 78, 86, 89, 186, 248, 250, 281, 297, 314, 315, 319, 320], "o": [60, 61, 62, 77, 78, 86, 89, 248, 250, 297, 314, 315, 320, 334], "document": [60, 61, 68, 69, 89, 91], "releas": [60, 89], "admin": 60, "web": [60, 62, 76, 78, 299, 300, 301, 302, 303, 304, 305, 315], "via": [60, 321], "ssh": 60, "termin": [60, 68], "monitor": [60, 62], "default": [60, 91], "password": [60, 71], "gpio": [60, 250], "pwm": 60, "i2c": 60, "gpu": 60, "openvpn": 61, "befor": 61, "dockerfil": 61, "docker": [61, 62, 68, 70, 78, 248, 249, 250, 251, 296, 307, 313, 315, 316, 320], "compos": [61, 62, 78], "yml": [61, 78], "kickoff": 61, "sh": 61, "includ": 61, "follow": [61, 244, 273, 320], "our": 61, "build": [61, 62, 270, 281, 293, 294, 297], "folder": 61, "contain": [61, 62, 68, 70, 78], "abov": 61, "applic": [62, 78], "engin": 62, "For": 62, "incom": 62, "traffic": 62, "helper": [62, 89, 94, 114, 128, 130, 137, 149, 165, 166, 172, 183], "manifest": [62, 78], "yaml": 62, "portal": 62, "usb": 62, "access": [62, 314], "directli": 62, "robust": 63, "design": 63, "crash": 63, "protect": 63, "shock": 63, "ingress": 63, "cabl": [63, 64], "interfer": [63, 65], "right": 63, "mechan": 64, "connector": 64, "correct": 64, "db25": 64, "rel": 64, "front": [64, 324], "keepout": 64, "mm": 64, "seal": 64, "gland": 64, "width": [65, 91], "height": 65, "weight": [65, 91], "isometr": 65, "top": 65, "rom": 65, "clearanc": 65, "under": 65, "electr": 66, "pinout": 66, "categori": [66, 91], "pin": [66, 250], "commun": [66, 89, 251, 314], "puls": 66, "per": 66, "second": 66, "pp": 66, "mount": 67, "rail": 67, "cockpit": 68, "tool": [68, 89], "prerequisit": [68, 315, 317], "setup": [68, 75, 76, 77, 87, 88, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 251, 253, 254, 255, 256, 257, 268, 269, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 311, 312, 318, 319, 321, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333], "version": [68, 74, 91, 178, 269], "wifi": [68, 293], "set": [68, 75, 235, 282, 283, 314, 319, 328], "pre": 69, "3": [69, 75, 76, 77, 83, 89, 282], "portain": 70, "vnc": 71, "tigervnc": 71, "viewer": [71, 276, 285, 286], "vncviewer": 71, "prepar": [71, 76, 77, 89], "vncserver": 71, "boot": 71, "protobuf": [73, 88, 89, 202, 203, 204, 253], "librari": [74, 273], "platform": 74, "tutori": [75, 81, 226], "up": [75, 84, 282, 283, 314, 319], "variabl": [75, 91], "head": [75, 76, 77, 78, 79], "over": [75, 76, 77, 78, 79, 89], "part": [75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 310], "enter": [76, 77], "virtualenv": [76, 77, 87], "cam": [76, 78, 89, 226, 315, 319], "4": [77, 78, 84, 89], "deploi": [77, 78, 239], "packag": [78, 87, 247, 307, 313, 324], "deploy": 78, "web_cam_image_servic": 78, "battery_servic": 78, "recreat": 78, "arm64": 78, "udev": 78, "rule": 78, "It": 78, "confirm": 78, "5": [78, 79, 85, 89], "playback": [79, 303], "its": 79, "cloud": [79, 89, 154, 247, 251, 284, 329], "6": [79, 80, 86], "further": 80, "read": 80, "fetch": [81, 82, 83, 84, 85, 86], "train": 82, "model": [82, 83, 86], "evalu": 83, "pick": 84, "detect": [85, 320, 322], "peopl": 85, "quickstart": 87, "pip": 87, "verifi": 87, "queri": [87, 279], "get": [87, 276], "account": 87, "ping": 87, "full": 87, "distribut": 87, "github": 87, "hello": [87, 288, 300, 305], "let": 87, "see": 87, "independ": [87, 296], "take": [87, 88], "next": 87, "program": [88, 225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 256, 283, 287, 288, 289, 308, 325], "fundament": 88, "retriev": [88, 263, 277], "asynchron": [88, 279], "inspect": 88, "wa": 88, "defin": [88, 282], "endpoint": [88, 91, 269, 273, 321], "clear": 88, "ownership": 88, "establish": 88, "timesync": [88, 326], "off": [88, 89], "0": 89, "chang": [89, 323], "known": [89, 324], "issu": [89, 324], "bug": 89, "fix": 89, "improv": 89, "sampl": 89, "1": [89, 282], "live": 89, "relat": 89, "preexist": 89, "undiscov": 89, "prior": 89, "upcom": 89, "logstatu": [89, 91], "depend": [89, 92, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 249, 250, 251, 253, 254, 255, 256, 257, 268, 269, 270, 271, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 294, 295, 299, 300, 301, 302, 303, 304, 305, 306, 308, 309, 310, 311, 312, 318, 319, 321, 323, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334], "field": 89, "valu": [89, 91, 314], "imped": [89, 236], "fan": [89, 272], "ground": 89, "clutter": 89, "staircas": [89, 91], "timeout": 89, "renam": 89, "class": 89, "disallow": 89, "auto": [89, 106, 245], "return": [89, 106, 245], "constrain": [89, 228], "pushbar": 89, "open": 89, "ir": [89, 139, 256], "emitt": 89, "estim": 89, "licens": [89, 91, 144, 290], "se2trajectorycommand": [89, 91], "except": [89, 126, 212, 218, 222], "environment": 89, "expand": 89, "poor": 89, "expos": 89, "specifi": [89, 246], "consist": [89, 282], "across": 89, "bosdyn": [89, 91, 190], "miscellan": 89, "proto": [90, 91, 95, 195], "alertdata": 91, "severitylevel": 91, "arm_command": 91, "armcartesiancommand": 91, "armimpedancecommand": 91, "armjointmovecommand": 91, "armjointposit": 91, "armjointtrajectori": 91, "armjointtrajectorypoint": 91, "armjointveloc": 91, "armparam": 91, "armstopcommand": 91, "armvelocitycommand": 91, "cartesianveloc": 91, "cylindricalveloc": 91, "gazecommand": 91, "namedarmpositionscommand": 91, "axismod": 91, "plannerstatu": 91, "arm_surface_contact": 91, "admittanceset": 91, "arm_surface_contact_servic": 91, "armsurfacecontactcommand": 91, "armsurfacecontactrespons": 91, "armsurfacecontactservic": 91, "getauthtokenrequest": 91, "getauthtokenrespons": 91, "auth_servic": 91, "authservic": 91, "auto_return": 91, "configurerequest": 91, "configurerespons": 91, "getconfigurationrequest": 91, "getconfigurationrespons": 91, "startrequest": 91, "startrespons": 91, "auto_return_servic": 91, "autoreturnservic": 91, "compileautowalkrequest": 91, "compileautowalkrespons": 91, "failedelementsentri": 91, "elementidentifi": 91, "failedel": 91, "loadautowalkrequest": 91, "loadautowalkrespons": 91, "nodeidentifi": 91, "autowalk_servic": 91, "autowalkservic": 91, "walk": [91, 242, 271], "dataacquisit": 91, "executechoreographi": 91, "remotegrpc": 91, "sleep": 91, "actionwrapp": 91, "armsensorpoint": 91, "grippercameraparam": 91, "grippercommand": 91, "robotbodypos": 91, "robotbodysit": 91, "spotcamalign": 91, "align": 91, "spotcaml": 91, "brightnessesentri": 91, "spotcamptz": 91, "batterymonitor": 91, "choreographyitem": 91, "failurebehavior": 91, "proceedif": 91, "returntostartandtermin": 91, "returntostartandtryagainlat": 91, "safepoweroff": 91, "globalparamet": 91, "playbackmod": 91, "continu": 91, "onc": 91, "period": 91, "target": 91, "reloc": 91, "targetstowbehavior": 91, "basic_command": 91, "armdragcommand": 91, "batterychangeposecommand": 91, "constrainedmanipulationcommand": 91, "freezecommand": 91, "jointcommand": 91, "contactadvic": 91, "updaterequest": 91, "gain": 91, "robotcommandfeedbackstatu": 91, "se2velocitycommand": 91, "safepoweroffcommand": 91, "selfrightcommand": 91, "sitcommand": 91, "stanc": [91, 323], "footpositionsentri": 91, "stancecommand": 91, "standcommand": 91, "stopcommand": 91, "directionhint": 91, "controlmod": 91, "tasktyp": 91, "advic": 91, "bodymovementstatu": 91, "finalgoalstatu": 91, "unsafeact": 91, "standingst": 91, "datadescriptor": 91, "descriptorblock": 91, "fileformatdescriptor": 91, "annotationsentri": 91, "fileformatvers": 91, "fileindex": 91, "messagetypedescriptor": 91, "podtypedescriptor": 91, "seriesblockindex": 91, "blockentri": 91, "seriesdescriptor": 91, "seriesidentifi": 91, "specentri": 91, "structtypedescriptor": 91, "keytoseriesidentifierhashentri": 91, "checksumtyp": 91, "podtypeenum": 91, "data_acquisit": 91, "acquiredatarequest": 91, "acquiredatarespons": 91, "acquireplugindatarequest": 91, "acquireplugindatarespons": 91, "acquisitioncapabilitylist": 91, "acquisitionrequestlist": 91, "associatedalertdata": 91, "associatedmetadata": 91, "cancelacquisitionrequest": 91, "cancelacquisitionrespons": 91, "captureactionid": 91, "dataacquisitioncap": 91, "datacaptur": 91, "dataerror": 91, "dataidentifi": 91, "getserviceinforequest": 91, "getserviceinforespons": 91, "getstatusrequest": 91, "getstatusrespons": 91, "imageacquisitioncap": 91, "imagesourcecaptur": 91, "livedatarequest": 91, "livedatarespons": 91, "capabilitylivedata": 91, "signalsentri": 91, "networkcomputecap": 91, "networkcomputecaptur": 91, "networkcomputeerror": 91, "pluginserviceerror": 91, "errorcod": 91, "data_acquisition_plugin_servic": 91, "dataacquisitionpluginservic": 91, "data_acquisition_servic": 91, "dataacquisitionservic": 91, "data_acquisition_stor": 91, "actionidqueri": 91, "dataqueryparam": 91, "listcaptureactionsrequest": 91, "listcaptureactionsrespons": 91, "liststoredalertdatarequest": 91, "liststoredalertdatarespons": 91, "liststoreddatarequest": 91, "liststoreddatarespons": 91, "liststoredimagesrequest": 91, "liststoredimagesrespons": 91, "liststoredmetadatarequest": 91, "liststoredmetadatarespons": 91, "querymaxcaptureidrequest": 91, "querymaxcaptureidrespons": 91, "queryparamet": 91, "querystoredcaptureresult": 91, "querystoredcapturesrequest": 91, "querystoredcapturesrespons": 91, "storealertdatarequest": 91, "storealertdatarespons": 91, "storedatarequest": 91, "storedatarespons": 91, "storeimagerequest": 91, "storeimagerespons": 91, "storemetadatarequest": 91, "storemetadatarespons": 91, "storedcaptureddata": 91, "timerangequeri": 91, "data_acquisition_store_servic": 91, "dataacquisitionstoreservic": 91, "data_buff": 91, "datablob": 91, "operatorcom": 91, "recorddatablobsrequest": 91, "recorddatablobsrespons": 91, "recordeventsrequest": 91, "recordeventsrespons": 91, "recordoperatorcommentsrequest": 91, "recordoperatorcommentsrespons": 91, "recordsignalticksrequest": 91, "recordsignalticksrespons": 91, "recordtextmessagesrequest": 91, "recordtextmessagesrespons": 91, "registersignalschemarequest": 91, "registersignalschemarespons": 91, "signalschema": 91, "signalschemaid": 91, "signaltick": 91, "textmessag": 91, "logpreservehint": 91, "encod": 91, "data_buffer_servic": 91, "databufferservic": 91, "data_chunk": 91, "datachunk": 91, "data_index": 91, "blobpag": 91, "blobspec": 91, "databufferstatu": 91, "dataindex": 91, "dataqueri": 91, "deletedatapagesrequest": 91, "deletedatapagesrespons": 91, "deletepagestatu": 91, "eventspec": 91, "eventscom": 91, "eventscommentsspec": 91, "getdatabufferstatusrequest": 91, "getdatabufferstatusrespons": 91, "getdataindexrequest": 91, "getdataindexrespons": 91, "getdatapagesrequest": 91, "getdatapagesrespons": 91, "geteventscommentsrequest": 91, "geteventscommentsrespons": 91, "grpcpage": 91, "grpcspec": 91, "pageinfo": 91, "pagesandtimestamp": 91, "compress": 91, "pageformat": 91, "data_servic": 91, "dataservic": 91, "getserviceentryrequest": 91, "getserviceentryrespons": 91, "listserviceentriesrequest": 91, "listserviceentriesrespons": 91, "serviceentri": 91, "directory_registr": 91, "registerservicerequest": 91, "registerservicerespons": 91, "unregisterservicerequest": 91, "unregisterservicerespons": 91, "updateservicerequest": 91, "updateservicerespons": 91, "directory_registration_servic": 91, "directory_servic": 91, "configrang": 91, "dockstat": 91, "dockingcommandfeedbackrequest": 91, "dockingcommandfeedbackrespons": 91, "dockingcommandrequest": 91, "dockingcommandrespons": 91, "getdockingconfigrequest": 91, "getdockingconfigrespons": 91, "getdockingstaterequest": 91, "getdockingstaterespons": 91, "updatedockingparam": 91, "dockedstatu": 91, "linkstatu": 91, "docktyp": 91, "prepposebehavior": 91, "docking_servic": 91, "dockingservic": 91, "deregisterestopendpointrequest": 91, "deregisterestopendpointrespons": 91, "estopcheckinrequest": 91, "estopcheckinrespons": 91, "estopconfig": 91, "estopendpoint": 91, "estopendpointwithstatu": 91, "estopsystemstatu": 91, "getestopconfigrequest": 91, "getestopconfigrespons": 91, "getestopsystemstatusrequest": 91, "getestopsystemstatusrespons": 91, "registerestopendpointrequest": 91, "registerestopendpointrespons": 91, "setestopconfigrequest": 91, "setestopconfigrespons": 91, "estopstoplevel": 91, "estop_servic": 91, "estopservic": 91, "fault_servic": 91, "faultservic": 91, "full_body_command": 91, "fullbodycommand": 91, "box2": 91, "box2withfram": 91, "box3": 91, "box3withfram": 91, "circl": 91, "cylindricalcoordin": 91, "frametreesnapshot": 91, "childtoparentedgemapentri": 91, "parentedg": 91, "matrix": 91, "matrixint32": 91, "matrixint64": 91, "matrixf": 91, "plane": 91, "polylin": 91, "polygon": 91, "polygonwithexclus": 91, "quad": 91, "quaternion": 91, "rai": [91, 157, 308], "se2pos": 91, "se2veloc": 91, "se2velocitylimit": 91, "se3covari": 91, "se3pos": 91, "se3veloc": 91, "vec2": 91, "vec2valu": 91, "vec3": 91, "vec3valu": 91, "vector": 91, "volum": 91, "wrench": 91, "aggreg": [91, 131], "newgpsdatarequest": 91, "newgpsdatarespons": 91, "aggregator_servic": 91, "aggregatorservic": 91, "gpsdatapoint": 91, "accuraci": 91, "fixmod": 91, "satellit": 91, "gpsdevic": 91, "llh": 91, "locationandgpsdevic": 91, "filter": 91, "constel": 91, "getlocationrequest": 91, "getlocationrespons": 91, "gpsstate": 91, "resetregistrationrequest": 91, "resetregistrationrespons": 91, "registration_servic": 91, "registrationservic": 91, "graph_nav": [91, 282], "area_callback": 91, "areacallbackerror": 91, "areacallbackinform": 91, "areacallbackinformationrequest": 91, "areacallbackinformationrespons": 91, "begincallbackrequest": 91, "begincallbackrespons": 91, "begincontrolrequest": 91, "begincontrolrespons": 91, "endcallbackrequest": 91, "endcallbackrespons": 91, "regioninform": 91, "routechangerequest": 91, "routechangerespons": 91, "stopconfigur": 91, "updatecallbackrequest": 91, "updatecallbackrespons": 91, "navpolici": 91, "updateloc": 91, "callerror": 91, "entitywait": 91, "facedirect": 91, "stage": 91, "errortyp": 91, "localizationchang": 91, "area_callback_data": 91, "areacallbackdata": 91, "areacallbackmapconfig": 91, "area_callback_servic": 91, "areacallbackservic": 91, "gpslocal": 91, "areacallbackserviceerror": 91, "cleargraphrequest": 91, "cleargraphrespons": 91, "downloadedgesnapshotrequest": 91, "downloadedgesnapshotrespons": 91, "downloadgraphrequest": 91, "downloadgraphrespons": 91, "downloadwaypointsnapshotrequest": 91, "downloadwaypointsnapshotrespons": 91, "gpsnavigationparam": 91, "getlocalizationstaterequest": 91, "getlocalizationstaterespons": 91, "lostdetectorst": 91, "modifynavigationrespons": 91, "navigaterouterequest": 91, "navigaterouterespons": 91, "navigatetoanchorrequest": 91, "navigatetoanchorrespons": 91, "navigatetorequest": 91, "navigatetorespons": 91, "navigationfeedbackrequest": 91, "navigationfeedbackrespons": 91, "activeregioninform": 91, "activeregioninformationentri": 91, "areacallbackerrorsentri": 91, "remotepointcloudstatu": 91, "routefollowingparam": 91, "routegenparam": 91, "sensorcompatibilitystatu": 91, "setlocalizationrequest": 91, "setlocalizationrespons": 91, "suspectedambigu": 91, "travelparam": 91, "uploadedgesnapshotrequest": 91, "uploadedgesnapshotrespons": 91, "uploadgraphrequest": 91, "uploadgraphrespons": 91, "validationstatu": 91, "uploadwaypointsnapshotrequest": 91, "uploadwaypointsnapshotrespons": 91, "validategraphrequest": 91, "validategraphrespons": 91, "visualrefinementopt": 91, "gpsstatu": 91, "areacallbackstatu": 91, "blockagestatu": 91, "routefollowingstatu": 91, "stuckreason": 91, "resumebehavior": 91, "routeblockedbehavior": 91, "startroutebehavior": 91, "fiducialinit": 91, "qualitycheckresult": 91, "featurequalitytoler": 91, "graph_nav_servic": 91, "anchoredworldobject": 91, "areacallbackregion": 91, "clientmetadata": 91, "areacallbacksentri": 91, "stairdata": 91, "edgesnapshot": 91, "mapstat": 91, "stat": 91, "gpsset": 91, "localizeregion": 91, "circle2d": 91, "empti": 91, "loopclosureset": 91, "waypointsnapshot": 91, "annotationst": 91, "directionconstraint": 91, "groundclutteravoidancemod": 91, "pathfollowingmod": 91, "descentprefer": 91, "edgesourc": 91, "waypointsourc": 91, "map_process": 91, "anchorhintuncertainti": 91, "anchoringhint": 91, "posebound": 91, "processanchoringrequest": 91, "measurementparam": 91, "optimizerparam": 91, "processanchoringrespons": 91, "gpsresult": 91, "processtopologyrequest": 91, "collisioncheckingparam": 91, "fiducialloopclosureparam": 91, "icpparam": 91, "odometryloopclosureparam": 91, "processtopologyrespons": 91, "waypointanchorhint": 91, "worldobjectanchorhint": 91, "map_processing_servic": 91, "mapprocessingservic": 91, "completedrout": 91, "completededg": 91, "createedgerequest": 91, "createedgerespons": 91, "createwaypointrequest": 91, "createwaypointrespons": 91, "getrecordstatusrequest": 91, "getrecordstatusrespons": 91, "recordingenviron": 91, "setrecordingenvironmentrequest": 91, "setrecordingenvironmentrespons": 91, "startrecordingrequest": 91, "startrecordingrespons": 91, "stoprecordingrequest": 91, "stoprecordingrespons": 91, "recording_servic": 91, "gripper_camera_param": 91, "grippercameragetparamrequest": 91, "grippercameragetparamrespons": 91, "grippercameraparamrequest": 91, "grippercameraparamrespons": 91, "roiparamet": 91, "cameramod": 91, "ledmod": 91, "hdrparamet": 91, "roiwindows": 91, "gripper_camera_param_servic": 91, "grippercameraparamservic": 91, "gripper_command": 91, "clawgrippercommand": 91, "header": 91, "commonerror": 91, "requesthead": 91, "responsehead": 91, "captureparamet": 91, "getimagerequest": 91, "getimagerespons": 91, "imagecaptur": 91, "imagecaptureandsourc": 91, "imagerequest": 91, "imagerespons": 91, "imagesourc": 91, "pinholemodel": 91, "cameraintrins": 91, "listimagesourcesrequest": 91, "listimagesourcesrespons": 91, "pixelformat": 91, "imagetyp": 91, "image_geometri": 91, "areai": 91, "rectanglei": 91, "image_servic": 91, "imageservic": 91, "ir_enable_dis": 91, "irenabledisablerequest": 91, "irenabledisablerespons": 91, "ir_enable_disable_servic": 91, "irenabledisableservic": 91, "actionaft": 91, "controlledmotorsoff": 91, "immediaterobotoff": 91, "leasestal": 91, "recordev": 91, "checkinrequest": 91, "checkinrespons": 91, "livepolici": 91, "modifypolicyrequest": 91, "modifypolicyrespons": 91, "policycontrolact": 91, "keepalive_servic": 91, "keepaliveservic": 91, "acquireleaserequest": 91, "acquireleaserespons": 91, "leaseown": 91, "leaseresourc": 91, "leaseuseresult": 91, "listleasesrequest": 91, "listleasesrespons": 91, "resourcetre": 91, "retainleaserequest": 91, "retainleaserespons": 91, "returnleaserequest": 91, "returnleaserespons": 91, "takeleaserequest": 91, "takeleaserespons": 91, "lease_servic": 91, "leaseservic": 91, "getfeatureenabledrequest": 91, "getfeatureenabledrespons": 91, "featureenabledentri": 91, "getlicenseinforequest": 91, "getlicenseinforespons": 91, "licenseinfo": 91, "license_servic": 91, "licenseservic": 91, "local_grid": 91, "getlocalgridtypesrequest": 91, "getlocalgridtypesrespons": 91, "getlocalgridsrequest": 91, "getlocalgridsrespons": 91, "localgrid": 91, "localgridext": 91, "localgridrequest": 91, "localgridrespons": 91, "localgridtyp": 91, "cellformat": 91, "local_grid_servic": 91, "localgridservic": 91, "log_statu": 91, "getactivelogstatusesrequest": 91, "getactivelogstatusesrespons": 91, "getlogstatusrequest": 91, "getlogstatusrespons": 91, "startexperimentlogrequest": 91, "startexperimentlogrespons": 91, "startretrologrequest": 91, "startretrologrespons": 91, "terminatelogrequest": 91, "terminatelogrespons": 91, "updateexperimentlogrequest": 91, "updateexperimentlogrespons": 91, "log_status_servic": 91, "logstatusservic": 91, "manipulation_api": 91, "allowableorient": 91, "apigraspoverrid": 91, "apigraspoverriderequest": 91, "apigraspoverriderespons": 91, "apigraspedcarrystateoverrid": 91, "graspparam": 91, "manipulationapifeedbackrequest": 91, "manipulationapifeedbackrespons": 91, "manipulationapirequest": 91, "manipulationapirespons": 91, "pickobject": 91, "pickobjectexecuteplan": 91, "pickobjectinimag": 91, "pickobjectrayinworld": 91, "rotationwithtoler": 91, "squeezegrasp": 91, "vectoralignmentwithtoler": 91, "walktoobjectinimag": 91, "walktoobjectrayinworld": 91, "overrid": [91, 235], "grasppositionconstraint": 91, "manipulationcamerasourc": 91, "manipulationfeedbackst": 91, "walkgazemod": 91, "manipulation_api_servic": 91, "manipulationapiservic": 91, "absolute_metr": 91, "absolutemetricssnapshot": 91, "metrics_logging_robot": 91, "getabsolutemetricsnapshotrequest": 91, "getabsolutemetricsnapshotrespons": 91, "getmetricsrequest": 91, "getmetricsrespons": 91, "getstoresequencerangerequest": 91, "getstoresequencerangerespons": 91, "metrics_logging_robot_servic": 91, "metricsloggingrobotservic": 91, "signed_proto": 91, "signedproto": 91, "answerquestionrequest": 91, "answerquestionrespons": 91, "failednod": 91, "getinforequest": 91, "getinforespons": 91, "getmissionrequest": 91, "getmissionrespons": 91, "getstaterequest": 91, "getstaterespons": 91, "loadmissionrequest": 91, "loadmissionrespons": 91, "missioninfo": 91, "nodeinfo": 91, "pausemissionrequest": 91, "pausemissionrespons": 91, "playmissionrequest": 91, "playmissionrespons": 91, "playset": 91, "question": [91, 294], "restartmissionrequest": 91, "restartmissionrespons": 91, "answeredquest": 91, "nodestatesattick": 91, "nodest": 91, "blackboardst": 91, "stopmissionrequest": 91, "stopmissionrespons": 91, "mission_servic": 91, "bosdyndockst": 91, "bosdyngraphnavloc": 91, "bosdyngraphnavst": 91, "bosdyngrippercameraparamsst": 91, "bosdynnavigaterout": 91, "bosdynnavigateto": 91, "bosdynpowerrequest": 91, "bosdynrecordev": 91, "additionalparametersentri": 91, "bosdynrobotcommand": 91, "bosdynrobotst": 91, "clearbehaviorfault": 91, "operand": 91, "constantresult": 91, "dataacquisitiononinterrupt": 91, "datetoblackboard": 91, "defineblackboard": 91, "fordur": 91, "formatblackboard": 91, "missionuploadchoreographi": 91, "paralleland": 91, "prompt": [91, 294], "optionslist": 91, "restartwhenpaus": 91, "retainleas": 91, "retri": 91, "selector": 91, "setblackboard": 91, "setgraspoverrid": 91, "setgrippercameraparam": 91, "simpleparallel": 91, "spotcamfocusst": 91, "adjustparamet": 91, "spotcamresetautofocu": 91, "spotcamstoremedia": 91, "storemetadata": 91, "switch": 91, "intchildrenentri": 91, "compar": 91, "handlestal": 91, "completionbehavior": 91, "establishsessionrequest": 91, "establishsessionrespons": 91, "getremotemissionserviceinforequest": 91, "getremotemissionserviceinforespons": 91, "stoprequest": 91, "stoprespons": 91, "teardownsessionrequest": 91, "teardownsessionrespons": 91, "tickrequest": 91, "tickrespons": 91, "remote_servic": 91, "util": [91, 102, 164, 184, 208, 214, 215, 219, 223], "constantvalu": 91, "keyvalu": 91, "userdata": 91, "variabledeclar": 91, "result": [91, 282], "mobility_command": 91, "mobilitycommand": 91, "network_compute_bridg": 91, "availablemodel": 91, "computeparamet": 91, "imagesourceandservic": 91, "listavailablemodelsrequest": 91, "listavailablemodelsrespons": 91, "modeldata": 91, "modellabel": 91, "networkcomputeinputdata": 91, "networkcomputeinputdatabridg": 91, "networkcomputeinputdatawork": 91, "networkcomputerequest": 91, "networkcomputerespons": 91, "outputimagesentri": 91, "roioutputdataentri": 91, "networkcomputeserverconfigur": 91, "outputdata": 91, "outputimag": 91, "outputimagespec": 91, "workercomputerequest": 91, "workercomputerespons": 91, "listavailablemodelsstatu": 91, "rotateimag": 91, "networkcomputestatu": 91, "network_compute_bridge_servic": 91, "network_stat": 91, "associ": 91, "wifidevic": 91, "wifistat": 91, "jointlimit": 91, "listpayloadsrequest": 91, "listpayloadsrespons": 91, "momentofintertia": 91, "payloadmassvolumeproperti": 91, "payloadpreset": 91, "mountframenam": 91, "payload_estim": 91, "payloadestimationcommand": 91, "payload_registr": 91, "getpayloadauthtokenrequest": 91, "getpayloadauthtokenrespons": 91, "payloadcredenti": 91, "registerpayloadrequest": 91, "registerpayloadrespons": 91, "updatepayloadattachedrequest": 91, "updatepayloadattachedrespons": 91, "updatepayloadversionrequest": 91, "updatepayloadversionrespons": 91, "payload_registration_servic": 91, "payload_servic": 91, "point_cloud": 91, "getpointcloudrequest": 91, "getpointcloudrespons": 91, "listpointcloudsourcesrequest": 91, "listpointcloudsourcesrespons": 91, "pointcloud": 91, "encodingparamet": 91, "pointcloudrequest": 91, "pointcloudrespons": 91, "pointcloudsourc": 91, "point_cloud_servic": 91, "pointcloudservic": 91, "fanpowercommandfeedbackrequest": 91, "fanpowercommandfeedbackrespons": 91, "fanpowercommandrequest": 91, "fanpowercommandrespons": 91, "powercommandfeedbackrequest": 91, "powercommandfeedbackrespons": 91, "powercommandrequest": 91, "powercommandrespons": 91, "resetsafetystoprequest": 91, "resetsafetystoprespons": 91, "powercommandstatu": 91, "safetystoptyp": 91, "power_servic": 91, "powerservic": 91, "ray_cast": 91, "rayintersect": 91, "raycastrequest": 91, "raycastrespons": 91, "ray_cast_servic": 91, "raycastservic": 91, "robot_command": 91, "clearbehaviorfaultrequest": 91, "clearbehaviorfaultrespons": 91, "jointcontrolstreamrequest": 91, "jointcontrolstreamrespons": 91, "robotcommand": 91, "robotcommandfeedback": 91, "robotcommandfeedbackrequest": 91, "robotcommandfeedbackrespons": 91, "robotcommandrequest": 91, "robotcommandrespons": 91, "robot_command_servic": 91, "robotcommandservic": 91, "robotcommandstreamingservic": 91, "robot_id": 91, "robotid": 91, "robotidrequest": 91, "robotidrespons": 91, "robotsoftwarereleas": 91, "softwarevers": 91, "robot_id_servic": 91, "robotidservic": 91, "robot_st": 91, "batteryst": 91, "behaviorfault": 91, "behaviorfaultst": 91, "combinedjointst": 91, "commsstat": 91, "estopst": 91, "footstat": 91, "terrainst": 91, "hardwareconfigur": 91, "imust": 91, "packet": 91, "jointstat": 91, "kinematicst": 91, "manipulatorst": 91, "motortemperatur": 91, "powerst": 91, "robothardwareconfigurationrequest": 91, "robothardwareconfigurationrespons": 91, "robotimpairedst": 91, "robotlinkmodelrequest": 91, "robotlinkmodelrespons": 91, "robotmetr": 91, "robotmetricsrequest": 91, "robotmetricsrespons": 91, "robotst": 91, "robotstaterequest": 91, "robotstaterespons": 91, "robotstatestreamrequest": 91, "robotstatestreamrespons": 91, "commandst": 91, "servicefaultst": 91, "aggregatedentri": 91, "skeleton": 91, "objmodel": 91, "systemfault": 91, "systemfaultst": 91, "systemst": 91, "wifist": 91, "caus": 91, "contact": [91, 103, 240], "carryst": 91, "stowstat": 91, "motorpowerst": 91, "payloadportspowerst": 91, "robotpowerst": 91, "shorepowerst": 91, "wifiradiopowerst": 91, "impairedstatu": 91, "sever": 91, "robot_state_servic": 91, "robotstateservic": 91, "robotstatestreamingservic": 91, "service_custom": 91, "boolparam": 91, "customparam": 91, "customparamcollect": 91, "customparamerror": 91, "dictparam": 91, "childspec": 91, "specsentri": 91, "valuesentri": 91, "doubleparam": 91, "int64param": 91, "listparam": 91, "oneofparam": 91, "regionofinterestparam": 91, "serviceandsourc": 91, "stringparam": 91, "userinterfaceinfo": 91, "service_fault": 91, "clearservicefaultrequest": 91, "clearservicefaultrespons": 91, "servicefault": 91, "servicefaultid": 91, "triggerservicefaultrequest": 91, "triggerservicefaultrespons": 91, "alertconditionspec": 91, "sensoroutputspec": 91, "signaldata": 91, "signaldisplayinfo": 91, "signalspec": 91, "sparse_featur": 91, "keypoint": 91, "keypointmatch": 91, "keypointset": 91, "match": 91, "matchtyp": 91, "keypointtyp": 91, "choreography_param": 91, "animateparam": 91, "animatedcycleparam": 91, "armmoveparam": 91, "bodyholdparam": 91, "bourreeparam": 91, "buttcircleparam": 91, "chickenheadparam": 91, "clapparam": 91, "crawlparam": 91, "customgaitcommand": 91, "customgaitcommandlimit": 91, "customgaitparam": 91, "eulerratezyxvalu": 91, "eulerzyx": 91, "eulerzyxvalu": 91, "fadecolorparam": 91, "fidgetstandparam": 91, "figure8param": 91, "framesnapshotparam": 91, "frontupparam": 91, "gotoparam": 91, "gripperparam": 91, "hopparam": 91, "independentcolorparam": 91, "jumpparam": 91, "kneelcircleparam": 91, "kneellegmove2param": 91, "kneellegmoveparam": 91, "legjointparam": 91, "pace2stepparam": 91, "randomrotateparam": 91, "ripplecolorparam": 91, "rotatebodyparam": 91, "runningmanparam": 91, "setcolorparam": 91, "sideparam": 91, "stanceshap": 91, "stepparam": 91, "swayparam": 91, "swingparam": 91, "swingphas": 91, "turnparam": 91, "twerkparam": 91, "workspacearmmoveparam": 91, "armmovefram": 91, "eas": 91, "fidgetpreset": 91, "inclus": 91, "lead": 91, "ledlight": 91, "pivot": 91, "lightsid": 91, "side": 91, "swaystyl": 91, "choreography_sequ": 91, "activemov": 91, "animatearm": 91, "handpos": 91, "animatebodi": 91, "animategripp": 91, "animateleg": 91, "animatesingleleg": 91, "animationkeyfram": 91, "armjointangl": 91, "choreographerdisplayinfo": 91, "choreographersav": 91, "choreographycommandrequest": 91, "choreographycommandrespons": 91, "choreographyinfo": 91, "choreographysequ": 91, "choreographystatelog": 91, "choreographystatusrequest": 91, "choreographystatusrespons": 91, "choreographytimeadjustrequest": 91, "choreographytimeadjustrespons": 91, "clearallsequencefilesrequest": 91, "clearallsequencefilesrespons": 91, "deletesequencerequest": 91, "deletesequencerespons": 91, "downloadrobotstatelogrequest": 91, "downloadrobotstatelogrespons": 91, "executechoreographyrequest": 91, "executechoreographyrespons": 91, "getanimationrequest": 91, "getanimationrespons": 91, "getchoreographysequencerequest": 91, "getchoreographysequencerespons": 91, "legjointangl": 91, "listallmovesrequest": 91, "listallmovesrespons": 91, "listallsequencesrequest": 91, "listallsequencesrespons": 91, "loggedfootcontact": 91, "loggedjoint": 91, "loggedstatekeyfram": 91, "modifychoreographyinforequest": 91, "modifychoreographyinforespons": 91, "movecommand": 91, "moveinfo": 91, "moveparam": 91, "savesequencerequest": 91, "savesequencerespons": 91, "sequenceinfo": 91, "startrecordingstaterequest": 91, "startrecordingstaterespons": 91, "stoprecordingstaterequest": 91, "stoprecordingstaterespons": 91, "uploadanimatedmoverequest": 91, "uploadanimatedmoverespons": 91, "uploadchoreographyrequest": 91, "uploadchoreographyrespons": 91, "armplayback": 91, "logtyp": 91, "transitionst": 91, "savedst": 91, "choreography_servic": 91, "choreographyservic": 91, "doorcommand": 91, "autograspcommand": 91, "autopushcommand": 91, "warmstartcommand": 91, "opendoorcommandrequest": 91, "opendoorcommandrespons": 91, "opendoorfeedbackrequest": 91, "opendoorfeedbackrespons": 91, "handletyp": 91, "hingesid": 91, "swingdirect": 91, "door_area_callback": 91, "areacallbackdoorconfig": 91, "door_servic": 91, "doorservic": 91, "inverse_kinemat": 91, "inversekinematicsrequest": 91, "bodymountedtool": 91, "fixedst": 91, "ongroundplanest": 91, "toolgazetask": 91, "toolposetask": 91, "wristmountedtool": 91, "inversekinematicsrespons": 91, "namedarmconfigur": 91, "inverse_kinematics_servic": 91, "inversekinematicsservic": 91, "bodycontrolparam": 91, "bodyassistformanipul": 91, "bodypos": 91, "bodyexternalforceparam": 91, "mobilityparam": 91, "obstacleparam": 91, "terrainparam": 91, "rotationset": 91, "externalforceind": 91, "locomotionhint": 91, "stairsmod": 91, "swingheight": 91, "gratedsurfacesmod": 91, "spot_check": 91, "cameracalibrationcommandrequest": 91, "cameracalibrationcommandrespons": 91, "cameracalibrationfeedbackrequest": 91, "cameracalibrationfeedbackrespons": 91, "depthplanespotcheckresult": 91, "footheightcheckresult": 91, "grippercameracalibrationcommandrequest": 91, "grippercameracalibrationcommandrespons": 91, "grippercameracalibrationfeedbackrequest": 91, "grippercameracalibrationfeedbackrespons": 91, "hiprangeofmotionresult": 91, "jointkinematiccheckresult": 91, "legpaircheckresult": 91, "loadcellspotcheckresult": 91, "payloadcheckresult": 91, "spotcheckcommandrequest": 91, "spotcheckcommandrespons": 91, "spotcheckfeedbackrequest": 91, "spotcheckfeedbackrespons": 91, "cameraresultsentri": 91, "hiprangeofmotionresultsentri": 91, "kinematiccalresultsentri": 91, "loadcellresultsentri": 91, "spot_check_servic": 91, "spotcheckservic": 91, "spot_const": 91, "jointindex": 91, "legdoford": 91, "legindex": 91, "spot_cam": 91, "led": 91, "getledbrightnessrequest": 91, "getledbrightnessrespons": 91, "setledbrightnessrequest": 91, "setledbrightnessrespons": 91, "audio": [91, 168], "deletesoundrequest": 91, "deletesoundrespons": 91, "getaudiocapturechannelrequest": 91, "getaudiocapturechannelrespons": 91, "getaudiocapturegainrequest": 91, "getaudiocapturegainrespons": 91, "getvolumerequest": 91, "getvolumerespons": 91, "listsoundsrequest": 91, "listsoundsrespons": 91, "loadsoundrequest": 91, "loadsoundrespons": 91, "playsoundrequest": 91, "playsoundrespons": 91, "setaudiocapturechannelrequest": 91, "setaudiocapturechannelrespons": 91, "setaudiocapturegainrequest": 91, "setaudiocapturegainrespons": 91, "setvolumerequest": 91, "setvolumerespons": 91, "sound": 91, "audiocapturechannel": 91, "pinholeintrins": 91, "sphericallimit": 91, "compositor": [91, 169], "getircolormaprequest": 91, "getircolormaprespons": 91, "getirmeteroverlayrequest": 91, "getirmeteroverlayrespons": 91, "getscreenrequest": 91, "getscreenrespons": 91, "getvisiblecamerasrequest": 91, "getvisiblecamerasrespons": 91, "window": 91, "ircolormap": 91, "scalingpair": 91, "irmeteroverlai": 91, "deltapair": 91, "normalizedcoordin": 91, "tempunit": 91, "listscreensrequest": 91, "listscreensrespons": 91, "screendescript": 91, "setircolormaprequest": 91, "setircolormaprespons": 91, "setirmeteroverlayrequest": 91, "setirmeteroverlayrespons": 91, "setscreenrequest": 91, "setscreenrespons": 91, "colormap": 91, "tempunittyp": 91, "health": [91, 170], "clearbiteventsrequest": 91, "clearbiteventsrespons": 91, "getbitstatusrequest": 91, "getbitstatusrespons": 91, "degrad": 91, "getsystemlogrequest": 91, "getsystemlogrespons": 91, "gettemperaturerequest": 91, "gettemperaturerespons": 91, "temperatur": 91, "degradationtyp": 91, "debugrequest": 91, "debugrespons": 91, "deleterequest": 91, "deleterespons": 91, "listcamerasrequest": 91, "listcamerasrespons": 91, "listlogpointsrequest": 91, "listlogpointsrespons": 91, "logpoint": 91, "calibr": 91, "imageparam": 91, "retrieverawdatarequest": 91, "retrieverawdatarespons": 91, "retrieverequest": 91, "retrieverespons": 91, "setpassphraserequest": 91, "setpassphraserespons": 91, "storerequest": 91, "storerespons": 91, "tagrequest": 91, "tagrespons": 91, "queuestatu": 91, "recordtyp": 91, "geticeconfigurationrequest": 91, "geticeconfigurationrespons": 91, "getnetworksettingsrequest": 91, "getnetworksettingsrespons": 91, "getsslcertrequest": 91, "getsslcertrespons": 91, "iceserv": 91, "auth_param": 91, "oauth_pair": 91, "networktupl": 91, "seticeconfigurationrequest": 91, "seticeconfigurationrespons": 91, "icetransport": 91, "servertyp": 91, "cyclepowerrequest": 91, "cyclepowerrespons": 91, "getpowerstatusrequest": 91, "getpowerstatusrespons": 91, "powerstatu": 91, "setpowerstatusrequest": 91, "setpowerstatusrespons": 91, "ptz": [91, 176], "getptzfocusstaterequest": 91, "getptzfocusstaterespons": 91, "getptzpositionrequest": 91, "getptzpositionrespons": 91, "getptzvelocityrequest": 91, "getptzvelocityrespons": 91, "initializelensrequest": 91, "initializelensrespons": 91, "listptzrequest": 91, "listptzrespons": 91, "ptzdescript": 91, "ptzfocusst": 91, "ptzposit": 91, "ptzveloc": 91, "setptzfocusstaterequest": 91, "setptzfocusstaterespons": 91, "setptzpositionrequest": 91, "setptzpositionrespons": 91, "setptzvelocityrequest": 91, "setptzvelocityrespons": 91, "ptzfocusmod": 91, "audioservic": 91, "compositorservic": 91, "healthservic": 91, "lightingservic": 91, "medialogservic": 91, "networkservic": 91, "ptzservic": 91, "streamqualityservic": 91, "versionservic": 91, "streamqual": [91, 177], "enablecongestioncontrolrequest": 91, "enablecongestioncontrolrespons": 91, "getstreamparamsrequest": 91, "getstreamparamsrespons": 91, "setstreamparamsrequest": 91, "setstreamparamsrespons": 91, "streamparam": 91, "autoexposur": 91, "awbmod": 91, "manualexposur": 91, "syncautoexposur": 91, "awbmodeenum": 91, "getsoftwareversionrequest": 91, "getsoftwareversionrespons": 91, "stairtransform": 91, "staircaseland": 91, "staircasewithland": 91, "straightstaircas": 91, "land": 91, "knowledgetyp": 91, "boundedwidth": 91, "synchronized_command": 91, "time_rang": 91, "timerang": 91, "time_sync": 91, "timesyncestim": 91, "timesyncroundtrip": 91, "timesyncst": 91, "timesyncupdaterequest": 91, "timesyncupdaterespons": 91, "time_sync_servic": 91, "timesyncservic": 91, "trajectori": [91, 237, 241, 274], "se2trajectori": 91, "se2trajectorypoint": 91, "se3trajectori": 91, "se3trajectorypoint": 91, "scalartrajectori": 91, "scalartrajectorypoint": 91, "vec3trajectori": 91, "vec3trajectorypoint": 91, "wrenchtrajectori": 91, "wrenchtrajectorypoint": 91, "angularinterpol": 91, "positionalinterpol": 91, "pressureenum": 91, "temperatureenum": 91, "world_object": 91, "apriltagproperti": 91, "boundingboxproperti": 91, "dockproperti": 91, "drawablearrow": 91, "drawablebox": 91, "drawablecapsul": 91, "drawablecylind": 91, "drawablefram": 91, "drawablelinestrip": 91, "drawablepoint": 91, "drawableproperti": 91, "drawablespher": 91, "gpsproperti": 91, "imageproperti": 91, "listworldobjectrequest": 91, "listworldobjectrespons": 91, "mutateworldobjectrequest": 91, "mutat": [91, 332], "mutateworldobjectrespons": 91, "nogoregionproperti": 91, "rayproperti": 91, "staircaseproperti": 91, "worldobject": 91, "apriltagposestatu": 91, "worldobjecttyp": 91, "world_object_servic": 91, "worldobjectservic": 91, "scalar": 91, "standard": 92, "convers": 94, "To": [95, 324], "handler": 99, "surfac": [103, 240], "async": 104, "task": 104, "chunk": 119, "nmeapars": 129, "listen": [132, 281], "hierarchi": 142, "valid": 143, "metric": [150, 282], "processor": 156, "cast": [157, 308], "media": 173, "token": [181, 182], "cach": 181, "reader": [188, 192, 195, 196, 197, 199, 200, 202, 203, 205], "writer": [189, 193, 198, 201, 204], "index": 194, "pod": [200, 201], "constant": 211, "recommend": [224, 293], "introductori": 224, "intermedi": 224, "problem": [225, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 282, 288, 289], "begin": 226, "end": 226, "without": [226, 269, 310, 320], "freez": 231, "gcode": 233, "draw": 233, "chalk": 233, "carri": 235, "jointmov": 237, "long": [237, 241], "span": 246, "respons": [246, 301], "gui": [246, 269], "credenti": 247, "gcp": 247, "aw": 247, "comm": [248, 249], "modem": 252, "add": 253, "get_com": 254, "py": [254, 270], "get_ev": 254, "get_index": 254, "get_pag": 254, "delete_pag": 254, "emiss": 256, "my": 257, "percept": 266, "troubleshoot": [269, 270, 282, 296, 316, 320, 325], "generate_extension_data": 270, "build_extens": 270, "extract": 271, "gener": [272, 312], "apriltag": 273, "movement": 273, "distanc": 273, "visual": [275, 330], "depth": 275, "io": [281, 319], "interpret": 282, "wai": 282, "extractor": 284, "actual": 284, "armless": 290, "squat": 290, "wiggl": 290, "through": 292, "lte": 293, "coreio": 293, "answer": 294, "mission_question_answer": 294, "replai": [294, 295, 311], "fire": 297, "extinguish": 297, "detector": 297, "export": [297, 299], "archiv": 299, "send": 303, "back": 303, "weather": 304, "forcast": 304, "detach": 306, "post": 307, "incorpor": 310, "one": 310, "two": 310, "reset": 312, "primari": 312, "redund": 312, "ricoh": 313, "theta": 313, "item": [313, 324], "pc": [313, 324], "demo": 314, "announc": 314, "spotcor": 315, "app": 316, "video": 319, "onli": 320, "respond": 321, "tensorflow": 322, "In": 323, "offset": 323, "stitch": 324, "togeth": 324, "tester": 325, "velodyn": 329, "coordin": 333, "xbox": 334, "instruct": 334}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Spot SDK": [[0, "spot-sdk"]], "Contents": [[0, "contents"], [1, "contents"], [2, "contents"], [4, "contents"], [8, "contents"], [28, "contents"], [39, "contents"], [48, "contents"], [50, "contents"], [58, "contents"], [69, "contents"], [72, "contents"], [74, "contents"], [75, "contents"], [81, "contents"], [90, "contents"], [92, "contents"], [93, "contents"], [97, "contents"], [130, "contents"], [167, "contents"], [186, "contents"], [187, "contents"], [209, "contents"], [216, "contents"], [220, "contents"], [224, "contents"], [251, "contents"], [258, "contents"], [259, "contents"], [260, "contents"], [261, "contents"], [263, "contents"], [264, "contents"], [265, "contents"], [266, "contents"], [267, "contents"]], "Concepts": [[1, "concepts"]], "Spot API": [[1, "spot-api"]], "Orbit API": [[1, "orbit-api"], [2, "orbit-api"]], "About Orbit (formerly Scout)": [[2, "about-orbit-formerly-scout"]], "Authentication": [[2, "authentication"]], "Orbit API and the Python SDK": [[2, "orbit-api-and-the-python-sdk"]], "Deprecation Warning": [[2, "deprecation-warning"]], "Webhooks": [[2, "webhooks"]], "What is a webhook?": [[2, "what-is-a-webhook"]], "Configuring Webhooks": [[2, "configuring-webhooks"]], "Webhook Payloads": [[2, "webhook-payloads"]], "Webhook Events": [[2, "webhook-events"]], "Action Completed": [[2, "action-completed"]], "Action Completed With Alert": [[2, "action-completed-with-alert"]], "Securing Webhooks": [[2, "securing-webhooks"]], "HTTP vs HTTPS": [[2, "http-vs-https"]], "Should I use webhooks or the Orbit API?": [[2, "should-i-use-webhooks-or-the-orbit-api"]], "When to use the Orbit API": [[2, "when-to-use-the-orbit-api"]], "When to use webhooks": [[2, "when-to-use-webhooks"]], "Scheduling Missions": [[2, "scheduling-missions"]], "Key Concepts": [[2, "key-concepts"]], "Weekly Repeat": [[2, "weekly-repeat"]], "Predicting Start Times": [[2, "predicting-start-times"]], "Schedule Priority": [[2, "schedule-priority"]], "Scheduling \u201cGotchas\u201d": [[2, "scheduling-gotchas"]], "Missions Running at Midnight": [[2, "missions-running-at-midnight"]], "Unpredictable \u201cFast as Possible\u201d Schedules": [[2, "unpredictable-fast-as-possible-schedules"]], "Time Zones": [[2, "time-zones"]], "Daylight Savings Time": [[2, "daylight-savings-time"]], "About Spot": [[3, "about-spot"]], "Cameras": [[3, "cameras"]], "Hips and joints": [[3, "hips-and-joints"]], "Robot specifications": [[3, "robot-specifications"]], "Dimensions": [[3, "dimensions"]], "Environment": [[3, "environment"]], "Power": [[3, "power"], [155, "module-bosdyn.client.power"], [175, "module-bosdyn.client.spot_cam.power"]], "Payload": [[3, "payload"], [91, "payload"], [152, "module-bosdyn.client.payload"]], "Sensing": [[3, "sensing"]], "Connectivity": [[3, "connectivity"]], "Spot Arm and Gripper": [[4, "spot-arm-and-gripper"]], "Arm Concepts": [[5, "arm-concepts"]], "SynchronizedCommand": [[5, "synchronizedcommand"], [91, "synchronizedcommand"]], "Requests": [[5, "requests"]], "Feedback": [[5, "feedback"]], "ArmCommand Requests": [[5, "armcommand-requests"]], "Cartesian Moves": [[5, "cartesian-moves"]], "Joint Moves": [[5, "joint-moves"]], "Predefined Poses": [[5, "predefined-poses"]], "Arm Velocity": [[5, "arm-velocity"]], "Gaze": [[5, "gaze"]], "Stop": [[5, "stop"]], "Drag": [[5, "drag"]], "Mobility Request": [[5, "mobility-request"]], "FollowArmCommand": [[5, "followarmcommand"], [91, "followarmcommand"]], "Hand frame": [[5, "hand-frame"]], "Collision avoidance": [[5, "collision-avoidance"]], "Body force limiter": [[5, "body-force-limiter"]], "Safety notes": [[5, "safety-notes"]], "Arm Services": [[6, "arm-services"]], "Manipulation Service": [[6, "manipulation-service"]], "ArmSurfaceContact Service": [[6, "armsurfacecontact-service"]], "Door Service": [[6, "door-service"]], "Inverse Kinematics Service": [[6, "inverse-kinematics-service"], [289, "inverse-kinematics-service"]], "Frames": [[6, "frames"]], "Arm and gripper specifications": [[7, "arm-and-gripper-specifications"]], "Joint ranges of motion and link lengths": [[7, "joint-ranges-of-motion-and-link-lengths"]], "Arm specifications": [[7, "arm-specifications"]], "Gripper specifications": [[7, "gripper-specifications"]], "How big an object can the gripper grasp": [[7, "how-big-an-object-can-the-gripper-grasp"]], "Gripper safety": [[7, "gripper-safety"]], "Pinch points": [[7, "pinch-points"]], "Autonomy": [[8, "autonomy"]], "AutoReturn Service": [[9, "autoreturn-service"]], "What is AutoReturn?": [[9, "what-is-autoreturn"]], "Why would I want to use AutoReturn?": [[9, "why-would-i-want-to-use-autoreturn"]], "Why would I NOT want to use AutoReturn?": [[9, "why-would-i-not-want-to-use-autoreturn"]], "How do I use AutoReturn?": [[9, "how-do-i-use-autoreturn"]], "Configuring AutoReturn": [[9, "configuring-autoreturn"]], "What happens when AutoReturn finishes?": [[9, "what-happens-when-autoreturn-finishes"]], "Using AutoReturn Safely": [[9, "using-autoreturn-safely"]], "Autonomous navigation code examples": [[10, "autonomous-navigation-code-examples"]], "Navigation Services": [[11, "navigation-services"]], "Autowalk Service": [[12, "autowalk-service"], [89, "autowalk-service"]], "Terminology": [[12, "terminology"]], "How Autowalks Differs From Missions": [[12, "how-autowalks-differs-from-missions"]], "Autowalk Format": [[12, "autowalk-format"]], "Components of an Element": [[12, "components-of-an-element"]], "Autowalk Service RPCs": [[12, "autowalk-service-rpcs"]], "Node Identifiers": [[12, "node-identifiers"]], "Debugging Autowalk Service RPC Failures": [[12, "debugging-autowalk-service-rpc-failures"]], "Breaking the \u201cGo Here, Do This\u201d Structure": [[12, "breaking-the-go-here-do-this-structure"]], "Components of Navigation": [[13, "components-of-navigation"]], "Directed Exploration": [[14, "directed-exploration"]], "What is Directed Exploration?": [[14, "what-is-directed-exploration"]], "When is Directed Exploration invoked?": [[14, "when-is-directed-exploration-invoked"]], "How to enable/disable Directed Exploration": [[14, "how-to-enable-disable-directed-exploration"]], "Docking": [[15, "docking"], [89, "docking"], [89, "id142"], [123, "module-bosdyn.client.docking"]], "Spot Dock": [[15, "spot-dock"]], "Docking Service": [[15, "docking-service"]], "Typical Usage": [[15, "typical-usage"]], "Docking the Robot": [[15, "docking-the-robot"]], "Undocking the Robot": [[15, "undocking-the-robot"]], "Docking Config": [[15, "docking-config"]], "Docking State": [[15, "docking-state"]], "GPS on Spot": [[16, "gps-on-spot"]], "Hardware Integration": [[16, "hardware-integration"]], "GPS Receiver Overview": [[16, "gps-receiver-overview"]], "Attaching GPS Receivers to Spot": [[16, "attaching-gps-receivers-to-spot"]], "Writing Custom GPS Services": [[16, "writing-custom-gps-services"]], "Background": [[16, "background"]], "Common Reference Frames": [[16, "common-reference-frames"]], "Software Integration": [[16, "software-integration"]], "Registration to Odometry": [[16, "registration-to-odometry"]], "Registration to Graph Nav Maps": [[16, "registration-to-graph-nav-maps"]], "Navigating using Graph Nav and GPS": [[16, "navigating-using-graph-nav-and-gps"]], "RPCs": [[16, "rpcs"]], "Tablet": [[16, "tablet"]], "GPS Status Display": [[16, "gps-status-display"]], "Recording an Autowalk Mission with GPS": [[16, "recording-an-autowalk-mission-with-gps"]], "GraphNav and Robot Locomotion": [[17, "graphnav-and-robot-locomotion"]], "NavigateTo": [[17, "navigateto"]], "NavigateRoute": [[17, "navigateroute"]], "NavigateToAnchor": [[17, "navigatetoanchor"]], "Status and feedback": [[17, "status-and-feedback"]], "Autonomous navigation errors": [[17, "autonomous-navigation-errors"]], "GraphNav Area Callbacks": [[18, "graphnav-area-callbacks"]], "Introduction": [[18, "introduction"]], "How does an Area Callback work?": [[18, "how-does-an-area-callback-work"]], "Area Callback Policies": [[18, "area-callback-policies"]], "Example: Crosswalk SpotCAM Light": [[18, "example-crosswalk-spotcam-light"]], "The Life Cycle of an Area Callback": [[18, "the-life-cycle-of-an-area-callback"]], "Startup": [[18, "startup"]], "Recording": [[18, "recording"], [158, "module-bosdyn.client.recording"]], "Execution": [[18, "execution"], [296, "execution"], [297, "execution"], [316, "execution"], [320, "execution"], [322, "execution"], [334, "execution"]], "Service Shutdown": [[18, "service-shutdown"]], "Creating an Area Callback": [[18, "creating-an-area-callback"]], "Configuring behavior for a callback": [[18, "configuring-behavior-for-a-callback"]], "Expected Blockages": [[18, "expected-blockages"]], "Impairment Check": [[18, "impairment-check"]], "Entity Waiting": [[18, "entity-waiting"]], "Stop Configuration": [[18, "stop-configuration"]], "How to write a callback\u2019s run()": [[18, "how-to-write-a-callback-s-run"]], "Controlling the Robot": [[18, "controlling-the-robot"]], "Updating the localization": [[18, "updating-the-localization"]], "Reporting Errors": [[18, "reporting-errors"]], "Handling Re-routing": [[18, "handling-re-routing"]], "Testing an Area Callback": [[18, "testing-an-area-callback"]], "Test runner script": [[18, "test-runner-script"]], "Test within GraphNav": [[18, "test-within-graphnav"]], "GraphNav Map Structure": [[19, "graphnav-map-structure"], [286, "graphnav-map-structure"]], "View Map Python Example": [[19, "view-map-python-example"]], "Recording and Modifying Maps": [[19, "recording-and-modifying-maps"]], "Creating waypoints": [[19, "creating-waypoints"]], "Creating edges": [[19, "creating-edges"]], "Map Processing": [[19, "map-processing"], [148, "module-bosdyn.client.map_processing"]], "Topology Processing": [[19, "topology-processing"]], "Why are loops important?": [[19, "why-are-loops-important"]], "Automatic Loop Closure": [[19, "automatic-loop-closure"]], "Ensuring good topology": [[19, "ensuring-good-topology"]], "Anchorings and Anchoring Optimization": [[19, "anchorings-and-anchoring-optimization"]], "What can you do with anchorings?": [[19, "what-can-you-do-with-anchorings"]], "Map Data Transfer": [[19, "map-data-transfer"]], "Downloading maps": [[19, "downloading-maps"]], "Download a map from the controller tablet": [[19, "download-a-map-from-the-controller-tablet"]], "Uploading maps": [[19, "uploading-maps"]], "GraphNav Service": [[20, "graphnav-service"]], "Navigation": [[20, "navigation"], [89, "navigation"]], "GraphNavService RPCs": [[20, "graphnavservice-rpcs"]], "GraphNavRecordingService RPCs": [[20, "graphnavrecordingservice-rpcs"]], "Autonomy Technical Summary": [[21, "autonomy-technical-summary"]], "About GraphNav": [[21, "about-graphnav"]], "Key concepts": [[21, "key-concepts"]], "Waypoints": [[21, "waypoints"]], "Edges": [[21, "edges"]], "Mapping the environment": [[21, "mapping-the-environment"]], "Initialization and localization": [[21, "initialization-and-localization"]], "Lost robots": [[21, "lost-robots"], [23, "lost-robots"]], "Notes on Using Localization Data": [[21, "notes-on-using-localization-data"]], "GraphNav Initialization": [[22, "graphnav-initialization"]], "Initializing with fiducials": [[22, "initializing-with-fiducials"]], "About fiducials": [[22, "about-fiducials"]], "Placing fiducials": [[22, "placing-fiducials"]], "Initializing with search": [[22, "initializing-with-search"]], "Initializing with local geometry and texture": [[22, "initializing-with-local-geometry-and-texture"]], "GraphNav Localization": [[23, "graphnav-localization"]], "Localization update interval": [[23, "localization-update-interval"]], "Feature Deserts": [[23, "feature-deserts"]], "Stuck robots": [[23, "stuck-robots"]], "Stairs and other edge constraints": [[23, "stairs-and-other-edge-constraints"]], "GraphNav Origin": [[23, "graphnav-origin"]], "Mission Service": [[24, "mission-service"]], "Behavior trees": [[24, "behavior-trees"]], "Behavior tree blackboard": [[24, "behavior-tree-blackboard"]], "Behavior tree node types": [[24, "behavior-tree-node-types"]], "Structural nodes": [[24, "structural-nodes"]], "Action nodes": [[24, "action-nodes"]], "Creating a behavior tree": [[24, "creating-a-behavior-tree"]], "Simple sequence example": [[24, "simple-sequence-example"]], "More complex behavior tree example": [[24, "more-complex-behavior-tree-example"]], "MissionService RPCs": [[24, "missionservice-rpcs"]], "RemoteMissionService RPCs": [[24, "remotemissionservice-rpcs"]], "Typical Autonomous Use Case": [[25, "typical-autonomous-use-case"]], "Base Services": [[26, "base-services"]], "robot-id": [[26, "robot-id"]], "auth": [[26, "auth"]], "directory": [[26, "directory"]], "time-sync": [[26, "time-sync"]], "lease": [[26, "lease"]], "BDDF data format": [[27, "bddf-data-format"]], "Motivation": [[27, "motivation"]], "Organization": [[27, "organization"]], "Identifying data series": [[27, "identifying-data-series"]], "Data series annotations": [[27, "data-series-annotations"]], "File structure": [[27, "file-structure"]], "Spot Choreography SDK": [[28, "spot-choreography-sdk"]], "Animation files for Choreographer": [[29, "animation-files-for-choreographer"]], "File specification": [[29, "file-specification"]], "File name and extension": [[29, "file-name-and-extension"]], "Structure": [[29, "structure"]], "Units": [[29, "units"], [91, "units"]], "Commenting": [[29, "commenting"]], "Options file section": [[29, "options-file-section"]], "Supported keywords for the Options section": [[29, "supported-keywords-for-the-options-section"]], "Parameters file section": [[29, "parameters-file-section"]], "Supported parameters pertaining to all tracks": [[29, "supported-parameters-pertaining-to-all-tracks"]], "Supported parameters when controlling the body track": [[29, "supported-parameters-when-controlling-the-body-track"]], "Supported parameters when controlling the arm track": [[29, "supported-parameters-when-controlling-the-arm-track"]], "Supported parameters when controlling the gripper track": [[29, "supported-parameters-when-controlling-the-gripper-track"]], "Supported parameters when controlling arm and gripper tracks": [[29, "supported-parameters-when-controlling-arm-and-gripper-tracks"]], "Body keyframe file section": [[29, "body-keyframe-file-section"]], "Supported columns not pertaining to a particular track": [[29, "supported-columns-not-pertaining-to-a-particular-track"]], "Supported columns pertaining to gripper track": [[29, "supported-columns-pertaining-to-gripper-track"]], "Supported columns pertaining to arm track": [[29, "supported-columns-pertaining-to-arm-track"]], "Supported columns pertaining to body track": [[29, "supported-columns-pertaining-to-body-track"]], "Supported columns pertaining to legs track": [[29, "supported-columns-pertaining-to-legs-track"]], "Animations in Choreography": [[30, "animations-in-choreography"]], "Animation pipeline": [[30, "animation-pipeline"]], "Text files for representing animations": [[30, "text-files-for-representing-animations"]], "Python example script": [[30, "python-example-script"]], "Automatic animation uploading in Choreographer": [[30, "automatic-animation-uploading-in-choreographer"]], "Choreography logs for animations": [[30, "choreography-logs-for-animations"]], "Boston Dynamics Choreographer Developer Guide": [[31, "boston-dynamics-choreographer-developer-guide"]], "Running Choreographer": [[31, "running-choreographer"]], "Choreography safety": [[31, "choreography-safety"], [33, "choreography-safety"], [34, "choreography-safety"]], "Beginner and advanced modes": [[31, "beginner-and-advanced-modes"]], "User interface overview": [[31, "user-interface-overview"]], "Tracks": [[31, "tracks"]], "Slices, beats, BPM, and measures": [[31, "slices-beats-bpm-and-measures"]], "Dance timeline": [[31, "dance-timeline"]], "Adding moves": [[31, "adding-moves"]], "Modifying move blocks": [[31, "modifying-move-blocks"]], "Modifying move parameters": [[31, "modifying-move-parameters"]], "Robot preview": [[31, "robot-preview"]], "Selecting multiple moves": [[31, "selecting-multiple-moves"]], "Copying, pasting, and deleting moves": [[31, "copying-pasting-and-deleting-moves"]], "Loading music": [[31, "loading-music"]], "Red slider": [[31, "red-slider"]], "Previewing moves": [[31, "previewing-moves"]], "Performing Choreography sequences": [[31, "performing-choreography-sequences"]], "Saving and loading Choreography files": [[31, "saving-and-loading-choreography-files"]], "Keyboard controls": [[31, "keyboard-controls"], [38, "keyboard-controls"]], "Sequence editing": [[31, "sequence-editing"]], "Robot control": [[31, "robot-control"]], "WASD driving mode": [[31, "wasd-driving-mode"]], "Command-line arguments": [[31, "command-line-arguments"]], "Install Choreographer": [[32, "install-choreographer"]], "System requirements": [[32, "system-requirements"], [87, "system-requirements"]], "Installing and running Choreographer": [[32, "installing-and-running-choreographer"]], "Choreography in Autowalk": [[33, "choreography-in-autowalk"]], "Adding Choreography Actions to Autowalk Missions": [[33, "adding-choreography-actions-to-autowalk-missions"]], "Using Autowalk to Store and Transfer Choreography Sequences and Animations": [[33, "using-autowalk-to-store-and-transfer-choreography-sequences-and-animations"]], "Boston Dynamics Choreography tablet UI": [[34, "boston-dynamics-choreography-tablet-ui"]], "Using the Choreography drive mode": [[34, "using-the-choreography-drive-mode"]], "Using the tablet to play your own Choreography sequences": [[34, "using-the-tablet-to-play-your-own-choreography-sequences"]], "Uploading choreography sequences with Choreographer": [[34, "uploading-choreography-sequences-with-choreographer"]], "Managing your uploaded Choreography sequences": [[34, "managing-your-uploaded-choreography-sequences"]], "Deleting Saved Choreography Sequences": [[34, "deleting-saved-choreography-sequences"]], "Adding and Removing Labels": [[34, "adding-and-removing-labels"]], "Choreography service": [[35, "choreography-service"]], "Overview": [[35, "overview"], [71, "overview"], [75, "overview"], [293, "overview"], [295, "overview"]], "What is it?": [[35, "what-is-it"]], "Note on reliability": [[35, "note-on-reliability"]], "Choreography terminology": [[35, "choreography-terminology"]], "Slices": [[35, "slices"]], "Tracks and layering": [[35, "tracks-and-layering"]], "Entry and exit conditions": [[35, "entry-and-exit-conditions"]], "APIs": [[35, "apis"]], "Choreography API": [[35, "choreography-api"]], "Interacting With a Sequence During Execution": [[35, "interacting-with-a-sequence-during-execution"]], "Saving Choreography Sequences to your Spot": [[35, "saving-choreography-sequences-to-your-spot"]], "Animation API": [[35, "animation-api"]], "Choreography logs API": [[35, "choreography-logs-api"]], "Choreography log types": [[35, "choreography-log-types"]], "Time Adjust API": [[35, "time-adjust-api"]], "Choreography client": [[35, "choreography-client"]], "Python examples using the Choreography API": [[35, "python-examples-using-the-choreography-api"]], "Config files": [[35, "config-files"]], "MoveInfoConfig.txt": [[35, "moveinfoconfig-txt"]], "MoveParamsConfig.txt": [[35, "moveparamsconfig-txt"]], "Custom Gait": [[36, "custom-gait"]], "Behavior Within a Sequence": [[36, "behavior-within-a-sequence"]], "Driving Custom Gait": [[36, "driving-custom-gait"]], "Gait Diagram": [[36, "gait-diagram"]], "Presets": [[36, "presets"]], "Tips for Configuring Custom Gait": [[36, "tips-for-configuring-custom-gait"]], "Parameter Reference": [[36, "parameter-reference"]], "Choreography moves reference": [[37, "choreography-moves-reference"]], "Body moves": [[37, "body-moves"]], "rotate_body": [[37, "rotate-body"]], "rotate_body_sharp": [[37, "rotate-body-sharp"]], "body_hold": [[37, "body-hold"]], "body_const": [[37, "body-const"]], "sway": [[37, "sway"]], "random_rotate": [[37, "random-rotate"]], "twerk": [[37, "twerk"]], "butt_circle": [[37, "butt-circle"]], "fidget_stand": [[37, "fidget-stand"]], "Step moves": [[37, "step-moves"]], "step": [[37, "step"]], "goto": [[37, "goto"]], "trot": [[37, "trot"]], "pace": [[37, "pace"]], "turn_2step": [[37, "turn-2step"]], "pace_2step": [[37, "pace-2step"]], "crawl": [[37, "crawl"]], "Dynamic moves": [[37, "dynamic-moves"]], "running_man": [[37, "running-man"]], "bourree": [[37, "bourree"]], "hop": [[37, "hop"]], "jog": [[37, "jog"]], "skip": [[37, "skip"]], "front_up": [[37, "front-up"]], "jump": [[37, "jump"]], "Transition moves": [[37, "transition-moves"]], "sit": [[37, "sit"]], "stand_up": [[37, "stand-up"]], "sit_to_sprawl": [[37, "sit-to-sprawl"]], "random_stretch": [[37, "random-stretch"]], "stand_to_kneel": [[37, "stand-to-kneel"]], "kneel_to_stand": [[37, "kneel-to-stand"]], "kneel_to_stand_fast": [[37, "kneel-to-stand-fast"]], "self_right": [[37, "self-right"]], "leg_pose": [[37, "leg-pose"]], "Kneel moves": [[37, "kneel-moves"]], "kneel_leg_move": [[37, "kneel-leg-move"]], "kneel_leg_move2": [[37, "kneel-leg-move2"]], "kneel_circles": [[37, "kneel-circles"]], "Arm moves": [[37, "arm-moves"]], "nod": [[37, "nod"]], "stow": [[37, "stow"]], "unstow": [[37, "unstow"]], "shoulder_left": [[37, "shoulder-left"]], "shoulder_right": [[37, "shoulder-right"]], "arm_move": [[37, "arm-move"]], "arm_move_no_gripper": [[37, "arm-move-no-gripper"]], "arm_move_relative": [[37, "arm-move-relative"]], "workspace_arm_move": [[37, "workspace-arm-move"]], "figure8_move": [[37, "figure8-move"]], "gripper": [[37, "gripper"]], "frame_snapshot": [[37, "frame-snapshot"]], "chicken_head": [[37, "chicken-head"]], "Lights moves": [[37, "lights-moves"]], "set_color": [[37, "set-color"]], "fade_color": [[37, "fade-color"]], "independent_color": [[37, "independent-color"]], "ripple_color": [[37, "ripple-color"]], "custom_gait": [[37, "custom-gait"]], "Connecting robots to Choreographer": [[38, "connecting-robots-to-choreographer"]], "Robot controls": [[38, "robot-controls"]], "Joystick controls": [[38, "joystick-controls"]], "Spot Data": [[39, "spot-data"]], "Data Acquisition Output": [[40, "data-acquisition-output"]], "Zip file structure": [[40, "zip-file-structure"]], "Metadata.json structure": [[40, "metadata-json-structure"]], "CSV structure": [[40, "csv-structure"]], "Data Acquisition Overview": [[41, "data-acquisition-overview"]], "High-level concepts": [[41, "high-level-concepts"]], "Capture capabilities": [[41, "capture-capabilities"]], "Actions": [[41, "actions"], [51, "actions"]], "Acquisition request:": [[41, "acquisition-request"]], "Groups": [[41, "groups"]], "Data Channels": [[41, "data-channels"]], "Downloaded Data": [[41, "downloaded-data"]], "System architecture": [[41, "system-architecture"]], "Implementing Data Acquisition services": [[41, "implementing-data-acquisition-services"]], "Thermal Raw Data": [[42, "thermal-raw-data"]], "Understanding thermal data": [[42, "understanding-thermal-data"]], "Thermal file types (.pgm vs .raw)": [[42, "thermal-file-types-pgm-vs-raw"]], "Rendering raw thermal data": [[42, "rendering-raw-thermal-data"]], "Scaling the color mapping": [[42, "scaling-the-color-mapping"]], "Color palettes:": [[42, "color-palettes"]], "Example code": [[42, "example-code"]], "Data Buffer Overview": [[43, "data-buffer-overview"]], "Supported Data Types": [[43, "supported-data-types"]], "Text Messages": [[43, "text-messages"]], "Operator Comments": [[43, "operator-comments"]], "Events": [[43, "events"], [246, "events"]], "Signals": [[43, "signals"]], "Blobs": [[43, "blobs"]], "Internally Logged Data": [[43, "internally-logged-data"]], "Data Service": [[43, "data-service"], [120, "module-bosdyn.client.data_service"]], "Data Download": [[43, "data-download"]], "Raw Data Download": [[43, "raw-data-download"]], "Data Acquisition Download": [[43, "data-acquisition-download"]], "Authorization": [[43, "authorization"]], "Example": [[43, "example"]], "BDDF (Boston Dynamics Data Format)": [[43, "bddf-boston-dynamics-data-format"]], "Developing API Services": [[44, "developing-api-services"]], "Interface": [[44, "interface"]], "Robot Directory": [[44, "robot-directory"]], "gRPC": [[44, "grpc"]], "Basic Structure": [[44, "basic-structure"]], "Servicers": [[44, "servicers"]], "Infrastructure": [[44, "infrastructure"]], "Starting a Server": [[44, "starting-a-server"]], "Registering a Service": [[44, "registering-a-service"]], "Examples": [[44, "examples"], [262, "examples"], [290, "examples"]], "E-Stop Service": [[45, "e-stop-service"]], "Configuration": [[45, "configuration"]], "Registration": [[45, "registration"], [91, "registration"]], "CheckIn": [[45, "checkin"]], "Operation": [[45, "operation"]], "Faults": [[46, "faults"]], "System Faults": [[46, "system-faults"]], "Behavior Faults": [[46, "behavior-faults"], [89, "behavior-faults"]], "Service Faults": [[46, "service-faults"], [89, "service-faults"]], "Service Fault Guidelines": [[46, "service-fault-guidelines"]], "Geometry and Frames": [[47, "geometry-and-frames"]], "Frames in the Spot robot world": [[47, "frames-in-the-spot-robot-world"]], "Transformations between Spot\u2019s frames": [[47, "transformations-between-spot-s-frames"]], "Transformation Math": [[47, "transformation-math"]], "Adding frames during robot operation": [[47, "adding-frames-during-robot-operation"]], "Joint Control API (Beta)": [[48, "joint-control-api-beta"]], "Components": [[48, "components"], [293, "components"]], "Usage": [[48, "usage"], [293, "usage"]], "Robot Command Stream": [[48, "robot-command-stream"]], "Note on Closed-Loop Joint Behavior": [[48, "note-on-closed-loop-joint-behavior"]], "Robot State Stream": [[48, "robot-state-stream"]], "Example Code": [[48, "example-code"]], "Knee Torque Limits": [[49, "knee-torque-limits"]], "Supplemental Data": [[50, "supplemental-data"]], "Joint Order": [[50, "joint-order"]], "Robot Morphology": [[50, "robot-morphology"]], "Joint Transmission Details": [[50, "joint-transmission-details"]], "Joint Gear Ratios and Max Motor Torque": [[50, "joint-gear-ratios-and-max-motor-torque"]], "Knee Joints": [[50, "knee-joints"]], "Coupled SH1/EL0 Joints": [[50, "coupled-sh1-el0-joints"]], "Keepalive Service (BETA)": [[51, "keepalive-service-beta"]], "Policy": [[51, "policy"], [91, "policy"]], "The Policy timer": [[51, "the-policy-timer"]], "Removing a Policy": [[51, "removing-a-policy"]], "Backwards compatibility": [[51, "backwards-compatibility"]], "Lease Service": [[52, "lease-service"]], "Basic Lease Usage": [[52, "basic-lease-usage"]], "[Advanced] Understanding Lease Errors": [[52, "advanced-understanding-lease-errors"]], "[Advanced] Lease Resources": [[52, "advanced-lease-resources"]], "[Advanced] Additional Lease Usage Patterns": [[52, "advanced-additional-lease-usage-patterns"]], "[Advanced] Lease Representation": [[52, "advanced-lease-representation"]], "Machine Learning Bridge and External Compute": [[53, "machine-learning-bridge-and-external-compute"]], "Components of the system": [[53, "components-of-the-system"]], "Example Concept": [[53, "example-concept"]], "Example Clients and Servers": [[53, "example-clients-and-servers"]], "RPC Definitions: NetworkComputeBridge and NetworkComputeBridgeWorker": [[53, "rpc-definitions-networkcomputebridge-and-networkcomputebridgeworker"]], "Parameterization": [[53, "parameterization"]], "Networking": [[54, "networking"], [68, "networking"]], "Network Choice": [[54, "network-choice"]], "gRPC and Protocol Buffers": [[54, "grpc-and-protocol-buffers"]], "Using gRPC and Protocol Buffers": [[54, "using-grpc-and-protocol-buffers"]], "Error Handling": [[54, "error-handling"]], "HTTP/2, TLS, and TCP": [[54, "http-2-tls-and-tcp"]], "Robot Discovery": [[54, "robot-discovery"]], "Robot Services": [[55, "robot-services"]], "estop": [[55, "estop"]], "power": [[55, "power"]], "robot-command": [[55, "robot-command"]], "robot-state": [[55, "robot-state"]], "log-status": [[55, "log-status"]], "metrics_logging": [[55, "metrics-logging"]], "image": [[55, "image"]], "local-grid": [[55, "local-grid"]], "world-object": [[55, "world-object"]], "Service Customization": [[56, "service-customization"], [89, "service-customization"], [89, "id34"]], "Service Customization Language": [[56, "service-customization-language"]], "Spec": [[56, "spec"]], "Parameter": [[56, "parameter"], [91, "parameter"]], "Parameter Types": [[56, "parameter-types"]], "Double": [[56, "double"]], "Int": [[56, "int"]], "Units for Int & Double": [[56, "units-for-int-double"]], "String": [[56, "string"]], "Bool": [[56, "bool"]], "Region of Interest": [[56, "region-of-interest"]], "Dictionary": [[56, "dictionary"]], "One-Of": [[56, "one-of"]], "List": [[56, "list"]], "Custom Param": [[56, "custom-param"]], "Example Specifications": [[56, "example-specifications"]], "Implementing Service Customization": [[56, "implementing-service-customization"]], "Image services": [[56, "image-services"]], "Network Compute Bridge Worker services": [[56, "network-compute-bridge-worker-services"]], "Remote Mission services": [[56, "remote-mission-services"]], "Area Callback services": [[56, "area-callback-services"]], "Parameter Coercion": [[56, "parameter-coercion"]], "Integrate a Payload with the Data Acquisition Pipeline": [[57, "integrate-a-payload-with-the-data-acquisition-pipeline"]], "Camera Payloads": [[57, "camera-payloads"]], "CameraInterface": [[57, "camerainterface"]], "Using Background Capture Threads": [[57, "using-background-capture-threads"]], "Example Image Services": [[57, "example-image-services"]], "Tips for Creating an Image Service": [[57, "tips-for-creating-an-image-service"]], "Non-image Payloads": [[57, "non-image-payloads"]], "Data Capabilities List": [[57, "data-capabilities-list"]], "Data Collection Function": [[57, "data-collection-function"]], "Example Plugins": [[57, "example-plugins"]], "Error Reporting": [[57, "error-reporting"]], "Tips for Creating a Data Acquisition Plugin": [[57, "tips-for-creating-a-data-acquisition-plugin"]], "Attaching Metadata with other Data or Images": [[57, "attaching-metadata-with-other-data-or-images"]], "Directory Registration and Running the New Service": [[57, "directory-registration-and-running-the-new-service"]], "Testing the New Service": [[57, "testing-the-new-service"]], "Payload Developer Guide": [[58, "payload-developer-guide"]], "Introduction to Spot payloads": [[58, "introduction-to-spot-payloads"]], "Payload Software Interface": [[59, "payload-software-interface"]], "Payload API services": [[59, "payload-api-services"]], "Service and Payload Faults": [[59, "service-and-payload-faults"]], "DirectoryService RPCs": [[59, "directoryservice-rpcs"]], "DirectoryRegistrationService RPCs": [[59, "directoryregistrationservice-rpcs"]], "PayloadService RPCs": [[59, "payloadservice-rpcs"]], "PayloadRegistrationService RPCs": [[59, "payloadregistrationservice-rpcs"]], "Time Synchronization": [[59, "time-synchronization"]], "Registering payloads": [[59, "registering-payloads"]], "Payload self-registration": [[59, "payload-self-registration"]], "Registration examples": [[59, "registration-examples"]], "Configuring and authorizing payloads": [[59, "configuring-and-authorizing-payloads"]], "Payload device network configuration": [[59, "payload-device-network-configuration"]], "Payload port forwarding table": [[59, "payload-port-forwarding-table"]], "Configuring payload mass properties": [[59, "configuring-payload-mass-properties"]], "Position (m)": [[59, "position-m"]], "Orientation (radians)": [[59, "orientation-radians"]], "Total mass (kg)": [[59, "total-mass-kg"]], "Position of Center of Mass (m)": [[59, "position-of-center-of-mass-m"]], "Moment of inertia tensor (kg-m2)": [[59, "moment-of-inertia-tensor-kg-m2"]], "Bounding boxes: Center (m)": [[59, "bounding-boxes-center-m"]], "Bounding boxes: Orientation (radians) ZXY": [[59, "bounding-boxes-orientation-radians-zxy"]], "Bounding boxes: XYZ extent (m)": [[59, "bounding-boxes-xyz-extent-m"]], "CORE I/O Documentation": [[60, "core-i-o-documentation"]], "File System and Release System": [[60, "file-system-and-release-system"]], "System Configuration": [[60, "system-configuration"]], "Admin Web Server Authentication": [[60, "admin-web-server-authentication"]], "How to connect via SSH": [[60, "how-to-connect-via-ssh"]], "How to connect via local terminal with monitor and keyboard": [[60, "how-to-connect-via-local-terminal-with-monitor-and-keyboard"]], "Network and SSH Configuration": [[60, "network-and-ssh-configuration"]], "Default Services": [[60, "default-services"]], "Passwords and Groups": [[60, "passwords-and-groups"]], "Developing on the CORE I/O": [[60, "developing-on-the-core-i-o"]], "Development Environment": [[60, "development-environment"]], "GPIO and PWM": [[60, "gpio-and-pwm"]], "Working with i2c": [[60, "working-with-i2c"]], "Working with the GPU": [[60, "working-with-the-gpu"]], "Spot Extensions": [[60, "spot-extensions"]], "CORE I/O OpenVPN Extension Documentation": [[61, "core-i-o-openvpn-extension-documentation"]], "Before Starting": [[61, "before-starting"]], "dockerfile": [[61, "dockerfile"]], "docker-compose.yml": [[61, "docker-compose-yml"]], "kickoff.sh": [[61, "kickoff-sh"]], "Create or include the following files for our extension": [[61, "create-or-include-the-following-files-for-our-extension"]], "Build The Extension": [[61, "build-the-extension"]], "Run the following from the folder containing all of the above files to build and output the OpenVPN extension": [[61, "run-the-following-from-the-folder-containing-all-of-the-above-files-to-build-and-output-the-openvpn-extension"]], "Running the Extension": [[61, "running-the-extension"]], "Running Custom Applications with Spot": [[62, "running-custom-applications-with-spot"]], "Installing Docker Engine": [[62, "installing-docker-engine"]], "Create Docker Images": [[62, "create-docker-images"]], "Build Docker Images": [[62, "build-docker-images"]], "Test Docker Images Locally": [[62, "test-docker-images-locally"]], "Ports For Incoming Traffic": [[62, "ports-for-incoming-traffic"]], "Manage Payload Software in CORE I/O": [[62, "manage-payload-software-in-core-i-o"]], "CORE I/O Extensions Configuration": [[62, "core-i-o-extensions-configuration"]], "Helper Scripts": [[62, "helper-scripts"]], "Extension Structure": [[62, "extension-structure"]], "Manifest file": [[62, "manifest-file"]], "Docker Images": [[62, "docker-images"]], "Docker Compose YAML configuration file": [[62, "docker-compose-yaml-configuration-file"]], "Other files": [[62, "other-files"]], "Extension Management": [[62, "extension-management"]], "Create Extension": [[62, "create-extension"]], "Install Extension Using Web Portal": [[62, "install-extension-using-web-portal"]], "Install Extension Using a USB Drive": [[62, "install-extension-using-a-usb-drive"]], "Monitoring": [[62, "monitoring"]], "Access Extension Logs": [[62, "access-extension-logs"]], "Stop Extension": [[62, "stop-extension"]], "Remove Extension": [[62, "remove-extension"]], "Command-line Configuration": [[62, "command-line-configuration"]], "Run Application(s) Directly on Compute Payload": [[62, "run-application-s-directly-on-compute-payload"]], "Run Application(s) as a Docker Container": [[62, "run-application-s-as-a-docker-container"]], "Run Applications with docker-compose": [[62, "run-applications-with-docker-compose"]], "Guidelines for Robust Payload Design": [[63, "guidelines-for-robust-payload-design"]], "Crash protection": [[63, "crash-protection"]], "Shock loads": [[63, "shock-loads"]], "Ingress protection": [[63, "ingress-protection"]], "External cabling": [[63, "external-cabling"]], "Designing for edge-case leg interference": [[63, "designing-for-edge-case-leg-interference"]], "Enabling self-righting": [[63, "enabling-self-righting"]], "Mechanical Interfaces": [[64, "mechanical-interfaces"]], "Cable and connector interface": [[64, "cable-and-connector-interface"]], "Correct orientation of DB25 relative to front of robot": [[64, "correct-orientation-of-db25-relative-to-front-of-robot"]], "Keepout dimensions in mm": [[64, "keepout-dimensions-in-mm"]], "Sealing gland geometry in mm": [[64, "sealing-gland-geometry-in-mm"]], "Configuration Requirements": [[65, "configuration-requirements"], [307, "configuration-requirements"]], "Payload ports": [[65, "payload-ports"]], "Payload width": [[65, "payload-width"]], "Payload length": [[65, "payload-length"]], "Payload height": [[65, "payload-height"]], "Payload weight": [[65, "payload-weight"]], "Payload leg Interference": [[65, "payload-leg-interference"]], "Isometric and top views of robot legs ROM": [[65, "isometric-and-top-views-of-robot-legs-rom"]], "Payload clearance with robot arm": [[65, "payload-clearance-with-robot-arm"]], "Payload under arm clearance": [[65, "payload-under-arm-clearance"]], "Electrical Interface": [[66, "electrical-interface"]], "Payload port pinouts by category": [[66, "payload-port-pinouts-by-category"]], "Payload port PIN specifications": [[66, "payload-port-pin-specifications"]], "Payload power requirements": [[66, "payload-power-requirements"]], "Motor power safety": [[66, "motor-power-safety"]], "Payload port requirements": [[66, "payload-port-requirements"]], "Robot Communication and pulse-per-second (PPS)": [[66, "robot-communication-and-pulse-per-second-pps"]], "Mounting Rails": [[67, "mounting-rails"]], "Spot dimensions and reference points": [[67, "spot-dimensions-and-reference-points"]], "Spot CORE Cockpit - System Management Tool": [[68, "spot-core-cockpit-system-management-tool"]], "Prerequisites": [[68, "prerequisites"], [315, "prerequisites"], [317, "prerequisites"]], "Setup": [[68, "setup"]], "Terminal": [[68, "terminal"]], "Check Spot CORE Software Version": [[68, "check-spot-core-software-version"]], "Spot CORE WiFi Network Settings": [[68, "spot-core-wifi-network-settings"]], "Docker Containers": [[68, "docker-containers"]], "Services": [[68, "services"], [89, "services"]], "Additional Cockpit Documentation": [[68, "additional-cockpit-documentation"]], "Pre-3.2 Spot CORE Documentation": [[69, "pre-3-2-spot-core-documentation"]], "Manage Docker Containers in Spot CORE": [[70, "manage-docker-containers-in-spot-core"]], "Portainer Configuration": [[70, "portainer-configuration"]], "Spot CORE VNC": [[71, "spot-core-vnc"]], "TigerVNC Server Enable": [[71, "tigervnc-server-enable"]], "Create a VNC password": [[71, "create-a-vnc-password"]], "TigerVNC Viewer": [[71, "tigervnc-viewer"]], "Install vncviewer": [[71, "install-vncviewer"]], "Start vncviewer": [[71, "start-vncviewer"]], "TigerVNC Server Installation": [[71, "tigervnc-server-installation"]], "Install software": [[71, "install-software"]], "Prepare vncserver": [[71, "prepare-vncserver"]], "Start vncserver": [[71, "start-vncserver"]], "Enable vncserver on boot": [[71, "enable-vncserver-on-boot"]], "Useful TigerVNC Resources": [[71, "useful-tigervnc-resources"]], "API Protocol": [[72, "api-protocol"]], "Boston Dynamics API Protobuf Guidelines": [[73, "boston-dynamics-api-protobuf-guidelines"]], "Python Library": [[74, "python-library"]], "Using the Python Library": [[74, "using-the-python-library"]], "Supported Platforms and Versions": [[74, "supported-platforms-and-versions"]], "Tutorial: Data Collection": [[75, "tutorial-data-collection"]], "Requirements": [[75, "requirements"]], "Initial setup": [[75, "initial-setup"]], "Setting up Python 3 and the Spot SDK": [[75, "setting-up-python-3-and-the-spot-sdk"]], "Environment variables for this tutorial": [[75, "environment-variables-for-this-tutorial"]], "Register a payload for development": [[75, "register-a-payload-for-development"]], "Head over to Part 2: Capturing images >>": [[75, "head-over-to-part-2-capturing-images"]], "Part 2: Capturing Images": [[76, "part-2-capturing-images"]], "Understanding Image Services": [[76, "understanding-image-services"]], "Preparing the environment": [[76, "preparing-the-environment"], [77, "preparing-the-environment"]], "Enter your Spot API virtualenv": [[76, "enter-your-spot-api-virtualenv"], [77, "enter-your-spot-api-virtualenv"]], "Install requirements": [[76, "install-requirements"]], "Directory Setup": [[76, "directory-setup"], [77, "directory-setup"]], "Web cam image service": [[76, "web-cam-image-service"]], "Testing the service": [[76, "testing-the-service"]], "Registering a payload": [[76, "registering-a-payload"], [77, "registering-a-payload"]], "Running the service": [[76, "running-the-service"], [77, "running-the-service"]], "Head over to Part 3: Capturing Other Data >>": [[76, "head-over-to-part-3-capturing-other-data"]], "Part 3: Capturing Other Data": [[77, "part-3-capturing-other-data"]], "Understanding data acquisition plugins": [[77, "understanding-data-acquisition-plugins"]], "Data Acquisition Plugin Service": [[77, "data-acquisition-plugin-service"], [116, "module-bosdyn.client.data_acquisition_plugin_service"]], "Testing the plugin": [[77, "testing-the-plugin"]], "Head over to Part 4: Deploying to the CORE I/O >>": [[77, "head-over-to-part-4-deploying-to-the-core-i-o"]], "Part 4: Deploying to the CORE I/O": [[78, "part-4-deploying-to-the-core-i-o"]], "Packaging the services for deployment": [[78, "packaging-the-services-for-deployment"]], "Creating Docker images": [[78, "creating-docker-images"]], "Creating web_cam_image_service Docker image": [[78, "creating-web-cam-image-service-docker-image"]], "Creating battery_service Docker image": [[78, "creating-battery-service-docker-image"]], "Testing Docker container locally": [[78, "testing-docker-container-locally"]], "Create Spot Extension and Install it on CORE I/O": [[78, "create-spot-extension-and-install-it-on-core-i-o"]], "Recreate Docker Images for ARM64 Architecture": [[78, "recreate-docker-images-for-arm64-architecture"]], "Create docker-compose.yml File": [[78, "create-docker-compose-yml-file"]], "Create Udev Rules Files for Web Cam application": [[78, "create-udev-rules-files-for-web-cam-application"]], "Create manifest.json File": [[78, "create-manifest-json-file"]], "Create Extension and Install It on CORE I/O": [[78, "create-extension-and-install-it-on-core-i-o"]], "Confirming deployment": [[78, "confirming-deployment"]], "Head over to Part 5: Collecting Data >>": [[78, "head-over-to-part-5-collecting-data"]], "Part 5: Collecting Data": [[79, "part-5-collecting-data"]], "Creating Actions": [[79, "creating-actions"]], "Testing the action": [[79, "testing-the-action"]], "Mission Recording": [[79, "mission-recording"]], "Mission playback": [[79, "mission-playback"]], "Configure the robot to automatically upload its data to the cloud.": [[79, "configure-the-robot-to-automatically-upload-its-data-to-the-cloud"]], "Head over to Part 6: Processing Collected Data >>": [[79, "head-over-to-part-6-processing-collected-data"]], "Part 6: Processing Collected Data": [[80, "part-6-processing-collected-data"]], "Understanding the data": [[80, "understanding-the-data"]], "Writing the processing script": [[80, "writing-the-processing-script"]], "Further Reading": [[80, "further-reading"]], "Tutorial: Playing Fetch with Spot": [[81, "tutorial-playing-fetch-with-spot"]], "Fetch Part 2: Training the Model": [[82, "fetch-part-2-training-the-model"]], "Fetch Part 3: Evaluating the Model": [[83, "fetch-part-3-evaluating-the-model"]], "Fetch Part 4: Autonomous Pick Up": [[84, "fetch-part-4-autonomous-pick-up"]], "Fetch Part 5: Detecting People and Playing Fetch": [[85, "fetch-part-5-detecting-people-and-playing-fetch"]], "Fetch Part 6: Running the model on CORE I/O": [[86, "fetch-part-6-running-the-model-on-core-i-o"]], "QuickStart": [[87, "quickstart"]], "System setup": [[87, "system-setup"]], "Python requirements": [[87, "python-requirements"]], "Pip Installation": [[87, "pip-installation"]], "Manage multiple Python environments with virtualenv": [[87, "manage-multiple-python-environments-with-virtualenv"]], "Install Spot Python packages": [[87, "install-spot-python-packages"]], "Verify your Spot packages installation": [[87, "verify-your-spot-packages-installation"]], "Verify you can command and query Spot": [[87, "verify-you-can-command-and-query-spot"]], "Get a Spot robot": [[87, "get-a-spot-robot"]], "Get a user account on the robot": [[87, "get-a-user-account-on-the-robot"]], "Ping Spot": [[87, "ping-spot"]], "Request Spot robot\u2019s ID": [[87, "request-spot-robot-s-id"]], "Get a copy of the full SDK distribution from github": [[87, "get-a-copy-of-the-full-sdk-distribution-from-github"]], "Run Hello Spot - let\u2019s see the robot move!": [[87, "run-hello-spot-let-s-see-the-robot-move"]], "Run an independent E-Stop": [[87, "run-an-independent-e-stop"]], "Run Hello Spot (take 2)": [[87, "run-hello-spot-take-2"]], "Next Steps": [[87, "next-steps"]], "Understanding Spot Programming": [[88, "understanding-spot-programming"], [225, "understanding-spot-programming"], [227, "understanding-spot-programming"], [229, "understanding-spot-programming"], [230, "understanding-spot-programming"], [231, "understanding-spot-programming"], [232, "understanding-spot-programming"], [233, "understanding-spot-programming"], [234, "understanding-spot-programming"], [235, "understanding-spot-programming"], [236, "understanding-spot-programming"], [237, "understanding-spot-programming"], [238, "understanding-spot-programming"], [239, "understanding-spot-programming"], [240, "understanding-spot-programming"], [241, "understanding-spot-programming"], [242, "understanding-spot-programming"], [243, "understanding-spot-programming"], [244, "understanding-spot-programming"], [256, "understanding-spot-programming"], [287, "understanding-spot-programming"], [288, "understanding-spot-programming"], [289, "understanding-spot-programming"], [308, "understanding-spot-programming"]], "Fundamental Robot Services": [[88, "fundamental-robot-services"]], "Understanding the \u201cid\u201d command": [[88, "understanding-the-id-command"]], "Listing services": [[88, "listing-services"]], "How to Setup and Command Spot to Move": [[88, "how-to-setup-and-command-spot-to-move"]], "Create the SDK object": [[88, "create-the-sdk-object"]], "Create a robot object": [[88, "create-a-robot-object"]], "Retrieve the Robot ID": [[88, "retrieve-the-robot-id"]], "Blocking vs. Asynchronous Spot Python SDK functions": [[88, "blocking-vs-asynchronous-spot-python-sdk-functions"]], "Inspecting robot state": [[88, "inspecting-robot-state"]], "Services and Authentication": [[88, "services-and-authentication"]], "Retrieving robot state": [[88, "retrieving-robot-state"]], "Robot State was a message, messages are defined by protobufs": [[88, "robot-state-was-a-message-messages-are-defined-by-protobufs"]], "Spot\u2019s Frames": [[88, "spot-s-frames"]], "Capture and View Camera Images": [[88, "capture-and-view-camera-images"]], "Configuring \u201cMotor Power Authority\u201d (software E-Stop)": [[88, "configuring-motor-power-authority-software-e-stop"]], "Create and register an E-Stop Endpoint": [[88, "create-and-register-an-e-stop-endpoint"]], "Clear the E-Stop": [[88, "clear-the-e-stop"]], "Taking ownership of Spot (Leases)": [[88, "taking-ownership-of-spot-leases"]], "Powering on the robot": [[88, "powering-on-the-robot"]], "Establishing timesync": [[88, "establishing-timesync"]], "Commanding the robot": [[88, "commanding-the-robot"]], "Powering off the robot": [[88, "powering-off-the-robot"]], "Spot Release Notes": [[89, "spot-release-notes"]], "4.0.3": [[89, "id1"]], "Breaking Changes": [[89, "breaking-changes"], [89, "id3"], [89, "id8"], [89, "id15"], [89, "id38"], [89, "id58"], [89, "id77"], [89, "id106"], [89, "id117"], [89, "id129"], [89, "id148"]], "Deprecations": [[89, "deprecations"], [89, "id4"], [89, "id10"], [89, "id19"], [89, "id37"], [89, "id57"], [89, "id76"], [89, "id92"], [89, "id107"], [89, "id118"], [89, "id147"], [89, "id155"], [89, "id166"]], "Known Issues": [[89, "known-issues"], [89, "id5"], [89, "id11"], [89, "id21"], [89, "id27"], [89, "id39"], [89, "id46"], [89, "id51"], [89, "id60"], [89, "id68"], [89, "id70"], [89, "id80"], [89, "id84"], [89, "id88"], [89, "id93"], [89, "id112"], [89, "id119"], [89, "id123"], [89, "id130"], [89, "id135"], [89, "id149"], [89, "id165"], [89, "id173"], [89, "id178"], [324, "known-issues"]], "4.0.2": [[89, "id2"]], "New Features": [[89, "new-features"], [89, "id16"], [89, "id33"], [89, "id55"], [89, "id73"], [89, "id86"], [89, "id90"], [89, "id96"], [89, "id115"], [89, "id121"], [89, "id126"], [89, "id133"], [89, "id138"], [89, "id152"], [89, "id159"], [89, "id171"], [89, "id175"], [89, "id181"]], "Joint Control": [[89, "joint-control"], [290, "joint-control"]], "Bug Fixes and Improvements": [[89, "bug-fixes-and-improvements"], [89, "id9"], [89, "id18"], [89, "id26"], [89, "id36"], [89, "id45"], [89, "id50"], [89, "id56"], [89, "id67"], [89, "id75"], [89, "id145"], [89, "id163"], [89, "id172"], [89, "id176"], [89, "id182"]], "Choreography": [[89, "choreography"], [89, "id17"], [89, "id35"], [89, "id74"], [89, "id98"], [96, "module-bosdyn.choreography.client.choreography"]], "Robot State": [[89, "robot-state"], [162, "module-bosdyn.client.robot_state"]], "Orbit": [[89, "orbit"], [89, "id13"]], "Spot Sample Code": [[89, "spot-sample-code"]], "New": [[89, "new"], [89, "id23"], [89, "id29"], [89, "id41"], [89, "id62"], [89, "id168"]], "Updated": [[89, "updated"], [89, "id6"], [89, "id12"], [89, "id24"], [89, "id30"], [89, "id42"], [89, "id48"], [89, "id53"], [89, "id63"], [89, "id169"]], "Orbit Sample Code": [[89, "orbit-sample-code"]], "4.0.1": [[89, "id7"]], "Sample Code": [[89, "sample-code"], [89, "id22"], [89, "id28"], [89, "id40"], [89, "id47"], [89, "id52"], [89, "id61"], [89, "id71"], [89, "id81"], [89, "id94"], [89, "id113"], [89, "id124"], [89, "id131"], [89, "id136"], [89, "id150"], [89, "id157"], [89, "id167"], [89, "id179"], [89, "id186"], [89, "id190"]], "Spot": [[89, "spot"]], "4.0.0": [[89, "id14"]], "Autowalk and Missions": [[89, "autowalk-and-missions"]], "Orbit (formerly Scout)": [[89, "orbit-formerly-scout"], [89, "id20"]], "GPS": [[89, "gps"]], "Robot Mobility": [[89, "robot-mobility"]], "Data Acquisition Live Data": [[89, "data-acquisition-live-data"]], "Data Acquisition Store": [[89, "data-acquisition-store"], [117, "module-bosdyn.client.data_acquisition_store"]], "Spot Arm": [[89, "spot-arm"]], "Network Compute Bridge": [[89, "network-compute-bridge"], [89, "id104"], [89, "id140"], [296, "network-compute-bridge"], [316, "network-compute-bridge"]], "Safety-Related Stopping Function": [[89, "safety-related-stopping-function"]], "GraphNav": [[89, "graphnav"]], "New in 4.0": [[89, "new-in-4-0"]], "Preexisting, but undiscovered prior to 4.0": [[89, "preexisting-but-undiscovered-prior-to-4-0"]], "Preexisting": [[89, "preexisting"]], "3.3.1": [[89, "id25"]], "Upcoming Removals": [[89, "upcoming-removals"], [89, "id32"]], "3.3.0": [[89, "id31"]], "New Service - Inverse Kinematics": [[89, "new-service-inverse-kinematics"]], "New Service - LogStatus": [[89, "new-service-logstatus"]], "Arm and Manipulation": [[89, "arm-and-manipulation"]], "Payloads": [[89, "payloads"], [89, "id99"], [89, "id111"]], "Images and Data": [[89, "images-and-data"]], "Robot Control": [[89, "robot-control"], [89, "id108"]], "Dependencies": [[89, "dependencies"], [89, "id59"], [89, "id65"], [89, "id79"], [89, "id146"], [250, "dependencies"]], "NetworkComputeBridge": [[89, "networkcomputebridge"], [91, "networkcomputebridge"]], "Deprecated fields and values": [[89, "deprecated-fields-and-values"]], "Python functions": [[89, "python-functions"]], "3.2.3": [[89, "id43"]], "3.2.2": [[89, "id44"]], "3.2.1": [[89, "id49"]], "3.2.0": [[89, "id54"]], "Arm Impedance Control (Beta)": [[89, "arm-impedance-control-beta"]], "Graph Nav \u2013 Area Callbacks": [[89, "graph-nav-area-callbacks"]], "Fan Power Control": [[89, "fan-power-control"]], "Ground Clutter": [[89, "ground-clutter"]], "Added CORE I/O Documentation": [[89, "added-core-i-o-documentation"]], "Added Spot Extensions Documentation": [[89, "added-spot-extensions-documentation"]], "API": [[89, "api"]], "Documentation": [[89, "documentation"]], "SDK": [[89, "sdk"]], "3.1.2.1": [[89, "id64"]], "3.1.2": [[89, "id66"]], "3.1.1": [[89, "id69"]], "3.1.0": [[89, "id72"]], "Safely powering off on staircases.": [[89, "safely-powering-off-on-staircases"]], "Lease timeout changes.": [[89, "lease-timeout-changes"]], "Data Acquisition": [[89, "data-acquisition"], [89, "id78"], [89, "id105"], [113, "module-bosdyn.client.data_acquisition"]], "Alerts": [[89, "alerts"]], "New Services": [[89, "new-services"]], "Control and Feedback": [[89, "control-and-feedback"]], "Python Helpers": [[89, "python-helpers"]], "Missions": [[89, "missions"], [89, "id100"], [89, "id103"], [89, "id110"], [89, "id153"], [89, "id162"]], "Graph Nav": [[89, "graph-nav"], [89, "id97"], [89, "id102"], [89, "id109"], [89, "id127"], [89, "id143"], [89, "id161"], [134, "module-bosdyn.client.graph_nav"]], "Spot Check": [[89, "spot-check"], [179, "module-bosdyn.client.spot_check"]], "Renamed functions and classes": [[89, "renamed-functions-and-classes"]], "Behavior change on lease timeout": [[89, "behavior-change-on-lease-timeout"]], "Behavior change of powering off on stairs": [[89, "behavior-change-of-powering-off-on-stairs"]], "Disallowed Commands": [[89, "disallowed-commands"]], "3.0.3": [[89, "id82"]], "Bug fixes and improvements": [[89, "id83"], [89, "id87"], [89, "id91"], [89, "id101"], [89, "id116"], [89, "id122"], [89, "id128"], [89, "id154"], [89, "id189"]], "3.0.2": [[89, "id85"]], "3.0.1": [[89, "id89"]], "3.0.0": [[89, "id95"]], "Auto Return": [[89, "auto-return"], [106, "module-bosdyn.client.auto_return"]], "Constrained manipulation": [[89, "constrained-manipulation"]], "Pushbar Door Opening": [[89, "pushbar-door-opening"]], "SpotCam": [[89, "spotcam"]], "Enable and Disable IR Emitters": [[89, "enable-and-disable-ir-emitters"]], "Arm and Gripper Control": [[89, "arm-and-gripper-control"], [89, "id139"]], "Robot Commands": [[89, "robot-commands"]], "Leases": [[89, "leases"], [89, "id144"]], "Other Changes": [[89, "other-changes"]], "Writing services": [[89, "writing-services"]], "2.3.5": [[89, "id114"]], "Spot CAM": [[89, "spot-cam"], [89, "id160"], [89, "id177"]], "Data Buffer": [[89, "data-buffer"], [118, "module-bosdyn.client.data_buffer"]], "2.3.4": [[89, "id120"]], "Power Control": [[89, "power-control"]], "2.3.3": [[89, "id125"]], "2.3.2": [[89, "id132"]], "SpotCAM": [[89, "id134"], [89, "id141"]], "2.3.0": [[89, "id137"]], "Payload Estimation": [[89, "payload-estimation"]], "Arm Support in Choreographer": [[89, "arm-support-in-choreographer"]], "2.2.0": [[89, "id151"]], "Docking (license dependent)": [[89, "docking-license-dependent"]], "Payload Authorization Faults": [[89, "payload-authorization-faults"]], "Service and plugin development": [[89, "service-and-plugin-development"]], "SE2TrajectoryCommand Feedback": [[89, "se2trajectorycommand-feedback"]], "Other Helper Functions**": [[89, "other-helper-functions"]], "Dependency Changes": [[89, "dependency-changes"]], "Known issues": [[89, "id156"], [89, "id185"]], "2.1.0": [[89, "id158"]], "Spot I/O: Data Acquisition": [[89, "spot-i-o-data-acquisition"]], "New Mobility Commands": [[89, "new-mobility-commands"]], "Arm Control Preparation": [[89, "arm-control-preparation"]], "Data Logging": [[89, "data-logging"]], "Point Clouds": [[89, "point-clouds"]], "Choreography (License-dependent)": [[89, "choreography-license-dependent"]], "Docking (Beta, License-dependent)": [[89, "docking-beta-license-dependent"]], "Breaking changes": [[89, "id164"], [89, "id183"]], "Protobuf changes": [[89, "protobuf-changes"]], "Client changes": [[89, "client-changes"]], "Removed": [[89, "removed"], [89, "id184"]], "2.0.2": [[89, "id170"]], "Power Command Exceptions": [[89, "power-command-exceptions"]], "2.0.1": [[89, "id174"]], "License Changes": [[89, "license-changes"]], "Map Recording": [[89, "map-recording"]], "Payload Integration": [[89, "payload-integration"]], "Additional Fixes": [[89, "additional-fixes"]], "2.0.0": [[89, "id180"]], "Autonomous Navigation APIs": [[89, "autonomous-navigation-apis"]], "Spot CAM API": [[89, "spot-cam-api"]], "Payload API integration": [[89, "payload-api-integration"]], "Environmental APIs": [[89, "environmental-apis"]], "Expanded and improved documentation": [[89, "expanded-and-improved-documentation"]], "Improved performance over poor communication links": [[89, "improved-performance-over-poor-communication-links"]], "Additional robot state is exposed": [[89, "additional-robot-state-is-exposed"]], "Clients can specify additional advanced locomotion options": [[89, "clients-can-specify-additional-advanced-locomotion-options"]], "Consistent Frame usage across API": [[89, "consistent-frame-usage-across-api"]], "bosdyn.client command line tool improvements": [[89, "bosdyn-client-command-line-tool-improvements"]], "Frame handling": [[89, "frame-handling"]], "New Exceptions": [[89, "new-exceptions"]], "Moved or Renamed": [[89, "moved-or-renamed"]], "Miscellaneous": [[89, "miscellaneous"]], "1.1.2": [[89, "id187"]], "New features": [[89, "id188"], [89, "id193"]], "1.1.1": [[89, "id191"]], "1.1.0": [[89, "id192"]], "Sample code": [[89, "id194"]], "Bug fixes and Improvements": [[89, "id195"]], "Deprecations and breaking changes": [[89, "deprecations-and-breaking-changes"]], "1.0.1": [[89, "id196"]], "1.0.0": [[89, "id197"]], "Basic Proto Definitions": [[90, "basic-proto-definitions"]], "Protocol Documentation": [[91, "protocol-documentation"]], "Table of Contents": [[91, "table-of-contents"]], "bosdyn/api/alerts.proto": [[91, "bosdyn-api-alerts-proto"]], "AlertData": [[91, "alertdata"]], "AlertData.SeverityLevel": [[91, "alertdata-severitylevel"]], "bosdyn/api/arm_command.proto": [[91, "bosdyn-api-arm-command-proto"]], "ArmCartesianCommand": [[91, "armcartesiancommand"]], "ArmCartesianCommand.Feedback": [[91, "armcartesiancommand-feedback"]], "ArmCartesianCommand.Request": [[91, "armcartesiancommand-request"]], "ArmCommand": [[91, "armcommand"]], "ArmCommand.Feedback": [[91, "armcommand-feedback"]], "ArmCommand.Request": [[91, "armcommand-request"]], "ArmImpedanceCommand": [[91, "armimpedancecommand"]], "ArmImpedanceCommand.Feedback": [[91, "armimpedancecommand-feedback"]], "ArmImpedanceCommand.Request": [[91, "armimpedancecommand-request"]], "ArmJointMoveCommand": [[91, "armjointmovecommand"]], "ArmJointMoveCommand.Feedback": [[91, "armjointmovecommand-feedback"]], "ArmJointMoveCommand.Request": [[91, "armjointmovecommand-request"]], "ArmJointPosition": [[91, "armjointposition"]], "ArmJointTrajectory": [[91, "armjointtrajectory"]], "ArmJointTrajectoryPoint": [[91, "armjointtrajectorypoint"]], "ArmJointVelocity": [[91, "armjointvelocity"]], "ArmParams": [[91, "armparams"]], "ArmStopCommand": [[91, "armstopcommand"]], "ArmStopCommand.Feedback": [[91, "armstopcommand-feedback"]], "ArmStopCommand.Request": [[91, "armstopcommand-request"]], "ArmVelocityCommand": [[91, "armvelocitycommand"]], "ArmVelocityCommand.CartesianVelocity": [[91, "armvelocitycommand-cartesianvelocity"]], "ArmVelocityCommand.CylindricalVelocity": [[91, "armvelocitycommand-cylindricalvelocity"]], "ArmVelocityCommand.Feedback": [[91, "armvelocitycommand-feedback"]], "ArmVelocityCommand.Request": [[91, "armvelocitycommand-request"]], "GazeCommand": [[91, "gazecommand"]], "GazeCommand.Feedback": [[91, "gazecommand-feedback"]], "GazeCommand.Request": [[91, "gazecommand-request"]], "NamedArmPositionsCommand": [[91, "namedarmpositionscommand"]], "NamedArmPositionsCommand.Feedback": [[91, "namedarmpositionscommand-feedback"]], "NamedArmPositionsCommand.Request": [[91, "namedarmpositionscommand-request"]], "ArmCartesianCommand.Feedback.Status": [[91, "armcartesiancommand-feedback-status"]], "ArmCartesianCommand.Request.AxisMode": [[91, "armcartesiancommand-request-axismode"]], "ArmImpedanceCommand.Feedback.Status": [[91, "armimpedancecommand-feedback-status"]], "ArmJointMoveCommand.Feedback.PlannerStatus": [[91, "armjointmovecommand-feedback-plannerstatus"]], "ArmJointMoveCommand.Feedback.Status": [[91, "armjointmovecommand-feedback-status"]], "GazeCommand.Feedback.Status": [[91, "gazecommand-feedback-status"]], "NamedArmPositionsCommand.Feedback.Status": [[91, "namedarmpositionscommand-feedback-status"]], "NamedArmPositionsCommand.Positions": [[91, "namedarmpositionscommand-positions"]], "bosdyn/api/arm_surface_contact.proto": [[91, "bosdyn-api-arm-surface-contact-proto"]], "ArmSurfaceContact": [[91, "armsurfacecontact"]], "ArmSurfaceContact.Feedback": [[91, "armsurfacecontact-feedback"]], "ArmSurfaceContact.Request": [[91, "armsurfacecontact-request"]], "ArmSurfaceContact.Request.AdmittanceSetting": [[91, "armsurfacecontact-request-admittancesetting"]], "ArmSurfaceContact.Request.AxisMode": [[91, "armsurfacecontact-request-axismode"]], "bosdyn/api/arm_surface_contact_service.proto": [[91, "bosdyn-api-arm-surface-contact-service-proto"]], "ArmSurfaceContactCommand": [[91, "armsurfacecontactcommand"]], "ArmSurfaceContactResponse": [[91, "armsurfacecontactresponse"]], "ArmSurfaceContactService": [[91, "armsurfacecontactservice"]], "bosdyn/api/auth.proto": [[91, "bosdyn-api-auth-proto"]], "GetAuthTokenRequest": [[91, "getauthtokenrequest"]], "GetAuthTokenResponse": [[91, "getauthtokenresponse"]], "GetAuthTokenResponse.Status": [[91, "getauthtokenresponse-status"]], "bosdyn/api/auth_service.proto": [[91, "bosdyn-api-auth-service-proto"]], "AuthService": [[91, "authservice"]], "bosdyn/api/auto_return/auto_return.proto": [[91, "bosdyn-api-auto-return-auto-return-proto"]], "ConfigureRequest": [[91, "configurerequest"]], "ConfigureResponse": [[91, "configureresponse"]], "GetConfigurationRequest": [[91, "getconfigurationrequest"]], "GetConfigurationResponse": [[91, "getconfigurationresponse"]], "Params": [[91, "params"]], "StartRequest": [[91, "startrequest"]], "StartResponse": [[91, "startresponse"]], "ConfigureResponse.Status": [[91, "configureresponse-status"]], "StartResponse.Status": [[91, "startresponse-status"]], "bosdyn/api/auto_return/auto_return_service.proto": [[91, "bosdyn-api-auto-return-auto-return-service-proto"]], "AutoReturnService": [[91, "autoreturnservice"]], "bosdyn/api/autowalk/autowalk.proto": [[91, "bosdyn-api-autowalk-autowalk-proto"]], "CompileAutowalkRequest": [[91, "compileautowalkrequest"]], "CompileAutowalkResponse": [[91, "compileautowalkresponse"]], "CompileAutowalkResponse.FailedElementsEntry": [[91, "compileautowalkresponse-failedelementsentry"]], "ElementIdentifiers": [[91, "elementidentifiers"]], "FailedElement": [[91, "failedelement"]], "LoadAutowalkRequest": [[91, "loadautowalkrequest"]], "LoadAutowalkResponse": [[91, "loadautowalkresponse"]], "LoadAutowalkResponse.FailedElementsEntry": [[91, "loadautowalkresponse-failedelementsentry"]], "NodeIdentifier": [[91, "nodeidentifier"]], "CompileAutowalkResponse.Status": [[91, "compileautowalkresponse-status"]], "LoadAutowalkResponse.Status": [[91, "loadautowalkresponse-status"]], "bosdyn/api/autowalk/autowalk_service.proto": [[91, "bosdyn-api-autowalk-autowalk-service-proto"]], "AutowalkService": [[91, "autowalkservice"]], "bosdyn/api/autowalk/walks.proto": [[91, "bosdyn-api-autowalk-walks-proto"]], "Action": [[91, "action"]], "Action.DataAcquisition": [[91, "action-dataacquisition"]], "Action.ExecuteChoreography": [[91, "action-executechoreography"]], "Action.RemoteGrpc": [[91, "action-remotegrpc"]], "Action.Sleep": [[91, "action-sleep"]], "ActionWrapper": [[91, "actionwrapper"]], "ActionWrapper.ArmSensorPointing": [[91, "actionwrapper-armsensorpointing"]], "ActionWrapper.GripperCameraParams": [[91, "actionwrapper-grippercameraparams"]], "ActionWrapper.GripperCommand": [[91, "actionwrapper-grippercommand"]], "ActionWrapper.RobotBodyPose": [[91, "actionwrapper-robotbodypose"]], "ActionWrapper.RobotBodySit": [[91, "actionwrapper-robotbodysit"]], "ActionWrapper.SpotCamAlignment": [[91, "actionwrapper-spotcamalignment"]], "ActionWrapper.SpotCamAlignment.Alignment": [[91, "actionwrapper-spotcamalignment-alignment"]], "ActionWrapper.SpotCamLed": [[91, "actionwrapper-spotcamled"]], "ActionWrapper.SpotCamLed.BrightnessesEntry": [[91, "actionwrapper-spotcamled-brightnessesentry"]], "ActionWrapper.SpotCamPtz": [[91, "actionwrapper-spotcamptz"]], "BatteryMonitor": [[91, "batterymonitor"]], "ChoreographyItems": [[91, "choreographyitems"]], "Dock": [[91, "dock"], [91, "id3"]], "Element": [[91, "element"]], "FailureBehavior": [[91, "failurebehavior"]], "FailureBehavior.ProceedIfAble": [[91, "failurebehavior-proceedifable"]], "FailureBehavior.ReturnToStartAndTerminate": [[91, "failurebehavior-returntostartandterminate"]], "FailureBehavior.ReturnToStartAndTryAgainLater": [[91, "failurebehavior-returntostartandtryagainlater"]], "FailureBehavior.SafePowerOff": [[91, "failurebehavior-safepoweroff"]], "GlobalParameters": [[91, "globalparameters"]], "PlaybackMode": [[91, "playbackmode"]], "PlaybackMode.Continuous": [[91, "playbackmode-continuous"]], "PlaybackMode.Once": [[91, "playbackmode-once"]], "PlaybackMode.Periodic": [[91, "playbackmode-periodic"]], "Target": [[91, "target"]], "Target.NavigateRoute": [[91, "target-navigateroute"]], "Target.NavigateTo": [[91, "target-navigateto"]], "Target.Relocalize": [[91, "target-relocalize"]], "Walk": [[91, "walk"]], "Target.TargetStowBehavior": [[91, "target-targetstowbehavior"]], "bosdyn/api/basic_command.proto": [[91, "bosdyn-api-basic-command-proto"]], "ArmDragCommand": [[91, "armdragcommand"]], "ArmDragCommand.Feedback": [[91, "armdragcommand-feedback"]], "ArmDragCommand.Request": [[91, "armdragcommand-request"]], "BatteryChangePoseCommand": [[91, "batterychangeposecommand"]], "BatteryChangePoseCommand.Feedback": [[91, "batterychangeposecommand-feedback"]], "BatteryChangePoseCommand.Request": [[91, "batterychangeposecommand-request"]], "ConstrainedManipulationCommand": [[91, "constrainedmanipulationcommand"]], "ConstrainedManipulationCommand.Feedback": [[91, "constrainedmanipulationcommand-feedback"]], "ConstrainedManipulationCommand.Request": [[91, "constrainedmanipulationcommand-request"]], "FollowArmCommand.Feedback": [[91, "followarmcommand-feedback"]], "FollowArmCommand.Request": [[91, "followarmcommand-request"]], "FreezeCommand": [[91, "freezecommand"]], "FreezeCommand.Feedback": [[91, "freezecommand-feedback"]], "FreezeCommand.Request": [[91, "freezecommand-request"]], "JointCommand": [[91, "jointcommand"]], "JointCommand.ContactAdvice": [[91, "jointcommand-contactadvice"]], "JointCommand.Feedback": [[91, "jointcommand-feedback"]], "JointCommand.Request": [[91, "jointcommand-request"]], "JointCommand.UpdateRequest": [[91, "jointcommand-updaterequest"]], "JointCommand.UpdateRequest.Gains": [[91, "jointcommand-updaterequest-gains"]], "RobotCommandFeedbackStatus": [[91, "robotcommandfeedbackstatus"]], "SE2TrajectoryCommand": [[91, "se2trajectorycommand"]], "SE2TrajectoryCommand.Feedback": [[91, "se2trajectorycommand-feedback"]], "SE2TrajectoryCommand.Request": [[91, "se2trajectorycommand-request"]], "SE2VelocityCommand": [[91, "se2velocitycommand"]], "SE2VelocityCommand.Feedback": [[91, "se2velocitycommand-feedback"]], "SE2VelocityCommand.Request": [[91, "se2velocitycommand-request"]], "SafePowerOffCommand": [[91, "safepoweroffcommand"]], "SafePowerOffCommand.Feedback": [[91, "safepoweroffcommand-feedback"]], "SafePowerOffCommand.Request": [[91, "safepoweroffcommand-request"]], "SelfRightCommand": [[91, "selfrightcommand"]], "SelfRightCommand.Feedback": [[91, "selfrightcommand-feedback"]], "SelfRightCommand.Request": [[91, "selfrightcommand-request"]], "SitCommand": [[91, "sitcommand"]], "SitCommand.Feedback": [[91, "sitcommand-feedback"]], "SitCommand.Request": [[91, "sitcommand-request"]], "Stance": [[91, "stance"]], "Stance.FootPositionsEntry": [[91, "stance-footpositionsentry"]], "StanceCommand": [[91, "stancecommand"]], "StanceCommand.Feedback": [[91, "stancecommand-feedback"]], "StanceCommand.Request": [[91, "stancecommand-request"]], "StandCommand": [[91, "standcommand"]], "StandCommand.Feedback": [[91, "standcommand-feedback"]], "StandCommand.Request": [[91, "standcommand-request"]], "StopCommand": [[91, "stopcommand"]], "StopCommand.Feedback": [[91, "stopcommand-feedback"]], "StopCommand.Request": [[91, "stopcommand-request"]], "ArmDragCommand.Feedback.Status": [[91, "armdragcommand-feedback-status"]], "BatteryChangePoseCommand.Feedback.Status": [[91, "batterychangeposecommand-feedback-status"]], "BatteryChangePoseCommand.Request.DirectionHint": [[91, "batterychangeposecommand-request-directionhint"]], "ConstrainedManipulationCommand.Feedback.Status": [[91, "constrainedmanipulationcommand-feedback-status"]], "ConstrainedManipulationCommand.Request.ControlMode": [[91, "constrainedmanipulationcommand-request-controlmode"]], "ConstrainedManipulationCommand.Request.TaskType": [[91, "constrainedmanipulationcommand-request-tasktype"]], "JointCommand.ContactAdvice.Advice": [[91, "jointcommand-contactadvice-advice"]], "JointCommand.Feedback.Status": [[91, "jointcommand-feedback-status"]], "RobotCommandFeedbackStatus.Status": [[91, "robotcommandfeedbackstatus-status"]], "SE2TrajectoryCommand.Feedback.BodyMovementStatus": [[91, "se2trajectorycommand-feedback-bodymovementstatus"]], "SE2TrajectoryCommand.Feedback.FinalGoalStatus": [[91, "se2trajectorycommand-feedback-finalgoalstatus"]], "SE2TrajectoryCommand.Feedback.Status": [[91, "se2trajectorycommand-feedback-status"]], "SafePowerOffCommand.Feedback.Status": [[91, "safepoweroffcommand-feedback-status"]], "SafePowerOffCommand.Request.UnsafeAction": [[91, "safepoweroffcommand-request-unsafeaction"]], "SelfRightCommand.Feedback.Status": [[91, "selfrightcommand-feedback-status"]], "SitCommand.Feedback.Status": [[91, "sitcommand-feedback-status"]], "StanceCommand.Feedback.Status": [[91, "stancecommand-feedback-status"]], "StandCommand.Feedback.StandingState": [[91, "standcommand-feedback-standingstate"]], "StandCommand.Feedback.Status": [[91, "standcommand-feedback-status"]], "bosdyn/api/bddf.proto": [[91, "bosdyn-api-bddf-proto"]], "DataDescriptor": [[91, "datadescriptor"]], "DescriptorBlock": [[91, "descriptorblock"]], "FileFormatDescriptor": [[91, "fileformatdescriptor"]], "FileFormatDescriptor.AnnotationsEntry": [[91, "fileformatdescriptor-annotationsentry"]], "FileFormatVersion": [[91, "fileformatversion"]], "FileIndex": [[91, "fileindex"]], "MessageTypeDescriptor": [[91, "messagetypedescriptor"]], "PodTypeDescriptor": [[91, "podtypedescriptor"]], "SeriesBlockIndex": [[91, "seriesblockindex"]], "SeriesBlockIndex.BlockEntry": [[91, "seriesblockindex-blockentry"]], "SeriesDescriptor": [[91, "seriesdescriptor"]], "SeriesDescriptor.AnnotationsEntry": [[91, "seriesdescriptor-annotationsentry"]], "SeriesIdentifier": [[91, "seriesidentifier"]], "SeriesIdentifier.SpecEntry": [[91, "seriesidentifier-specentry"]], "StructTypeDescriptor": [[91, "structtypedescriptor"]], "StructTypeDescriptor.KeyToSeriesIdentifierHashEntry": [[91, "structtypedescriptor-keytoseriesidentifierhashentry"]], "FileFormatDescriptor.CheckSumType": [[91, "fileformatdescriptor-checksumtype"]], "PodTypeEnum": [[91, "podtypeenum"]], "bosdyn/api/data_acquisition.proto": [[91, "bosdyn-api-data-acquisition-proto"]], "AcquireDataRequest": [[91, "acquiredatarequest"]], "AcquireDataResponse": [[91, "acquiredataresponse"]], "AcquirePluginDataRequest": [[91, "acquireplugindatarequest"]], "AcquirePluginDataResponse": [[91, "acquireplugindataresponse"]], "AcquisitionCapabilityList": [[91, "acquisitioncapabilitylist"]], "AcquisitionRequestList": [[91, "acquisitionrequestlist"]], "AssociatedAlertData": [[91, "associatedalertdata"]], "AssociatedMetadata": [[91, "associatedmetadata"]], "CancelAcquisitionRequest": [[91, "cancelacquisitionrequest"]], "CancelAcquisitionResponse": [[91, "cancelacquisitionresponse"]], "CaptureActionId": [[91, "captureactionid"]], "DataAcquisitionCapability": [[91, "dataacquisitioncapability"]], "DataCapture": [[91, "datacapture"]], "DataError": [[91, "dataerror"]], "DataIdentifier": [[91, "dataidentifier"]], "GetServiceInfoRequest": [[91, "getserviceinforequest"]], "GetServiceInfoResponse": [[91, "getserviceinforesponse"]], "GetStatusRequest": [[91, "getstatusrequest"], [91, "id1"], [91, "id4"]], "GetStatusResponse": [[91, "getstatusresponse"], [91, "id2"], [91, "id5"]], "ImageAcquisitionCapability": [[91, "imageacquisitioncapability"]], "ImageSourceCapture": [[91, "imagesourcecapture"]], "LiveDataRequest": [[91, "livedatarequest"]], "LiveDataResponse": [[91, "livedataresponse"]], "LiveDataResponse.CapabilityLiveData": [[91, "livedataresponse-capabilitylivedata"]], "LiveDataResponse.CapabilityLiveData.SignalsEntry": [[91, "livedataresponse-capabilitylivedata-signalsentry"]], "Metadata": [[91, "metadata"]], "NetworkComputeCapability": [[91, "networkcomputecapability"]], "NetworkComputeCapture": [[91, "networkcomputecapture"]], "NetworkComputeError": [[91, "networkcomputeerror"]], "PluginServiceError": [[91, "pluginserviceerror"]], "AcquireDataResponse.Status": [[91, "acquiredataresponse-status"]], "AcquirePluginDataResponse.Status": [[91, "acquireplugindataresponse-status"]], "CancelAcquisitionResponse.Status": [[91, "cancelacquisitionresponse-status"]], "GetStatusResponse.Status": [[91, "getstatusresponse-status"]], "LiveDataResponse.CapabilityLiveData.Status": [[91, "livedataresponse-capabilitylivedata-status"]], "NetworkComputeError.ErrorCode": [[91, "networkcomputeerror-errorcode"]], "PluginServiceError.ErrorCode": [[91, "pluginserviceerror-errorcode"]], "bosdyn/api/data_acquisition_plugin_service.proto": [[91, "bosdyn-api-data-acquisition-plugin-service-proto"]], "DataAcquisitionPluginService": [[91, "dataacquisitionpluginservice"]], "bosdyn/api/data_acquisition_service.proto": [[91, "bosdyn-api-data-acquisition-service-proto"]], "DataAcquisitionService": [[91, "dataacquisitionservice"]], "bosdyn/api/data_acquisition_store.proto": [[91, "bosdyn-api-data-acquisition-store-proto"]], "ActionIdQuery": [[91, "actionidquery"]], "DataQueryParams": [[91, "dataqueryparams"]], "ListCaptureActionsRequest": [[91, "listcaptureactionsrequest"]], "ListCaptureActionsResponse": [[91, "listcaptureactionsresponse"]], "ListStoredAlertDataRequest": [[91, "liststoredalertdatarequest"]], "ListStoredAlertDataResponse": [[91, "liststoredalertdataresponse"]], "ListStoredDataRequest": [[91, "liststoreddatarequest"]], "ListStoredDataResponse": [[91, "liststoreddataresponse"]], "ListStoredImagesRequest": [[91, "liststoredimagesrequest"]], "ListStoredImagesResponse": [[91, "liststoredimagesresponse"]], "ListStoredMetadataRequest": [[91, "liststoredmetadatarequest"]], "ListStoredMetadataResponse": [[91, "liststoredmetadataresponse"]], "QueryMaxCaptureIdRequest": [[91, "querymaxcaptureidrequest"]], "QueryMaxCaptureIdResponse": [[91, "querymaxcaptureidresponse"]], "QueryParameters": [[91, "queryparameters"]], "QueryStoredCaptureResult": [[91, "querystoredcaptureresult"]], "QueryStoredCapturesRequest": [[91, "querystoredcapturesrequest"]], "QueryStoredCapturesResponse": [[91, "querystoredcapturesresponse"]], "StoreAlertDataRequest": [[91, "storealertdatarequest"]], "StoreAlertDataResponse": [[91, "storealertdataresponse"]], "StoreDataRequest": [[91, "storedatarequest"]], "StoreDataResponse": [[91, "storedataresponse"]], "StoreImageRequest": [[91, "storeimagerequest"]], "StoreImageResponse": [[91, "storeimageresponse"]], "StoreMetadataRequest": [[91, "storemetadatarequest"]], "StoreMetadataResponse": [[91, "storemetadataresponse"]], "StoredCapturedData": [[91, "storedcaptureddata"]], "TimeRangeQuery": [[91, "timerangequery"]], "bosdyn/api/data_acquisition_store_service.proto": [[91, "bosdyn-api-data-acquisition-store-service-proto"]], "DataAcquisitionStoreService": [[91, "dataacquisitionstoreservice"]], "bosdyn/api/data_buffer.proto": [[91, "bosdyn-api-data-buffer-proto"]], "DataBlob": [[91, "datablob"]], "Event": [[91, "event"]], "OperatorComment": [[91, "operatorcomment"]], "RecordDataBlobsRequest": [[91, "recorddatablobsrequest"]], "RecordDataBlobsResponse": [[91, "recorddatablobsresponse"]], "RecordDataBlobsResponse.Error": [[91, "recorddatablobsresponse-error"]], "RecordEventsRequest": [[91, "recordeventsrequest"]], "RecordEventsResponse": [[91, "recordeventsresponse"]], "RecordEventsResponse.Error": [[91, "recordeventsresponse-error"]], "RecordOperatorCommentsRequest": [[91, "recordoperatorcommentsrequest"]], "RecordOperatorCommentsResponse": [[91, "recordoperatorcommentsresponse"]], "RecordOperatorCommentsResponse.Error": [[91, "recordoperatorcommentsresponse-error"]], "RecordSignalTicksRequest": [[91, "recordsignalticksrequest"]], "RecordSignalTicksResponse": [[91, "recordsignalticksresponse"]], "RecordSignalTicksResponse.Error": [[91, "recordsignalticksresponse-error"]], "RecordTextMessagesRequest": [[91, "recordtextmessagesrequest"]], "RecordTextMessagesResponse": [[91, "recordtextmessagesresponse"]], "RecordTextMessagesResponse.Error": [[91, "recordtextmessagesresponse-error"]], "RegisterSignalSchemaRequest": [[91, "registersignalschemarequest"]], "RegisterSignalSchemaResponse": [[91, "registersignalschemaresponse"]], "SignalSchema": [[91, "signalschema"]], "SignalSchema.Variable": [[91, "signalschema-variable"]], "SignalSchemaId": [[91, "signalschemaid"]], "SignalTick": [[91, "signaltick"]], "TextMessage": [[91, "textmessage"]], "Event.Level": [[91, "event-level"]], "Event.LogPreserveHint": [[91, "event-logpreservehint"]], "RecordDataBlobsResponse.Error.Type": [[91, "recorddatablobsresponse-error-type"]], "RecordEventsResponse.Error.Type": [[91, "recordeventsresponse-error-type"]], "RecordOperatorCommentsResponse.Error.Type": [[91, "recordoperatorcommentsresponse-error-type"]], "RecordSignalTicksResponse.Error.Type": [[91, "recordsignalticksresponse-error-type"]], "RecordTextMessagesResponse.Error.Type": [[91, "recordtextmessagesresponse-error-type"]], "SignalSchema.Variable.Type": [[91, "signalschema-variable-type"]], "SignalTick.Encoding": [[91, "signaltick-encoding"]], "TextMessage.Level": [[91, "textmessage-level"]], "bosdyn/api/data_buffer_service.proto": [[91, "bosdyn-api-data-buffer-service-proto"]], "DataBufferService": [[91, "databufferservice"]], "bosdyn/api/data_chunk.proto": [[91, "bosdyn-api-data-chunk-proto"]], "DataChunk": [[91, "datachunk"]], "bosdyn/api/data_index.proto": [[91, "bosdyn-api-data-index-proto"]], "BlobPage": [[91, "blobpage"]], "BlobPages": [[91, "blobpages"]], "BlobSpec": [[91, "blobspec"]], "DataBufferStatus": [[91, "databufferstatus"]], "DataIndex": [[91, "dataindex"]], "DataQuery": [[91, "dataquery"]], "DeleteDataPagesRequest": [[91, "deletedatapagesrequest"]], "DeleteDataPagesResponse": [[91, "deletedatapagesresponse"]], "DeletePageStatus": [[91, "deletepagestatus"]], "EventSpec": [[91, "eventspec"]], "EventsComments": [[91, "eventscomments"]], "EventsCommentsSpec": [[91, "eventscommentsspec"]], "GetDataBufferStatusRequest": [[91, "getdatabufferstatusrequest"]], "GetDataBufferStatusResponse": [[91, "getdatabufferstatusresponse"]], "GetDataIndexRequest": [[91, "getdataindexrequest"]], "GetDataIndexResponse": [[91, "getdataindexresponse"]], "GetDataPagesRequest": [[91, "getdatapagesrequest"]], "GetDataPagesResponse": [[91, "getdatapagesresponse"]], "GetEventsCommentsRequest": [[91, "geteventscommentsrequest"]], "GetEventsCommentsResponse": [[91, "geteventscommentsresponse"]], "GrpcPages": [[91, "grpcpages"]], "GrpcSpec": [[91, "grpcspec"]], "PageInfo": [[91, "pageinfo"]], "PagesAndTimestamp": [[91, "pagesandtimestamp"]], "DeletePageStatus.Status": [[91, "deletepagestatus-status"]], "PageInfo.Compression": [[91, "pageinfo-compression"]], "PageInfo.PageFormat": [[91, "pageinfo-pageformat"]], "bosdyn/api/data_service.proto": [[91, "bosdyn-api-data-service-proto"]], "DataService": [[91, "dataservice"]], "bosdyn/api/directory.proto": [[91, "bosdyn-api-directory-proto"]], "Endpoint": [[91, "endpoint"]], "GetServiceEntryRequest": [[91, "getserviceentryrequest"]], "GetServiceEntryResponse": [[91, "getserviceentryresponse"]], "ListServiceEntriesRequest": [[91, "listserviceentriesrequest"]], "ListServiceEntriesResponse": [[91, "listserviceentriesresponse"]], "ServiceEntry": [[91, "serviceentry"]], "GetServiceEntryResponse.Status": [[91, "getserviceentryresponse-status"]], "bosdyn/api/directory_registration.proto": [[91, "bosdyn-api-directory-registration-proto"]], "RegisterServiceRequest": [[91, "registerservicerequest"]], "RegisterServiceResponse": [[91, "registerserviceresponse"]], "UnregisterServiceRequest": [[91, "unregisterservicerequest"]], "UnregisterServiceResponse": [[91, "unregisterserviceresponse"]], "UpdateServiceRequest": [[91, "updateservicerequest"]], "UpdateServiceResponse": [[91, "updateserviceresponse"]], "RegisterServiceResponse.Status": [[91, "registerserviceresponse-status"]], "UnregisterServiceResponse.Status": [[91, "unregisterserviceresponse-status"]], "UpdateServiceResponse.Status": [[91, "updateserviceresponse-status"]], "bosdyn/api/directory_registration_service.proto": [[91, "bosdyn-api-directory-registration-service-proto"]], "DirectoryRegistrationService": [[91, "directoryregistrationservice"]], "bosdyn/api/directory_service.proto": [[91, "bosdyn-api-directory-service-proto"]], "DirectoryService": [[91, "directoryservice"]], "bosdyn/api/docking/docking.proto": [[91, "bosdyn-api-docking-docking-proto"]], "ConfigRange": [[91, "configrange"]], "DockState": [[91, "dockstate"]], "DockingCommandFeedbackRequest": [[91, "dockingcommandfeedbackrequest"]], "DockingCommandFeedbackResponse": [[91, "dockingcommandfeedbackresponse"]], "DockingCommandRequest": [[91, "dockingcommandrequest"]], "DockingCommandResponse": [[91, "dockingcommandresponse"]], "GetDockingConfigRequest": [[91, "getdockingconfigrequest"]], "GetDockingConfigResponse": [[91, "getdockingconfigresponse"]], "GetDockingStateRequest": [[91, "getdockingstaterequest"]], "GetDockingStateResponse": [[91, "getdockingstateresponse"]], "UpdateDockingParams": [[91, "updatedockingparams"]], "DockState.DockedStatus": [[91, "dockstate-dockedstatus"]], "DockState.LinkStatus": [[91, "dockstate-linkstatus"]], "DockType": [[91, "docktype"]], "DockingCommandFeedbackResponse.Status": [[91, "dockingcommandfeedbackresponse-status"]], "DockingCommandResponse.Status": [[91, "dockingcommandresponse-status"]], "PrepPoseBehavior": [[91, "prepposebehavior"]], "bosdyn/api/docking/docking_service.proto": [[91, "bosdyn-api-docking-docking-service-proto"]], "DockingService": [[91, "dockingservice"]], "bosdyn/api/estop.proto": [[91, "bosdyn-api-estop-proto"]], "DeregisterEstopEndpointRequest": [[91, "deregisterestopendpointrequest"]], "DeregisterEstopEndpointResponse": [[91, "deregisterestopendpointresponse"]], "EstopCheckInRequest": [[91, "estopcheckinrequest"]], "EstopCheckInResponse": [[91, "estopcheckinresponse"]], "EstopConfig": [[91, "estopconfig"]], "EstopEndpoint": [[91, "estopendpoint"]], "EstopEndpointWithStatus": [[91, "estopendpointwithstatus"]], "EstopSystemStatus": [[91, "estopsystemstatus"]], "GetEstopConfigRequest": [[91, "getestopconfigrequest"]], "GetEstopConfigResponse": [[91, "getestopconfigresponse"]], "GetEstopSystemStatusRequest": [[91, "getestopsystemstatusrequest"]], "GetEstopSystemStatusResponse": [[91, "getestopsystemstatusresponse"]], "RegisterEstopEndpointRequest": [[91, "registerestopendpointrequest"]], "RegisterEstopEndpointResponse": [[91, "registerestopendpointresponse"]], "SetEstopConfigRequest": [[91, "setestopconfigrequest"]], "SetEstopConfigResponse": [[91, "setestopconfigresponse"]], "DeregisterEstopEndpointResponse.Status": [[91, "deregisterestopendpointresponse-status"]], "EstopCheckInResponse.Status": [[91, "estopcheckinresponse-status"]], "EstopStopLevel": [[91, "estopstoplevel"]], "RegisterEstopEndpointResponse.Status": [[91, "registerestopendpointresponse-status"]], "SetEstopConfigResponse.Status": [[91, "setestopconfigresponse-status"]], "bosdyn/api/estop_service.proto": [[91, "bosdyn-api-estop-service-proto"]], "EstopService": [[91, "estopservice"]], "bosdyn/api/fault_service.proto": [[91, "bosdyn-api-fault-service-proto"]], "FaultService": [[91, "faultservice"]], "bosdyn/api/full_body_command.proto": [[91, "bosdyn-api-full-body-command-proto"]], "FullBodyCommand": [[91, "fullbodycommand"]], "FullBodyCommand.Feedback": [[91, "fullbodycommand-feedback"]], "FullBodyCommand.Request": [[91, "fullbodycommand-request"]], "bosdyn/api/geometry.proto": [[91, "bosdyn-api-geometry-proto"]], "Area": [[91, "area"]], "Bounds": [[91, "bounds"]], "Box2": [[91, "box2"]], "Box2WithFrame": [[91, "box2withframe"]], "Box3": [[91, "box3"]], "Box3WithFrame": [[91, "box3withframe"]], "Circle": [[91, "circle"]], "CylindricalCoordinate": [[91, "cylindricalcoordinate"]], "FrameTreeSnapshot": [[91, "frametreesnapshot"]], "FrameTreeSnapshot.ChildToParentEdgeMapEntry": [[91, "frametreesnapshot-childtoparentedgemapentry"]], "FrameTreeSnapshot.ParentEdge": [[91, "frametreesnapshot-parentedge"]], "Matrix": [[91, "matrix"]], "MatrixInt32": [[91, "matrixint32"]], "MatrixInt64": [[91, "matrixint64"]], "Matrixf": [[91, "matrixf"]], "Plane": [[91, "plane"]], "PolyLine": [[91, "polyline"]], "Polygon": [[91, "polygon"]], "PolygonWithExclusions": [[91, "polygonwithexclusions"]], "Quad": [[91, "quad"]], "Quaternion": [[91, "quaternion"]], "Ray": [[91, "ray"]], "SE2Pose": [[91, "se2pose"]], "SE2Velocity": [[91, "se2velocity"]], "SE2VelocityLimit": [[91, "se2velocitylimit"]], "SE3Covariance": [[91, "se3covariance"]], "SE3Pose": [[91, "se3pose"]], "SE3Velocity": [[91, "se3velocity"]], "Vec2": [[91, "vec2"]], "Vec2Value": [[91, "vec2value"]], "Vec3": [[91, "vec3"]], "Vec3Value": [[91, "vec3value"]], "Vector": [[91, "vector"]], "Volume": [[91, "volume"]], "Wrench": [[91, "wrench"]], "bosdyn/api/gps/aggregator.proto": [[91, "bosdyn-api-gps-aggregator-proto"]], "NewGpsDataRequest": [[91, "newgpsdatarequest"]], "NewGpsDataResponse": [[91, "newgpsdataresponse"]], "bosdyn/api/gps/aggregator_service.proto": [[91, "bosdyn-api-gps-aggregator-service-proto"]], "AggregatorService": [[91, "aggregatorservice"]], "bosdyn/api/gps/gps.proto": [[91, "bosdyn-api-gps-gps-proto"]], "GpsDataPoint": [[91, "gpsdatapoint"]], "GpsDataPoint.Accuracy": [[91, "gpsdatapoint-accuracy"]], "GpsDataPoint.FixMode": [[91, "gpsdatapoint-fixmode"]], "GpsDataPoint.Satellite": [[91, "gpsdatapoint-satellite"]], "GpsDevice": [[91, "gpsdevice"]], "LLH": [[91, "llh"]], "LocationAndGpsDevice": [[91, "locationandgpsdevice"]], "GpsDataPoint.Filter": [[91, "gpsdatapoint-filter"]], "GpsDataPoint.FixMode.Mode": [[91, "gpsdatapoint-fixmode-mode"]], "GpsDataPoint.Satellite.Constellation": [[91, "gpsdatapoint-satellite-constellation"]], "bosdyn/api/gps/registration.proto": [[91, "bosdyn-api-gps-registration-proto"]], "GetLocationRequest": [[91, "getlocationrequest"]], "GetLocationResponse": [[91, "getlocationresponse"]], "GpsState": [[91, "gpsstate"]], "ResetRegistrationRequest": [[91, "resetregistrationrequest"]], "ResetRegistrationResponse": [[91, "resetregistrationresponse"]], "GetLocationResponse.Status": [[91, "getlocationresponse-status"]], "Registration.Status": [[91, "registration-status"]], "bosdyn/api/gps/registration_service.proto": [[91, "bosdyn-api-gps-registration-service-proto"]], "RegistrationService": [[91, "registrationservice"]], "bosdyn/api/graph_nav/area_callback.proto": [[91, "bosdyn-api-graph-nav-area-callback-proto"]], "AreaCallbackError": [[91, "areacallbackerror"]], "AreaCallbackInformation": [[91, "areacallbackinformation"]], "AreaCallbackInformationRequest": [[91, "areacallbackinformationrequest"]], "AreaCallbackInformationResponse": [[91, "areacallbackinformationresponse"]], "BeginCallbackRequest": [[91, "begincallbackrequest"]], "BeginCallbackResponse": [[91, "begincallbackresponse"]], "BeginControlRequest": [[91, "begincontrolrequest"]], "BeginControlResponse": [[91, "begincontrolresponse"]], "EndCallbackRequest": [[91, "endcallbackrequest"]], "EndCallbackResponse": [[91, "endcallbackresponse"]], "RegionInformation": [[91, "regioninformation"]], "RouteChangeRequest": [[91, "routechangerequest"]], "RouteChangeResponse": [[91, "routechangeresponse"]], "StopConfiguration": [[91, "stopconfiguration"]], "UpdateCallbackRequest": [[91, "updatecallbackrequest"]], "UpdateCallbackResponse": [[91, "updatecallbackresponse"]], "UpdateCallbackResponse.Complete": [[91, "updatecallbackresponse-complete"]], "UpdateCallbackResponse.Error": [[91, "updatecallbackresponse-error"]], "UpdateCallbackResponse.NavPolicy": [[91, "updatecallbackresponse-navpolicy"]], "UpdateCallbackResponse.UpdateLocalization": [[91, "updatecallbackresponse-updatelocalization"]], "AreaCallbackError.CallError": [[91, "areacallbackerror-callerror"]], "AreaCallbackInformation.Blockage": [[91, "areacallbackinformation-blockage"]], "AreaCallbackInformation.EntityWaiting": [[91, "areacallbackinformation-entitywaiting"]], "AreaCallbackInformation.Impairment": [[91, "areacallbackinformation-impairment"]], "BeginCallbackResponse.Status": [[91, "begincallbackresponse-status"]], "BeginControlResponse.Status": [[91, "begincontrolresponse-status"]], "EndCallbackResponse.Status": [[91, "endcallbackresponse-status"]], "RouteChangeResponse.Status": [[91, "routechangeresponse-status"]], "StopConfiguration.FaceDirection": [[91, "stopconfiguration-facedirection"]], "UpdateCallbackRequest.Stage": [[91, "updatecallbackrequest-stage"]], "UpdateCallbackResponse.Error.ErrorType": [[91, "updatecallbackresponse-error-errortype"]], "UpdateCallbackResponse.NavPolicy.Option": [[91, "updatecallbackresponse-navpolicy-option"]], "UpdateCallbackResponse.Status": [[91, "updatecallbackresponse-status"]], "UpdateCallbackResponse.UpdateLocalization.LocalizationChange": [[91, "updatecallbackresponse-updatelocalization-localizationchange"]], "bosdyn/api/graph_nav/area_callback_data.proto": [[91, "bosdyn-api-graph-nav-area-callback-data-proto"]], "AreaCallbackData": [[91, "areacallbackdata"]], "AreaCallbackMapConfig": [[91, "areacallbackmapconfig"]], "bosdyn/api/graph_nav/area_callback_service.proto": [[91, "bosdyn-api-graph-nav-area-callback-service-proto"]], "AreaCallbackService": [[91, "areacallbackservice"]], "bosdyn/api/graph_nav/gps.proto": [[91, "bosdyn-api-graph-nav-gps-proto"]], "GPSLocalization": [[91, "gpslocalization"]], "GPSLocalization.State": [[91, "gpslocalization-state"]], "bosdyn/api/graph_nav/graph_nav.proto": [[91, "bosdyn-api-graph-nav-graph-nav-proto"]], "AreaCallbackServiceError": [[91, "areacallbackserviceerror"]], "ClearGraphRequest": [[91, "cleargraphrequest"]], "ClearGraphResponse": [[91, "cleargraphresponse"]], "DownloadEdgeSnapshotRequest": [[91, "downloadedgesnapshotrequest"]], "DownloadEdgeSnapshotResponse": [[91, "downloadedgesnapshotresponse"]], "DownloadGraphRequest": [[91, "downloadgraphrequest"]], "DownloadGraphResponse": [[91, "downloadgraphresponse"]], "DownloadWaypointSnapshotRequest": [[91, "downloadwaypointsnapshotrequest"]], "DownloadWaypointSnapshotResponse": [[91, "downloadwaypointsnapshotresponse"]], "GPSNavigationParams": [[91, "gpsnavigationparams"]], "GetLocalizationStateRequest": [[91, "getlocalizationstaterequest"]], "GetLocalizationStateResponse": [[91, "getlocalizationstateresponse"]], "LostDetectorState": [[91, "lostdetectorstate"]], "ModifyNavigationResponse": [[91, "modifynavigationresponse"]], "NavigateRouteRequest": [[91, "navigaterouterequest"]], "NavigateRouteResponse": [[91, "navigaterouteresponse"]], "NavigateToAnchorRequest": [[91, "navigatetoanchorrequest"]], "NavigateToAnchorResponse": [[91, "navigatetoanchorresponse"]], "NavigateToRequest": [[91, "navigatetorequest"]], "NavigateToResponse": [[91, "navigatetoresponse"]], "NavigationFeedbackRequest": [[91, "navigationfeedbackrequest"]], "NavigationFeedbackResponse": [[91, "navigationfeedbackresponse"]], "NavigationFeedbackResponse.ActiveRegionInformation": [[91, "navigationfeedbackresponse-activeregioninformation"]], "NavigationFeedbackResponse.ActiveRegionInformationEntry": [[91, "navigationfeedbackresponse-activeregioninformationentry"]], "NavigationFeedbackResponse.AreaCallbackErrorsEntry": [[91, "navigationfeedbackresponse-areacallbackerrorsentry"]], "RemotePointCloudStatus": [[91, "remotepointcloudstatus"]], "RouteFollowingParams": [[91, "routefollowingparams"]], "RouteGenParams": [[91, "routegenparams"]], "SensorCompatibilityStatus": [[91, "sensorcompatibilitystatus"]], "SetLocalizationRequest": [[91, "setlocalizationrequest"]], "SetLocalizationResponse": [[91, "setlocalizationresponse"]], "SetLocalizationResponse.SuspectedAmbiguity": [[91, "setlocalizationresponse-suspectedambiguity"]], "TravelParams": [[91, "travelparams"]], "UploadEdgeSnapshotRequest": [[91, "uploadedgesnapshotrequest"]], "UploadEdgeSnapshotResponse": [[91, "uploadedgesnapshotresponse"]], "UploadGraphRequest": [[91, "uploadgraphrequest"]], "UploadGraphResponse": [[91, "uploadgraphresponse"]], "UploadGraphResponse.ValidationStatus": [[91, "uploadgraphresponse-validationstatus"]], "UploadWaypointSnapshotRequest": [[91, "uploadwaypointsnapshotrequest"]], "UploadWaypointSnapshotResponse": [[91, "uploadwaypointsnapshotresponse"]], "ValidateGraphRequest": [[91, "validategraphrequest"]], "ValidateGraphResponse": [[91, "validategraphresponse"]], "VisualRefinementOptions": [[91, "visualrefinementoptions"]], "ClearGraphResponse.Status": [[91, "cleargraphresponse-status"]], "DownloadEdgeSnapshotResponse.Status": [[91, "downloadedgesnapshotresponse-status"]], "DownloadWaypointSnapshotResponse.Status": [[91, "downloadwaypointsnapshotresponse-status"]], "ModifyNavigationResponse.Status": [[91, "modifynavigationresponse-status"]], "NavigateRouteResponse.Status": [[91, "navigaterouteresponse-status"]], "NavigateToAnchorResponse.GPSStatus": [[91, "navigatetoanchorresponse-gpsstatus"]], "NavigateToAnchorResponse.Status": [[91, "navigatetoanchorresponse-status"]], "NavigateToResponse.Status": [[91, "navigatetoresponse-status"]], "NavigationFeedbackResponse.ActiveRegionInformation.AreaCallbackStatus": [[91, "navigationfeedbackresponse-activeregioninformation-areacallbackstatus"]], "NavigationFeedbackResponse.BlockageStatus": [[91, "navigationfeedbackresponse-blockagestatus"]], "NavigationFeedbackResponse.RouteFollowingStatus": [[91, "navigationfeedbackresponse-routefollowingstatus"]], "NavigationFeedbackResponse.Status": [[91, "navigationfeedbackresponse-status"]], "NavigationFeedbackResponse.StuckReason": [[91, "navigationfeedbackresponse-stuckreason"]], "RouteFollowingParams.ResumeBehavior": [[91, "routefollowingparams-resumebehavior"]], "RouteFollowingParams.RouteBlockedBehavior": [[91, "routefollowingparams-routeblockedbehavior"]], "RouteFollowingParams.StartRouteBehavior": [[91, "routefollowingparams-startroutebehavior"]], "SetLocalizationRequest.FiducialInit": [[91, "setlocalizationrequest-fiducialinit"]], "SetLocalizationResponse.QualityCheckResult": [[91, "setlocalizationresponse-qualitycheckresult"]], "SetLocalizationResponse.Status": [[91, "setlocalizationresponse-status"]], "TravelParams.FeatureQualityTolerance": [[91, "travelparams-featurequalitytolerance"]], "UploadGraphResponse.Status": [[91, "uploadgraphresponse-status"]], "UploadWaypointSnapshotResponse.Status": [[91, "uploadwaypointsnapshotresponse-status"]], "ValidateGraphResponse.Status": [[91, "validategraphresponse-status"]], "bosdyn/api/graph_nav/graph_nav_service.proto": [[91, "bosdyn-api-graph-nav-graph-nav-service-proto"]], "GraphNavService": [[91, "graphnavservice"]], "bosdyn/api/graph_nav/map.proto": [[91, "bosdyn-api-graph-nav-map-proto"]], "Anchor": [[91, "anchor"]], "AnchoredWorldObject": [[91, "anchoredworldobject"]], "Anchoring": [[91, "anchoring"]], "AreaCallbackRegion": [[91, "areacallbackregion"]], "ClientMetadata": [[91, "clientmetadata"]], "Edge": [[91, "edge"]], "Edge.Annotations": [[91, "edge-annotations"]], "Edge.Annotations.AreaCallbacksEntry": [[91, "edge-annotations-areacallbacksentry"]], "Edge.Annotations.StairData": [[91, "edge-annotations-stairdata"]], "Edge.Id": [[91, "edge-id"]], "EdgeSnapshot": [[91, "edgesnapshot"]], "EdgeSnapshot.AreaCallbacksEntry": [[91, "edgesnapshot-areacallbacksentry"]], "EdgeSnapshot.Stance": [[91, "edgesnapshot-stance"]], "Graph": [[91, "graph"]], "MapStats": [[91, "mapstats"]], "MapStats.Stat": [[91, "mapstats-stat"]], "Waypoint": [[91, "waypoint"]], "Waypoint.Annotations": [[91, "waypoint-annotations"]], "Waypoint.Annotations.GPSSettings": [[91, "waypoint-annotations-gpssettings"]], "Waypoint.Annotations.LocalizeRegion": [[91, "waypoint-annotations-localizeregion"]], "Waypoint.Annotations.LocalizeRegion.Circle2D": [[91, "waypoint-annotations-localizeregion-circle2d"]], "Waypoint.Annotations.LocalizeRegion.Default": [[91, "waypoint-annotations-localizeregion-default"]], "Waypoint.Annotations.LocalizeRegion.Empty": [[91, "waypoint-annotations-localizeregion-empty"]], "Waypoint.Annotations.LoopClosureSettings": [[91, "waypoint-annotations-loopclosuresettings"]], "WaypointSnapshot": [[91, "waypointsnapshot"]], "AnnotationState": [[91, "annotationstate"]], "Edge.Annotations.DirectionConstraint": [[91, "edge-annotations-directionconstraint"]], "Edge.Annotations.GroundClutterAvoidanceMode": [[91, "edge-annotations-groundclutteravoidancemode"]], "Edge.Annotations.PathFollowingMode": [[91, "edge-annotations-pathfollowingmode"]], "Edge.Annotations.StairData.DescentPreference": [[91, "edge-annotations-stairdata-descentpreference"]], "Edge.EdgeSource": [[91, "edge-edgesource"]], "Waypoint.WaypointSource": [[91, "waypoint-waypointsource"]], "bosdyn/api/graph_nav/map_processing.proto": [[91, "bosdyn-api-graph-nav-map-processing-proto"]], "AnchorHintUncertainty": [[91, "anchorhintuncertainty"]], "AnchoringHint": [[91, "anchoringhint"]], "PoseBounds": [[91, "posebounds"]], "ProcessAnchoringRequest": [[91, "processanchoringrequest"]], "ProcessAnchoringRequest.Params": [[91, "processanchoringrequest-params"]], "ProcessAnchoringRequest.Params.MeasurementParams": [[91, "processanchoringrequest-params-measurementparams"]], "ProcessAnchoringRequest.Params.OptimizerParams": [[91, "processanchoringrequest-params-optimizerparams"]], "ProcessAnchoringRequest.Params.Weights": [[91, "processanchoringrequest-params-weights"]], "ProcessAnchoringResponse": [[91, "processanchoringresponse"]], "ProcessAnchoringResponse.GPSResult": [[91, "processanchoringresponse-gpsresult"]], "ProcessTopologyRequest": [[91, "processtopologyrequest"]], "ProcessTopologyRequest.CollisionCheckingParams": [[91, "processtopologyrequest-collisioncheckingparams"]], "ProcessTopologyRequest.FiducialLoopClosureParams": [[91, "processtopologyrequest-fiducialloopclosureparams"]], "ProcessTopologyRequest.ICPParams": [[91, "processtopologyrequest-icpparams"]], "ProcessTopologyRequest.OdometryLoopClosureParams": [[91, "processtopologyrequest-odometryloopclosureparams"]], "ProcessTopologyRequest.Params": [[91, "processtopologyrequest-params"]], "ProcessTopologyResponse": [[91, "processtopologyresponse"]], "WaypointAnchorHint": [[91, "waypointanchorhint"]], "WorldObjectAnchorHint": [[91, "worldobjectanchorhint"]], "ProcessAnchoringResponse.GPSResult.GPSStatus": [[91, "processanchoringresponse-gpsresult-gpsstatus"]], "ProcessAnchoringResponse.Status": [[91, "processanchoringresponse-status"]], "ProcessTopologyResponse.Status": [[91, "processtopologyresponse-status"]], "bosdyn/api/graph_nav/map_processing_service.proto": [[91, "bosdyn-api-graph-nav-map-processing-service-proto"]], "MapProcessingService": [[91, "mapprocessingservice"]], "bosdyn/api/graph_nav/nav.proto": [[91, "bosdyn-api-graph-nav-nav-proto"]], "CompletedRoute": [[91, "completedroute"]], "CompletedRoute.CompletedEdge": [[91, "completedroute-completededge"]], "Localization": [[91, "localization"]], "Route": [[91, "route"]], "bosdyn/api/graph_nav/recording.proto": [[91, "bosdyn-api-graph-nav-recording-proto"]], "CreateEdgeRequest": [[91, "createedgerequest"]], "CreateEdgeResponse": [[91, "createedgeresponse"]], "CreateWaypointRequest": [[91, "createwaypointrequest"]], "CreateWaypointResponse": [[91, "createwaypointresponse"]], "GetRecordStatusRequest": [[91, "getrecordstatusrequest"]], "GetRecordStatusResponse": [[91, "getrecordstatusresponse"]], "RecordingEnvironment": [[91, "recordingenvironment"]], "SetRecordingEnvironmentRequest": [[91, "setrecordingenvironmentrequest"]], "SetRecordingEnvironmentResponse": [[91, "setrecordingenvironmentresponse"]], "StartRecordingRequest": [[91, "startrecordingrequest"]], "StartRecordingResponse": [[91, "startrecordingresponse"]], "StopRecordingRequest": [[91, "stoprecordingrequest"]], "StopRecordingResponse": [[91, "stoprecordingresponse"]], "CreateEdgeResponse.Status": [[91, "createedgeresponse-status"]], "CreateWaypointResponse.Status": [[91, "createwaypointresponse-status"]], "GetRecordStatusResponse.MapState": [[91, "getrecordstatusresponse-mapstate"]], "GetRecordStatusResponse.Status": [[91, "getrecordstatusresponse-status"]], "StartRecordingResponse.Status": [[91, "startrecordingresponse-status"]], "StopRecordingResponse.Status": [[91, "stoprecordingresponse-status"]], "bosdyn/api/graph_nav/recording_service.proto": [[91, "bosdyn-api-graph-nav-recording-service-proto"]], "GraphNavRecordingService": [[91, "graphnavrecordingservice"]], "bosdyn/api/gripper_camera_param.proto": [[91, "bosdyn-api-gripper-camera-param-proto"]], "GripperCameraGetParamRequest": [[91, "grippercameragetparamrequest"]], "GripperCameraGetParamResponse": [[91, "grippercameragetparamresponse"]], "GripperCameraParamRequest": [[91, "grippercameraparamrequest"]], "GripperCameraParamResponse": [[91, "grippercameraparamresponse"]], "GripperCameraParams": [[91, "grippercameraparams"]], "RoiParameters": [[91, "roiparameters"]], "GripperCameraParams.CameraMode": [[91, "grippercameraparams-cameramode"]], "GripperCameraParams.LedMode": [[91, "grippercameraparams-ledmode"]], "HdrParameters": [[91, "hdrparameters"]], "RoiParameters.RoiWindowSize": [[91, "roiparameters-roiwindowsize"]], "bosdyn/api/gripper_camera_param_service.proto": [[91, "bosdyn-api-gripper-camera-param-service-proto"]], "GripperCameraParamService": [[91, "grippercameraparamservice"]], "bosdyn/api/gripper_command.proto": [[91, "bosdyn-api-gripper-command-proto"]], "ClawGripperCommand": [[91, "clawgrippercommand"]], "ClawGripperCommand.Feedback": [[91, "clawgrippercommand-feedback"]], "ClawGripperCommand.Request": [[91, "clawgrippercommand-request"]], "GripperCommand": [[91, "grippercommand"]], "GripperCommand.Feedback": [[91, "grippercommand-feedback"]], "GripperCommand.Request": [[91, "grippercommand-request"]], "ClawGripperCommand.Feedback.Status": [[91, "clawgrippercommand-feedback-status"]], "bosdyn/api/header.proto": [[91, "bosdyn-api-header-proto"]], "CommonError": [[91, "commonerror"]], "RequestHeader": [[91, "requestheader"]], "ResponseHeader": [[91, "responseheader"]], "CommonError.Code": [[91, "commonerror-code"]], "bosdyn/api/image.proto": [[91, "bosdyn-api-image-proto"]], "CaptureParameters": [[91, "captureparameters"]], "GetImageRequest": [[91, "getimagerequest"]], "GetImageResponse": [[91, "getimageresponse"]], "Image": [[91, "image"], [136, "module-bosdyn.client.image"]], "ImageCapture": [[91, "imagecapture"]], "ImageCaptureAndSource": [[91, "imagecaptureandsource"]], "ImageRequest": [[91, "imagerequest"]], "ImageResponse": [[91, "imageresponse"]], "ImageSource": [[91, "imagesource"]], "ImageSource.PinholeModel": [[91, "imagesource-pinholemodel"]], "ImageSource.PinholeModel.CameraIntrinsics": [[91, "imagesource-pinholemodel-cameraintrinsics"]], "ListImageSourcesRequest": [[91, "listimagesourcesrequest"]], "ListImageSourcesResponse": [[91, "listimagesourcesresponse"]], "Image.Format": [[91, "image-format"]], "Image.PixelFormat": [[91, "image-pixelformat"]], "ImageResponse.Status": [[91, "imageresponse-status"]], "ImageSource.ImageType": [[91, "imagesource-imagetype"]], "bosdyn/api/image_geometry.proto": [[91, "bosdyn-api-image-geometry-proto"]], "AreaI": [[91, "areai"]], "RectangleI": [[91, "rectanglei"]], "bosdyn/api/image_service.proto": [[91, "bosdyn-api-image-service-proto"]], "ImageService": [[91, "imageservice"]], "bosdyn/api/ir_enable_disable.proto": [[91, "bosdyn-api-ir-enable-disable-proto"]], "IREnableDisableRequest": [[91, "irenabledisablerequest"]], "IREnableDisableResponse": [[91, "irenabledisableresponse"]], "IREnableDisableRequest.Request": [[91, "irenabledisablerequest-request"]], "bosdyn/api/ir_enable_disable_service.proto": [[91, "bosdyn-api-ir-enable-disable-service-proto"]], "IREnableDisableService": [[91, "irenabledisableservice"]], "bosdyn/api/keepalive/keepalive.proto": [[91, "bosdyn-api-keepalive-keepalive-proto"]], "ActionAfter": [[91, "actionafter"]], "ActionAfter.AutoReturn": [[91, "actionafter-autoreturn"]], "ActionAfter.ControlledMotorsOff": [[91, "actionafter-controlledmotorsoff"]], "ActionAfter.ImmediateRobotOff": [[91, "actionafter-immediaterobotoff"]], "ActionAfter.LeaseStale": [[91, "actionafter-leasestale"]], "ActionAfter.RecordEvent": [[91, "actionafter-recordevent"]], "CheckInRequest": [[91, "checkinrequest"]], "CheckInResponse": [[91, "checkinresponse"]], "LivePolicy": [[91, "livepolicy"]], "ModifyPolicyRequest": [[91, "modifypolicyrequest"]], "ModifyPolicyResponse": [[91, "modifypolicyresponse"]], "CheckInResponse.Status": [[91, "checkinresponse-status"]], "GetStatusResponse.PolicyControlAction": [[91, "getstatusresponse-policycontrolaction"]], "ModifyPolicyResponse.Status": [[91, "modifypolicyresponse-status"]], "bosdyn/api/keepalive/keepalive_service.proto": [[91, "bosdyn-api-keepalive-keepalive-service-proto"]], "KeepaliveService": [[91, "keepaliveservice"]], "bosdyn/api/lease.proto": [[91, "bosdyn-api-lease-proto"]], "AcquireLeaseRequest": [[91, "acquireleaserequest"]], "AcquireLeaseResponse": [[91, "acquireleaseresponse"]], "Lease": [[91, "lease"], [141, "module-bosdyn.client.lease"]], "LeaseOwner": [[91, "leaseowner"]], "LeaseResource": [[91, "leaseresource"]], "LeaseUseResult": [[91, "leaseuseresult"]], "ListLeasesRequest": [[91, "listleasesrequest"]], "ListLeasesResponse": [[91, "listleasesresponse"]], "ResourceTree": [[91, "resourcetree"]], "RetainLeaseRequest": [[91, "retainleaserequest"]], "RetainLeaseResponse": [[91, "retainleaseresponse"]], "ReturnLeaseRequest": [[91, "returnleaserequest"]], "ReturnLeaseResponse": [[91, "returnleaseresponse"]], "TakeLeaseRequest": [[91, "takeleaserequest"]], "TakeLeaseResponse": [[91, "takeleaseresponse"]], "AcquireLeaseResponse.Status": [[91, "acquireleaseresponse-status"]], "LeaseUseResult.Status": [[91, "leaseuseresult-status"]], "ReturnLeaseResponse.Status": [[91, "returnleaseresponse-status"]], "TakeLeaseResponse.Status": [[91, "takeleaseresponse-status"]], "bosdyn/api/lease_service.proto": [[91, "bosdyn-api-lease-service-proto"]], "LeaseService": [[91, "leaseservice"]], "bosdyn/api/license.proto": [[91, "bosdyn-api-license-proto"]], "GetFeatureEnabledRequest": [[91, "getfeatureenabledrequest"]], "GetFeatureEnabledResponse": [[91, "getfeatureenabledresponse"]], "GetFeatureEnabledResponse.FeatureEnabledEntry": [[91, "getfeatureenabledresponse-featureenabledentry"]], "GetLicenseInfoRequest": [[91, "getlicenseinforequest"]], "GetLicenseInfoResponse": [[91, "getlicenseinforesponse"]], "LicenseInfo": [[91, "licenseinfo"]], "LicenseInfo.Status": [[91, "licenseinfo-status"]], "bosdyn/api/license_service.proto": [[91, "bosdyn-api-license-service-proto"]], "LicenseService": [[91, "licenseservice"]], "bosdyn/api/local_grid.proto": [[91, "bosdyn-api-local-grid-proto"]], "GetLocalGridTypesRequest": [[91, "getlocalgridtypesrequest"]], "GetLocalGridTypesResponse": [[91, "getlocalgridtypesresponse"]], "GetLocalGridsRequest": [[91, "getlocalgridsrequest"]], "GetLocalGridsResponse": [[91, "getlocalgridsresponse"]], "LocalGrid": [[91, "localgrid"]], "LocalGridExtent": [[91, "localgridextent"]], "LocalGridRequest": [[91, "localgridrequest"]], "LocalGridResponse": [[91, "localgridresponse"]], "LocalGridType": [[91, "localgridtype"]], "LocalGrid.CellFormat": [[91, "localgrid-cellformat"]], "LocalGrid.Encoding": [[91, "localgrid-encoding"]], "LocalGridResponse.Status": [[91, "localgridresponse-status"]], "bosdyn/api/local_grid_service.proto": [[91, "bosdyn-api-local-grid-service-proto"]], "LocalGridService": [[91, "localgridservice"]], "bosdyn/api/log_status/log_status.proto": [[91, "bosdyn-api-log-status-log-status-proto"]], "GetActiveLogStatusesRequest": [[91, "getactivelogstatusesrequest"]], "GetActiveLogStatusesResponse": [[91, "getactivelogstatusesresponse"]], "GetLogStatusRequest": [[91, "getlogstatusrequest"]], "GetLogStatusResponse": [[91, "getlogstatusresponse"]], "LogStatus": [[91, "logstatus"]], "StartExperimentLogRequest": [[91, "startexperimentlogrequest"]], "StartExperimentLogResponse": [[91, "startexperimentlogresponse"]], "StartRetroLogRequest": [[91, "startretrologrequest"]], "StartRetroLogResponse": [[91, "startretrologresponse"]], "TerminateLogRequest": [[91, "terminatelogrequest"]], "TerminateLogResponse": [[91, "terminatelogresponse"]], "UpdateExperimentLogRequest": [[91, "updateexperimentlogrequest"]], "UpdateExperimentLogResponse": [[91, "updateexperimentlogresponse"]], "GetActiveLogStatusesResponse.Status": [[91, "getactivelogstatusesresponse-status"]], "GetLogStatusResponse.Status": [[91, "getlogstatusresponse-status"]], "LogStatus.Status": [[91, "logstatus-status"]], "LogStatus.Type": [[91, "logstatus-type"]], "StartExperimentLogResponse.Status": [[91, "startexperimentlogresponse-status"]], "StartRetroLogResponse.Status": [[91, "startretrologresponse-status"]], "TerminateLogResponse.Status": [[91, "terminatelogresponse-status"]], "UpdateExperimentLogResponse.Status": [[91, "updateexperimentlogresponse-status"]], "bosdyn/api/log_status/log_status_service.proto": [[91, "bosdyn-api-log-status-log-status-service-proto"]], "LogStatusService": [[91, "logstatusservice"]], "bosdyn/api/manipulation_api.proto": [[91, "bosdyn-api-manipulation-api-proto"]], "AllowableOrientation": [[91, "allowableorientation"]], "ApiGraspOverride": [[91, "apigraspoverride"]], "ApiGraspOverrideRequest": [[91, "apigraspoverriderequest"]], "ApiGraspOverrideResponse": [[91, "apigraspoverrideresponse"]], "ApiGraspedCarryStateOverride": [[91, "apigraspedcarrystateoverride"]], "GraspParams": [[91, "graspparams"]], "ManipulationApiFeedbackRequest": [[91, "manipulationapifeedbackrequest"]], "ManipulationApiFeedbackResponse": [[91, "manipulationapifeedbackresponse"]], "ManipulationApiRequest": [[91, "manipulationapirequest"]], "ManipulationApiResponse": [[91, "manipulationapiresponse"]], "PickObject": [[91, "pickobject"]], "PickObjectExecutePlan": [[91, "pickobjectexecuteplan"]], "PickObjectInImage": [[91, "pickobjectinimage"]], "PickObjectRayInWorld": [[91, "pickobjectrayinworld"]], "RotationWithTolerance": [[91, "rotationwithtolerance"]], "SqueezeGrasp": [[91, "squeezegrasp"]], "VectorAlignmentWithTolerance": [[91, "vectoralignmentwithtolerance"]], "WalkToObjectInImage": [[91, "walktoobjectinimage"]], "WalkToObjectRayInWorld": [[91, "walktoobjectrayinworld"]], "ApiGraspOverride.Override": [[91, "apigraspoverride-override"]], "GraspPositionConstraint": [[91, "grasppositionconstraint"]], "ManipulationCameraSource": [[91, "manipulationcamerasource"]], "ManipulationFeedbackState": [[91, "manipulationfeedbackstate"]], "WalkGazeMode": [[91, "walkgazemode"]], "bosdyn/api/manipulation_api_service.proto": [[91, "bosdyn-api-manipulation-api-service-proto"]], "ManipulationApiService": [[91, "manipulationapiservice"]], "bosdyn/api/metrics_logging/absolute_metrics.proto": [[91, "bosdyn-api-metrics-logging-absolute-metrics-proto"]], "AbsoluteMetricsSnapshot": [[91, "absolutemetricssnapshot"]], "bosdyn/api/metrics_logging/metrics_logging_robot.proto": [[91, "bosdyn-api-metrics-logging-metrics-logging-robot-proto"]], "GetAbsoluteMetricSnapshotRequest": [[91, "getabsolutemetricsnapshotrequest"]], "GetAbsoluteMetricSnapshotResponse": [[91, "getabsolutemetricsnapshotresponse"]], "GetMetricsRequest": [[91, "getmetricsrequest"]], "GetMetricsResponse": [[91, "getmetricsresponse"]], "GetStoreSequenceRangeRequest": [[91, "getstoresequencerangerequest"]], "GetStoreSequenceRangeResponse": [[91, "getstoresequencerangeresponse"]], "bosdyn/api/metrics_logging/metrics_logging_robot_service.proto": [[91, "bosdyn-api-metrics-logging-metrics-logging-robot-service-proto"]], "MetricsLoggingRobotService": [[91, "metricsloggingrobotservice"]], "bosdyn/api/metrics_logging/signed_proto.proto": [[91, "bosdyn-api-metrics-logging-signed-proto-proto"]], "SignedProto": [[91, "signedproto"]], "bosdyn/api/mission/mission.proto": [[91, "bosdyn-api-mission-mission-proto"]], "AnswerQuestionRequest": [[91, "answerquestionrequest"]], "AnswerQuestionResponse": [[91, "answerquestionresponse"]], "FailedNode": [[91, "failednode"]], "GetInfoRequest": [[91, "getinforequest"]], "GetInfoResponse": [[91, "getinforesponse"]], "GetMissionRequest": [[91, "getmissionrequest"]], "GetMissionResponse": [[91, "getmissionresponse"]], "GetStateRequest": [[91, "getstaterequest"]], "GetStateResponse": [[91, "getstateresponse"]], "LoadMissionRequest": [[91, "loadmissionrequest"]], "LoadMissionResponse": [[91, "loadmissionresponse"]], "MissionInfo": [[91, "missioninfo"]], "NodeInfo": [[91, "nodeinfo"]], "PauseMissionRequest": [[91, "pausemissionrequest"]], "PauseMissionResponse": [[91, "pausemissionresponse"]], "PlayMissionRequest": [[91, "playmissionrequest"]], "PlayMissionResponse": [[91, "playmissionresponse"]], "PlaySettings": [[91, "playsettings"]], "Question": [[91, "question"]], "RestartMissionRequest": [[91, "restartmissionrequest"]], "RestartMissionResponse": [[91, "restartmissionresponse"]], "State": [[91, "state"]], "State.AnsweredQuestion": [[91, "state-answeredquestion"]], "State.NodeStatesAtTick": [[91, "state-nodestatesattick"]], "State.NodeStatesAtTick.NodeState": [[91, "state-nodestatesattick-nodestate"]], "State.NodeStatesAtTick.NodeState.BlackboardState": [[91, "state-nodestatesattick-nodestate-blackboardstate"]], "StopMissionRequest": [[91, "stopmissionrequest"]], "StopMissionResponse": [[91, "stopmissionresponse"]], "AnswerQuestionResponse.Status": [[91, "answerquestionresponse-status"]], "LoadMissionResponse.Status": [[91, "loadmissionresponse-status"]], "PauseMissionResponse.Status": [[91, "pausemissionresponse-status"]], "PlayMissionResponse.Status": [[91, "playmissionresponse-status"]], "RestartMissionResponse.Status": [[91, "restartmissionresponse-status"]], "State.Status": [[91, "state-status"]], "StopMissionResponse.Status": [[91, "stopmissionresponse-status"]], "bosdyn/api/mission/mission_service.proto": [[91, "bosdyn-api-mission-mission-service-proto"]], "MissionService": [[91, "missionservice"]], "bosdyn/api/mission/nodes.proto": [[91, "bosdyn-api-mission-nodes-proto"]], "BosdynDockState": [[91, "bosdyndockstate"]], "BosdynGraphNavLocalize": [[91, "bosdyngraphnavlocalize"]], "BosdynGraphNavState": [[91, "bosdyngraphnavstate"]], "BosdynGripperCameraParamsState": [[91, "bosdyngrippercameraparamsstate"]], "BosdynNavigateRoute": [[91, "bosdynnavigateroute"]], "BosdynNavigateTo": [[91, "bosdynnavigateto"]], "BosdynPowerRequest": [[91, "bosdynpowerrequest"]], "BosdynRecordEvent": [[91, "bosdynrecordevent"]], "BosdynRecordEvent.AdditionalParametersEntry": [[91, "bosdynrecordevent-additionalparametersentry"]], "BosdynRobotCommand": [[91, "bosdynrobotcommand"]], "BosdynRobotState": [[91, "bosdynrobotstate"]], "ClearBehaviorFaults": [[91, "clearbehaviorfaults"]], "Condition": [[91, "condition"]], "Condition.Operand": [[91, "condition-operand"]], "ConstantResult": [[91, "constantresult"]], "DataAcquisition": [[91, "dataacquisition"]], "DataAcquisitionOnInterruption": [[91, "dataacquisitiononinterruption"]], "DateToBlackboard": [[91, "datetoblackboard"]], "DefineBlackboard": [[91, "defineblackboard"]], "ExecuteChoreography": [[91, "executechoreography"]], "ForDuration": [[91, "forduration"]], "FormatBlackboard": [[91, "formatblackboard"]], "MissionUploadChoreography": [[91, "missionuploadchoreography"]], "Node": [[91, "node"]], "ParallelAnd": [[91, "paralleland"]], "Prompt": [[91, "prompt"]], "Prompt.Option": [[91, "prompt-option"]], "Prompt.OptionsList": [[91, "prompt-optionslist"]], "RemoteGrpc": [[91, "remotegrpc"]], "Repeat": [[91, "repeat"]], "RestartWhenPaused": [[91, "restartwhenpaused"]], "RetainLease": [[91, "retainlease"]], "Retry": [[91, "retry"]], "Selector": [[91, "selector"]], "Sequence": [[91, "sequence"]], "SetBlackboard": [[91, "setblackboard"]], "SetGraspOverride": [[91, "setgraspoverride"]], "SetGripperCameraParams": [[91, "setgrippercameraparams"]], "SimpleParallel": [[91, "simpleparallel"]], "Sleep": [[91, "sleep"]], "SpotCamFocusState": [[91, "spotcamfocusstate"]], "SpotCamLed": [[91, "spotcamled"]], "SpotCamLed.BrightnessesEntry": [[91, "spotcamled-brightnessesentry"]], "SpotCamPtz": [[91, "spotcamptz"]], "SpotCamPtz.AdjustParameters": [[91, "spotcamptz-adjustparameters"]], "SpotCamResetAutofocus": [[91, "spotcamresetautofocus"]], "SpotCamStoreMedia": [[91, "spotcamstoremedia"]], "StoreMetadata": [[91, "storemetadata"]], "Switch": [[91, "switch"]], "Switch.IntChildrenEntry": [[91, "switch-intchildrenentry"]], "Condition.Compare": [[91, "condition-compare"]], "Condition.HandleStaleness": [[91, "condition-handlestaleness"]], "DataAcquisition.CompletionBehavior": [[91, "dataacquisition-completionbehavior"]], "bosdyn/api/mission/remote.proto": [[91, "bosdyn-api-mission-remote-proto"]], "EstablishSessionRequest": [[91, "establishsessionrequest"]], "EstablishSessionResponse": [[91, "establishsessionresponse"]], "GetRemoteMissionServiceInfoRequest": [[91, "getremotemissionserviceinforequest"]], "GetRemoteMissionServiceInfoResponse": [[91, "getremotemissionserviceinforesponse"]], "StopRequest": [[91, "stoprequest"]], "StopResponse": [[91, "stopresponse"]], "TeardownSessionRequest": [[91, "teardownsessionrequest"]], "TeardownSessionResponse": [[91, "teardownsessionresponse"]], "TickRequest": [[91, "tickrequest"]], "TickResponse": [[91, "tickresponse"]], "EstablishSessionResponse.Status": [[91, "establishsessionresponse-status"]], "StopResponse.Status": [[91, "stopresponse-status"]], "TeardownSessionResponse.Status": [[91, "teardownsessionresponse-status"]], "TickResponse.Status": [[91, "tickresponse-status"]], "bosdyn/api/mission/remote_service.proto": [[91, "bosdyn-api-mission-remote-service-proto"]], "RemoteMissionService": [[91, "remotemissionservice"]], "bosdyn/api/mission/util.proto": [[91, "bosdyn-api-mission-util-proto"]], "ConstantValue": [[91, "constantvalue"]], "KeyValue": [[91, "keyvalue"]], "UserData": [[91, "userdata"]], "Value": [[91, "value"]], "VariableDeclaration": [[91, "variabledeclaration"]], "Result": [[91, "result"]], "VariableDeclaration.Type": [[91, "variabledeclaration-type"]], "bosdyn/api/mobility_command.proto": [[91, "bosdyn-api-mobility-command-proto"]], "MobilityCommand": [[91, "mobilitycommand"]], "MobilityCommand.Feedback": [[91, "mobilitycommand-feedback"]], "MobilityCommand.Request": [[91, "mobilitycommand-request"]], "bosdyn/api/network_compute_bridge.proto": [[91, "bosdyn-api-network-compute-bridge-proto"]], "AvailableModels": [[91, "availablemodels"]], "ComputeParameters": [[91, "computeparameters"]], "ImageSourceAndService": [[91, "imagesourceandservice"]], "ListAvailableModelsRequest": [[91, "listavailablemodelsrequest"]], "ListAvailableModelsResponse": [[91, "listavailablemodelsresponse"]], "ModelData": [[91, "modeldata"]], "ModelLabels": [[91, "modellabels"]], "NetworkComputeInputData": [[91, "networkcomputeinputdata"]], "NetworkComputeInputDataBridge": [[91, "networkcomputeinputdatabridge"]], "NetworkComputeInputDataWorker": [[91, "networkcomputeinputdataworker"]], "NetworkComputeRequest": [[91, "networkcomputerequest"]], "NetworkComputeResponse": [[91, "networkcomputeresponse"]], "NetworkComputeResponse.OutputImagesEntry": [[91, "networkcomputeresponse-outputimagesentry"]], "NetworkComputeResponse.RoiOutputDataEntry": [[91, "networkcomputeresponse-roioutputdataentry"]], "NetworkComputeServerConfiguration": [[91, "networkcomputeserverconfiguration"]], "OutputData": [[91, "outputdata"]], "OutputImage": [[91, "outputimage"]], "OutputImageSpec": [[91, "outputimagespec"]], "WorkerComputeRequest": [[91, "workercomputerequest"]], "WorkerComputeResponse": [[91, "workercomputeresponse"]], "WorkerComputeResponse.OutputImagesEntry": [[91, "workercomputeresponse-outputimagesentry"]], "ListAvailableModelsStatus": [[91, "listavailablemodelsstatus"]], "NetworkComputeInputData.RotateImage": [[91, "networkcomputeinputdata-rotateimage"]], "NetworkComputeStatus": [[91, "networkcomputestatus"]], "bosdyn/api/network_compute_bridge_service.proto": [[91, "bosdyn-api-network-compute-bridge-service-proto"]], "NetworkComputeBridgeWorker": [[91, "networkcomputebridgeworker"]], "bosdyn/api/network_stats.proto": [[91, "bosdyn-api-network-stats-proto"]], "Association": [[91, "association"]], "WifiDevice": [[91, "wifidevice"]], "WifiStats": [[91, "wifistats"]], "WifiDevice.Type": [[91, "wifidevice-type"]], "bosdyn/api/parameter.proto": [[91, "bosdyn-api-parameter-proto"]], "bosdyn/api/payload.proto": [[91, "bosdyn-api-payload-proto"]], "JointLimits": [[91, "jointlimits"]], "ListPayloadsRequest": [[91, "listpayloadsrequest"]], "ListPayloadsResponse": [[91, "listpayloadsresponse"]], "MomentOfIntertia": [[91, "momentofintertia"]], "PayloadMassVolumeProperties": [[91, "payloadmassvolumeproperties"]], "PayloadPreset": [[91, "payloadpreset"]], "MountFrameName": [[91, "mountframename"]], "bosdyn/api/payload_estimation.proto": [[91, "bosdyn-api-payload-estimation-proto"]], "PayloadEstimationCommand": [[91, "payloadestimationcommand"]], "PayloadEstimationCommand.Feedback": [[91, "payloadestimationcommand-feedback"]], "PayloadEstimationCommand.Request": [[91, "payloadestimationcommand-request"]], "PayloadEstimationCommand.Feedback.Error": [[91, "payloadestimationcommand-feedback-error"]], "PayloadEstimationCommand.Feedback.Status": [[91, "payloadestimationcommand-feedback-status"]], "bosdyn/api/payload_registration.proto": [[91, "bosdyn-api-payload-registration-proto"]], "GetPayloadAuthTokenRequest": [[91, "getpayloadauthtokenrequest"]], "GetPayloadAuthTokenResponse": [[91, "getpayloadauthtokenresponse"]], "PayloadCredentials": [[91, "payloadcredentials"]], "RegisterPayloadRequest": [[91, "registerpayloadrequest"]], "RegisterPayloadResponse": [[91, "registerpayloadresponse"]], "UpdatePayloadAttachedRequest": [[91, "updatepayloadattachedrequest"]], "UpdatePayloadAttachedResponse": [[91, "updatepayloadattachedresponse"]], "UpdatePayloadVersionRequest": [[91, "updatepayloadversionrequest"]], "UpdatePayloadVersionResponse": [[91, "updatepayloadversionresponse"]], "GetPayloadAuthTokenResponse.Status": [[91, "getpayloadauthtokenresponse-status"]], "RegisterPayloadResponse.Status": [[91, "registerpayloadresponse-status"]], "UpdatePayloadAttachedRequest.Request": [[91, "updatepayloadattachedrequest-request"]], "UpdatePayloadAttachedResponse.Status": [[91, "updatepayloadattachedresponse-status"]], "UpdatePayloadVersionResponse.Status": [[91, "updatepayloadversionresponse-status"]], "bosdyn/api/payload_registration_service.proto": [[91, "bosdyn-api-payload-registration-service-proto"]], "PayloadRegistrationService": [[91, "payloadregistrationservice"]], "bosdyn/api/payload_service.proto": [[91, "bosdyn-api-payload-service-proto"]], "PayloadService": [[91, "payloadservice"]], "bosdyn/api/point_cloud.proto": [[91, "bosdyn-api-point-cloud-proto"]], "GetPointCloudRequest": [[91, "getpointcloudrequest"]], "GetPointCloudResponse": [[91, "getpointcloudresponse"]], "ListPointCloudSourcesRequest": [[91, "listpointcloudsourcesrequest"]], "ListPointCloudSourcesResponse": [[91, "listpointcloudsourcesresponse"]], "PointCloud": [[91, "pointcloud"]], "PointCloud.EncodingParameters": [[91, "pointcloud-encodingparameters"]], "PointCloudRequest": [[91, "pointcloudrequest"]], "PointCloudResponse": [[91, "pointcloudresponse"]], "PointCloudSource": [[91, "pointcloudsource"]], "PointCloud.Encoding": [[91, "pointcloud-encoding"]], "PointCloudResponse.Status": [[91, "pointcloudresponse-status"]], "bosdyn/api/point_cloud_service.proto": [[91, "bosdyn-api-point-cloud-service-proto"]], "PointCloudService": [[91, "pointcloudservice"]], "bosdyn/api/power.proto": [[91, "bosdyn-api-power-proto"]], "FanPowerCommandFeedbackRequest": [[91, "fanpowercommandfeedbackrequest"]], "FanPowerCommandFeedbackResponse": [[91, "fanpowercommandfeedbackresponse"]], "FanPowerCommandRequest": [[91, "fanpowercommandrequest"]], "FanPowerCommandResponse": [[91, "fanpowercommandresponse"]], "PowerCommandFeedbackRequest": [[91, "powercommandfeedbackrequest"]], "PowerCommandFeedbackResponse": [[91, "powercommandfeedbackresponse"]], "PowerCommandRequest": [[91, "powercommandrequest"]], "PowerCommandResponse": [[91, "powercommandresponse"]], "ResetSafetyStopRequest": [[91, "resetsafetystoprequest"]], "ResetSafetyStopResponse": [[91, "resetsafetystopresponse"]], "FanPowerCommandFeedbackResponse.Status": [[91, "fanpowercommandfeedbackresponse-status"]], "FanPowerCommandResponse.Status": [[91, "fanpowercommandresponse-status"]], "PowerCommandRequest.Request": [[91, "powercommandrequest-request"]], "PowerCommandStatus": [[91, "powercommandstatus"]], "ResetSafetyStopRequest.SafetyStopType": [[91, "resetsafetystoprequest-safetystoptype"]], "ResetSafetyStopResponse.Status": [[91, "resetsafetystopresponse-status"]], "bosdyn/api/power_service.proto": [[91, "bosdyn-api-power-service-proto"]], "PowerService": [[91, "powerservice"], [91, "id6"]], "bosdyn/api/ray_cast.proto": [[91, "bosdyn-api-ray-cast-proto"]], "RayIntersection": [[91, "rayintersection"]], "RaycastRequest": [[91, "raycastrequest"]], "RaycastResponse": [[91, "raycastresponse"]], "RayIntersection.Type": [[91, "rayintersection-type"]], "RaycastResponse.Status": [[91, "raycastresponse-status"]], "bosdyn/api/ray_cast_service.proto": [[91, "bosdyn-api-ray-cast-service-proto"]], "RayCastService": [[91, "raycastservice"]], "bosdyn/api/robot_command.proto": [[91, "bosdyn-api-robot-command-proto"]], "ClearBehaviorFaultRequest": [[91, "clearbehaviorfaultrequest"]], "ClearBehaviorFaultResponse": [[91, "clearbehaviorfaultresponse"]], "JointControlStreamRequest": [[91, "jointcontrolstreamrequest"]], "JointControlStreamResponse": [[91, "jointcontrolstreamresponse"]], "RobotCommand": [[91, "robotcommand"]], "RobotCommandFeedback": [[91, "robotcommandfeedback"]], "RobotCommandFeedbackRequest": [[91, "robotcommandfeedbackrequest"]], "RobotCommandFeedbackResponse": [[91, "robotcommandfeedbackresponse"]], "RobotCommandRequest": [[91, "robotcommandrequest"]], "RobotCommandResponse": [[91, "robotcommandresponse"]], "ClearBehaviorFaultResponse.Status": [[91, "clearbehaviorfaultresponse-status"]], "JointControlStreamResponse.Status": [[91, "jointcontrolstreamresponse-status"]], "RobotCommandResponse.Status": [[91, "robotcommandresponse-status"]], "bosdyn/api/robot_command_service.proto": [[91, "bosdyn-api-robot-command-service-proto"]], "RobotCommandService": [[91, "robotcommandservice"]], "RobotCommandStreamingService": [[91, "robotcommandstreamingservice"]], "bosdyn/api/robot_id.proto": [[91, "bosdyn-api-robot-id-proto"]], "RobotId": [[91, "robotid"]], "RobotIdRequest": [[91, "robotidrequest"]], "RobotIdResponse": [[91, "robotidresponse"]], "RobotSoftwareRelease": [[91, "robotsoftwarerelease"]], "SoftwareVersion": [[91, "softwareversion"]], "bosdyn/api/robot_id_service.proto": [[91, "bosdyn-api-robot-id-service-proto"]], "RobotIdService": [[91, "robotidservice"]], "bosdyn/api/robot_state.proto": [[91, "bosdyn-api-robot-state-proto"]], "BatteryState": [[91, "batterystate"]], "BehaviorFault": [[91, "behaviorfault"]], "BehaviorFaultState": [[91, "behaviorfaultstate"]], "CombinedJointStates": [[91, "combinedjointstates"]], "CommsState": [[91, "commsstate"]], "EStopState": [[91, "estopstate"]], "FootState": [[91, "footstate"]], "FootState.TerrainState": [[91, "footstate-terrainstate"]], "HardwareConfiguration": [[91, "hardwareconfiguration"]], "ImuState": [[91, "imustate"]], "ImuState.Packet": [[91, "imustate-packet"]], "JointState": [[91, "jointstate"]], "KinematicState": [[91, "kinematicstate"]], "ManipulatorState": [[91, "manipulatorstate"]], "MotorTemperature": [[91, "motortemperature"]], "PowerState": [[91, "powerstate"]], "RobotHardwareConfigurationRequest": [[91, "robothardwareconfigurationrequest"]], "RobotHardwareConfigurationResponse": [[91, "robothardwareconfigurationresponse"]], "RobotImpairedState": [[91, "robotimpairedstate"]], "RobotLinkModelRequest": [[91, "robotlinkmodelrequest"]], "RobotLinkModelResponse": [[91, "robotlinkmodelresponse"]], "RobotMetrics": [[91, "robotmetrics"]], "RobotMetricsRequest": [[91, "robotmetricsrequest"]], "RobotMetricsResponse": [[91, "robotmetricsresponse"]], "RobotState": [[91, "robotstate"]], "RobotStateRequest": [[91, "robotstaterequest"]], "RobotStateResponse": [[91, "robotstateresponse"]], "RobotStateStreamRequest": [[91, "robotstatestreamrequest"]], "RobotStateStreamResponse": [[91, "robotstatestreamresponse"]], "RobotStateStreamResponse.CommandState": [[91, "robotstatestreamresponse-commandstate"]], "RobotStateStreamResponse.KinematicState": [[91, "robotstatestreamresponse-kinematicstate"]], "ServiceFaultState": [[91, "servicefaultstate"]], "ServiceFaultState.AggregatedEntry": [[91, "servicefaultstate-aggregatedentry"]], "Skeleton": [[91, "skeleton"]], "Skeleton.Link": [[91, "skeleton-link"]], "Skeleton.Link.ObjModel": [[91, "skeleton-link-objmodel"]], "SystemFault": [[91, "systemfault"]], "SystemFaultState": [[91, "systemfaultstate"]], "SystemFaultState.AggregatedEntry": [[91, "systemfaultstate-aggregatedentry"]], "SystemState": [[91, "systemstate"]], "TerrainState": [[91, "terrainstate"]], "WiFiState": [[91, "wifistate"]], "BatteryState.Status": [[91, "batterystate-status"]], "BehaviorFault.Cause": [[91, "behaviorfault-cause"]], "BehaviorFault.Status": [[91, "behaviorfault-status"]], "EStopState.State": [[91, "estopstate-state"]], "EStopState.Type": [[91, "estopstate-type"]], "FootState.Contact": [[91, "footstate-contact"]], "ManipulatorState.CarryState": [[91, "manipulatorstate-carrystate"]], "ManipulatorState.StowState": [[91, "manipulatorstate-stowstate"]], "PowerState.MotorPowerState": [[91, "powerstate-motorpowerstate"]], "PowerState.PayloadPortsPowerState": [[91, "powerstate-payloadportspowerstate"]], "PowerState.RobotPowerState": [[91, "powerstate-robotpowerstate"]], "PowerState.ShorePowerState": [[91, "powerstate-shorepowerstate"]], "PowerState.WifiRadioPowerState": [[91, "powerstate-wifiradiopowerstate"]], "RobotImpairedState.ImpairedStatus": [[91, "robotimpairedstate-impairedstatus"]], "SystemFault.Severity": [[91, "systemfault-severity"]], "WiFiState.Mode": [[91, "wifistate-mode"]], "bosdyn/api/robot_state_service.proto": [[91, "bosdyn-api-robot-state-service-proto"]], "RobotStateService": [[91, "robotstateservice"]], "RobotStateStreamingService": [[91, "robotstatestreamingservice"]], "bosdyn/api/service_customization.proto": [[91, "bosdyn-api-service-customization-proto"]], "BoolParam": [[91, "boolparam"]], "BoolParam.Spec": [[91, "boolparam-spec"]], "CustomParam": [[91, "customparam"]], "CustomParam.Spec": [[91, "customparam-spec"]], "CustomParamCollection": [[91, "customparamcollection"]], "CustomParamError": [[91, "customparamerror"]], "DictParam": [[91, "dictparam"]], "DictParam.ChildSpec": [[91, "dictparam-childspec"]], "DictParam.Spec": [[91, "dictparam-spec"]], "DictParam.Spec.SpecsEntry": [[91, "dictparam-spec-specsentry"]], "DictParam.ValuesEntry": [[91, "dictparam-valuesentry"]], "DoubleParam": [[91, "doubleparam"]], "DoubleParam.Spec": [[91, "doubleparam-spec"]], "Int64Param": [[91, "int64param"]], "Int64Param.Spec": [[91, "int64param-spec"]], "ListParam": [[91, "listparam"]], "ListParam.Spec": [[91, "listparam-spec"]], "OneOfParam": [[91, "oneofparam"]], "OneOfParam.ChildSpec": [[91, "oneofparam-childspec"]], "OneOfParam.Spec": [[91, "oneofparam-spec"]], "OneOfParam.Spec.SpecsEntry": [[91, "oneofparam-spec-specsentry"]], "OneOfParam.ValuesEntry": [[91, "oneofparam-valuesentry"]], "RegionOfInterestParam": [[91, "regionofinterestparam"]], "RegionOfInterestParam.ServiceAndSource": [[91, "regionofinterestparam-serviceandsource"]], "RegionOfInterestParam.Spec": [[91, "regionofinterestparam-spec"]], "StringParam": [[91, "stringparam"]], "StringParam.Spec": [[91, "stringparam-spec"]], "UserInterfaceInfo": [[91, "userinterfaceinfo"]], "CustomParamError.Status": [[91, "customparamerror-status"]], "bosdyn/api/service_fault.proto": [[91, "bosdyn-api-service-fault-proto"]], "ClearServiceFaultRequest": [[91, "clearservicefaultrequest"]], "ClearServiceFaultResponse": [[91, "clearservicefaultresponse"]], "ServiceFault": [[91, "servicefault"]], "ServiceFaultId": [[91, "servicefaultid"]], "TriggerServiceFaultRequest": [[91, "triggerservicefaultrequest"]], "TriggerServiceFaultResponse": [[91, "triggerservicefaultresponse"]], "ClearServiceFaultResponse.Status": [[91, "clearservicefaultresponse-status"]], "ServiceFault.Severity": [[91, "servicefault-severity"]], "TriggerServiceFaultResponse.Status": [[91, "triggerservicefaultresponse-status"]], "bosdyn/api/signals.proto": [[91, "bosdyn-api-signals-proto"]], "AlertConditionSpec": [[91, "alertconditionspec"]], "SensorOutputSpec": [[91, "sensoroutputspec"]], "Signal": [[91, "signal"]], "SignalData": [[91, "signaldata"]], "SignalData.Data": [[91, "signaldata-data"]], "SignalDisplayInfo": [[91, "signaldisplayinfo"]], "SignalSpec": [[91, "signalspec"]], "bosdyn/api/sparse_features.proto": [[91, "bosdyn-api-sparse-features-proto"]], "Keypoint": [[91, "keypoint"]], "KeypointMatches": [[91, "keypointmatches"]], "KeypointSet": [[91, "keypointset"]], "Match": [[91, "match"]], "KeypointMatches.MatchType": [[91, "keypointmatches-matchtype"]], "KeypointSet.KeypointType": [[91, "keypointset-keypointtype"]], "bosdyn/api/spot/choreography_params.proto": [[91, "bosdyn-api-spot-choreography-params-proto"]], "AnimateParams": [[91, "animateparams"]], "AnimatedCycleParams": [[91, "animatedcycleparams"]], "ArmMoveParams": [[91, "armmoveparams"]], "BodyHoldParams": [[91, "bodyholdparams"]], "BourreeParams": [[91, "bourreeparams"]], "ButtCircleParams": [[91, "buttcircleparams"]], "ChickenHeadParams": [[91, "chickenheadparams"]], "ClapParams": [[91, "clapparams"]], "Color": [[91, "color"]], "CrawlParams": [[91, "crawlparams"]], "CustomGaitCommand": [[91, "customgaitcommand"]], "CustomGaitCommandLimits": [[91, "customgaitcommandlimits"]], "CustomGaitParams": [[91, "customgaitparams"]], "EulerRateZYXValue": [[91, "eulerratezyxvalue"]], "EulerZYX": [[91, "eulerzyx"]], "EulerZYXValue": [[91, "eulerzyxvalue"]], "FadeColorParams": [[91, "fadecolorparams"]], "FidgetStandParams": [[91, "fidgetstandparams"]], "Figure8Params": [[91, "figure8params"]], "FrameSnapshotParams": [[91, "framesnapshotparams"]], "FrontUpParams": [[91, "frontupparams"]], "GotoParams": [[91, "gotoparams"]], "GripperParams": [[91, "gripperparams"]], "HopParams": [[91, "hopparams"]], "IndependentColorParams": [[91, "independentcolorparams"]], "JumpParams": [[91, "jumpparams"]], "KneelCircleParams": [[91, "kneelcircleparams"]], "KneelLegMove2Params": [[91, "kneellegmove2params"]], "KneelLegMoveParams": [[91, "kneellegmoveparams"]], "LegJointParams": [[91, "legjointparams"]], "Pace2StepParams": [[91, "pace2stepparams"]], "RandomRotateParams": [[91, "randomrotateparams"]], "RippleColorParams": [[91, "ripplecolorparams"]], "RotateBodyParams": [[91, "rotatebodyparams"]], "RunningManParams": [[91, "runningmanparams"]], "SetColorParams": [[91, "setcolorparams"]], "SideParams": [[91, "sideparams"]], "StanceShape": [[91, "stanceshape"]], "StepParams": [[91, "stepparams"]], "SwayParams": [[91, "swayparams"]], "SwingParams": [[91, "swingparams"]], "SwingPhases": [[91, "swingphases"]], "TurnParams": [[91, "turnparams"]], "TwerkParams": [[91, "twerkparams"]], "WorkspaceArmMoveParams": [[91, "workspacearmmoveparams"]], "ArmMoveFrame": [[91, "armmoveframe"]], "Easing": [[91, "easing"]], "FidgetStandParams.FidgetPreset": [[91, "fidgetstandparams-fidgetpreset"]], "FrameSnapshotParams.Inclusion": [[91, "framesnapshotparams-inclusion"]], "JumpParams.Lead": [[91, "jumpparams-lead"]], "LedLight": [[91, "ledlight"]], "Leg": [[91, "leg"]], "Pivot": [[91, "pivot"]], "RippleColorParams.LightSide": [[91, "ripplecolorparams-lightside"]], "RippleColorParams.Pattern": [[91, "ripplecolorparams-pattern"]], "SideParams.Side": [[91, "sideparams-side"]], "SwayParams.SwayStyle": [[91, "swayparams-swaystyle"]], "bosdyn/api/spot/choreography_sequence.proto": [[91, "bosdyn-api-spot-choreography-sequence-proto"]], "ActiveMove": [[91, "activemove"]], "AnimateArm": [[91, "animatearm"]], "AnimateArm.HandPose": [[91, "animatearm-handpose"]], "AnimateBody": [[91, "animatebody"]], "AnimateGripper": [[91, "animategripper"]], "AnimateLegs": [[91, "animatelegs"]], "AnimateSingleLeg": [[91, "animatesingleleg"]], "Animation": [[91, "animation"]], "AnimationKeyframe": [[91, "animationkeyframe"]], "ArmJointAngles": [[91, "armjointangles"]], "ChoreographerDisplayInfo": [[91, "choreographerdisplayinfo"]], "ChoreographerDisplayInfo.Color": [[91, "choreographerdisplayinfo-color"]], "ChoreographerSave": [[91, "choreographersave"]], "ChoreographyCommandRequest": [[91, "choreographycommandrequest"]], "ChoreographyCommandResponse": [[91, "choreographycommandresponse"]], "ChoreographyInfo": [[91, "choreographyinfo"]], "ChoreographySequence": [[91, "choreographysequence"]], "ChoreographyStateLog": [[91, "choreographystatelog"]], "ChoreographyStatusRequest": [[91, "choreographystatusrequest"]], "ChoreographyStatusResponse": [[91, "choreographystatusresponse"]], "ChoreographyTimeAdjustRequest": [[91, "choreographytimeadjustrequest"]], "ChoreographyTimeAdjustResponse": [[91, "choreographytimeadjustresponse"]], "ClearAllSequenceFilesRequest": [[91, "clearallsequencefilesrequest"]], "ClearAllSequenceFilesResponse": [[91, "clearallsequencefilesresponse"]], "DeleteSequenceRequest": [[91, "deletesequencerequest"]], "DeleteSequenceResponse": [[91, "deletesequenceresponse"]], "DownloadRobotStateLogRequest": [[91, "downloadrobotstatelogrequest"]], "DownloadRobotStateLogResponse": [[91, "downloadrobotstatelogresponse"]], "ExecuteChoreographyRequest": [[91, "executechoreographyrequest"]], "ExecuteChoreographyResponse": [[91, "executechoreographyresponse"]], "GetAnimationRequest": [[91, "getanimationrequest"]], "GetAnimationResponse": [[91, "getanimationresponse"]], "GetChoreographySequenceRequest": [[91, "getchoreographysequencerequest"]], "GetChoreographySequenceResponse": [[91, "getchoreographysequenceresponse"]], "LegJointAngles": [[91, "legjointangles"]], "ListAllMovesRequest": [[91, "listallmovesrequest"]], "ListAllMovesResponse": [[91, "listallmovesresponse"]], "ListAllSequencesRequest": [[91, "listallsequencesrequest"]], "ListAllSequencesResponse": [[91, "listallsequencesresponse"]], "LoggedFootContacts": [[91, "loggedfootcontacts"]], "LoggedJoints": [[91, "loggedjoints"]], "LoggedStateKeyFrame": [[91, "loggedstatekeyframe"]], "ModifyChoreographyInfoRequest": [[91, "modifychoreographyinforequest"]], "ModifyChoreographyInfoResponse": [[91, "modifychoreographyinforesponse"]], "MoveCommand": [[91, "movecommand"]], "MoveInfo": [[91, "moveinfo"]], "MoveParams": [[91, "moveparams"]], "SaveSequenceRequest": [[91, "savesequencerequest"]], "SaveSequenceResponse": [[91, "savesequenceresponse"]], "SequenceInfo": [[91, "sequenceinfo"]], "StartRecordingStateRequest": [[91, "startrecordingstaterequest"]], "StartRecordingStateResponse": [[91, "startrecordingstateresponse"]], "StopRecordingStateRequest": [[91, "stoprecordingstaterequest"]], "StopRecordingStateResponse": [[91, "stoprecordingstateresponse"]], "UploadAnimatedMoveRequest": [[91, "uploadanimatedmoverequest"]], "UploadAnimatedMoveResponse": [[91, "uploadanimatedmoveresponse"]], "UploadChoreographyRequest": [[91, "uploadchoreographyrequest"]], "UploadChoreographyResponse": [[91, "uploadchoreographyresponse"]], "Animation.ArmPlayback": [[91, "animation-armplayback"]], "ChoreographerDisplayInfo.Category": [[91, "choreographerdisplayinfo-category"]], "ChoreographyCommandResponse.Status": [[91, "choreographycommandresponse-status"]], "ChoreographyStatusResponse.Status": [[91, "choreographystatusresponse-status"]], "ChoreographyTimeAdjustResponse.Status": [[91, "choreographytimeadjustresponse-status"]], "ClearAllSequenceFilesResponse.Status": [[91, "clearallsequencefilesresponse-status"]], "DeleteSequenceResponse.Status": [[91, "deletesequenceresponse-status"]], "DownloadRobotStateLogRequest.LogType": [[91, "downloadrobotstatelogrequest-logtype"]], "DownloadRobotStateLogResponse.Status": [[91, "downloadrobotstatelogresponse-status"]], "ExecuteChoreographyResponse.Status": [[91, "executechoreographyresponse-status"]], "GetAnimationResponse.Status": [[91, "getanimationresponse-status"]], "GetChoreographySequenceResponse.Status": [[91, "getchoreographysequenceresponse-status"]], "ModifyChoreographyInfoResponse.Status": [[91, "modifychoreographyinforesponse-status"]], "MoveInfo.TransitionState": [[91, "moveinfo-transitionstate"]], "SaveSequenceResponse.Status": [[91, "savesequenceresponse-status"]], "SequenceInfo.SavedState": [[91, "sequenceinfo-savedstate"]], "StartRecordingStateResponse.Status": [[91, "startrecordingstateresponse-status"]], "UploadAnimatedMoveResponse.Status": [[91, "uploadanimatedmoveresponse-status"]], "bosdyn/api/spot/choreography_service.proto": [[91, "bosdyn-api-spot-choreography-service-proto"]], "ChoreographyService": [[91, "choreographyservice"]], "bosdyn/api/spot/door.proto": [[91, "bosdyn-api-spot-door-proto"]], "DoorCommand": [[91, "doorcommand"]], "DoorCommand.AutoGraspCommand": [[91, "doorcommand-autograspcommand"]], "DoorCommand.AutoPushCommand": [[91, "doorcommand-autopushcommand"]], "DoorCommand.Feedback": [[91, "doorcommand-feedback"]], "DoorCommand.Request": [[91, "doorcommand-request"]], "DoorCommand.WarmstartCommand": [[91, "doorcommand-warmstartcommand"]], "OpenDoorCommandRequest": [[91, "opendoorcommandrequest"]], "OpenDoorCommandResponse": [[91, "opendoorcommandresponse"]], "OpenDoorFeedbackRequest": [[91, "opendoorfeedbackrequest"]], "OpenDoorFeedbackResponse": [[91, "opendoorfeedbackresponse"]], "DoorCommand.Feedback.Status": [[91, "doorcommand-feedback-status"]], "DoorCommand.HandleType": [[91, "doorcommand-handletype"]], "DoorCommand.HingeSide": [[91, "doorcommand-hingeside"]], "DoorCommand.SwingDirection": [[91, "doorcommand-swingdirection"]], "OpenDoorCommandResponse.Status": [[91, "opendoorcommandresponse-status"]], "bosdyn/api/spot/door_area_callback.proto": [[91, "bosdyn-api-spot-door-area-callback-proto"]], "AreaCallbackDoorConfig": [[91, "areacallbackdoorconfig"]], "bosdyn/api/spot/door_service.proto": [[91, "bosdyn-api-spot-door-service-proto"]], "DoorService": [[91, "doorservice"]], "bosdyn/api/spot/inverse_kinematics.proto": [[91, "bosdyn-api-spot-inverse-kinematics-proto"]], "InverseKinematicsRequest": [[91, "inversekinematicsrequest"]], "InverseKinematicsRequest.BodyMountedTool": [[91, "inversekinematicsrequest-bodymountedtool"]], "InverseKinematicsRequest.FixedStance": [[91, "inversekinematicsrequest-fixedstance"]], "InverseKinematicsRequest.OnGroundPlaneStance": [[91, "inversekinematicsrequest-ongroundplanestance"]], "InverseKinematicsRequest.ToolGazeTask": [[91, "inversekinematicsrequest-toolgazetask"]], "InverseKinematicsRequest.ToolPoseTask": [[91, "inversekinematicsrequest-toolposetask"]], "InverseKinematicsRequest.WristMountedTool": [[91, "inversekinematicsrequest-wristmountedtool"]], "InverseKinematicsResponse": [[91, "inversekinematicsresponse"]], "InverseKinematicsRequest.NamedArmConfiguration": [[91, "inversekinematicsrequest-namedarmconfiguration"]], "InverseKinematicsResponse.Status": [[91, "inversekinematicsresponse-status"]], "bosdyn/api/spot/inverse_kinematics_service.proto": [[91, "bosdyn-api-spot-inverse-kinematics-service-proto"]], "InverseKinematicsService": [[91, "inversekinematicsservice"]], "bosdyn/api/spot/robot_command.proto": [[91, "bosdyn-api-spot-robot-command-proto"]], "BodyControlParams": [[91, "bodycontrolparams"]], "BodyControlParams.BodyAssistForManipulation": [[91, "bodycontrolparams-bodyassistformanipulation"]], "BodyControlParams.BodyPose": [[91, "bodycontrolparams-bodypose"]], "BodyExternalForceParams": [[91, "bodyexternalforceparams"]], "MobilityParams": [[91, "mobilityparams"]], "ObstacleParams": [[91, "obstacleparams"]], "TerrainParams": [[91, "terrainparams"]], "BodyControlParams.RotationSetting": [[91, "bodycontrolparams-rotationsetting"]], "BodyExternalForceParams.ExternalForceIndicator": [[91, "bodyexternalforceparams-externalforceindicator"]], "LocomotionHint": [[91, "locomotionhint"]], "MobilityParams.StairsMode": [[91, "mobilityparams-stairsmode"]], "SwingHeight": [[91, "swingheight"]], "TerrainParams.GratedSurfacesMode": [[91, "terrainparams-gratedsurfacesmode"]], "bosdyn/api/spot/spot_check.proto": [[91, "bosdyn-api-spot-spot-check-proto"]], "CameraCalibrationCommandRequest": [[91, "cameracalibrationcommandrequest"]], "CameraCalibrationCommandResponse": [[91, "cameracalibrationcommandresponse"]], "CameraCalibrationFeedbackRequest": [[91, "cameracalibrationfeedbackrequest"]], "CameraCalibrationFeedbackResponse": [[91, "cameracalibrationfeedbackresponse"]], "DepthPlaneSpotCheckResult": [[91, "depthplanespotcheckresult"]], "FootHeightCheckResult": [[91, "footheightcheckresult"]], "GripperCameraCalibrationCommandRequest": [[91, "grippercameracalibrationcommandrequest"]], "GripperCameraCalibrationCommandResponse": [[91, "grippercameracalibrationcommandresponse"]], "GripperCameraCalibrationFeedbackRequest": [[91, "grippercameracalibrationfeedbackrequest"]], "GripperCameraCalibrationFeedbackResponse": [[91, "grippercameracalibrationfeedbackresponse"]], "HipRangeOfMotionResult": [[91, "hiprangeofmotionresult"]], "JointKinematicCheckResult": [[91, "jointkinematiccheckresult"]], "LegPairCheckResult": [[91, "legpaircheckresult"]], "LoadCellSpotCheckResult": [[91, "loadcellspotcheckresult"]], "PayloadCheckResult": [[91, "payloadcheckresult"]], "SpotCheckCommandRequest": [[91, "spotcheckcommandrequest"]], "SpotCheckCommandResponse": [[91, "spotcheckcommandresponse"]], "SpotCheckFeedbackRequest": [[91, "spotcheckfeedbackrequest"]], "SpotCheckFeedbackResponse": [[91, "spotcheckfeedbackresponse"]], "SpotCheckFeedbackResponse.CameraResultsEntry": [[91, "spotcheckfeedbackresponse-cameraresultsentry"]], "SpotCheckFeedbackResponse.HipRangeOfMotionResultsEntry": [[91, "spotcheckfeedbackresponse-hiprangeofmotionresultsentry"]], "SpotCheckFeedbackResponse.KinematicCalResultsEntry": [[91, "spotcheckfeedbackresponse-kinematiccalresultsentry"]], "SpotCheckFeedbackResponse.LoadCellResultsEntry": [[91, "spotcheckfeedbackresponse-loadcellresultsentry"]], "CameraCalibrationCommandRequest.Command": [[91, "cameracalibrationcommandrequest-command"]], "CameraCalibrationFeedbackResponse.Status": [[91, "cameracalibrationfeedbackresponse-status"]], "DepthPlaneSpotCheckResult.Status": [[91, "depthplanespotcheckresult-status"]], "FootHeightCheckResult.Status": [[91, "footheightcheckresult-status"]], "GripperCameraCalibrationCommandRequest.Command": [[91, "grippercameracalibrationcommandrequest-command"]], "GripperCameraCalibrationFeedbackResponse.Status": [[91, "grippercameracalibrationfeedbackresponse-status"]], "HipRangeOfMotionResult.Error": [[91, "hiprangeofmotionresult-error"]], "JointKinematicCheckResult.Error": [[91, "jointkinematiccheckresult-error"]], "LegPairCheckResult.Status": [[91, "legpaircheckresult-status"]], "LoadCellSpotCheckResult.Error": [[91, "loadcellspotcheckresult-error"]], "PayloadCheckResult.Error": [[91, "payloadcheckresult-error"]], "SpotCheckCommandRequest.Command": [[91, "spotcheckcommandrequest-command"]], "SpotCheckCommandResponse.Status": [[91, "spotcheckcommandresponse-status"]], "SpotCheckFeedbackResponse.Error": [[91, "spotcheckfeedbackresponse-error"]], "SpotCheckFeedbackResponse.State": [[91, "spotcheckfeedbackresponse-state"]], "bosdyn/api/spot/spot_check_service.proto": [[91, "bosdyn-api-spot-spot-check-service-proto"]], "SpotCheckService": [[91, "spotcheckservice"]], "bosdyn/api/spot/spot_constants.proto": [[91, "bosdyn-api-spot-spot-constants-proto"]], "JointIndex": [[91, "jointindex"]], "LegDofOrder": [[91, "legdoforder"]], "LegIndex": [[91, "legindex"]], "bosdyn/api/spot_cam/LED.proto": [[91, "bosdyn-api-spot-cam-led-proto"]], "GetLEDBrightnessRequest": [[91, "getledbrightnessrequest"]], "GetLEDBrightnessResponse": [[91, "getledbrightnessresponse"]], "SetLEDBrightnessRequest": [[91, "setledbrightnessrequest"]], "SetLEDBrightnessRequest.BrightnessesEntry": [[91, "setledbrightnessrequest-brightnessesentry"]], "SetLEDBrightnessResponse": [[91, "setledbrightnessresponse"]], "bosdyn/api/spot_cam/audio.proto": [[91, "bosdyn-api-spot-cam-audio-proto"]], "DeleteSoundRequest": [[91, "deletesoundrequest"]], "DeleteSoundResponse": [[91, "deletesoundresponse"]], "GetAudioCaptureChannelRequest": [[91, "getaudiocapturechannelrequest"]], "GetAudioCaptureChannelResponse": [[91, "getaudiocapturechannelresponse"]], "GetAudioCaptureGainRequest": [[91, "getaudiocapturegainrequest"]], "GetAudioCaptureGainResponse": [[91, "getaudiocapturegainresponse"]], "GetVolumeRequest": [[91, "getvolumerequest"]], "GetVolumeResponse": [[91, "getvolumeresponse"]], "ListSoundsRequest": [[91, "listsoundsrequest"]], "ListSoundsResponse": [[91, "listsoundsresponse"]], "LoadSoundRequest": [[91, "loadsoundrequest"]], "LoadSoundResponse": [[91, "loadsoundresponse"]], "PlaySoundRequest": [[91, "playsoundrequest"]], "PlaySoundResponse": [[91, "playsoundresponse"]], "SetAudioCaptureChannelRequest": [[91, "setaudiocapturechannelrequest"]], "SetAudioCaptureChannelResponse": [[91, "setaudiocapturechannelresponse"]], "SetAudioCaptureGainRequest": [[91, "setaudiocapturegainrequest"]], "SetAudioCaptureGainResponse": [[91, "setaudiocapturegainresponse"]], "SetVolumeRequest": [[91, "setvolumerequest"]], "SetVolumeResponse": [[91, "setvolumeresponse"]], "Sound": [[91, "sound"]], "AudioCaptureChannel": [[91, "audiocapturechannel"]], "bosdyn/api/spot_cam/camera.proto": [[91, "bosdyn-api-spot-cam-camera-proto"]], "Camera": [[91, "camera"]], "Camera.PinholeIntrinsics": [[91, "camera-pinholeintrinsics"]], "Camera.SphericalLimits": [[91, "camera-sphericallimits"]], "bosdyn/api/spot_cam/compositor.proto": [[91, "bosdyn-api-spot-cam-compositor-proto"]], "GetIrColormapRequest": [[91, "getircolormaprequest"]], "GetIrColormapResponse": [[91, "getircolormapresponse"]], "GetIrMeterOverlayRequest": [[91, "getirmeteroverlayrequest"]], "GetIrMeterOverlayResponse": [[91, "getirmeteroverlayresponse"]], "GetScreenRequest": [[91, "getscreenrequest"]], "GetScreenResponse": [[91, "getscreenresponse"]], "GetVisibleCamerasRequest": [[91, "getvisiblecamerasrequest"]], "GetVisibleCamerasResponse": [[91, "getvisiblecamerasresponse"]], "GetVisibleCamerasResponse.Stream": [[91, "getvisiblecamerasresponse-stream"]], "GetVisibleCamerasResponse.Stream.Window": [[91, "getvisiblecamerasresponse-stream-window"]], "IrColorMap": [[91, "ircolormap"]], "IrColorMap.ScalingPair": [[91, "ircolormap-scalingpair"]], "IrMeterOverlay": [[91, "irmeteroverlay"]], "IrMeterOverlay.DeltaPair": [[91, "irmeteroverlay-deltapair"]], "IrMeterOverlay.NormalizedCoordinates": [[91, "irmeteroverlay-normalizedcoordinates"]], "IrMeterOverlay.TempUnit": [[91, "irmeteroverlay-tempunit"]], "ListScreensRequest": [[91, "listscreensrequest"]], "ListScreensResponse": [[91, "listscreensresponse"]], "ScreenDescription": [[91, "screendescription"]], "SetIrColormapRequest": [[91, "setircolormaprequest"]], "SetIrColormapResponse": [[91, "setircolormapresponse"]], "SetIrMeterOverlayRequest": [[91, "setirmeteroverlayrequest"]], "SetIrMeterOverlayResponse": [[91, "setirmeteroverlayresponse"]], "SetScreenRequest": [[91, "setscreenrequest"]], "SetScreenResponse": [[91, "setscreenresponse"]], "IrColorMap.ColorMap": [[91, "ircolormap-colormap"]], "IrMeterOverlay.TempUnit.TempUnitType": [[91, "irmeteroverlay-tempunit-tempunittype"]], "bosdyn/api/spot_cam/health.proto": [[91, "bosdyn-api-spot-cam-health-proto"]], "ClearBITEventsRequest": [[91, "clearbiteventsrequest"]], "ClearBITEventsResponse": [[91, "clearbiteventsresponse"]], "GetBITStatusRequest": [[91, "getbitstatusrequest"]], "GetBITStatusResponse": [[91, "getbitstatusresponse"]], "GetBITStatusResponse.Degradation": [[91, "getbitstatusresponse-degradation"]], "GetSystemLogRequest": [[91, "getsystemlogrequest"]], "GetSystemLogResponse": [[91, "getsystemlogresponse"]], "GetTemperatureRequest": [[91, "gettemperaturerequest"]], "GetTemperatureResponse": [[91, "gettemperatureresponse"]], "Temperature": [[91, "temperature"]], "GetBITStatusResponse.Degradation.DegradationType": [[91, "getbitstatusresponse-degradation-degradationtype"]], "bosdyn/api/spot_cam/logging.proto": [[91, "bosdyn-api-spot-cam-logging-proto"]], "DebugRequest": [[91, "debugrequest"]], "DebugResponse": [[91, "debugresponse"]], "DeleteRequest": [[91, "deleterequest"]], "DeleteResponse": [[91, "deleteresponse"]], "ListCamerasRequest": [[91, "listcamerasrequest"]], "ListCamerasResponse": [[91, "listcamerasresponse"]], "ListLogpointsRequest": [[91, "listlogpointsrequest"]], "ListLogpointsResponse": [[91, "listlogpointsresponse"]], "Logpoint": [[91, "logpoint"]], "Logpoint.Calibration": [[91, "logpoint-calibration"]], "Logpoint.ImageParams": [[91, "logpoint-imageparams"]], "RetrieveRawDataRequest": [[91, "retrieverawdatarequest"]], "RetrieveRawDataResponse": [[91, "retrieverawdataresponse"]], "RetrieveRequest": [[91, "retrieverequest"]], "RetrieveResponse": [[91, "retrieveresponse"]], "SetPassphraseRequest": [[91, "setpassphraserequest"]], "SetPassphraseResponse": [[91, "setpassphraseresponse"]], "StoreRequest": [[91, "storerequest"]], "StoreResponse": [[91, "storeresponse"]], "TagRequest": [[91, "tagrequest"]], "TagResponse": [[91, "tagresponse"]], "Logpoint.LogStatus": [[91, "logpoint-logstatus"]], "Logpoint.QueueStatus": [[91, "logpoint-queuestatus"]], "Logpoint.RecordType": [[91, "logpoint-recordtype"]], "bosdyn/api/spot_cam/network.proto": [[91, "bosdyn-api-spot-cam-network-proto"]], "GetICEConfigurationRequest": [[91, "geticeconfigurationrequest"]], "GetICEConfigurationResponse": [[91, "geticeconfigurationresponse"]], "GetNetworkSettingsRequest": [[91, "getnetworksettingsrequest"]], "GetNetworkSettingsResponse": [[91, "getnetworksettingsresponse"]], "GetSSLCertRequest": [[91, "getsslcertrequest"]], "GetSSLCertResponse": [[91, "getsslcertresponse"]], "ICEServer": [[91, "iceserver"]], "ICEServer.auth_params": [[91, "iceserver-auth-params"]], "ICEServer.auth_params.oauth_pair": [[91, "iceserver-auth-params-oauth-pair"]], "NetworkTuple": [[91, "networktuple"]], "SetICEConfigurationRequest": [[91, "seticeconfigurationrequest"]], "SetICEConfigurationResponse": [[91, "seticeconfigurationresponse"]], "ICEServer.icetransport": [[91, "iceserver-icetransport"]], "ICEServer.servertype": [[91, "iceserver-servertype"]], "bosdyn/api/spot_cam/power.proto": [[91, "bosdyn-api-spot-cam-power-proto"]], "CyclePowerRequest": [[91, "cyclepowerrequest"]], "CyclePowerResponse": [[91, "cyclepowerresponse"]], "GetPowerStatusRequest": [[91, "getpowerstatusrequest"]], "GetPowerStatusResponse": [[91, "getpowerstatusresponse"]], "PowerStatus": [[91, "powerstatus"]], "SetPowerStatusRequest": [[91, "setpowerstatusrequest"]], "SetPowerStatusResponse": [[91, "setpowerstatusresponse"]], "bosdyn/api/spot_cam/ptz.proto": [[91, "bosdyn-api-spot-cam-ptz-proto"]], "GetPtzFocusStateRequest": [[91, "getptzfocusstaterequest"]], "GetPtzFocusStateResponse": [[91, "getptzfocusstateresponse"]], "GetPtzPositionRequest": [[91, "getptzpositionrequest"]], "GetPtzPositionResponse": [[91, "getptzpositionresponse"]], "GetPtzVelocityRequest": [[91, "getptzvelocityrequest"]], "GetPtzVelocityResponse": [[91, "getptzvelocityresponse"]], "InitializeLensRequest": [[91, "initializelensrequest"]], "InitializeLensResponse": [[91, "initializelensresponse"]], "ListPtzRequest": [[91, "listptzrequest"]], "ListPtzResponse": [[91, "listptzresponse"]], "PtzDescription": [[91, "ptzdescription"]], "PtzDescription.Limits": [[91, "ptzdescription-limits"]], "PtzFocusState": [[91, "ptzfocusstate"]], "PtzPosition": [[91, "ptzposition"]], "PtzVelocity": [[91, "ptzvelocity"]], "SetPtzFocusStateRequest": [[91, "setptzfocusstaterequest"]], "SetPtzFocusStateResponse": [[91, "setptzfocusstateresponse"]], "SetPtzPositionRequest": [[91, "setptzpositionrequest"]], "SetPtzPositionResponse": [[91, "setptzpositionresponse"]], "SetPtzVelocityRequest": [[91, "setptzvelocityrequest"]], "SetPtzVelocityResponse": [[91, "setptzvelocityresponse"]], "PtzFocusState.PtzFocusMode": [[91, "ptzfocusstate-ptzfocusmode"]], "bosdyn/api/spot_cam/service.proto": [[91, "bosdyn-api-spot-cam-service-proto"]], "AudioService": [[91, "audioservice"]], "CompositorService": [[91, "compositorservice"]], "HealthService": [[91, "healthservice"]], "LightingService": [[91, "lightingservice"]], "MediaLogService": [[91, "medialogservice"]], "NetworkService": [[91, "networkservice"]], "PtzService": [[91, "ptzservice"]], "StreamQualityService": [[91, "streamqualityservice"]], "VersionService": [[91, "versionservice"]], "bosdyn/api/spot_cam/streamquality.proto": [[91, "bosdyn-api-spot-cam-streamquality-proto"]], "EnableCongestionControlRequest": [[91, "enablecongestioncontrolrequest"]], "EnableCongestionControlResponse": [[91, "enablecongestioncontrolresponse"]], "GetStreamParamsRequest": [[91, "getstreamparamsrequest"]], "GetStreamParamsResponse": [[91, "getstreamparamsresponse"]], "SetStreamParamsRequest": [[91, "setstreamparamsrequest"]], "SetStreamParamsResponse": [[91, "setstreamparamsresponse"]], "StreamParams": [[91, "streamparams"]], "StreamParams.AutoExposure": [[91, "streamparams-autoexposure"]], "StreamParams.AwbMode": [[91, "streamparams-awbmode"]], "StreamParams.ManualExposure": [[91, "streamparams-manualexposure"]], "StreamParams.SyncAutoExposure": [[91, "streamparams-syncautoexposure"]], "StreamParams.AwbModeEnum": [[91, "streamparams-awbmodeenum"]], "bosdyn/api/spot_cam/version.proto": [[91, "bosdyn-api-spot-cam-version-proto"]], "GetSoftwareVersionRequest": [[91, "getsoftwareversionrequest"]], "GetSoftwareVersionResponse": [[91, "getsoftwareversionresponse"]], "bosdyn/api/stairs.proto": [[91, "bosdyn-api-stairs-proto"]], "StairTransform": [[91, "stairtransform"]], "Staircase": [[91, "staircase"]], "Staircase.Step": [[91, "staircase-step"]], "Staircase.Width": [[91, "staircase-width"]], "StaircaseLanding": [[91, "staircaselanding"]], "StaircaseWithLandings": [[91, "staircasewithlandings"]], "StraightStaircase": [[91, "straightstaircase"]], "StraightStaircase.Landing": [[91, "straightstaircase-landing"]], "StraightStaircase.Stair": [[91, "straightstaircase-stair"]], "Staircase.KnowledgeType": [[91, "staircase-knowledgetype"]], "Staircase.Width.BoundedWidth": [[91, "staircase-width-boundedwidth"]], "bosdyn/api/synchronized_command.proto": [[91, "bosdyn-api-synchronized-command-proto"]], "SynchronizedCommand.Feedback": [[91, "synchronizedcommand-feedback"]], "SynchronizedCommand.Request": [[91, "synchronizedcommand-request"]], "bosdyn/api/time_range.proto": [[91, "bosdyn-api-time-range-proto"]], "TimeRange": [[91, "timerange"]], "bosdyn/api/time_sync.proto": [[91, "bosdyn-api-time-sync-proto"]], "TimeSyncEstimate": [[91, "timesyncestimate"]], "TimeSyncRoundTrip": [[91, "timesyncroundtrip"]], "TimeSyncState": [[91, "timesyncstate"]], "TimeSyncUpdateRequest": [[91, "timesyncupdaterequest"]], "TimeSyncUpdateResponse": [[91, "timesyncupdateresponse"]], "TimeSyncState.Status": [[91, "timesyncstate-status"]], "bosdyn/api/time_sync_service.proto": [[91, "bosdyn-api-time-sync-service-proto"]], "TimeSyncService": [[91, "timesyncservice"]], "bosdyn/api/trajectory.proto": [[91, "bosdyn-api-trajectory-proto"]], "SE2Trajectory": [[91, "se2trajectory"]], "SE2TrajectoryPoint": [[91, "se2trajectorypoint"]], "SE3Trajectory": [[91, "se3trajectory"]], "SE3TrajectoryPoint": [[91, "se3trajectorypoint"]], "ScalarTrajectory": [[91, "scalartrajectory"]], "ScalarTrajectoryPoint": [[91, "scalartrajectorypoint"]], "Vec3Trajectory": [[91, "vec3trajectory"]], "Vec3TrajectoryPoint": [[91, "vec3trajectorypoint"]], "WrenchTrajectory": [[91, "wrenchtrajectory"]], "WrenchTrajectoryPoint": [[91, "wrenchtrajectorypoint"]], "AngularInterpolation": [[91, "angularinterpolation"]], "PositionalInterpolation": [[91, "positionalinterpolation"]], "bosdyn/api/units.proto": [[91, "bosdyn-api-units-proto"]], "PressureEnum": [[91, "pressureenum"]], "TemperatureEnum": [[91, "temperatureenum"]], "bosdyn/api/world_object.proto": [[91, "bosdyn-api-world-object-proto"]], "AprilTagProperties": [[91, "apriltagproperties"]], "BoundingBoxProperties": [[91, "boundingboxproperties"]], "DockProperties": [[91, "dockproperties"]], "DrawableArrow": [[91, "drawablearrow"]], "DrawableBox": [[91, "drawablebox"]], "DrawableCapsule": [[91, "drawablecapsule"]], "DrawableCylinder": [[91, "drawablecylinder"]], "DrawableFrame": [[91, "drawableframe"]], "DrawableLineStrip": [[91, "drawablelinestrip"]], "DrawablePoints": [[91, "drawablepoints"]], "DrawableProperties": [[91, "drawableproperties"]], "DrawableProperties.Color": [[91, "drawableproperties-color"]], "DrawableSphere": [[91, "drawablesphere"]], "GpsProperties": [[91, "gpsproperties"]], "ImageProperties": [[91, "imageproperties"]], "ListWorldObjectRequest": [[91, "listworldobjectrequest"]], "ListWorldObjectResponse": [[91, "listworldobjectresponse"]], "MutateWorldObjectRequest": [[91, "mutateworldobjectrequest"]], "MutateWorldObjectRequest.Mutation": [[91, "mutateworldobjectrequest-mutation"]], "MutateWorldObjectResponse": [[91, "mutateworldobjectresponse"]], "NoGoRegionProperties": [[91, "nogoregionproperties"]], "RayProperties": [[91, "rayproperties"]], "StaircaseProperties": [[91, "staircaseproperties"]], "WorldObject": [[91, "worldobject"]], "AprilTagProperties.AprilTagPoseStatus": [[91, "apriltagproperties-apriltagposestatus"]], "MutateWorldObjectRequest.Action": [[91, "mutateworldobjectrequest-action"]], "MutateWorldObjectResponse.Status": [[91, "mutateworldobjectresponse-status"]], "WorldObjectType": [[91, "worldobjecttype"]], "bosdyn/api/world_object_service.proto": [[91, "bosdyn-api-world-object-service-proto"]], "WorldObjectService": [[91, "worldobjectservice"]], "Scalar Value Types": [[91, "scalar-value-types"]], "Boston Dynamics Python Reference Guide": [[92, "boston-dynamics-python-reference-guide"]], "Coding standards and dependencies.": [[92, "coding-standards-and-dependencies"]], "Python Choreography Client": [[93, "python-choreography-client"]], "Animation File Conversion Helpers": [[94, "module-bosdyn.choreography.client.animation_file_conversion_helpers"]], "Animation File To Proto": [[95, "module-bosdyn.choreography.client.animation_file_to_proto"]], "Python Client": [[97, "python-client"]], "RPC Clients": [[97, "rpc-clients"], [209, "rpc-clients"]], "Area Callback": [[98, "module-bosdyn.client.area_callback"]], "Area Callback Region Handler Base": [[99, "module-bosdyn.client.area_callback_region_handler_base"]], "Area Callback Service Runner": [[100, "module-bosdyn.client.area_callback_service_runner"]], "Area Callback Service Servicer": [[101, "module-bosdyn.client.area_callback_service_servicer"]], "Area Callback Service Utils": [[102, "module-bosdyn.client.area_callback_service_utils"]], "Arm Surface Contact": [[103, "module-bosdyn.client.arm_surface_contact"], [240, "arm-surface-contact"]], "Async Tasks": [[104, "module-bosdyn.client.async_tasks"]], "Auth": [[105, "module-bosdyn.client.auth"]], "Autowalk": [[107, "module-bosdyn.client.autowalk"]], "Bddf": [[108, "module-bosdyn.client.bddf"]], "Bddf Download": [[109, "module-bosdyn.client.bddf_download"]], "Channel": [[110, "module-bosdyn.client.channel"]], "Command Line": [[111, "module-bosdyn.client.command_line"]], "Common": [[112, "module-bosdyn.client.common"], [191, "module-bosdyn.bddf.common"]], "Data Acquisition Helpers": [[114, "module-bosdyn.client.data_acquisition_helpers"]], "Data Acquisition Plugin": [[115, "module-bosdyn.client.data_acquisition_plugin"]], "Data Chunk": [[119, "module-bosdyn.client.data_chunk"]], "Directory": [[121, "module-bosdyn.client.directory"]], "Directory Registration": [[122, "module-bosdyn.client.directory_registration"]], "Door": [[124, "module-bosdyn.client.door"]], "Estop": [[125, "module-bosdyn.client.estop"]], "Exceptions": [[126, "module-bosdyn.client.exceptions"], [212, "module-bosdyn.mission.exceptions"], [218, "module-bosdyn.orbit.exceptions"], [222, "module-bosdyn.scout.exceptions"]], "Fault": [[127, "module-bosdyn.client.fault"]], "Frame Helpers": [[128, "module-bosdyn.client.frame_helpers"]], "Nmeaparser": [[129, "module-bosdyn.client.gps.NMEAParser"]], "GPS clients and helpers": [[130, "gps-clients-and-helpers"]], "Aggregator Client": [[131, "module-bosdyn.client.gps.aggregator_client"]], "Gps Listener": [[132, "module-bosdyn.client.gps.gps_listener"]], "Registration Client": [[133, "module-bosdyn.client.gps.registration_client"]], "Gripper Camera Param": [[135, "module-bosdyn.client.gripper_camera_param"]], "Image Service Helpers": [[137, "module-bosdyn.client.image_service_helpers"]], "Inverse Kinematics": [[138, "module-bosdyn.client.inverse_kinematics"]], "Ir Enable Disable": [[139, "module-bosdyn.client.ir_enable_disable"]], "Keepalive": [[140, "module-bosdyn.client.keepalive"]], "Lease Resource Hierarchy": [[142, "module-bosdyn.client.lease_resource_hierarchy"]], "Lease Validator": [[143, "module-bosdyn.client.lease_validator"]], "License": [[144, "module-bosdyn.client.license"]], "Local Grid": [[145, "module-bosdyn.client.local_grid"]], "Log Status": [[146, "module-bosdyn.client.log_status"]], "Manipulation Api Client": [[147, "module-bosdyn.client.manipulation_api_client"]], "Math Helpers": [[149, "module-bosdyn.client.math_helpers"]], "Metrics Logging": [[150, "module-bosdyn.client.metrics_logging"]], "Network Compute Bridge Client": [[151, "module-bosdyn.client.network_compute_bridge_client"]], "Payload Registration": [[153, "module-bosdyn.client.payload_registration"], [314, "payload-registration"]], "Point Cloud": [[154, "module-bosdyn.client.point_cloud"]], "Processors": [[156, "module-bosdyn.client.processors"]], "Ray Cast": [[157, "module-bosdyn.client.ray_cast"]], "Robot": [[159, "module-bosdyn.client.robot"]], "Robot Command": [[160, "module-bosdyn.client.robot_command"]], "Robot Id": [[161, "module-bosdyn.client.robot_id"]], "Sdk": [[163, "module-bosdyn.client.sdk"]], "Server Util": [[164, "module-bosdyn.client.server_util"], [214, "module-bosdyn.mission.server_util"]], "Service Customization Helpers": [[165, "module-bosdyn.client.service_customization_helpers"]], "Signals Helpers": [[166, "module-bosdyn.client.signals_helpers"]], "SpotCAM Python Client": [[167, "spotcam-python-client"]], "Audio": [[168, "module-bosdyn.client.spot_cam.audio"]], "Compositor": [[169, "module-bosdyn.client.spot_cam.compositor"]], "Health": [[170, "module-bosdyn.client.spot_cam.health"]], "Lighting": [[171, "module-bosdyn.client.spot_cam.lighting"]], "Lights Helper": [[172, "module-bosdyn.client.spot_cam.lights_helper"]], "Media Log": [[173, "module-bosdyn.client.spot_cam.media_log"]], "Network": [[174, "module-bosdyn.client.spot_cam.network"]], "Ptz": [[176, "module-bosdyn.client.spot_cam.ptz"]], "Streamquality": [[177, "module-bosdyn.client.spot_cam.streamquality"]], "Version": [[178, "module-bosdyn.client.spot_cam.version"]], "Time Sync": [[180, "module-bosdyn.client.time_sync"]], "Token Cache": [[181, "module-bosdyn.client.token_cache"]], "Token Manager": [[182, "module-bosdyn.client.token_manager"]], "Units Helpers": [[183, "module-bosdyn.client.units_helpers"]], "Util": [[184, "module-bosdyn.client.util"], [208, "module-bosdyn.util"], [215, "module-bosdyn.mission.util"]], "World Object": [[185, "module-bosdyn.client.world_object"]], "Python Core": [[186, "python-core"]], "BDDF Python": [[187, "bddf-python"]], "Base Data Reader": [[188, "module-bosdyn.bddf.base_data_reader"]], "Block Writer": [[189, "module-bosdyn.bddf.block_writer"]], "Bosdyn": [[190, "module-bosdyn.bddf.bosdyn"]], "Data Reader": [[192, "module-bosdyn.bddf.data_reader"]], "Data Writer": [[193, "module-bosdyn.bddf.data_writer"]], "File Indexer": [[194, "module-bosdyn.bddf.file_indexer"]], "Grpc Proto Reader": [[195, "module-bosdyn.bddf.grpc_proto_reader"]], "Grpc Reader": [[196, "module-bosdyn.bddf.grpc_reader"]], "Grpc Service Reader": [[197, "module-bosdyn.bddf.grpc_service_reader"]], "Grpc Service Writer": [[198, "module-bosdyn.bddf.grpc_service_writer"]], "Message Reader": [[199, "module-bosdyn.bddf.message_reader"]], "Pod Series Reader": [[200, "module-bosdyn.bddf.pod_series_reader"]], "Pod Series Writer": [[201, "module-bosdyn.bddf.pod_series_writer"]], "Protobuf Channel Reader": [[202, "module-bosdyn.bddf.protobuf_channel_reader"]], "Protobuf Reader": [[203, "module-bosdyn.bddf.protobuf_reader"]], "Protobuf Series Writer": [[204, "module-bosdyn.bddf.protobuf_series_writer"]], "Stream Data Reader": [[205, "module-bosdyn.bddf.stream_data_reader"]], "Deprecated": [[206, "module-bosdyn.deprecated"]], "Geometry": [[207, "module-bosdyn.geometry"]], "Python Mission": [[209, "python-mission"]], "Client": [[210, "module-bosdyn.mission.client"], [217, "module-bosdyn.orbit.client"], [221, "module-bosdyn.scout.client"], [296, "client"]], "Constants": [[211, "module-bosdyn.mission.constants"]], "Remote Client": [[213, "module-bosdyn.mission.remote_client"]], "Python Orbit": [[216, "python-orbit"]], "Utils": [[219, "module-bosdyn.orbit.utils"], [223, "module-bosdyn.scout.utils"]], "Python Scout": [[220, "python-scout"]], "Python Examples": [[224, "python-examples"]], "Recommended Examples": [[224, "recommended-examples"]], "Introductory Examples": [[224, "introductory-examples"]], "Intermediate Examples": [[224, "intermediate-examples"]], "Advanced Examples": [[224, "advanced-examples"]], "Animation Recorder": [[225, "animation-recorder"]], "Setup Dependencies": [[225, "setup-dependencies"], [227, "setup-dependencies"], [228, "setup-dependencies"], [229, "setup-dependencies"], [230, "setup-dependencies"], [231, "setup-dependencies"], [232, "setup-dependencies"], [233, "setup-dependencies"], [234, "setup-dependencies"], [235, "setup-dependencies"], [236, "setup-dependencies"], [237, "setup-dependencies"], [238, "setup-dependencies"], [239, "setup-dependencies"], [240, "setup-dependencies"], [241, "setup-dependencies"], [242, "setup-dependencies"], [243, "setup-dependencies"], [244, "setup-dependencies"], [245, "setup-dependencies"], [246, "setup-dependencies"], [249, "setup-dependencies"], [251, "setup-dependencies"], [253, "setup-dependencies"], [254, "setup-dependencies"], [255, "setup-dependencies"], [256, "setup-dependencies"], [257, "setup-dependencies"], [268, "setup-dependencies"], [269, "setup-dependencies"], [271, "setup-dependencies"], [272, "setup-dependencies"], [273, "setup-dependencies"], [275, "setup-dependencies"], [276, "setup-dependencies"], [277, "setup-dependencies"], [278, "setup-dependencies"], [279, "setup-dependencies"], [280, "setup-dependencies"], [281, "setup-dependencies"], [282, "setup-dependencies"], [283, "setup-dependencies"], [284, "setup-dependencies"], [285, "setup-dependencies"], [286, "setup-dependencies"], [287, "setup-dependencies"], [288, "setup-dependencies"], [289, "setup-dependencies"], [290, "setup-dependencies"], [291, "setup-dependencies"], [292, "setup-dependencies"], [294, "setup-dependencies"], [295, "setup-dependencies"], [299, "setup-dependencies"], [300, "setup-dependencies"], [301, "setup-dependencies"], [302, "setup-dependencies"], [303, "setup-dependencies"], [304, "setup-dependencies"], [305, "setup-dependencies"], [306, "setup-dependencies"], [308, "setup-dependencies"], [309, "setup-dependencies"], [310, "setup-dependencies"], [311, "setup-dependencies"], [312, "setup-dependencies"], [318, "setup-dependencies"], [319, "setup-dependencies"], [321, "setup-dependencies"], [323, "setup-dependencies"], [325, "setup-dependencies"], [326, "setup-dependencies"], [327, "setup-dependencies"], [328, "setup-dependencies"], [329, "setup-dependencies"], [330, "setup-dependencies"], [331, "setup-dependencies"], [332, "setup-dependencies"], [333, "setup-dependencies"]], "Common Problems": [[225, "common-problems"], [227, "common-problems"], [229, "common-problems"], [230, "common-problems"], [231, "common-problems"], [232, "common-problems"], [233, "common-problems"], [234, "common-problems"], [235, "common-problems"], [236, "common-problems"], [237, "common-problems"], [238, "common-problems"], [239, "common-problems"], [240, "common-problems"], [241, "common-problems"], [242, "common-problems"], [243, "common-problems"], [244, "common-problems"], [288, "common-problems"], [289, "common-problems"]], "Run the Example": [[225, "run-the-example"], [227, "run-the-example"], [229, "run-the-example"], [232, "run-the-example"], [233, "run-the-example"], [234, "run-the-example"], [235, "run-the-example"], [236, "run-the-example"], [238, "run-the-example"], [239, "run-the-example"], [240, "run-the-example"], [242, "run-the-example"], [244, "run-the-example"], [245, "run-the-example"], [256, "run-the-example"], [268, "run-the-example"], [269, "run-the-example"], [271, "run-the-example"], [274, "run-the-example"], [288, "run-the-example"], [289, "run-the-example"], [290, "run-the-example"], [290, "id2"], [292, "run-the-example"], [299, "run-the-example"], [300, "run-the-example"], [301, "run-the-example"], [302, "run-the-example"], [303, "run-the-example"], [304, "run-the-example"], [305, "run-the-example"], [308, "run-the-example"], [311, "run-the-example"], [321, "run-the-example"], [327, "run-the-example"]], "Area Callback Tutorial": [[226, "area-callback-tutorial"]], "Example: Crosswalk Spot CAM Light": [[226, "example-crosswalk-spot-cam-light"]], "Initialization": [[226, "initialization"]], "Begin": [[226, "begin"]], "Run": [[226, "run"]], "End": [[226, "end"]], "Running the example without graph nav & recording": [[226, "running-the-example-without-graph-nav-recording"]], "Running the example with graph nav & recording": [[226, "running-the-example-with-graph-nav-recording"]], "Arm and Mobility": [[227, "arm-and-mobility"]], "Constrained Manipulation": [[228, "constrained-manipulation"]], "Constrained Manipulation Example": [[228, "constrained-manipulation-example"]], "Setup Robot and grasp and object": [[228, "setup-robot-and-grasp-and-object"]], "Running the Example": [[228, "running-the-example"], [243, "running-the-example"], [247, "running-the-example"], [249, "running-the-example"], [250, "running-the-example"], [253, "running-the-example"], [255, "running-the-example"], [257, "running-the-example"], [273, "running-the-example"], [275, "running-the-example"], [277, "running-the-example"], [278, "running-the-example"], [279, "running-the-example"], [280, "running-the-example"], [281, "running-the-example"], [282, "running-the-example"], [284, "running-the-example"], [285, "running-the-example"], [286, "running-the-example"], [309, "running-the-example"], [310, "running-the-example"], [318, "running-the-example"], [319, "running-the-example"], [323, "running-the-example"], [326, "running-the-example"], [328, "running-the-example"], [329, "running-the-example"], [330, "running-the-example"], [331, "running-the-example"], [332, "running-the-example"], [333, "running-the-example"]], "Arm Door Command": [[229, "arm-door-command"]], "Force Command": [[230, "force-command"]], "Run the Examples": [[230, "run-the-examples"], [287, "run-the-examples"]], "Arm Freeze Hand in Body / World": [[231, "arm-freeze-hand-in-body-world"]], "Running the example": [[231, "running-the-example"]], "Arm Gaze Command": [[232, "arm-gaze-command"]], "GCODE Drawing": [[233, "gcode-drawing"]], "Drawing with Chalk": [[233, "drawing-with-chalk"]], "Details": [[233, "details"]], "Grasping": [[234, "grasping"]], "Setting Spot Arm grasp state and carry overrides": [[235, "setting-spot-arm-grasp-state-and-carry-overrides"]], "Arm Impedance Command": [[236, "arm-impedance-command"]], "Arm JointMove Command": [[237, "arm-jointmove-command"]], "Running the basic example": [[237, "running-the-basic-example"]], "Running the long trajectory example": [[237, "running-the-long-trajectory-example"]], "Arm Simple": [[238, "arm-simple"]], "Arm Deploy and Stow": [[239, "arm-deploy-and-stow"]], "Arm Trajectory": [[241, "arm-trajectory"]], "Long Trajectory": [[241, "long-trajectory"]], "Run the Basic Example": [[241, "run-the-basic-example"]], "Running the Long Trajectory Example": [[241, "running-the-long-trajectory-example"]], "Walking to an Object": [[242, "walking-to-an-object"]], "Controlling the Arm with a Keyboard": [[243, "controlling-the-arm-with-a-keyboard"]], "Arm and Mobility Follow": [[244, "arm-and-mobility-follow"]], "Auto Return Example": [[245, "auto-return-example"]], "BDDF data download": [[246, "bddf-data-download"]], "Running the Examples": [[246, "running-the-examples"], [254, "running-the-examples"]], "Specifying time spans": [[246, "specifying-time-spans"]], "Basic data download": [[246, "basic-data-download"]], "Operator comments": [[246, "operator-comments"]], "GRPC requests/responses": [[246, "grpc-requests-responses"]], "GUI": [[246, "gui"]], "Cloud Upload Example": [[247, "cloud-upload-example"]], "Install Packages": [[247, "install-packages"], [307, "install-packages"]], "Credentials": [[247, "credentials"]], "GCP": [[247, "gcp"]], "AWS": [[247, "aws"]], "Autowalk Example": [[247, "autowalk-example"]], "Comms image service": [[248, "comms-image-service"]], "How to use": [[248, "how-to-use"]], "Running locally:": [[248, "running-locally"]], "When using a Docker image on CORE I/O:": [[248, "when-using-a-docker-image-on-core-i-o"]], "Comms Testing": [[249, "comms-testing"]], "Running with Docker": [[249, "running-with-docker"], [250, "running-with-docker"]], "CORE I/O GPIO": [[250, "core-i-o-gpio"]], "This Example": [[250, "this-example"]], "GPIO Pins": [[250, "gpio-pins"]], "GPIO Example": [[250, "gpio-example"]], "Data Acquisition Plugin Services": [[251, "data-acquisition-plugin-services"]], "Running the Data Acquisition Example Plugin Services": [[251, "running-the-data-acquisition-example-plugin-services"]], "Point Cloud and Network Compute Bridge Plugins": [[251, "point-cloud-and-network-compute-bridge-plugins"]], "Save File Plugin": [[251, "save-file-plugin"]], "Testing the Data Acquisition Plugin": [[251, "testing-the-data-acquisition-plugin"]], "Communicating with the Data Acquisition Service": [[251, "communicating-with-the-data-acquisition-service"]], "Downloading from the Data Acquisition Store": [[251, "downloading-from-the-data-acquisition-store"]], "Run a Data Acquisition Plugin Service using Docker": [[251, "run-a-data-acquisition-plugin-service-using-docker"]], "Modem Signals": [[252, "modem-signals"]], "Using the Data Buffer service": [[253, "using-the-data-buffer-service"]], "Add an \u2018operator comment\u2019 to the log": [[253, "add-an-operator-comment-to-the-log"]], "Add \u2018blob\u2019 data to the log": [[253, "add-blob-data-to-the-log"]], "Add \u2018protobuf\u2019 data to the log": [[253, "add-protobuf-data-to-the-log"]], "Add an event to the log": [[253, "add-an-event-to-the-log"]], "Using the Robot Data Service": [[254, "using-the-robot-data-service"]], "get_comments.py": [[254, "get-comments-py"]], "get_events.py": [[254, "get-events-py"]], "get_index.py": [[254, "get-index-py"]], "get_pages.py": [[254, "get-pages-py"]], "delete_pages.py": [[254, "delete-pages-py"]], "Time ranges": [[254, "time-ranges"]], "Manipulating Spot Service Configurations in Directory": [[255, "manipulating-spot-service-configurations-in-directory"]], "Disable IR Emission": [[256, "disable-ir-emission"]], "Robot Docking": [[257, "robot-docking"]], "Dock My Robot Example": [[257, "dock-my-robot-example"]], "Setup Robot": [[257, "setup-robot"], [323, "setup-robot"]], "Arm Examples": [[258, "arm-examples"]], "Autonomy and Missions Examples": [[259, "autonomy-and-missions-examples"]], "Basic Service Examples": [[260, "basic-service-examples"]], "Data Acquisition Examples": [[261, "data-acquisition-examples"]], "Joint Control API Examples": [[262, "joint-control-api-examples"]], "Logging and Data Retrieval Examples": [[263, "logging-and-data-retrieval-examples"]], "Orbit Examples": [[264, "orbit-examples"]], "Payload Examples": [[265, "payload-examples"]], "Perception & World Objects Examples": [[266, "perception-world-objects-examples"]], "Robot Behavior and Commands Examples": [[267, "robot-behavior-and-commands-examples"]], "Edit Autowalk": [[268, "edit-autowalk"]], "Creating an E-Stop endpoint": [[269, "creating-an-e-stop-endpoint"]], "GUI Version": [[269, "gui-version"]], "Command-line version without a GUI": [[269, "command-line-version-without-a-gui"]], "Troubleshooting": [[269, "troubleshooting"], [270, "troubleshooting"], [282, "troubleshooting"], [296, "troubleshooting"], [316, "troubleshooting"], [320, "troubleshooting"], [325, "troubleshooting"]], "Spot Extensions Build Script": [[270, "spot-extensions-build-script"]], "Install Dependencies": [[270, "install-dependencies"]], "About generate_extension_data.py": [[270, "about-generate-extension-data-py"]], "Arguments:": [[270, "arguments"], [270, "id1"]], "About build_extension.py": [[270, "about-build-extension-py"]], "Extract Images from Walk File Example": [[271, "extract-images-from-walk-file-example"]], "Arguments": [[271, "arguments"], [325, "arguments"], [325, "id1"]], "Fan Power Commands with the Python SDK": [[272, "fan-power-commands-with-the-python-sdk"]], "Using Fan Commands": [[272, "using-fan-commands"]], "Running The Fan Command Examples": [[272, "running-the-fan-command-examples"]], "General Fan Command Usage": [[272, "general-fan-command-usage"]], "Basic Fan Command Example": [[272, "basic-fan-command-example"]], "Fan Remote Mission Service": [[272, "fan-remote-mission-service"]], "Follow a Fiducial": [[273, "follow-a-fiducial"]], "External AprilTag library": [[273, "external-apriltag-library"]], "E-Stop Endpoint Dependency": [[273, "e-stop-endpoint-dependency"], [321, "e-stop-endpoint-dependency"]], "Run Follow Fiducial Example": [[273, "run-follow-fiducial-example"]], "Robot Movement": [[273, "robot-movement"]], "Stopping Distance": [[273, "stopping-distance"]], "Frame Trajectory Commands": [[274, "frame-trajectory-commands"]], "E-Stop": [[274, "e-stop"], [327, "e-stop"]], "API Example - Visualize Depth in Visual Image": [[275, "api-example-visualize-depth-in-visual-image"]], "Example output": [[275, "example-output"]], "Using the Image Service": [[276, "using-the-image-service"]], "Running the Get-Image Example": [[276, "running-the-get-image-example"]], "Running the Image-Viewer Example": [[276, "running-the-image-viewer-example"]], "Retrieving Mission state": [[277, "retrieving-mission-state"]], "Using the Robot State Service": [[278, "using-the-robot-state-service"]], "Performing Asynchronous State Queries on Spot": [[279, "performing-asynchronous-state-queries-on-spot"]], "Using the World Object Service": [[280, "using-the-world-object-service"]], "GPS Listener": [[281, "gps-listener"]], "Building the Core IO extensions": [[281, "building-the-core-io-extensions"]], "Understanding the Example": [[281, "understanding-the-example"], [285, "understanding-the-example"]], "GPS in Graph Nav": [[281, "gps-in-graph-nav"]], "Graph Nav Anchoring Optimization Example": [[282, "graph-nav-anchoring-optimization-example"]], "Understanding the Example Code": [[282, "understanding-the-example-code"]], "Background on Anchorings and Metric Consistency": [[282, "background-on-anchorings-and-metric-consistency"]], "Anchoring Optimization": [[282, "anchoring-optimization"]], "Step 1: setting up a connection to the robot": [[282, "step-1-setting-up-a-connection-to-the-robot"]], "Step 2: loading and uploading a graph_nav graph and data": [[282, "step-2-loading-and-uploading-a-graph-nav-graph-and-data"]], "Step 3: Defining the optimization problem": [[282, "step-3-defining-the-optimization-problem"]], "Running the optimization and interpreting the results": [[282, "running-the-optimization-and-interpreting-the-results"]], "Other ways of viewing anchorings": [[282, "other-ways-of-viewing-anchorings"]], "GraphNav and Recording Service Command Line Interfaces": [[283, "graphnav-and-recording-service-command-line-interfaces"]], "Example Programs": [[283, "example-programs"]], "Recording Service Command Line": [[283, "recording-service-command-line"]], "Setting up for Recording": [[283, "setting-up-for-recording"]], "How to Run": [[283, "how-to-run"], [283, "id1"]], "Using the Example to Record a Map": [[283, "using-the-example-to-record-a-map"]], "Advanced Usage": [[283, "advanced-usage"]], "GraphNav Service Command Line": [[283, "graphnav-service-command-line"]], "Setting up for Navigation": [[283, "setting-up-for-navigation"]], "Using the Example to Navigate": [[283, "using-the-example-to-navigate"]], "GraphNav Point Cloud Extractor": [[284, "graphnav-point-cloud-extractor"]], "Understanding the Point Cloud Extractor": [[284, "understanding-the-point-cloud-extractor"]], "What is actually in the point cloud?": [[284, "what-is-actually-in-the-point-cloud"]], "GraphNav GPS Viewer": [[285, "graphnav-gps-viewer"]], "GraphNav Map Viewer": [[286, "graphnav-map-viewer"]], "Camera Controls": [[286, "camera-controls"], [330, "camera-controls"]], "Understanding the Map Viewer": [[286, "understanding-the-map-viewer"]], "Gripper Camera Parameter Examples": [[287, "gripper-camera-parameter-examples"]], "Hello Spot": [[288, "hello-spot"]], "Software": [[290, "software"]], "Licensing": [[290, "licensing"]], "Armless Robot Squat": [[290, "armless-robot-squat"]], "Hardware": [[290, "hardware"], [290, "id1"]], "Arm Wiggle": [[290, "arm-wiggle"]], "Using the Log Status Service": [[291, "using-the-log-status-service"]], "Example commands": [[291, "example-commands"]], "Logging Through the API": [[292, "logging-through-the-api"]], "LTE": [[293, "lte"]], "Wifi": [[293, "wifi"]], "Building the CoreIO Extension": [[293, "building-the-coreio-extension"]], "Recommended debugging": [[293, "recommended-debugging"]], "Answering a Mission Question": [[294, "answering-a-mission-question"]], "Start the mission_question_answerer Example": [[294, "start-the-mission-question-answerer-example"], [294, "id1"]], "Example Prompt Node Mission": [[294, "example-prompt-node-mission"]], "Building an Example Prompt Node Mission": [[294, "building-an-example-prompt-node-mission"]], "Replay the Mission": [[294, "replay-the-mission"]], "Mission Recorder": [[295, "mission-recorder"]], "How to Record a Mission": [[295, "how-to-record-a-mission"]], "How to Record a Mission with Additional Fiducials for Localization": [[295, "how-to-record-a-mission-with-additional-fiducials-for-localization"]], "Keyboard Commands": [[295, "keyboard-commands"]], "How to Replay a Mission": [[295, "how-to-replay-a-mission"]], "System Diagram": [[296, "system-diagram"], [316, "system-diagram"]], "Installation": [[296, "installation"], [316, "installation"], [322, "installation"], [334, "installation"]], "Server": [[296, "server"]], "Simple Alert Server Execution": [[296, "simple-alert-server-execution"]], "Robot-independent Execution": [[296, "robot-independent-execution"]], "Docker Execution": [[296, "docker-execution"], [316, "docker-execution"]], "Fire Extinguisher Detector Server": [[297, "fire-extinguisher-detector-server"]], "Build and Export": [[297, "build-and-export"]], "Spot Extension for CORE I/O": [[297, "spot-extension-for-core-i-o"]], "Action Configuration": [[297, "action-configuration"]], "Network Request Callback": [[298, "network-request-callback"], [298, "id1"]], "Export Run Archives - Mission Data": [[299, "export-run-archives-mission-data"]], "Understanding Orbit Web API": [[299, "understanding-orbit-web-api"], [300, "understanding-orbit-web-api"], [301, "understanding-orbit-web-api"], [302, "understanding-orbit-web-api"], [303, "understanding-orbit-web-api"], [304, "understanding-orbit-web-api"], [305, "understanding-orbit-web-api"]], "Hello Orbit": [[300, "hello-orbit"]], "Runs Response": [[301, "runs-response"]], "Create, Edit, and Delete Scheduled Missions on Orbit": [[302, "create-edit-and-delete-scheduled-missions-on-orbit"]], "Send robot back to the dock during a mission playback": [[303, "send-robot-back-to-the-dock-during-a-mission-playback"]], "Enable - disable Orbit missions based on weather forcast": [[304, "enable-disable-orbit-missions-based-on-weather-forcast"]], "Hello Webhooks": [[305, "hello-webhooks"]], "Using the Payload Service": [[306, "using-the-payload-service"]], "Running the Payload Registration Example": [[306, "running-the-payload-registration-example"]], "Running the Attach or Detach Payload Example": [[306, "running-the-attach-or-detach-payload-example"]], "Post Docking Callback Examples": [[307, "post-docking-callback-examples"]], "Run a Callback": [[307, "run-a-callback"]], "Run a Callback using Docker": [[307, "run-a-callback-using-docker"]], "Ray Cast Example": [[308, "ray-cast-example"]], "Recording an Autowalk with a Keyboard": [[309, "recording-an-autowalk-with-a-keyboard"]], "Run and Interact with a RemoteMissionService.": [[310, "run-and-interact-with-a-remotemissionservice"]], "Running without a robot": [[310, "running-without-a-robot"]], "Running with a robot": [[310, "running-with-a-robot"]], "Incorporating Service Customization": [[310, "incorporating-service-customization"]], "Using the example as part of an Autowalk mission": [[310, "using-the-example-as-part-of-an-autowalk-mission"]], "Step one: Start the remote mission server": [[310, "step-one-start-the-remote-mission-server"]], "Step two: Record an Autowalk mission with a callback": [[310, "step-two-record-an-autowalk-mission-with-a-callback"]], "Replaying a Mission": [[311, "replaying-a-mission"]], "Reset Safety Stop Command with the Python SDK": [[312, "reset-safety-stop-command-with-the-python-sdk"]], "Using the Reset Safety Stop Command": [[312, "using-the-reset-safety-stop-command"]], "Running The Reset Safety Stop Examples": [[312, "running-the-reset-safety-stop-examples"]], "General Reset Safety Stop Usage": [[312, "general-reset-safety-stop-usage"]], "Reset Primary Safety Stop Example": [[312, "reset-primary-safety-stop-example"]], "Reset Redundant Safety Stop Example": [[312, "reset-redundant-safety-stop-example"]], "Interacting with a Ricoh Theta Camera": [[313, "interacting-with-a-ricoh-theta-camera"]], "Required Items": [[313, "required-items"], [324, "required-items"]], "Installation Steps": [[313, "installation-steps"], [324, "installation-steps"]], "Install Packages on PC": [[313, "install-packages-on-pc"], [324, "install-packages-on-pc"]], "Test Ricoh Theta": [[313, "test-ricoh-theta"]], "Connect Ricoh Theta to Spot": [[313, "connect-ricoh-theta-to-spot"]], "Run Image Service": [[313, "run-image-service"]], "Ricoh Theta Image Service Configuration": [[313, "ricoh-theta-image-service-configuration"]], "Debugging Tips": [[313, "debugging-tips"], [315, "debugging-tips"]], "Run the Ricoh Theta Image Service using Docker": [[313, "run-the-ricoh-theta-image-service-using-docker"]], "Developer Comments": [[313, "developer-comments"]], "Payload & Service Initialization": [[314, "payload-service-initialization"]], "Service Registration": [[314, "service-registration"]], "Communication Between Client & Service": [[314, "communication-between-client-service"]], "CORE I/O": [[314, "core-i-o"], [315, "core-i-o"]], "Set up": [[314, "set-up"]], "Demo": [[314, "demo"]], "Select values": [[314, "select-values"]], "Register the payload": [[314, "register-the-payload"]], "Start the announce service": [[314, "start-the-announce-service"]], "Register the announce service": [[314, "register-the-announce-service"]], "Access the announce service with a client": [[314, "access-the-announce-service-with-a-client"]], "Demo Script": [[314, "demo-script"]], "Custom Parameter Image Service for a Web Cam": [[315, "custom-parameter-image-service-for-a-web-cam"]], "Example Execution": [[315, "example-execution"], [317, "example-execution"]], "Run the Custom Parameter Image Service using Docker": [[315, "run-the-custom-parameter-image-service-using-docker"]], "Locally": [[315, "locally"]], "SpotCORE (Deprecated)": [[315, "spotcore-deprecated"]], "Controling Custom Parameters in Spot App": [[316, "controling-custom-parameters-in-spot-app"]], "Custom Parameter Data Acquisition": [[317, "custom-parameter-data-acquisition"]], "Handling Service Faults": [[318, "handling-service-faults"]], "Spot CAM Services": [[319, "spot-cam-services"]], "Spot Cam Video Core IO Extension Example": [[319, "spot-cam-video-core-io-extension-example"]], "Running Spot Cam Video Example": [[319, "running-spot-cam-video-example"]], "Set up the action on the tablet": [[319, "set-up-the-action-on-the-tablet"]], "Spot Detect and Follow": [[320, "spot-detect-and-follow"]], "User Guide": [[320, "user-guide"], [322, "user-guide"], [334, "user-guide"]], "Installation (Only if you want to run without Docker)": [[320, "installation-only-if-you-want-to-run-without-docker"]], "Running in Docker": [[320, "running-in-docker"]], "Running as a Spot Extension on CORE I/O": [[320, "running-as-a-spot-extension-on-core-i-o"]], "Responding to User Interaction via Light": [[321, "responding-to-user-interaction-via-light"]], "Spot Tensorflow Object Detection": [[322, "spot-tensorflow-object-detection"]], "Adjusting Robot Stance In Place": [[323, "adjusting-robot-stance-in-place"]], "Change Offset": [[323, "change-offset"]], "Stitch Front Spot Images Together": [[324, "stitch-front-spot-images-together"]], "To execute": [[324, "to-execute"]], "Tester Programs": [[325, "tester-programs"]], "Testing an Image Service": [[325, "testing-an-image-service"]], "Testing a Data Acquisition Plugin": [[325, "testing-a-data-acquisition-plugin"]], "Using the Timesync Service": [[326, "using-the-timesync-service"]], "Upload and Execute Choreography Sequence": [[327, "upload-and-execute-choreography-sequence"]], "Setting user no-go regions for locomotion": [[328, "setting-user-no-go-regions-for-locomotion"]], "Using the Velodyne Point Cloud Service": [[329, "using-the-velodyne-point-cloud-service"]], "Basic Streaming Visualizer for API Messages": [[330, "basic-streaming-visualizer-for-api-messages"]], "Visualized Objects": [[330, "visualized-objects"]], "Controlling the Robot with a Keyboard": [[331, "controlling-the-robot-with-a-keyboard"]], "World Object Mutations": [[332, "world-object-mutations"]], "Using World Object Service with Image Coordinates": [[333, "using-world-object-service-with-image-coordinates"]], "Controlling the Robot with an Xbox Controller": [[334, "controlling-the-robot-with-an-xbox-controller"]], "OS-Specific Dependencies": [[334, "os-specific-dependencies"]], "Installation Instructions": [[334, "installation-instructions"]]}, "indexentries": {"arm_joints_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_joints_handler"]], "arm_playback_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_playback_option"]], "arm_prohibited_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_prohibited_option"]], "arm_required_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_required_option"]], "assume_zero_roll_and_pitch_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.assume_zero_roll_and_pitch_option"]], "body_euler_rpy_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_euler_rpy_angles_handler"]], "body_pitch_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_pitch_handler"]], "body_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_pos_handler"]], "body_quat_w_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_w_handler"]], "body_quat_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_x_handler"]], "body_quat_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_y_handler"]], "body_quat_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_z_handler"]], "body_quaternion_wxyz_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quaternion_wxyz_handler"]], "body_quaternion_xyzw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quaternion_xyzw_handler"]], "body_roll_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_roll_handler"]], "body_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_x_handler"]], "body_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_y_handler"]], "body_yaw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_yaw_handler"]], "body_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.body_z_handler"]], "bosdyn.choreography.client.animation_file_conversion_helpers": [[94, "module-bosdyn.choreography.client.animation_file_conversion_helpers"]], "bpm_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.bpm_option"]], "com_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.com_pos_handler"]], "com_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.com_x_handler"]], "com_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.com_y_handler"]], "com_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.com_z_handler"]], "contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.contact_handler"]], "controls_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.controls_option"]], "custom_gait_cycle_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.custom_gait_cycle_option"]], "description_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.description_option"]], "display_rgb_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.display_rgb_option"]], "el0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.el0_handler"]], "el1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.el1_handler"]], "extendable_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.extendable_option"]], "fl_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_angles_handler"]], "fl_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_contact_handler"]], "fl_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_hx_handler"]], "fl_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_hy_handler"]], "fl_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_kn_handler"]], "fl_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_pos_handler"]], "fl_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_x_handler"]], "fl_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_y_handler"]], "fl_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_z_handler"]], "foot_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.foot_pos_handler"]], "fr_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_angles_handler"]], "fr_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_contact_handler"]], "fr_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_hx_handler"]], "fr_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_hy_handler"]], "fr_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_kn_handler"]], "fr_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_pos_handler"]], "fr_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_x_handler"]], "fr_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_y_handler"]], "fr_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_z_handler"]], "frequency_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.frequency_option"]], "gripper_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.gripper_handler"]], "hand_euler_rpy_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_euler_rpy_angles_handler"]], "hand_pitch_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_pitch_handler"]], "hand_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_pos_handler"]], "hand_quat_w_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_w_handler"]], "hand_quat_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_x_handler"]], "hand_quat_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_y_handler"]], "hand_quat_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_z_handler"]], "hand_quaternion_wxyz_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quaternion_wxyz_handler"]], "hand_quaternion_xyzw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quaternion_xyzw_handler"]], "hand_roll_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_roll_handler"]], "hand_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_x_handler"]], "hand_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_y_handler"]], "hand_yaw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_yaw_handler"]], "hand_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_z_handler"]], "hl_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_angles_handler"]], "hl_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_contact_handler"]], "hl_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_hx_handler"]], "hl_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_hy_handler"]], "hl_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_kn_handler"]], "hl_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_pos_handler"]], "hl_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_x_handler"]], "hl_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_y_handler"]], "hl_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_z_handler"]], "hr_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_angles_handler"]], "hr_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_contact_handler"]], "hr_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_hx_handler"]], "hr_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_hy_handler"]], "hr_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_kn_handler"]], "hr_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_pos_handler"]], "hr_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_x_handler"]], "hr_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_y_handler"]], "hr_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_z_handler"]], "leg_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.leg_angles_handler"]], "module": [[94, "module-bosdyn.choreography.client.animation_file_conversion_helpers"], [95, "module-bosdyn.choreography.client.animation_file_to_proto"], [96, "module-bosdyn.choreography.client.choreography"], [98, "module-bosdyn.client.area_callback"], [99, "module-bosdyn.client.area_callback_region_handler_base"], [100, "module-bosdyn.client.area_callback_service_runner"], [101, "module-bosdyn.client.area_callback_service_servicer"], [102, "module-bosdyn.client.area_callback_service_utils"], [103, "module-bosdyn.client.arm_surface_contact"], [104, "module-bosdyn.client.async_tasks"], [105, "module-bosdyn.client.auth"], [106, "module-bosdyn.client.auto_return"], [107, "module-bosdyn.client.autowalk"], [108, "module-bosdyn.client.bddf"], [109, "module-bosdyn.client.bddf_download"], [110, "module-bosdyn.client.channel"], [111, "module-bosdyn.client.command_line"], [112, "module-bosdyn.client.common"], [113, "module-bosdyn.client.data_acquisition"], [114, "module-bosdyn.client.data_acquisition_helpers"], [115, "module-bosdyn.client.data_acquisition_plugin"], [116, "module-bosdyn.client.data_acquisition_plugin_service"], [117, "module-bosdyn.client.data_acquisition_store"], [118, "module-bosdyn.client.data_buffer"], [119, "module-bosdyn.client.data_chunk"], [120, "module-bosdyn.client.data_service"], [121, "module-bosdyn.client.directory"], [122, "module-bosdyn.client.directory_registration"], [123, "module-bosdyn.client.docking"], [124, "module-bosdyn.client.door"], [125, "module-bosdyn.client.estop"], [126, "module-bosdyn.client.exceptions"], [127, "module-bosdyn.client.fault"], [128, "module-bosdyn.client.frame_helpers"], [129, "module-bosdyn.client.gps.NMEAParser"], [131, "module-bosdyn.client.gps.aggregator_client"], [132, "module-bosdyn.client.gps.gps_listener"], [133, "module-bosdyn.client.gps.registration_client"], [134, "module-bosdyn.client.graph_nav"], [135, "module-bosdyn.client.gripper_camera_param"], [136, "module-bosdyn.client.image"], [137, "module-bosdyn.client.image_service_helpers"], [138, "module-bosdyn.client.inverse_kinematics"], [139, "module-bosdyn.client.ir_enable_disable"], [140, "module-bosdyn.client.keepalive"], [141, "module-bosdyn.client.lease"], [142, "module-bosdyn.client.lease_resource_hierarchy"], [143, "module-bosdyn.client.lease_validator"], [144, "module-bosdyn.client.license"], [145, "module-bosdyn.client.local_grid"], [146, "module-bosdyn.client.log_status"], [147, "module-bosdyn.client.manipulation_api_client"], [148, "module-bosdyn.client.map_processing"], [149, "module-bosdyn.client.math_helpers"], [150, "module-bosdyn.client.metrics_logging"], [151, "module-bosdyn.client.network_compute_bridge_client"], [152, "module-bosdyn.client.payload"], [153, "module-bosdyn.client.payload_registration"], [154, "module-bosdyn.client.point_cloud"], [155, "module-bosdyn.client.power"], [156, "module-bosdyn.client.processors"], [157, "module-bosdyn.client.ray_cast"], [158, "module-bosdyn.client.recording"], [159, "module-bosdyn.client.robot"], [160, "module-bosdyn.client.robot_command"], [161, "module-bosdyn.client.robot_id"], [162, "module-bosdyn.client.robot_state"], [163, "module-bosdyn.client.sdk"], [164, "module-bosdyn.client.server_util"], [165, "module-bosdyn.client.service_customization_helpers"], [166, "module-bosdyn.client.signals_helpers"], [168, "module-bosdyn.client.spot_cam.audio"], [169, "module-bosdyn.client.spot_cam.compositor"], [170, "module-bosdyn.client.spot_cam.health"], [171, "module-bosdyn.client.spot_cam.lighting"], [172, "module-bosdyn.client.spot_cam.lights_helper"], [173, "module-bosdyn.client.spot_cam.media_log"], [174, "module-bosdyn.client.spot_cam.network"], [175, "module-bosdyn.client.spot_cam.power"], [176, "module-bosdyn.client.spot_cam.ptz"], [177, "module-bosdyn.client.spot_cam.streamquality"], [178, "module-bosdyn.client.spot_cam.version"], [179, "module-bosdyn.client.spot_check"], [180, "module-bosdyn.client.time_sync"], [181, "module-bosdyn.client.token_cache"], [182, "module-bosdyn.client.token_manager"], [183, "module-bosdyn.client.units_helpers"], [184, "module-bosdyn.client.util"], [185, "module-bosdyn.client.world_object"], [188, "module-bosdyn.bddf.base_data_reader"], [189, "module-bosdyn.bddf.block_writer"], [190, "module-bosdyn.bddf.bosdyn"], [191, "module-bosdyn.bddf.common"], [192, "module-bosdyn.bddf.data_reader"], [193, "module-bosdyn.bddf.data_writer"], [194, "module-bosdyn.bddf.file_indexer"], [195, "module-bosdyn.bddf.grpc_proto_reader"], [196, "module-bosdyn.bddf.grpc_reader"], [197, "module-bosdyn.bddf.grpc_service_reader"], [198, "module-bosdyn.bddf.grpc_service_writer"], [199, "module-bosdyn.bddf.message_reader"], [200, "module-bosdyn.bddf.pod_series_reader"], [201, "module-bosdyn.bddf.pod_series_writer"], [202, "module-bosdyn.bddf.protobuf_channel_reader"], [203, "module-bosdyn.bddf.protobuf_reader"], [204, "module-bosdyn.bddf.protobuf_series_writer"], [205, "module-bosdyn.bddf.stream_data_reader"], [206, "module-bosdyn.deprecated"], [207, "module-bosdyn.geometry"], [208, "module-bosdyn.util"], [210, "module-bosdyn.mission.client"], [211, "module-bosdyn.mission.constants"], [212, "module-bosdyn.mission.exceptions"], [213, "module-bosdyn.mission.remote_client"], [214, "module-bosdyn.mission.server_util"], [215, "module-bosdyn.mission.util"], [217, "module-bosdyn.orbit.client"], [218, "module-bosdyn.orbit.exceptions"], [219, "module-bosdyn.orbit.utils"], [221, "module-bosdyn.scout.client"], [222, "module-bosdyn.scout.exceptions"], [223, "module-bosdyn.scout.utils"]], "neutral_start_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.neutral_start_option"]], "no_looping_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.no_looping_option"]], "precise_steps_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.precise_steps_option"]], "precise_timing_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.precise_timing_option"]], "retime_to_integer_slices_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.retime_to_integer_slices_option"]], "sh0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.sh0_handler"]], "sh1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.sh1_handler"]], "start_time_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.start_time_handler"]], "starts_sitting_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.starts_sitting_option"]], "timing_adjustability_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.timing_adjustability_option"]], "track_hand_rt_body_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.track_hand_rt_body_option"]], "track_hand_rt_feet_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.track_hand_rt_feet_option"]], "track_swing_trajectories_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.track_swing_trajectories_option"]], "truncatable_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.truncatable_option"]], "wr0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.wr0_handler"]], "wr1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[94, "bosdyn.choreography.client.animation_file_conversion_helpers.wr1_handler"]], "animation (class in bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.Animation"]], "animationfileformaterror": [[95, "bosdyn.choreography.client.animation_file_to_proto.AnimationFileFormatError"]], "bosdyn.choreography.client.animation_file_to_proto": [[95, "module-bosdyn.choreography.client.animation_file_to_proto"]], "convert_animation_file_to_proto() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.convert_animation_file_to_proto"]], "create_move_info_proto() (bosdyn.choreography.client.animation_file_to_proto.animation method)": [[95, "bosdyn.choreography.client.animation_file_to_proto.Animation.create_move_info_proto"]], "handle_nested_double_value_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.handle_nested_double_value_params"]], "main() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.main"]], "read_and_find_animation_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.read_and_find_animation_params"]], "read_animation_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.read_animation_params"]], "set_proto() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.set_proto"]], "write_animation_to_dest() (in module bosdyn.choreography.client.animation_file_to_proto)": [[95, "bosdyn.choreography.client.animation_file_to_proto.write_animation_to_dest"]], "animation_move_prefix (bosdyn.choreography.client.choreography.animationuploadhelper attribute)": [[96, "bosdyn.choreography.client.choreography.AnimationUploadHelper.ANIMATION_MOVE_PREFIX"]], "animationuploadhelper (class in bosdyn.choreography.client.choreography)": [[96, "bosdyn.choreography.client.choreography.AnimationUploadHelper"]], "animationvalidationfailederror": [[96, "bosdyn.choreography.client.choreography.AnimationValidationFailedError"]], "choreographyclient (class in bosdyn.choreography.client.choreography)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient"]], "incompletedata": [[96, "bosdyn.choreography.client.choreography.IncompleteData"]], "invaliduploadedchoreographyerror": [[96, "bosdyn.choreography.client.choreography.InvalidUploadedChoreographyError"]], "leaseerror": [[96, "bosdyn.choreography.client.choreography.LeaseError"]], "norecordedinformation": [[96, "bosdyn.choreography.client.choreography.NoRecordedInformation"]], "recordingbufferfull": [[96, "bosdyn.choreography.client.choreography.RecordingBufferFull"]], "robotcommandissueserror": [[96, "bosdyn.choreography.client.choreography.RobotCommandIssuesError"]], "unknownrecordingsessionid": [[96, "bosdyn.choreography.client.choreography.UnknownRecordingSessionId"]], "bosdyn.choreography.client.choreography": [[96, "module-bosdyn.choreography.client.choreography"]], "build_choreography_command_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_choreography_command_request"]], "build_choreography_time_adjust_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_choreography_time_adjust_request"]], "build_execute_choreography_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_execute_choreography_request"]], "build_modify_choreography_info_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_modify_choreography_info_request"]], "build_save_sequence_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_save_sequence_request"]], "build_start_recording_state_request() (bosdyn.choreography.client.choreography.choreographyclient static method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.build_start_recording_state_request"]], "choreography_command() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_command"]], "choreography_command_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_command_async"]], "choreography_log_to_animation_file() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_log_to_animation_file"]], "choreography_time_adjust() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_time_adjust"]], "choreography_time_adjust_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_time_adjust_async"]], "clear_all_sequence_files() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.clear_all_sequence_files"]], "clear_all_sequence_files_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.clear_all_sequence_files_async"]], "default_service_name (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.default_service_name"]], "delete_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.delete_sequence"]], "delete_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.delete_sequence_async"]], "download_robot_state_log() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.download_robot_state_log"]], "execute_choreography() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.execute_choreography"]], "execute_choreography_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.execute_choreography_async"]], "generate_animation_id() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[96, "bosdyn.choreography.client.choreography.AnimationUploadHelper.generate_animation_id"]], "get_animation() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_animation"]], "get_animation_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_animation_async"]], "get_choreography_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_sequence"]], "get_choreography_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_sequence_async"]], "get_choreography_status() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_status"]], "get_choreography_status_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_status_async"]], "initialize() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[96, "bosdyn.choreography.client.choreography.AnimationUploadHelper.initialize"]], "license_name (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.license_name"]], "list_all_moves() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_moves"]], "list_all_moves_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_moves_async"]], "list_all_sequences() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_sequences"]], "list_all_sequences_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_sequences_async"]], "load_choreography_sequence_from_binary_file() (in module bosdyn.choreography.client.choreography)": [[96, "bosdyn.choreography.client.choreography.load_choreography_sequence_from_binary_file"]], "load_choreography_sequence_from_txt_file() (in module bosdyn.choreography.client.choreography)": [[96, "bosdyn.choreography.client.choreography.load_choreography_sequence_from_txt_file"]], "modify_choreography_info() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.modify_choreography_info"]], "modify_choreography_info_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.modify_choreography_info_async"]], "save_choreography_sequence_to_file() (in module bosdyn.choreography.client.choreography)": [[96, "bosdyn.choreography.client.choreography.save_choreography_sequence_to_file"]], "save_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.save_sequence"]], "save_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.save_sequence_async"]], "service_type (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.service_type"]], "start_recording_state() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.start_recording_state"]], "start_recording_state_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.start_recording_state_async"]], "stop_recording_state() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.stop_recording_state"]], "stop_recording_state_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.stop_recording_state_async"]], "timesync_endpoint (bosdyn.choreography.client.choreography.choreographyclient property)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.timesync_endpoint"]], "update_from() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.update_from"]], "upload_animated_move() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[96, "bosdyn.choreography.client.choreography.AnimationUploadHelper.upload_animated_move"]], "upload_animated_move() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_animated_move"]], "upload_animated_move_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_animated_move_async"]], "upload_choreography() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_choreography"]], "upload_choreography_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[96, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_choreography_async"]], "areacallbackclient (class in bosdyn.client.area_callback)": [[98, "bosdyn.client.area_callback.AreaCallbackClient"]], "areacallbackresponseerror": [[98, "bosdyn.client.area_callback.AreaCallbackResponseError"]], "expiredendtimeerror": [[98, "bosdyn.client.area_callback.ExpiredEndTimeError"]], "invalidcommandiderror": [[98, "bosdyn.client.area_callback.InvalidCommandIdError"]], "invalidconfigerror": [[98, "bosdyn.client.area_callback.InvalidConfigError"]], "missingleaseresourceserror": [[98, "bosdyn.client.area_callback.MissingLeaseResourcesError"]], "shutdowncallbackfailederror": [[98, "bosdyn.client.area_callback.ShutdownCallbackFailedError"]], "area_callback_information() (bosdyn.client.area_callback.areacallbackclient method)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.area_callback_information"]], "begin_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.begin_callback"]], "begin_control() (bosdyn.client.area_callback.areacallbackclient method)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.begin_control"]], "bosdyn.client.area_callback": [[98, "module-bosdyn.client.area_callback"]], "default_service_name (bosdyn.client.area_callback.areacallbackclient attribute)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.default_service_name"]], "end_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.end_callback"]], "service_type (bosdyn.client.area_callback.areacallbackclient attribute)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.service_type"]], "update_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[98, "bosdyn.client.area_callback.AreaCallbackClient.update_callback"]], "areacallbackregionhandlerbase (class in bosdyn.client.area_callback_region_handler_base)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase"]], "callbackended": [[99, "bosdyn.client.area_callback_region_handler_base.CallbackEnded"]], "callbacktimedouterror": [[99, "bosdyn.client.area_callback_region_handler_base.CallbackTimedOutError"]], "handlererror": [[99, "bosdyn.client.area_callback_region_handler_base.HandlerError"]], "incorrectusage": [[99, "bosdyn.client.area_callback_region_handler_base.IncorrectUsage"]], "pathblocked": [[99, "bosdyn.client.area_callback_region_handler_base.PathBlocked"]], "routechangedresult (class in bosdyn.client.area_callback_region_handler_base)": [[99, "bosdyn.client.area_callback_region_handler_base.RouteChangedResult"]], "area_callback_information (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.area_callback_information"]], "begin() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.begin"]], "block_until_arrived_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_arrived_at_end"]], "block_until_arrived_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_arrived_at_start"]], "block_until_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_control"]], "bosdyn.client.area_callback_region_handler_base": [[99, "module-bosdyn.client.area_callback_region_handler_base"]], "check() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.check"]], "config (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.config"]], "continue_past_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.continue_past_end"]], "continue_past_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.continue_past_start"]], "control_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.control_at_end"]], "control_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.control_at_start"]], "end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.end"]], "has_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.has_control"]], "internal_begin_complete() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_begin_complete"]], "internal_give_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_give_control"]], "internal_run_wrapper() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_run_wrapper"]], "internal_set_end_time() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_set_end_time"]], "internal_set_stage() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_set_stage"]], "route_changed() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.route_changed"]], "run() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.run"]], "safe_sleep() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.safe_sleep"]], "set_complete() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.set_complete"]], "set_localization_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.set_localization_at_end"]], "stage (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stage"]], "stop_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stop_at_end"]], "stop_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stop_at_start"]], "update_response (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.update_response"]], "will_get_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[99, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.will_get_control"]], "bosdyn.client.area_callback_service_runner": [[100, "module-bosdyn.client.area_callback_service_runner"]], "run_service() (in module bosdyn.client.area_callback_service_runner)": [[100, "bosdyn.client.area_callback_service_runner.run_service"]], "areacallbackinformation() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.AreaCallbackInformation"]], "areacallbackserviceservicer (class in bosdyn.client.area_callback_service_servicer)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer"]], "begincallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.BeginCallback"]], "begincontrol() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.BeginControl"]], "endcallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.EndCallback"]], "routechange() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.RouteChange"]], "service_type (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer attribute)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.SERVICE_TYPE"]], "shutdown() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.Shutdown"]], "updatecallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[101, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.UpdateCallback"]], "bosdyn.client.area_callback_service_servicer": [[101, "module-bosdyn.client.area_callback_service_servicer"]], "areacallbackserviceconfig (class in bosdyn.client.area_callback_service_utils)": [[102, "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig"]], "bosdyn.client.area_callback_service_utils": [[102, "module-bosdyn.client.area_callback_service_utils"]], "handle_service_faults() (in module bosdyn.client.area_callback_service_utils)": [[102, "bosdyn.client.area_callback_service_utils.handle_service_faults"]], "parse_params() (bosdyn.client.area_callback_service_utils.areacallbackserviceconfig method)": [[102, "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig.parse_params"]], "armsurfacecontactclient (class in bosdyn.client.arm_surface_contact)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient"]], "arm_surface_contact_command() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.arm_surface_contact_command"]], "arm_surface_contact_command_async() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.arm_surface_contact_command_async"]], "bosdyn.client.arm_surface_contact": [[103, "module-bosdyn.client.arm_surface_contact"]], "default_service_name (bosdyn.client.arm_surface_contact.armsurfacecontactclient attribute)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.default_service_name"]], "service_type (bosdyn.client.arm_surface_contact.armsurfacecontactclient attribute)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.service_type"]], "update_from() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[103, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.update_from"]], "asyncgrpctask (class in bosdyn.client.async_tasks)": [[104, "bosdyn.client.async_tasks.AsyncGRPCTask"]], "asyncperiodicgrpctask (class in bosdyn.client.async_tasks)": [[104, "bosdyn.client.async_tasks.AsyncPeriodicGRPCTask"]], "asyncperiodicquery (class in bosdyn.client.async_tasks)": [[104, "bosdyn.client.async_tasks.AsyncPeriodicQuery"]], "asynctasks (class in bosdyn.client.async_tasks)": [[104, "bosdyn.client.async_tasks.AsyncTasks"]], "add_task() (bosdyn.client.async_tasks.asynctasks method)": [[104, "bosdyn.client.async_tasks.AsyncTasks.add_task"]], "bosdyn.client.async_tasks": [[104, "module-bosdyn.client.async_tasks"]], "proto (bosdyn.client.async_tasks.asyncperiodicquery property)": [[104, "bosdyn.client.async_tasks.AsyncPeriodicQuery.proto"]], "update() (bosdyn.client.async_tasks.asyncgrpctask method)": [[104, "bosdyn.client.async_tasks.AsyncGRPCTask.update"]], "update() (bosdyn.client.async_tasks.asynctasks method)": [[104, "bosdyn.client.async_tasks.AsyncTasks.update"]], "authclient (class in bosdyn.client.auth)": [[105, "bosdyn.client.auth.AuthClient"]], "authresponseerror": [[105, "bosdyn.client.auth.AuthResponseError"]], "invalidloginerror": [[105, "bosdyn.client.auth.InvalidLoginError"]], "invalidtokenerror": [[105, "bosdyn.client.auth.InvalidTokenError"]], "temporarilylockedouterror": [[105, "bosdyn.client.auth.TemporarilyLockedOutError"]], "auth() (bosdyn.client.auth.authclient method)": [[105, "bosdyn.client.auth.AuthClient.auth"]], "auth_async() (bosdyn.client.auth.authclient method)": [[105, "bosdyn.client.auth.AuthClient.auth_async"]], "auth_with_token() (bosdyn.client.auth.authclient method)": [[105, "bosdyn.client.auth.AuthClient.auth_with_token"]], "auth_with_token_async() (bosdyn.client.auth.authclient method)": [[105, "bosdyn.client.auth.AuthClient.auth_with_token_async"]], "bosdyn.client.auth": [[105, "module-bosdyn.client.auth"]], "default_service_name (bosdyn.client.auth.authclient attribute)": [[105, "bosdyn.client.auth.AuthClient.default_service_name"]], "service_type (bosdyn.client.auth.authclient attribute)": [[105, "bosdyn.client.auth.AuthClient.service_type"]], "autoreturnclient (class in bosdyn.client.auto_return)": [[106, "bosdyn.client.auto_return.AutoReturnClient"]], "autoreturnresponseerror": [[106, "bosdyn.client.auto_return.AutoReturnResponseError"]], "invalidparametererror": [[106, "bosdyn.client.auto_return.InvalidParameterError"]], "bosdyn.client.auto_return": [[106, "module-bosdyn.client.auto_return"]], "configure() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.configure"]], "configure_async() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.configure_async"]], "configure_error() (in module bosdyn.client.auto_return)": [[106, "bosdyn.client.auto_return.configure_error"]], "default_service_name (bosdyn.client.auto_return.autoreturnclient attribute)": [[106, "bosdyn.client.auto_return.AutoReturnClient.default_service_name"]], "get_configuration() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.get_configuration"]], "get_configuration_async() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.get_configuration_async"]], "service_type (bosdyn.client.auto_return.autoreturnclient attribute)": [[106, "bosdyn.client.auto_return.AutoReturnClient.service_type"]], "start() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.start"]], "start_async() (bosdyn.client.auto_return.autoreturnclient method)": [[106, "bosdyn.client.auto_return.AutoReturnClient.start_async"]], "start_error() (in module bosdyn.client.auto_return)": [[106, "bosdyn.client.auto_return.start_error"]], "autowalkclient (class in bosdyn.client.autowalk)": [[107, "bosdyn.client.autowalk.AutowalkClient"]], "autowalkresponseerror": [[107, "bosdyn.client.autowalk.AutowalkResponseError"]], "compilationerror": [[107, "bosdyn.client.autowalk.CompilationError"], [210, "bosdyn.mission.client.CompilationError"]], "validationerror": [[107, "bosdyn.client.autowalk.ValidationError"], [210, "bosdyn.mission.client.ValidationError"], [212, "bosdyn.mission.exceptions.ValidationError"]], "bosdyn.client.autowalk": [[107, "module-bosdyn.client.autowalk"]], "compile_autowalk() (bosdyn.client.autowalk.autowalkclient method)": [[107, "bosdyn.client.autowalk.AutowalkClient.compile_autowalk"]], "default_service_name (bosdyn.client.autowalk.autowalkclient attribute)": [[107, "bosdyn.client.autowalk.AutowalkClient.default_service_name"]], "load_autowalk() (bosdyn.client.autowalk.autowalkclient method)": [[107, "bosdyn.client.autowalk.AutowalkClient.load_autowalk"]], "service_type (bosdyn.client.autowalk.autowalkclient attribute)": [[107, "bosdyn.client.autowalk.AutowalkClient.service_type"]], "update_from() (bosdyn.client.autowalk.autowalkclient method)": [[107, "bosdyn.client.autowalk.AutowalkClient.update_from"]], "bosdyn.client.bddf": [[108, "module-bosdyn.client.bddf"]], "bosdyn.client.bddf_download": [[109, "module-bosdyn.client.bddf_download"]], "download_data() (in module bosdyn.client.bddf_download)": [[109, "bosdyn.client.bddf_download.download_data"]], "main() (in module bosdyn.client.bddf_download)": [[109, "bosdyn.client.bddf_download.main"]], "refreshingaccesstokenauthmetadataplugin (class in bosdyn.client.channel)": [[110, "bosdyn.client.channel.RefreshingAccessTokenAuthMetadataPlugin"]], "bosdyn.client.channel": [[110, "module-bosdyn.client.channel"]], "create_insecure_channel() (in module bosdyn.client.channel)": [[110, "bosdyn.client.channel.create_insecure_channel"]], "create_secure_channel() (in module bosdyn.client.channel)": [[110, "bosdyn.client.channel.create_secure_channel"]], "create_secure_channel_creds() (in module bosdyn.client.channel)": [[110, "bosdyn.client.channel.create_secure_channel_creds"]], "generate_channel_options() (in module bosdyn.client.channel)": [[110, "bosdyn.client.channel.generate_channel_options"]], "translate_exception() (in module bosdyn.client.channel)": [[110, "bosdyn.client.channel.translate_exception"]], "becomeestopcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.BecomeEstopCommand"]], "command (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.Command"]], "dataacquisitioncommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataAcquisitionCommand"]], "dataacquisitiongetlivedatacommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand"]], "dataacquisitionrequestcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataAcquisitionRequestCommand"]], "dataacquisitionservicecommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataAcquisitionServiceCommand"]], "dataacquisitionstatuscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataAcquisitionStatusCommand"]], "databuffercommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataBufferCommands"]], "dataservicecommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DataServiceCommands"]], "directorycommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DirectoryCommands"]], "directorygetcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DirectoryGetCommand"]], "directorylistcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DirectoryListCommand"]], "directoryregistercommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DirectoryRegisterCommand"]], "directoryunregistercommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.DirectoryUnregisterCommand"]], "experimentlogcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.ExperimentLogCommand"]], "faultcommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.FaultCommands"]], "faultshowcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.FaultShowCommand"]], "faultwatchcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.FaultWatchCommand"]], "fullstatecommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.FullStateCommand"]], "getactivelogstatusescommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetActiveLogStatusesCommand"]], "getdatabuffercommentscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetDataBufferCommentsCommand"]], "getdatabuffereventscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetDataBufferEventsCommand"]], "getdatabuffereventscommentscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand"]], "getdatabufferstatuscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetDataBufferStatusCommand"]], "getimagecommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetImageCommand"]], "getlocalgridscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetLocalGridsCommand"]], "getlogcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.GetLogCommand"]], "hardwareconfigurationcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.HardwareConfigurationCommand"]], "hostcomputeripcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.HostComputerIPCommand"]], "imagecommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.ImageCommands"]], "leasecommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.LeaseCommands"]], "leaselistcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.LeaseListCommand"]], "licensecommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.LicenseCommand"]], "listimagesourcescommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.ListImageSourcesCommand"]], "listlocalgridtypescommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.ListLocalGridTypesCommand"]], "localgridcommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.LocalGridCommands"]], "logstatuscommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.LogStatusCommands"]], "metricscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.MetricsCommand"]], "name (bosdyn.client.command_line.becomeestopcommand attribute)": [[111, "bosdyn.client.command_line.BecomeEstopCommand.NAME"]], "name (bosdyn.client.command_line.command attribute)": [[111, "bosdyn.client.command_line.Command.NAME"]], "name (bosdyn.client.command_line.dataacquisitioncommand attribute)": [[111, "bosdyn.client.command_line.DataAcquisitionCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitiongetlivedatacommand attribute)": [[111, "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionrequestcommand attribute)": [[111, "bosdyn.client.command_line.DataAcquisitionRequestCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionservicecommand attribute)": [[111, "bosdyn.client.command_line.DataAcquisitionServiceCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionstatuscommand attribute)": [[111, "bosdyn.client.command_line.DataAcquisitionStatusCommand.NAME"]], "name (bosdyn.client.command_line.databuffercommands attribute)": [[111, "bosdyn.client.command_line.DataBufferCommands.NAME"]], "name (bosdyn.client.command_line.dataservicecommands attribute)": [[111, "bosdyn.client.command_line.DataServiceCommands.NAME"]], "name (bosdyn.client.command_line.directorycommands attribute)": [[111, "bosdyn.client.command_line.DirectoryCommands.NAME"]], "name (bosdyn.client.command_line.directorygetcommand attribute)": [[111, "bosdyn.client.command_line.DirectoryGetCommand.NAME"]], "name (bosdyn.client.command_line.directorylistcommand attribute)": [[111, "bosdyn.client.command_line.DirectoryListCommand.NAME"]], "name (bosdyn.client.command_line.directoryregistercommand attribute)": [[111, "bosdyn.client.command_line.DirectoryRegisterCommand.NAME"]], "name (bosdyn.client.command_line.directoryunregistercommand attribute)": [[111, "bosdyn.client.command_line.DirectoryUnregisterCommand.NAME"]], "name (bosdyn.client.command_line.experimentlogcommand attribute)": [[111, "bosdyn.client.command_line.ExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.faultcommands attribute)": [[111, "bosdyn.client.command_line.FaultCommands.NAME"]], "name (bosdyn.client.command_line.faultshowcommand attribute)": [[111, "bosdyn.client.command_line.FaultShowCommand.NAME"]], "name (bosdyn.client.command_line.faultwatchcommand attribute)": [[111, "bosdyn.client.command_line.FaultWatchCommand.NAME"]], "name (bosdyn.client.command_line.fullstatecommand attribute)": [[111, "bosdyn.client.command_line.FullStateCommand.NAME"]], "name (bosdyn.client.command_line.getactivelogstatusescommand attribute)": [[111, "bosdyn.client.command_line.GetActiveLogStatusesCommand.NAME"]], "name (bosdyn.client.command_line.getdatabuffercommentscommand attribute)": [[111, "bosdyn.client.command_line.GetDataBufferCommentsCommand.NAME"]], "name (bosdyn.client.command_line.getdatabuffereventscommand attribute)": [[111, "bosdyn.client.command_line.GetDataBufferEventsCommand.NAME"]], "name (bosdyn.client.command_line.getdatabufferstatuscommand attribute)": [[111, "bosdyn.client.command_line.GetDataBufferStatusCommand.NAME"]], "name (bosdyn.client.command_line.getimagecommand attribute)": [[111, "bosdyn.client.command_line.GetImageCommand.NAME"]], "name (bosdyn.client.command_line.getlocalgridscommand attribute)": [[111, "bosdyn.client.command_line.GetLocalGridsCommand.NAME"]], "name (bosdyn.client.command_line.getlogcommand attribute)": [[111, "bosdyn.client.command_line.GetLogCommand.NAME"]], "name (bosdyn.client.command_line.hardwareconfigurationcommand attribute)": [[111, "bosdyn.client.command_line.HardwareConfigurationCommand.NAME"]], "name (bosdyn.client.command_line.hostcomputeripcommand attribute)": [[111, "bosdyn.client.command_line.HostComputerIPCommand.NAME"]], "name (bosdyn.client.command_line.imagecommands attribute)": [[111, "bosdyn.client.command_line.ImageCommands.NAME"]], "name (bosdyn.client.command_line.leasecommands attribute)": [[111, "bosdyn.client.command_line.LeaseCommands.NAME"]], "name (bosdyn.client.command_line.leaselistcommand attribute)": [[111, "bosdyn.client.command_line.LeaseListCommand.NAME"]], "name (bosdyn.client.command_line.licensecommand attribute)": [[111, "bosdyn.client.command_line.LicenseCommand.NAME"]], "name (bosdyn.client.command_line.listimagesourcescommand attribute)": [[111, "bosdyn.client.command_line.ListImageSourcesCommand.NAME"]], "name (bosdyn.client.command_line.listlocalgridtypescommand attribute)": [[111, "bosdyn.client.command_line.ListLocalGridTypesCommand.NAME"]], "name (bosdyn.client.command_line.localgridcommands attribute)": [[111, "bosdyn.client.command_line.LocalGridCommands.NAME"]], "name (bosdyn.client.command_line.logstatuscommands attribute)": [[111, "bosdyn.client.command_line.LogStatusCommands.NAME"]], "name (bosdyn.client.command_line.metricscommand attribute)": [[111, "bosdyn.client.command_line.MetricsCommand.NAME"]], "name (bosdyn.client.command_line.operatorcommentcommand attribute)": [[111, "bosdyn.client.command_line.OperatorCommentCommand.NAME"]], "name (bosdyn.client.command_line.payloadcommands attribute)": [[111, "bosdyn.client.command_line.PayloadCommands.NAME"]], "name (bosdyn.client.command_line.payloadlistcommand attribute)": [[111, "bosdyn.client.command_line.PayloadListCommand.NAME"]], "name (bosdyn.client.command_line.payloadregistercommand attribute)": [[111, "bosdyn.client.command_line.PayloadRegisterCommand.NAME"]], "name (bosdyn.client.command_line.powercommand attribute)": [[111, "bosdyn.client.command_line.PowerCommand.NAME"]], "name (bosdyn.client.command_line.powerpayloadscommand attribute)": [[111, "bosdyn.client.command_line.PowerPayloadsCommand.NAME"]], "name (bosdyn.client.command_line.powerrobotcommand attribute)": [[111, "bosdyn.client.command_line.PowerRobotCommand.NAME"]], "name (bosdyn.client.command_line.powerwifiradiocommand attribute)": [[111, "bosdyn.client.command_line.PowerWifiRadioCommand.NAME"]], "name (bosdyn.client.command_line.robotidcommand attribute)": [[111, "bosdyn.client.command_line.RobotIdCommand.NAME"]], "name (bosdyn.client.command_line.robotmodel attribute)": [[111, "bosdyn.client.command_line.RobotModel.NAME"]], "name (bosdyn.client.command_line.robotstatecommands attribute)": [[111, "bosdyn.client.command_line.RobotStateCommands.NAME"]], "name (bosdyn.client.command_line.startcontinuousexperimentlogcommand attribute)": [[111, "bosdyn.client.command_line.StartContinuousExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.startretrologcommand attribute)": [[111, "bosdyn.client.command_line.StartRetroLogCommand.NAME"]], "name (bosdyn.client.command_line.starttimedexperimentlogcommand attribute)": [[111, "bosdyn.client.command_line.StartTimedExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.terminatelogcommand attribute)": [[111, "bosdyn.client.command_line.TerminateLogCommand.NAME"]], "name (bosdyn.client.command_line.textmsgcommand attribute)": [[111, "bosdyn.client.command_line.TextMsgCommand.NAME"]], "name (bosdyn.client.command_line.timesynccommand attribute)": [[111, "bosdyn.client.command_line.TimeSyncCommand.NAME"]], "need_authentication (bosdyn.client.command_line.command attribute)": [[111, "bosdyn.client.command_line.Command.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.hostcomputeripcommand attribute)": [[111, "bosdyn.client.command_line.HostComputerIPCommand.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.logstatuscommands attribute)": [[111, "bosdyn.client.command_line.LogStatusCommands.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.robotidcommand attribute)": [[111, "bosdyn.client.command_line.RobotIdCommand.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.robotmodel attribute)": [[111, "bosdyn.client.command_line.RobotModel.NEED_AUTHENTICATION"]], "operatorcommentcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.OperatorCommentCommand"]], "payloadcommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PayloadCommands"]], "payloadlistcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PayloadListCommand"]], "payloadregistercommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PayloadRegisterCommand"]], "powercommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PowerCommand"]], "powerpayloadscommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PowerPayloadsCommand"]], "powerrobotcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PowerRobotCommand"]], "powerwifiradiocommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.PowerWifiRadioCommand"]], "robotidcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.RobotIdCommand"]], "robotmodel (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.RobotModel"]], "robotstatecommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.RobotStateCommands"]], "startcontinuousexperimentlogcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.StartContinuousExperimentLogCommand"]], "startretrologcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.StartRetroLogCommand"]], "starttimedexperimentlogcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.StartTimedExperimentLogCommand"]], "subcommands (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.Subcommands"]], "terminatelogcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.TerminateLogCommand"]], "textmsgcommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.TextMsgCommand"]], "timesynccommand (class in bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.TimeSyncCommand"]], "bosdyn.client.command_line": [[111, "module-bosdyn.client.command_line"]], "handle_keyboard_interruption() (bosdyn.client.command_line.startcontinuousexperimentlogcommand static method)": [[111, "bosdyn.client.command_line.StartContinuousExperimentLogCommand.handle_keyboard_interruption"]], "main() (in module bosdyn.client.command_line)": [[111, "bosdyn.client.command_line.main"]], "pretty_print() (bosdyn.client.command_line.getdatabuffercommentscommand method)": [[111, "bosdyn.client.command_line.GetDataBufferCommentsCommand.pretty_print"]], "pretty_print() (bosdyn.client.command_line.getdatabuffereventscommand method)": [[111, "bosdyn.client.command_line.GetDataBufferEventsCommand.pretty_print"]], "pretty_print() (bosdyn.client.command_line.getdatabuffereventscommentscommand method)": [[111, "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand.pretty_print"]], "run() (bosdyn.client.command_line.command method)": [[111, "bosdyn.client.command_line.Command.run"]], "baseclient (class in bosdyn.client.common)": [[112, "bosdyn.client.common.BaseClient"]], "futurewrapper (class in bosdyn.client.common)": [[112, "bosdyn.client.common.FutureWrapper"]], "add_done_callback() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.add_done_callback"]], "bosdyn.client.common": [[112, "module-bosdyn.client.common"]], "call() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.call"]], "call_async() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.call_async"]], "cancel() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.cancel"]], "cancelled() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.cancelled"]], "channel (bosdyn.client.common.baseclient property)": [[112, "bosdyn.client.common.BaseClient.channel"]], "chunk_message() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.chunk_message"]], "common_header_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.common_header_errors"]], "common_lease_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.common_lease_errors"]], "custom_params_error() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.custom_params_error"]], "done() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.done"]], "error_factory() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.error_factory"]], "error_pair() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.error_pair"]], "exception() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.exception"]], "get_self_ip() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.get_self_ip"]], "handle_common_header_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.handle_common_header_errors"]], "handle_custom_params_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.handle_custom_params_errors"]], "handle_lease_use_result_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.handle_lease_use_result_errors"]], "handle_response() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.handle_response"]], "handle_response_streaming() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.handle_response_streaming"]], "handle_unset_status_error() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.handle_unset_status_error"]], "maybe_raise() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.maybe_raise"]], "print_response() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.print_response"]], "process_kwargs() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.process_kwargs"]], "request_trim_for_log() (bosdyn.client.common.baseclient static method)": [[112, "bosdyn.client.common.BaseClient.request_trim_for_log"]], "response_trim_for_log() (bosdyn.client.common.baseclient static method)": [[112, "bosdyn.client.common.BaseClient.response_trim_for_log"]], "result() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.result"]], "running() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.running"]], "streaming_common_header_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.streaming_common_header_errors"]], "streaming_common_lease_errors() (in module bosdyn.client.common)": [[112, "bosdyn.client.common.streaming_common_lease_errors"]], "traceback() (bosdyn.client.common.futurewrapper method)": [[112, "bosdyn.client.common.FutureWrapper.traceback"]], "update_from() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.update_from"]], "update_request_iterator() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.update_request_iterator"]], "update_response_iterator() (bosdyn.client.common.baseclient method)": [[112, "bosdyn.client.common.BaseClient.update_response_iterator"]], "cancellationfailederror": [[113, "bosdyn.client.data_acquisition.CancellationFailedError"]], "dataacquisitionclient (class in bosdyn.client.data_acquisition)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient"]], "dataacquisitionresponseerror": [[113, "bosdyn.client.data_acquisition.DataAcquisitionResponseError"]], "requestiddoesnotexisterror": [[113, "bosdyn.client.data_acquisition.RequestIdDoesNotExistError"], [146, "bosdyn.client.log_status.RequestIdDoesNotExistError"]], "unknowncapturetypeerror": [[113, "bosdyn.client.data_acquisition.UnknownCaptureTypeError"]], "acquire_data() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data"]], "acquire_data_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_async"]], "acquire_data_error() (in module bosdyn.client.data_acquisition)": [[113, "bosdyn.client.data_acquisition.acquire_data_error"]], "acquire_data_from_request() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_from_request"]], "acquire_data_from_request_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_from_request_async"]], "bosdyn.client.data_acquisition": [[113, "module-bosdyn.client.data_acquisition"]], "cancel_acquisition() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.cancel_acquisition"]], "cancel_acquisition_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.cancel_acquisition_async"]], "default_service_name (bosdyn.client.data_acquisition.dataacquisitionclient attribute)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.default_service_name"]], "get_live_data() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_live_data"]], "get_live_data_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_live_data_async"]], "get_request_id() (in module bosdyn.client.data_acquisition)": [[113, "bosdyn.client.data_acquisition.get_request_id"]], "get_service_info() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_service_info"]], "get_service_info_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_service_info_async"]], "get_status() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_status"]], "get_status_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_status_async"]], "make_acquire_data_request() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.make_acquire_data_request"]], "metadata_to_proto() (in module bosdyn.client.data_acquisition)": [[113, "bosdyn.client.data_acquisition.metadata_to_proto"]], "service_type (bosdyn.client.data_acquisition.dataacquisitionclient attribute)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.service_type"]], "update_from() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[113, "bosdyn.client.data_acquisition.DataAcquisitionClient.update_from"]], "acquire_and_process_request() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.acquire_and_process_request"]], "bosdyn.client.data_acquisition_helpers": [[114, "module-bosdyn.client.data_acquisition_helpers"]], "cancel_acquisition_request() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.cancel_acquisition_request"]], "clean_filename() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.clean_filename"]], "download_data_rest() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.download_data_REST"]], "issue_acquire_data_request() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.issue_acquire_data_request"]], "make_time_query_params() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.make_time_query_params"]], "make_time_query_params_from_group_name() (in module bosdyn.client.data_acquisition_helpers)": [[114, "bosdyn.client.data_acquisition_helpers.make_time_query_params_from_group_name"]], "dataacquisitionpluginclient (class in bosdyn.client.data_acquisition_plugin)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient"]], "acquire_plugin_data() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.acquire_plugin_data"]], "acquire_plugin_data_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.acquire_plugin_data_async"]], "bosdyn.client.data_acquisition_plugin": [[115, "module-bosdyn.client.data_acquisition_plugin"]], "cancel_acquisition() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.cancel_acquisition"]], "cancel_acquisition_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.cancel_acquisition_async"]], "default_service_name (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient attribute)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.default_service_name"]], "get_live_data() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_live_data"]], "get_live_data_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_live_data_async"]], "get_service_info() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_service_info"]], "get_service_info_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_service_info_async"]], "get_status() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_status"]], "get_status_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_status_async"]], "service_type (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient attribute)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.service_type"]], "update_from() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[115, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.update_from"]], "acquireplugindata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.AcquirePluginData"]], "cancelacquisition() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.CancelAcquisition"]], "dataacquisitionpluginservice (class in bosdyn.client.data_acquisition_plugin_service)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService"]], "dataacquisitionstorehelper (class in bosdyn.client.data_acquisition_plugin_service)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper"]], "getlivedata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetLiveData"]], "getserviceinfo() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetServiceInfo"]], "getstatus() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetStatus"]], "requestcancellederror": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestCancelledError"]], "requestmanager (class in bosdyn.client.data_acquisition_plugin_service)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager"]], "requeststate (class in bosdyn.client.data_acquisition_plugin_service)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState"]], "acquire_response_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.acquire_response_fn"]], "add_errors() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.add_errors"]], "add_request() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.add_request"]], "add_saved() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.add_saved"]], "bosdyn.client.data_acquisition_plugin_service": [[116, "module-bosdyn.client.data_acquisition_plugin_service"]], "cancel_check() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.cancel_check"]], "cancel_check() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.cancel_check"]], "cancel_interval (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.cancel_interval"]], "capabilities (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.capabilities"]], "cleanup_requests() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.cleanup_requests"]], "data_collect_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.data_collect_fn"]], "data_id_future_pairs (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.data_id_future_pairs"]], "executor (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.executor"]], "get_request_state() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.get_request_state"]], "get_status_proto() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.get_status_proto"]], "has_data_errors() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.has_data_errors"]], "is_cancelled() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.is_cancelled"]], "knonerror (bosdyn.client.data_acquisition_plugin_service.requeststate attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.kNonError"]], "live_response_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.live_response_fn"]], "logger (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.logger"]], "make_error() (in module bosdyn.client.data_acquisition_plugin_service)": [[116, "bosdyn.client.data_acquisition_plugin_service.make_error"]], "mark_request_cancelled() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.mark_request_cancelled"]], "mark_request_finished() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestManager.mark_request_finished"]], "request_manager (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.request_manager"]], "robot (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.robot"]], "service_type (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.service_type"]], "set_complete_if_no_error() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.set_complete_if_no_error"]], "set_status() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[116, "bosdyn.client.data_acquisition_plugin_service.RequestState.set_status"]], "state (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.state"]], "store_client (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.store_client"]], "store_client (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_client"]], "store_data() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_data"]], "store_image() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_image"]], "store_metadata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_metadata"]], "validate_params() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.validate_params"]], "wait_for_stores_complete() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[116, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.wait_for_stores_complete"]], "dataacquisitionstoreclient (class in bosdyn.client.data_acquisition_store)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient"]], "bosdyn.client.data_acquisition_store": [[117, "module-bosdyn.client.data_acquisition_store"]], "default_service_name (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient attribute)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.default_service_name"]], "list_capture_actions() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_capture_actions"]], "list_capture_actions_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_capture_actions_async"]], "list_stored_alertdata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_alertdata"]], "list_stored_alertdata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_alertdata_async"]], "list_stored_data() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_data"]], "list_stored_data_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_data_async"]], "list_stored_images() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_images"]], "list_stored_images_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_images_async"]], "list_stored_metadata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_metadata"]], "list_stored_metadata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_metadata_async"]], "query_max_capture_id() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_max_capture_id"]], "query_max_capture_id_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_max_capture_id_async"]], "query_stored_captures() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_stored_captures"]], "service_type (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient attribute)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.service_type"]], "store_alertdata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_alertdata"]], "store_alertdata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_alertdata_async"]], "store_data() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data"]], "store_data_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data_async"]], "store_image() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_image"]], "store_image_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_image_async"]], "store_metadata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_metadata"]], "store_metadata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_metadata_async"]], "update_from() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[117, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.update_from"]], "databufferclient (class in bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.DataBufferClient"]], "invalidargument": [[118, "bosdyn.client.data_buffer.InvalidArgument"], [120, "bosdyn.client.data_service.InvalidArgument"]], "logginghandler (class in bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.LoggingHandler"]], "add_blob() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_blob"]], "add_blob_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_blob_async"]], "add_events() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_events"]], "add_events_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_events_async"]], "add_operator_comment() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_operator_comment"]], "add_operator_comment_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_operator_comment_async"]], "add_protobuf() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_protobuf"]], "add_protobuf_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_protobuf_async"]], "add_signal_tick() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_signal_tick"]], "add_signal_tick_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_signal_tick_async"]], "add_text_messages() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_text_messages"]], "add_text_messages_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.add_text_messages_async"]], "bosdyn.client.data_buffer": [[118, "module-bosdyn.client.data_buffer"]], "close() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.close"]], "default_service_name (bosdyn.client.data_buffer.databufferclient attribute)": [[118, "bosdyn.client.data_buffer.DataBufferClient.default_service_name"]], "emit() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.emit"]], "fallback_log() (bosdyn.client.data_buffer.logginghandler static method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.fallback_log"]], "flush() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.flush"]], "is_not_rpc() (in module bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.is_not_rpc"]], "is_not_text_log() (in module bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.is_not_text_log"]], "is_thread_alive() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.is_thread_alive"]], "log_event() (in module bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.log_event"]], "make_parameter() (in module bosdyn.client.data_buffer)": [[118, "bosdyn.client.data_buffer.make_parameter"]], "now_in_robot_basis() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.now_in_robot_basis"]], "record_level_to_proto_level() (bosdyn.client.data_buffer.logginghandler static method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.record_level_to_proto_level"]], "record_to_msg() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.record_to_msg"]], "register_signal_schema() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.register_signal_schema"]], "register_signal_schema_async() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.register_signal_schema_async"]], "restart() (bosdyn.client.data_buffer.logginghandler method)": [[118, "bosdyn.client.data_buffer.LoggingHandler.restart"]], "service_type (bosdyn.client.data_buffer.databufferclient attribute)": [[118, "bosdyn.client.data_buffer.DataBufferClient.service_type"]], "update_from() (bosdyn.client.data_buffer.databufferclient method)": [[118, "bosdyn.client.data_buffer.DataBufferClient.update_from"]], "bosdyn.client.data_chunk": [[119, "module-bosdyn.client.data_chunk"]], "chunk_message() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.chunk_message"]], "chunk_serialized() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.chunk_serialized"]], "parse_from_chunks() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.parse_from_chunks"]], "serialized_from_chunks() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.serialized_from_chunks"]], "serialized_from_messages() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.serialized_from_messages"]], "serialized_from_strings() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.serialized_from_strings"]], "split_serialized() (in module bosdyn.client.data_chunk)": [[119, "bosdyn.client.data_chunk.split_serialized"]], "dataserviceclient (class in bosdyn.client.data_service)": [[120, "bosdyn.client.data_service.DataServiceClient"]], "bosdyn.client.data_service": [[120, "module-bosdyn.client.data_service"]], "default_service_name (bosdyn.client.data_service.dataserviceclient attribute)": [[120, "bosdyn.client.data_service.DataServiceClient.default_service_name"]], "delete_data_pages() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.delete_data_pages"]], "delete_data_pages_async() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.delete_data_pages_async"]], "get_data_buffer_status() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_buffer_status"]], "get_data_buffer_status_async() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_buffer_status_async"]], "get_data_index() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_index"]], "get_data_index_async() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_index_async"]], "get_data_pages() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_pages"]], "get_data_pages_async() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_data_pages_async"]], "get_events_comments() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_events_comments"]], "get_events_comments_async() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.get_events_comments_async"]], "service_type (bosdyn.client.data_service.dataserviceclient attribute)": [[120, "bosdyn.client.data_service.DataServiceClient.service_type"]], "update_from() (bosdyn.client.data_service.dataserviceclient method)": [[120, "bosdyn.client.data_service.DataServiceClient.update_from"]], "directoryclient (class in bosdyn.client.directory)": [[121, "bosdyn.client.directory.DirectoryClient"]], "directoryresponseerror": [[121, "bosdyn.client.directory.DirectoryResponseError"]], "nonexistentserviceerror": [[121, "bosdyn.client.directory.NonexistentServiceError"]], "bosdyn.client.directory": [[121, "module-bosdyn.client.directory"]], "default_service_name (bosdyn.client.directory.directoryclient attribute)": [[121, "bosdyn.client.directory.DirectoryClient.default_service_name"]], "get_entry() (bosdyn.client.directory.directoryclient method)": [[121, "bosdyn.client.directory.DirectoryClient.get_entry"]], "get_entry_async() (bosdyn.client.directory.directoryclient method)": [[121, "bosdyn.client.directory.DirectoryClient.get_entry_async"]], "list() (bosdyn.client.directory.directoryclient method)": [[121, "bosdyn.client.directory.DirectoryClient.list"]], "list_async() (bosdyn.client.directory.directoryclient method)": [[121, "bosdyn.client.directory.DirectoryClient.list_async"]], "service_type (bosdyn.client.directory.directoryclient attribute)": [[121, "bosdyn.client.directory.DirectoryClient.service_type"]], "directoryregistrationclient (class in bosdyn.client.directory_registration)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient"]], "directoryregistrationkeepalive (class in bosdyn.client.directory_registration)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive"]], "directoryregistrationresponseerror": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationResponseError"]], "servicealreadyexistserror": [[122, "bosdyn.client.directory_registration.ServiceAlreadyExistsError"]], "servicedoesnotexisterror": [[122, "bosdyn.client.directory_registration.ServiceDoesNotExistError"]], "bosdyn.client.directory_registration": [[122, "module-bosdyn.client.directory_registration"]], "default_service_name (bosdyn.client.directory_registration.directoryregistrationclient attribute)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient.default_service_name"]], "is_alive() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.is_alive"]], "register() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient.register"]], "reset_service_registration() (in module bosdyn.client.directory_registration)": [[122, "bosdyn.client.directory_registration.reset_service_registration"]], "service_type (bosdyn.client.directory_registration.directoryregistrationclient attribute)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient.service_type"]], "shutdown() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.shutdown"]], "start() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.start"]], "unregister() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient.unregister"]], "unregister() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.unregister"]], "update() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[122, "bosdyn.client.directory_registration.DirectoryRegistrationClient.update"]], "dockingclient (class in bosdyn.client.docking)": [[123, "bosdyn.client.docking.DockingClient"]], "blocking_dock_robot() (in module bosdyn.client.docking)": [[123, "bosdyn.client.docking.blocking_dock_robot"]], "blocking_go_to_prep_pose() (in module bosdyn.client.docking)": [[123, "bosdyn.client.docking.blocking_go_to_prep_pose"]], "blocking_undock() (in module bosdyn.client.docking)": [[123, "bosdyn.client.docking.blocking_undock"]], "bosdyn.client.docking": [[123, "module-bosdyn.client.docking"]], "default_service_name (bosdyn.client.docking.dockingclient attribute)": [[123, "bosdyn.client.docking.DockingClient.default_service_name"]], "docking_command() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command"]], "docking_command_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_async"]], "docking_command_feedback() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_feedback"]], "docking_command_feedback_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_feedback_async"]], "docking_command_feedback_full() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_feedback_full"]], "docking_command_feedback_full_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_feedback_full_async"]], "docking_command_full() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_full"]], "docking_command_full_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.docking_command_full_async"]], "get_dock_id() (in module bosdyn.client.docking)": [[123, "bosdyn.client.docking.get_dock_id"]], "get_docking_config() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.get_docking_config"]], "get_docking_config_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.get_docking_config_async"]], "get_docking_state() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.get_docking_state"]], "get_docking_state_async() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.get_docking_state_async"]], "service_type (bosdyn.client.docking.dockingclient attribute)": [[123, "bosdyn.client.docking.DockingClient.service_type"]], "update_from() (bosdyn.client.docking.dockingclient method)": [[123, "bosdyn.client.docking.DockingClient.update_from"]], "doorclient (class in bosdyn.client.door)": [[124, "bosdyn.client.door.DoorClient"]], "bosdyn.client.door": [[124, "module-bosdyn.client.door"]], "default_service_name (bosdyn.client.door.doorclient attribute)": [[124, "bosdyn.client.door.DoorClient.default_service_name"]], "open_door() (bosdyn.client.door.doorclient method)": [[124, "bosdyn.client.door.DoorClient.open_door"]], "open_door_async() (bosdyn.client.door.doorclient method)": [[124, "bosdyn.client.door.DoorClient.open_door_async"]], "open_door_feedback() (bosdyn.client.door.doorclient method)": [[124, "bosdyn.client.door.DoorClient.open_door_feedback"]], "open_door_feedback_async() (bosdyn.client.door.doorclient method)": [[124, "bosdyn.client.door.DoorClient.open_door_feedback_async"]], "service_type (bosdyn.client.door.doorclient attribute)": [[124, "bosdyn.client.door.DoorClient.service_type"]], "update_from() (bosdyn.client.door.doorclient method)": [[124, "bosdyn.client.door.DoorClient.update_from"]], "configmismatcherror": [[125, "bosdyn.client.estop.ConfigMismatchError"]], "disabled (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[125, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.DISABLED"]], "error (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[125, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.ERROR"]], "estop_level_cut (bosdyn.client.estop.stoplevel attribute)": [[125, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_CUT"]], "estop_level_none (bosdyn.client.estop.stoplevel attribute)": [[125, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_NONE"]], "estop_level_settle_then_cut (bosdyn.client.estop.stoplevel attribute)": [[125, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_SETTLE_THEN_CUT"]], "estop_level_unknown (bosdyn.client.estop.stoplevel attribute)": [[125, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_UNKNOWN"]], "endpointmismatcherror": [[125, "bosdyn.client.estop.EndpointMismatchError"]], "endpointunknownerror": [[125, "bosdyn.client.estop.EndpointUnknownError"]], "estopclient (class in bosdyn.client.estop)": [[125, "bosdyn.client.estop.EstopClient"]], "estopendpoint (class in bosdyn.client.estop)": [[125, "bosdyn.client.estop.EstopEndpoint"]], "estopkeepalive (class in bosdyn.client.estop)": [[125, "bosdyn.client.estop.EstopKeepAlive"]], "estopkeepalive.keepalivestatus (class in bosdyn.client.estop)": [[125, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus"]], "estopresponseerror": [[125, "bosdyn.client.estop.EstopResponseError"]], "incorrectchallengeresponseerror": [[125, "bosdyn.client.estop.IncorrectChallengeResponseError"]], "invalidendpointerror": [[125, "bosdyn.client.estop.InvalidEndpointError"]], "invalididerror": [[125, "bosdyn.client.estop.InvalidIdError"]], "motorsonerror": [[125, "bosdyn.client.estop.MotorsOnError"]], "ok (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[125, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.OK"]], "required_role (bosdyn.client.estop.estopendpoint attribute)": [[125, "bosdyn.client.estop.EstopEndpoint.REQUIRED_ROLE"]], "stoplevel (class in bosdyn.client.estop)": [[125, "bosdyn.client.estop.StopLevel"]], "allow() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.allow"]], "allow() (bosdyn.client.estop.estopkeepalive method)": [[125, "bosdyn.client.estop.EstopKeepAlive.allow"]], "allow_async() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.allow_async"]], "bosdyn.client.estop": [[125, "module-bosdyn.client.estop"]], "check_in() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.check_in"]], "check_in_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.check_in_async"]], "check_in_at_level() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.check_in_at_level"]], "check_in_at_level_async() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.check_in_at_level_async"]], "client (bosdyn.client.estop.estopkeepalive property)": [[125, "bosdyn.client.estop.EstopKeepAlive.client"]], "default_service_name (bosdyn.client.estop.estopclient attribute)": [[125, "bosdyn.client.estop.EstopClient.default_service_name"]], "deregister() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.deregister"]], "deregister() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.deregister"]], "deregister_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.deregister_async"]], "deregister_async() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.deregister_async"]], "endpoint (bosdyn.client.estop.estopkeepalive property)": [[125, "bosdyn.client.estop.EstopKeepAlive.endpoint"]], "force_simple_setup() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.force_simple_setup"]], "from_proto() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.from_proto"]], "get_challenge() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.get_challenge"]], "get_config() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.get_config"]], "get_config_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.get_config_async"]], "get_status() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.get_status"]], "get_status_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.get_status_async"]], "is_estopped() (in module bosdyn.client.estop)": [[125, "bosdyn.client.estop.is_estopped"]], "last_set_level (bosdyn.client.estop.estopendpoint property)": [[125, "bosdyn.client.estop.EstopEndpoint.last_set_level"]], "last_set_level (bosdyn.client.estop.estopkeepalive property)": [[125, "bosdyn.client.estop.EstopKeepAlive.last_set_level"]], "logger (bosdyn.client.estop.estopkeepalive property)": [[125, "bosdyn.client.estop.EstopKeepAlive.logger"]], "register() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.register"]], "register() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.register"]], "register_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.register_async"]], "response_from_challenge() (in module bosdyn.client.estop)": [[125, "bosdyn.client.estop.response_from_challenge"]], "service_type (bosdyn.client.estop.estopclient attribute)": [[125, "bosdyn.client.estop.EstopClient.service_type"]], "set_challenge() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.set_challenge"]], "set_config() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.set_config"]], "set_config_async() (bosdyn.client.estop.estopclient method)": [[125, "bosdyn.client.estop.EstopClient.set_config_async"]], "settle_then_cut() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.settle_then_cut"]], "settle_then_cut() (bosdyn.client.estop.estopkeepalive method)": [[125, "bosdyn.client.estop.EstopKeepAlive.settle_then_cut"]], "settle_then_cut_async() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.settle_then_cut_async"]], "shutdown() (bosdyn.client.estop.estopkeepalive method)": [[125, "bosdyn.client.estop.EstopKeepAlive.shutdown"]], "stop() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.stop"]], "stop() (bosdyn.client.estop.estopkeepalive method)": [[125, "bosdyn.client.estop.EstopKeepAlive.stop"]], "stop_async() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.stop_async"]], "to_proto() (bosdyn.client.estop.estopendpoint method)": [[125, "bosdyn.client.estop.EstopEndpoint.to_proto"]], "unique_id (bosdyn.client.estop.estopendpoint property)": [[125, "bosdyn.client.estop.EstopEndpoint.unique_id"]], "clientcancelledoperationerror": [[126, "bosdyn.client.exceptions.ClientCancelledOperationError"]], "customparamerror": [[126, "bosdyn.client.exceptions.CustomParamError"]], "error": [[126, "bosdyn.client.exceptions.Error"], [128, "bosdyn.client.frame_helpers.Error"], [141, "bosdyn.client.lease.Error"], [160, "bosdyn.client.robot_command.Error"], [212, "bosdyn.mission.exceptions.Error"], [213, "bosdyn.mission.remote_client.Error"], [215, "bosdyn.mission.util.Error"], [218, "bosdyn.orbit.exceptions.Error"]], "internalservererror": [[126, "bosdyn.client.exceptions.InternalServerError"]], "invalidclientcertificateerror": [[126, "bosdyn.client.exceptions.InvalidClientCertificateError"]], "invalidrequesterror": [[126, "bosdyn.client.exceptions.InvalidRequestError"], [157, "bosdyn.client.ray_cast.InvalidRequestError"]], "leaseuseerror": [[126, "bosdyn.client.exceptions.LeaseUseError"]], "licenseerror": [[126, "bosdyn.client.exceptions.LicenseError"]], "nonexistentauthorityerror": [[126, "bosdyn.client.exceptions.NonexistentAuthorityError"]], "notfounderror": [[126, "bosdyn.client.exceptions.NotFoundError"]], "permissiondeniederror": [[126, "bosdyn.client.exceptions.PermissionDeniedError"]], "persistentrpcerror": [[126, "bosdyn.client.exceptions.PersistentRpcError"]], "proxyconnectionerror": [[126, "bosdyn.client.exceptions.ProxyConnectionError"]], "responseerror": [[126, "bosdyn.client.exceptions.ResponseError"]], "responsetoolargeerror": [[126, "bosdyn.client.exceptions.ResponseTooLargeError"]], "retryablerpcerror": [[126, "bosdyn.client.exceptions.RetryableRpcError"]], "retryableunavailableerror": [[126, "bosdyn.client.exceptions.RetryableUnavailableError"]], "rpcerror": [[126, "bosdyn.client.exceptions.RpcError"]], "servererror": [[126, "bosdyn.client.exceptions.ServerError"]], "servicefailedduringexecutionerror": [[126, "bosdyn.client.exceptions.ServiceFailedDuringExecutionError"]], "serviceunavailableerror": [[126, "bosdyn.client.exceptions.ServiceUnavailableError"]], "timesyncrequired": [[126, "bosdyn.client.exceptions.TimeSyncRequired"]], "timedouterror": [[126, "bosdyn.client.exceptions.TimedOutError"], [180, "bosdyn.client.time_sync.TimedOutError"]], "toomanyrequestserror": [[126, "bosdyn.client.exceptions.TooManyRequestsError"]], "transientfailureerror": [[126, "bosdyn.client.exceptions.TransientFailureError"]], "unabletoconnecttoroboterror": [[126, "bosdyn.client.exceptions.UnableToConnectToRobotError"]], "unauthenticatederror": [[126, "bosdyn.client.exceptions.UnauthenticatedError"]], "unimplementederror": [[126, "bosdyn.client.exceptions.UnimplementedError"]], "unknowndnsnameerror": [[126, "bosdyn.client.exceptions.UnknownDnsNameError"]], "unsetstatuserror": [[126, "bosdyn.client.exceptions.UnsetStatusError"]], "bosdyn.client.exceptions": [[126, "module-bosdyn.client.exceptions"]], "faultclient (class in bosdyn.client.fault)": [[127, "bosdyn.client.fault.FaultClient"]], "faultresponseerror": [[127, "bosdyn.client.fault.FaultResponseError"]], "servicefaultalreadyexistserror": [[127, "bosdyn.client.fault.ServiceFaultAlreadyExistsError"]], "servicefaultdoesnotexisterror": [[127, "bosdyn.client.fault.ServiceFaultDoesNotExistError"]], "bosdyn.client.fault": [[127, "module-bosdyn.client.fault"]], "clear_service_fault() (bosdyn.client.fault.faultclient method)": [[127, "bosdyn.client.fault.FaultClient.clear_service_fault"]], "clear_service_fault_async() (bosdyn.client.fault.faultclient method)": [[127, "bosdyn.client.fault.FaultClient.clear_service_fault_async"]], "default_service_name (bosdyn.client.fault.faultclient attribute)": [[127, "bosdyn.client.fault.FaultClient.default_service_name"]], "service_type (bosdyn.client.fault.faultclient attribute)": [[127, "bosdyn.client.fault.FaultClient.service_type"]], "trigger_service_fault() (bosdyn.client.fault.faultclient method)": [[127, "bosdyn.client.fault.FaultClient.trigger_service_fault"]], "trigger_service_fault_async() (bosdyn.client.fault.faultclient method)": [[127, "bosdyn.client.fault.FaultClient.trigger_service_fault_async"]], "childframeintree": [[128, "bosdyn.client.frame_helpers.ChildFrameInTree"]], "generatetreeerror": [[128, "bosdyn.client.frame_helpers.GenerateTreeError"]], "validateframetreecycleerror": [[128, "bosdyn.client.frame_helpers.ValidateFrameTreeCycleError"]], "validateframetreedisjointerror": [[128, "bosdyn.client.frame_helpers.ValidateFrameTreeDisjointError"]], "validateframetreeerror": [[128, "bosdyn.client.frame_helpers.ValidateFrameTreeError"]], "validateframetreeunknownframeerror": [[128, "bosdyn.client.frame_helpers.ValidateFrameTreeUnknownFrameError"]], "add_edge_to_tree() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.add_edge_to_tree"]], "bosdyn.client.frame_helpers": [[128, "module-bosdyn.client.frame_helpers"]], "express_se2_velocity_in_new_frame() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.express_se2_velocity_in_new_frame"]], "express_se3_velocity_in_new_frame() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.express_se3_velocity_in_new_frame"]], "get_a_tform_b() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.get_a_tform_b"]], "get_frame_names() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.get_frame_names"]], "get_odom_tform_body() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.get_odom_tform_body"]], "get_se2_a_tform_b() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.get_se2_a_tform_b"]], "get_vision_tform_body() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.get_vision_tform_body"]], "is_gravity_aligned_frame_name() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.is_gravity_aligned_frame_name"]], "validate_frame_tree_snapshot() (in module bosdyn.client.frame_helpers)": [[128, "bosdyn.client.frame_helpers.validate_frame_tree_snapshot"]], "log_throttle_time (bosdyn.client.gps.nmeaparser.nmeaparser attribute)": [[129, "bosdyn.client.gps.NMEAParser.NMEAParser.LOG_THROTTLE_TIME"]], "nmeaparser (class in bosdyn.client.gps.nmeaparser)": [[129, "bosdyn.client.gps.NMEAParser.NMEAParser"]], "bosdyn.client.gps.nmeaparser": [[129, "module-bosdyn.client.gps.NMEAParser"]], "nmea_message_group_to_gps_data_point() (bosdyn.client.gps.nmeaparser.nmeaparser method)": [[129, "bosdyn.client.gps.NMEAParser.NMEAParser.nmea_message_group_to_gps_data_point"]], "parse() (bosdyn.client.gps.nmeaparser.nmeaparser method)": [[129, "bosdyn.client.gps.NMEAParser.NMEAParser.parse"]], "aggregatorclient (class in bosdyn.client.gps.aggregator_client)": [[131, "bosdyn.client.gps.aggregator_client.AggregatorClient"]], "bosdyn.client.gps.aggregator_client": [[131, "module-bosdyn.client.gps.aggregator_client"]], "default_service_name (bosdyn.client.gps.aggregator_client.aggregatorclient attribute)": [[131, "bosdyn.client.gps.aggregator_client.AggregatorClient.default_service_name"]], "new_gps_data() (bosdyn.client.gps.aggregator_client.aggregatorclient method)": [[131, "bosdyn.client.gps.aggregator_client.AggregatorClient.new_gps_data"]], "new_gps_data_async() (bosdyn.client.gps.aggregator_client.aggregatorclient method)": [[131, "bosdyn.client.gps.aggregator_client.AggregatorClient.new_gps_data_async"]], "service_type (bosdyn.client.gps.aggregator_client.aggregatorclient attribute)": [[131, "bosdyn.client.gps.aggregator_client.AggregatorClient.service_type"]], "gpslistener (class in bosdyn.client.gps.gps_listener)": [[132, "bosdyn.client.gps.gps_listener.GpsListener"]], "log_throttle_time (bosdyn.client.gps.gps_listener.nmeastreamreader attribute)": [[132, "bosdyn.client.gps.gps_listener.NMEAStreamReader.LOG_THROTTLE_TIME"]], "nmeastreamreader (class in bosdyn.client.gps.gps_listener)": [[132, "bosdyn.client.gps.gps_listener.NMEAStreamReader"]], "bosdyn.client.gps.gps_listener": [[132, "module-bosdyn.client.gps.gps_listener"]], "read_data() (bosdyn.client.gps.gps_listener.nmeastreamreader method)": [[132, "bosdyn.client.gps.gps_listener.NMEAStreamReader.read_data"]], "run() (bosdyn.client.gps.gps_listener.gpslistener method)": [[132, "bosdyn.client.gps.gps_listener.GpsListener.run"]], "registrationclient (class in bosdyn.client.gps.registration_client)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient"]], "bosdyn.client.gps.registration_client": [[133, "module-bosdyn.client.gps.registration_client"]], "default_service_name (bosdyn.client.gps.registration_client.registrationclient attribute)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.default_service_name"]], "get_location() (bosdyn.client.gps.registration_client.registrationclient method)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.get_location"]], "get_location_async() (bosdyn.client.gps.registration_client.registrationclient method)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.get_location_async"]], "reset_registration() (bosdyn.client.gps.registration_client.registrationclient method)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.reset_registration"]], "reset_registration_async() (bosdyn.client.gps.registration_client.registrationclient method)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.reset_registration_async"]], "service_type (bosdyn.client.gps.registration_client.registrationclient attribute)": [[133, "bosdyn.client.gps.registration_client.RegistrationClient.service_type"]], "areacallbackmaperror": [[134, "bosdyn.client.graph_nav.AreaCallbackMapError"]], "cannotmodifymapduringrecordingerror": [[134, "bosdyn.client.graph_nav.CannotModifyMapDuringRecordingError"]], "commandexpirederror": [[134, "bosdyn.client.graph_nav.CommandExpiredError"]], "constraintfaulterror": [[134, "bosdyn.client.graph_nav.ConstraintFaultError"]], "featuredeserterror": [[134, "bosdyn.client.graph_nav.FeatureDesertError"]], "graphnavclient (class in bosdyn.client.graph_nav)": [[134, "bosdyn.client.graph_nav.GraphNavClient"]], "graphnavserviceresponseerror": [[134, "bosdyn.client.graph_nav.GraphNavServiceResponseError"]], "incompatiblesensorserror": [[134, "bosdyn.client.graph_nav.IncompatibleSensorsError"]], "invalidedgeerror": [[134, "bosdyn.client.graph_nav.InvalidEdgeError"]], "invalidgpserror": [[134, "bosdyn.client.graph_nav.InvalidGPSError"]], "invalidgrapherror": [[134, "bosdyn.client.graph_nav.InvalidGraphError"], [148, "bosdyn.client.map_processing.InvalidGraphError"]], "invalidposeerror": [[134, "bosdyn.client.graph_nav.InvalidPoseError"]], "isrecordingerror": [[134, "bosdyn.client.graph_nav.IsRecordingError"]], "maptoolargelicenseerror": [[134, "bosdyn.client.graph_nav.MapTooLargeLicenseError"], [158, "bosdyn.client.recording.MapTooLargeLicenseError"]], "noanchoringerror": [[134, "bosdyn.client.graph_nav.NoAnchoringError"]], "nopatherror": [[134, "bosdyn.client.graph_nav.NoPathError"]], "notimesyncerror": [[134, "bosdyn.client.graph_nav.NoTimeSyncError"], [160, "bosdyn.client.robot_command.NoTimeSyncError"]], "requestabortederror": [[134, "bosdyn.client.graph_nav.RequestAbortedError"]], "requestfailederror": [[134, "bosdyn.client.graph_nav.RequestFailedError"]], "robotfaultederror": [[134, "bosdyn.client.graph_nav.RobotFaultedError"]], "robotimpairederror": [[134, "bosdyn.client.graph_nav.RobotImpairedError"], [158, "bosdyn.client.recording.RobotImpairedError"]], "robotlosterror": [[134, "bosdyn.client.graph_nav.RobotLostError"]], "robotnotlocalizedtorouteerror": [[134, "bosdyn.client.graph_nav.RobotNotLocalizedToRouteError"]], "robotstateerror": [[134, "bosdyn.client.graph_nav.RobotStateError"]], "robotstuckerror": [[134, "bosdyn.client.graph_nav.RobotStuckError"]], "routeerror": [[134, "bosdyn.client.graph_nav.RouteError"]], "routenavigationerror": [[134, "bosdyn.client.graph_nav.RouteNavigationError"]], "routenotupdatingerror": [[134, "bosdyn.client.graph_nav.RouteNotUpdatingError"]], "timeerror": [[134, "bosdyn.client.graph_nav.TimeError"]], "toodistanterror": [[134, "bosdyn.client.graph_nav.TooDistantError"], [160, "bosdyn.client.robot_command.TooDistantError"]], "unknownmapinformationerror": [[134, "bosdyn.client.graph_nav.UnknownMapInformationError"]], "unknownrouteelementserror": [[134, "bosdyn.client.graph_nav.UnknownRouteElementsError"]], "unknownwaypointerror": [[134, "bosdyn.client.graph_nav.UnknownWaypointError"], [158, "bosdyn.client.recording.UnknownWaypointError"]], "unkownrouteelementserror": [[134, "bosdyn.client.graph_nav.UnkownRouteElementsError"]], "unrecognizedcommanderror": [[134, "bosdyn.client.graph_nav.UnrecognizedCommandError"]], "unrecongizedcommanderror": [[134, "bosdyn.client.graph_nav.UnrecongizedCommandError"]], "uploadgrapherror": [[134, "bosdyn.client.graph_nav.UploadGraphError"]], "uploadwaypointsnapshoterror": [[134, "bosdyn.client.graph_nav.UploadWaypointSnapshotError"]], "bosdyn.client.graph_nav": [[134, "module-bosdyn.client.graph_nav"]], "build_route() (bosdyn.client.graph_nav.graphnavclient static method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.build_route"]], "clear_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.clear_graph"]], "clear_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.clear_graph_async"]], "default_service_name (bosdyn.client.graph_nav.graphnavclient attribute)": [[134, "bosdyn.client.graph_nav.GraphNavClient.default_service_name"]], "download_edge_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.download_edge_snapshot"]], "download_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.download_graph"]], "download_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.download_graph_async"]], "download_waypoint_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.download_waypoint_snapshot"]], "generate_travel_params() (bosdyn.client.graph_nav.graphnavclient static method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.generate_travel_params"]], "get_localization_state() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.get_localization_state"]], "get_localization_state_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.get_localization_state_async"]], "navigate_route() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_route"]], "navigate_route_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_async"]], "navigate_route_full() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_full"]], "navigate_route_full_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_full_async"]], "navigate_to() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to"]], "navigate_to_anchor() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_anchor"]], "navigate_to_anchor_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_anchor_async"]], "navigate_to_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_async"]], "navigate_to_full() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_full"]], "navigate_to_full_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_full_async"]], "navigation_feedback() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigation_feedback"]], "navigation_feedback_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.navigation_feedback_async"]], "service_type (bosdyn.client.graph_nav.graphnavclient attribute)": [[134, "bosdyn.client.graph_nav.GraphNavClient.service_type"]], "set_localization() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.set_localization"]], "set_localization_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.set_localization_async"]], "set_localization_async_full_response() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.set_localization_async_full_response"]], "set_localization_full_response() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.set_localization_full_response"]], "update_from() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.update_from"]], "upload_edge_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.upload_edge_snapshot"]], "upload_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.upload_graph"]], "upload_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.upload_graph_async"]], "upload_waypoint_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.upload_waypoint_snapshot"]], "write_graph_and_snapshots() (bosdyn.client.graph_nav.graphnavclient method)": [[134, "bosdyn.client.graph_nav.GraphNavClient.write_graph_and_snapshots"]], "grippercameraparamclient (class in bosdyn.client.gripper_camera_param)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient"]], "bosdyn.client.gripper_camera_param": [[135, "module-bosdyn.client.gripper_camera_param"]], "default_service_name (bosdyn.client.gripper_camera_param.grippercameraparamclient attribute)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.default_service_name"]], "get_camera_params() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.get_camera_params"]], "get_camera_params_async() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.get_camera_params_async"]], "service_type (bosdyn.client.gripper_camera_param.grippercameraparamclient attribute)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.service_type"]], "set_camera_params() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.set_camera_params"]], "set_camera_params_async() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[135, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.set_camera_params_async"]], "imageclient (class in bosdyn.client.image)": [[136, "bosdyn.client.image.ImageClient"]], "imagedataerror": [[136, "bosdyn.client.image.ImageDataError"]], "imageresponseerror": [[136, "bosdyn.client.image.ImageResponseError"]], "sourcedataerror": [[136, "bosdyn.client.image.SourceDataError"], [154, "bosdyn.client.point_cloud.SourceDataError"]], "unknownimagesourceerror": [[136, "bosdyn.client.image.UnknownImageSourceError"]], "unsupportedimageformatrequestederror": [[136, "bosdyn.client.image.UnsupportedImageFormatRequestedError"]], "unsupportedpixelformatrequestederror": [[136, "bosdyn.client.image.UnsupportedPixelFormatRequestedError"]], "unsupportedresizeratiorequestederror": [[136, "bosdyn.client.image.UnsupportedResizeRatioRequestedError"]], "bosdyn.client.image": [[136, "module-bosdyn.client.image"]], "build_image_request() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.build_image_request"]], "default_service_name (bosdyn.client.image.imageclient attribute)": [[136, "bosdyn.client.image.ImageClient.default_service_name"]], "depth_image_to_pointcloud() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.depth_image_to_pointcloud"]], "get_image() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.get_image"]], "get_image_async() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.get_image_async"]], "get_image_from_sources() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.get_image_from_sources"]], "get_image_from_sources_async() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.get_image_from_sources_async"]], "list_image_sources() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.list_image_sources"]], "list_image_sources_async() (bosdyn.client.image.imageclient method)": [[136, "bosdyn.client.image.ImageClient.list_image_sources_async"]], "pixel_to_camera_space() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.pixel_to_camera_space"]], "save_images_as_files() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.save_images_as_files"]], "service_type (bosdyn.client.image.imageclient attribute)": [[136, "bosdyn.client.image.ImageClient.service_type"]], "write_image_data() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.write_image_data"]], "write_pgm_or_ppm() (in module bosdyn.client.image)": [[136, "bosdyn.client.image.write_pgm_or_ppm"]], "camerabaseimageservicer (class in bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.CameraBaseImageServicer"]], "camerainterface (class in bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.CameraInterface"]], "getimage() (bosdyn.client.image_service_helpers.camerabaseimageservicer method)": [[137, "bosdyn.client.image_service_helpers.CameraBaseImageServicer.GetImage"]], "imagecapturethread (class in bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread"]], "listimagesources() (bosdyn.client.image_service_helpers.camerabaseimageservicer method)": [[137, "bosdyn.client.image_service_helpers.CameraBaseImageServicer.ListImageSources"]], "threadcaptureoutput (class in bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.ThreadCaptureOutput"]], "visualimagesource (class in bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource"]], "blocking_capture() (bosdyn.client.image_service_helpers.camerainterface method)": [[137, "bosdyn.client.image_service_helpers.CameraInterface.blocking_capture"]], "bosdyn.client.image_service_helpers": [[137, "module-bosdyn.client.image_service_helpers"]], "clear_fault() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.clear_fault"]], "convert_rgb_to_grayscale() (in module bosdyn.client.image_service_helpers)": [[137, "bosdyn.client.image_service_helpers.convert_RGB_to_grayscale"]], "create_capture_thread() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.create_capture_thread"]], "get_image_and_timestamp() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.get_image_and_timestamp"]], "get_latest_captured_image() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread.get_latest_captured_image"]], "image_decode() (bosdyn.client.image_service_helpers.camerainterface method)": [[137, "bosdyn.client.image_service_helpers.CameraInterface.image_decode"]], "image_decode_with_error_checking() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.image_decode_with_error_checking"]], "initialize_faults() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.initialize_faults"]], "make_capture_parameters() (bosdyn.client.image_service_helpers.visualimagesource static method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.make_capture_parameters"]], "make_image_source() (bosdyn.client.image_service_helpers.visualimagesource static method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.make_image_source"]], "maybe_update_thread() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread.maybe_update_thread"]], "set_last_captured_image() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread.set_last_captured_image"]], "set_logger() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.set_logger"]], "start_capturing() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread.start_capturing"]], "stop_capturing() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[137, "bosdyn.client.image_service_helpers.ImageCaptureThread.stop_capturing"]], "stop_capturing() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.stop_capturing"]], "trigger_fault() (bosdyn.client.image_service_helpers.visualimagesource method)": [[137, "bosdyn.client.image_service_helpers.VisualImageSource.trigger_fault"]], "inversekinematicsclient (class in bosdyn.client.inverse_kinematics)": [[138, "bosdyn.client.inverse_kinematics.InverseKinematicsClient"]], "bosdyn.client.inverse_kinematics": [[138, "module-bosdyn.client.inverse_kinematics"]], "default_service_name (bosdyn.client.inverse_kinematics.inversekinematicsclient attribute)": [[138, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.default_service_name"]], "inverse_kinematics() (bosdyn.client.inverse_kinematics.inversekinematicsclient method)": [[138, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.inverse_kinematics"]], "inverse_kinematics_async() (bosdyn.client.inverse_kinematics.inversekinematicsclient method)": [[138, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.inverse_kinematics_async"]], "service_type (bosdyn.client.inverse_kinematics.inversekinematicsclient attribute)": [[138, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.service_type"]], "irenabledisableserviceclient (class in bosdyn.client.ir_enable_disable)": [[139, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient"]], "bosdyn.client.ir_enable_disable": [[139, "module-bosdyn.client.ir_enable_disable"]], "default_service_name (bosdyn.client.ir_enable_disable.irenabledisableserviceclient attribute)": [[139, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.default_service_name"]], "service_type (bosdyn.client.ir_enable_disable.irenabledisableserviceclient attribute)": [[139, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.service_type"]], "set_ir_enabled() (bosdyn.client.ir_enable_disable.irenabledisableserviceclient method)": [[139, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.set_ir_enabled"]], "set_ir_enabled_async() (bosdyn.client.ir_enable_disable.irenabledisableserviceclient method)": [[139, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.set_ir_enabled_async"]], "invalidleaseerror": [[140, "bosdyn.client.keepalive.InvalidLeaseError"], [141, "bosdyn.client.lease.InvalidLeaseError"]], "invalidpolicyerror": [[140, "bosdyn.client.keepalive.InvalidPolicyError"]], "keepaliveclient (class in bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.KeepaliveClient"]], "keepaliveresponseerror": [[140, "bosdyn.client.keepalive.KeepaliveResponseError"]], "policy (class in bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.Policy"]], "policykeepalive (class in bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.PolicyKeepalive"]], "add_associated_lease() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_associated_lease"]], "add_auto_return_action() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_auto_return_action"]], "add_controlled_motors_off_action() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_controlled_motors_off_action"]], "add_immediate_robot_off_action() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_immediate_robot_off_action"]], "add_lease_stale_action() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_lease_stale_action"]], "add_record_event_action() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.add_record_event_action"]], "bosdyn.client.keepalive": [[140, "module-bosdyn.client.keepalive"]], "check_in() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.check_in"]], "check_in_async() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.check_in_async"]], "check_in_error() (in module bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.check_in_error"]], "default_service_name (bosdyn.client.keepalive.keepaliveclient attribute)": [[140, "bosdyn.client.keepalive.KeepaliveClient.default_service_name"]], "get_status() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.get_status"]], "get_status_async() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.get_status_async"]], "modify_policy() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.modify_policy"]], "modify_policy_async() (bosdyn.client.keepalive.keepaliveclient method)": [[140, "bosdyn.client.keepalive.KeepaliveClient.modify_policy_async"]], "modify_policy_error() (in module bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.modify_policy_error"]], "name (bosdyn.client.keepalive.policy property)": [[140, "bosdyn.client.keepalive.Policy.name"]], "remove_all_policies() (in module bosdyn.client.keepalive)": [[140, "bosdyn.client.keepalive.remove_all_policies"]], "remove_policy() (bosdyn.client.keepalive.policykeepalive method)": [[140, "bosdyn.client.keepalive.PolicyKeepalive.remove_policy"]], "service_type (bosdyn.client.keepalive.keepaliveclient attribute)": [[140, "bosdyn.client.keepalive.KeepaliveClient.service_type"]], "shortest_action_delay() (bosdyn.client.keepalive.policy method)": [[140, "bosdyn.client.keepalive.Policy.shortest_action_delay"]], "shutdown() (bosdyn.client.keepalive.policykeepalive method)": [[140, "bosdyn.client.keepalive.PolicyKeepalive.shutdown"]], "start() (bosdyn.client.keepalive.policykeepalive method)": [[140, "bosdyn.client.keepalive.PolicyKeepalive.start"]], "different_epochs (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.DIFFERENT_EPOCHS"]], "different_resources (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.DIFFERENT_RESOURCES"]], "displacedleaseerror": [[141, "bosdyn.client.lease.DisplacedLeaseError"]], "invalidresourceerror": [[141, "bosdyn.client.lease.InvalidResourceError"]], "lease (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.Lease"]], "lease.compareresult (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.Lease.CompareResult"]], "leaseclient (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseClient"]], "leasekeepalive (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseKeepAlive"]], "leasenotownedbywallet": [[141, "bosdyn.client.lease.LeaseNotOwnedByWallet"]], "leaseresponseerror": [[141, "bosdyn.client.lease.LeaseResponseError"]], "leasestate (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseState"]], "leasestate.status (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseState.Status"]], "leasewallet (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseWallet"]], "leasewalletrequestprocessor (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseWalletRequestProcessor"]], "leasewalletresponseprocessor (class in bosdyn.client.lease)": [[141, "bosdyn.client.lease.LeaseWalletResponseProcessor"]], "newer (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.NEWER"]], "not_managed (bosdyn.client.lease.leasestate.status attribute)": [[141, "bosdyn.client.lease.LeaseState.Status.NOT_MANAGED"]], "nosuchlease": [[141, "bosdyn.client.lease.NoSuchLease"]], "notactiveleaseerror": [[141, "bosdyn.client.lease.NotActiveLeaseError"]], "notauthoritativeserviceerror": [[141, "bosdyn.client.lease.NotAuthoritativeServiceError"]], "older (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.OLDER"]], "other_owner (bosdyn.client.lease.leasestate.status attribute)": [[141, "bosdyn.client.lease.LeaseState.Status.OTHER_OWNER"]], "revoked (bosdyn.client.lease.leasestate.status attribute)": [[141, "bosdyn.client.lease.LeaseState.Status.REVOKED"]], "resourcealreadyclaimederror": [[141, "bosdyn.client.lease.ResourceAlreadyClaimedError"]], "revokedleaseerror": [[141, "bosdyn.client.lease.RevokedLeaseError"]], "same (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.SAME"]], "self_owner (bosdyn.client.lease.leasestate.status attribute)": [[141, "bosdyn.client.lease.LeaseState.Status.SELF_OWNER"]], "status_not_managed (bosdyn.client.lease.leasestate attribute)": [[141, "bosdyn.client.lease.LeaseState.STATUS_NOT_MANAGED"]], "status_other_owner (bosdyn.client.lease.leasestate attribute)": [[141, "bosdyn.client.lease.LeaseState.STATUS_OTHER_OWNER"]], "status_revoked (bosdyn.client.lease.leasestate attribute)": [[141, "bosdyn.client.lease.LeaseState.STATUS_REVOKED"]], "status_self_owner (bosdyn.client.lease.leasestate attribute)": [[141, "bosdyn.client.lease.LeaseState.STATUS_SELF_OWNER"]], "status_unowned (bosdyn.client.lease.leasestate attribute)": [[141, "bosdyn.client.lease.LeaseState.STATUS_UNOWNED"]], "sub_lease (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.SUB_LEASE"]], "super_lease (bosdyn.client.lease.lease.compareresult attribute)": [[141, "bosdyn.client.lease.Lease.CompareResult.SUPER_LEASE"]], "unowned (bosdyn.client.lease.leasestate.status attribute)": [[141, "bosdyn.client.lease.LeaseState.Status.UNOWNED"]], "unmanagedresourceerror": [[141, "bosdyn.client.lease.UnmanagedResourceError"]], "wrongepocherror": [[141, "bosdyn.client.lease.WrongEpochError"]], "acquire() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.acquire"]], "acquire_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.acquire_async"]], "add() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.add"]], "add_lease_wallet_processors() (in module bosdyn.client.lease)": [[141, "bosdyn.client.lease.add_lease_wallet_processors"]], "advance() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.advance"]], "bosdyn.client.lease": [[141, "module-bosdyn.client.lease"]], "compare() (bosdyn.client.lease.lease method)": [[141, "bosdyn.client.lease.Lease.compare"]], "compare_result_to_lease_use_result_status() (bosdyn.client.lease.lease static method)": [[141, "bosdyn.client.lease.Lease.compare_result_to_lease_use_result_status"]], "create_newer() (bosdyn.client.lease.lease method)": [[141, "bosdyn.client.lease.Lease.create_newer"]], "create_newer() (bosdyn.client.lease.leasestate method)": [[141, "bosdyn.client.lease.LeaseState.create_newer"]], "create_sublease() (bosdyn.client.lease.lease method)": [[141, "bosdyn.client.lease.Lease.create_sublease"]], "default_service_name (bosdyn.client.lease.leaseclient attribute)": [[141, "bosdyn.client.lease.LeaseClient.default_service_name"]], "get_lease() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.get_lease"]], "get_lease_state() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.get_lease_state"]], "get_lease_state() (bosdyn.client.lease.leasewalletrequestprocessor static method)": [[141, "bosdyn.client.lease.LeaseWalletRequestProcessor.get_lease_state"]], "is_alive() (bosdyn.client.lease.leasekeepalive method)": [[141, "bosdyn.client.lease.LeaseKeepAlive.is_alive"]], "is_valid_lease() (bosdyn.client.lease.lease method)": [[141, "bosdyn.client.lease.Lease.is_valid_lease"]], "is_valid_proto() (bosdyn.client.lease.lease static method)": [[141, "bosdyn.client.lease.Lease.is_valid_proto"]], "lease_wallet (bosdyn.client.lease.leasekeepalive property)": [[141, "bosdyn.client.lease.LeaseKeepAlive.lease_wallet"]], "list_leases() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.list_leases"]], "list_leases_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.list_leases_async"]], "list_leases_full() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.list_leases_full"]], "list_leases_full_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.list_leases_full_async"]], "mutate() (bosdyn.client.lease.leasewalletrequestprocessor method)": [[141, "bosdyn.client.lease.LeaseWalletRequestProcessor.mutate"]], "mutate() (bosdyn.client.lease.leasewalletresponseprocessor method)": [[141, "bosdyn.client.lease.LeaseWalletResponseProcessor.mutate"]], "on_lease_use_result() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.on_lease_use_result"]], "remove() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.remove"]], "retain_lease() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.retain_lease"]], "retain_lease_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.retain_lease_async"]], "return_lease() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.return_lease"]], "return_lease_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.return_lease_async"]], "service_type (bosdyn.client.lease.leaseclient attribute)": [[141, "bosdyn.client.lease.LeaseClient.service_type"]], "set_client_name() (bosdyn.client.lease.leasewallet method)": [[141, "bosdyn.client.lease.LeaseWallet.set_client_name"]], "shutdown() (bosdyn.client.lease.leasekeepalive method)": [[141, "bosdyn.client.lease.LeaseKeepAlive.shutdown"]], "take() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.take"]], "take_async() (bosdyn.client.lease.leaseclient method)": [[141, "bosdyn.client.lease.LeaseClient.take_async"]], "test_active_lease() (in module bosdyn.client.lease)": [[141, "bosdyn.client.lease.test_active_lease"]], "update_from_lease_use_result() (bosdyn.client.lease.leasestate method)": [[141, "bosdyn.client.lease.LeaseState.update_from_lease_use_result"]], "wait_until_done() (bosdyn.client.lease.leasekeepalive method)": [[141, "bosdyn.client.lease.LeaseKeepAlive.wait_until_done"]], "resourcehierarchy (class in bosdyn.client.lease_resource_hierarchy)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy"]], "bosdyn.client.lease_resource_hierarchy": [[142, "module-bosdyn.client.lease_resource_hierarchy"]], "get_hierarchy() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_hierarchy"]], "get_resource() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_resource"]], "get_resource_tree() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_resource_tree"]], "has_resource() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.has_resource"]], "has_sub_resources() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.has_sub_resources"]], "leaf_resources() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[142, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.leaf_resources"]], "leasevalidator (class in bosdyn.client.lease_validator)": [[143, "bosdyn.client.lease_validator.LeaseValidator"]], "leasevalidatorresponseprocessor (class in bosdyn.client.lease_validator)": [[143, "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor"]], "bosdyn.client.lease_validator": [[143, "module-bosdyn.client.lease_validator"]], "get_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[143, "bosdyn.client.lease_validator.LeaseValidator.get_active_lease"]], "mutate() (bosdyn.client.lease_validator.leasevalidatorresponseprocessor method)": [[143, "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor.mutate"]], "test_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[143, "bosdyn.client.lease_validator.LeaseValidator.test_active_lease"]], "test_and_set_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[143, "bosdyn.client.lease_validator.LeaseValidator.test_and_set_active_lease"]], "licenseclient (class in bosdyn.client.license)": [[144, "bosdyn.client.license.LicenseClient"]], "bosdyn.client.license": [[144, "module-bosdyn.client.license"]], "default_service_name (bosdyn.client.license.licenseclient attribute)": [[144, "bosdyn.client.license.LicenseClient.default_service_name"]], "get_feature_enabled() (bosdyn.client.license.licenseclient method)": [[144, "bosdyn.client.license.LicenseClient.get_feature_enabled"]], "get_license_info() (bosdyn.client.license.licenseclient method)": [[144, "bosdyn.client.license.LicenseClient.get_license_info"]], "service_type (bosdyn.client.license.licenseclient attribute)": [[144, "bosdyn.client.license.LicenseClient.service_type"]], "localgridclient (class in bosdyn.client.local_grid)": [[145, "bosdyn.client.local_grid.LocalGridClient"]], "bosdyn.client.local_grid": [[145, "module-bosdyn.client.local_grid"]], "default_service_name (bosdyn.client.local_grid.localgridclient attribute)": [[145, "bosdyn.client.local_grid.LocalGridClient.default_service_name"]], "get_local_grid_types() (bosdyn.client.local_grid.localgridclient method)": [[145, "bosdyn.client.local_grid.LocalGridClient.get_local_grid_types"]], "get_local_grid_types_async() (bosdyn.client.local_grid.localgridclient method)": [[145, "bosdyn.client.local_grid.LocalGridClient.get_local_grid_types_async"]], "get_local_grids() (bosdyn.client.local_grid.localgridclient method)": [[145, "bosdyn.client.local_grid.LocalGridClient.get_local_grids"]], "get_local_grids_async() (bosdyn.client.local_grid.localgridclient method)": [[145, "bosdyn.client.local_grid.LocalGridClient.get_local_grids_async"]], "service_type (bosdyn.client.local_grid.localgridclient attribute)": [[145, "bosdyn.client.local_grid.LocalGridClient.service_type"]], "concurrencylimitreachederror": [[146, "bosdyn.client.log_status.ConcurrencyLimitReachedError"]], "experimentalreadyrunningerror": [[146, "bosdyn.client.log_status.ExperimentAlreadyRunningError"]], "inactivelogerror": [[146, "bosdyn.client.log_status.InactiveLogError"]], "logstatusclient (class in bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.LogStatusClient"]], "logstatusresponseerror": [[146, "bosdyn.client.log_status.LogStatusResponseError"]], "bosdyn.client.log_status": [[146, "module-bosdyn.client.log_status"]], "default_service_name (bosdyn.client.log_status.logstatusclient attribute)": [[146, "bosdyn.client.log_status.LogStatusClient.default_service_name"]], "get_active_log_statuses() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.get_active_log_statuses"]], "get_active_log_statuses_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.get_active_log_statuses_async"]], "get_active_log_statuses_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.get_active_log_statuses_error"]], "get_log_status() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.get_log_status"]], "get_log_status_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.get_log_status_async"]], "get_log_status_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.get_log_status_error"]], "service_type (bosdyn.client.log_status.logstatusclient attribute)": [[146, "bosdyn.client.log_status.LogStatusClient.service_type"]], "start_experiment_log() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.start_experiment_log"]], "start_experiment_log_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.start_experiment_log_async"]], "start_experiment_log_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.start_experiment_log_error"]], "start_retro_log() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.start_retro_log"]], "start_retro_log_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.start_retro_log_async"]], "start_retro_log_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.start_retro_log_error"]], "terminate_log() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.terminate_log"]], "terminate_log_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.terminate_log_async"]], "terminate_log_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.terminate_log_error"]], "update_experiment() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.update_experiment"]], "update_experiment_async() (bosdyn.client.log_status.logstatusclient method)": [[146, "bosdyn.client.log_status.LogStatusClient.update_experiment_async"]], "update_experiment_log_error() (in module bosdyn.client.log_status)": [[146, "bosdyn.client.log_status.update_experiment_log_error"]], "manipulationapiclient (class in bosdyn.client.manipulation_api_client)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient"]], "bosdyn.client.manipulation_api_client": [[147, "module-bosdyn.client.manipulation_api_client"]], "default_service_name (bosdyn.client.manipulation_api_client.manipulationapiclient attribute)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.default_service_name"]], "grasp_override_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.grasp_override_command"]], "grasp_override_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.grasp_override_command_async"]], "manipulation_api_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_command"]], "manipulation_api_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_command_async"]], "manipulation_api_feedback_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_feedback_command"]], "manipulation_api_feedback_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_feedback_command_async"]], "service_type (bosdyn.client.manipulation_api_client.manipulationapiclient attribute)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.service_type"]], "update_from() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[147, "bosdyn.client.manipulation_api_client.ManipulationApiClient.update_from"]], "constraintviolationerror": [[148, "bosdyn.client.map_processing.ConstraintViolationError"]], "invalidgravityalignmenterror": [[148, "bosdyn.client.map_processing.InvalidGravityAlignmentError"]], "invalidhintserror": [[148, "bosdyn.client.map_processing.InvalidHintsError"]], "invalidparamserror": [[148, "bosdyn.client.map_processing.InvalidParamsError"]], "mapmodifiederror": [[148, "bosdyn.client.map_processing.MapModifiedError"]], "mapprocessingserviceclient (class in bosdyn.client.map_processing)": [[148, "bosdyn.client.map_processing.MapProcessingServiceClient"]], "mapprocessingserviceresponseerror": [[148, "bosdyn.client.map_processing.MapProcessingServiceResponseError"]], "maxiterationserror": [[148, "bosdyn.client.map_processing.MaxIterationsError"]], "maxtimeerror": [[148, "bosdyn.client.map_processing.MaxTimeError"]], "missingsnapshotserror": [[148, "bosdyn.client.map_processing.MissingSnapshotsError"]], "optimizationfailureerror": [[148, "bosdyn.client.map_processing.OptimizationFailureError"]], "bosdyn.client.map_processing": [[148, "module-bosdyn.client.map_processing"]], "default_service_name (bosdyn.client.map_processing.mapprocessingserviceclient attribute)": [[148, "bosdyn.client.map_processing.MapProcessingServiceClient.default_service_name"]], "process_anchoring() (bosdyn.client.map_processing.mapprocessingserviceclient method)": [[148, "bosdyn.client.map_processing.MapProcessingServiceClient.process_anchoring"]], "process_topology() (bosdyn.client.map_processing.mapprocessingserviceclient method)": [[148, "bosdyn.client.map_processing.MapProcessingServiceClient.process_topology"]], "service_type (bosdyn.client.map_processing.mapprocessingserviceclient attribute)": [[148, "bosdyn.client.map_processing.MapProcessingServiceClient.service_type"]], "quat (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.Quat"]], "se2pose (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.SE2Pose"]], "se2velocity (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.SE2Velocity"]], "se3pose (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.SE3Pose"]], "se3velocity (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.SE3Velocity"]], "vec2 (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.Vec2"]], "vec3 (class in bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.Vec3"]], "angle_diff() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.angle_diff"]], "angle_diff_degrees() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.angle_diff_degrees"]], "angular (bosdyn.client.math_helpers.se2velocity property)": [[149, "bosdyn.client.math_helpers.SE2Velocity.angular"]], "angular (bosdyn.client.math_helpers.se3velocity property)": [[149, "bosdyn.client.math_helpers.SE3Velocity.angular"]], "bosdyn.client.math_helpers": [[149, "module-bosdyn.client.math_helpers"]], "closest_yaw_only_quaternion() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.closest_yaw_only_quaternion"]], "conj() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.conj"]], "cross() (bosdyn.client.math_helpers.vec2 method)": [[149, "bosdyn.client.math_helpers.Vec2.cross"]], "cross() (bosdyn.client.math_helpers.vec3 method)": [[149, "bosdyn.client.math_helpers.Vec3.cross"]], "dot() (bosdyn.client.math_helpers.vec2 method)": [[149, "bosdyn.client.math_helpers.Vec2.dot"]], "dot() (bosdyn.client.math_helpers.vec3 method)": [[149, "bosdyn.client.math_helpers.Vec3.dot"]], "flatten() (bosdyn.client.math_helpers.se2pose static method)": [[149, "bosdyn.client.math_helpers.SE2Pose.flatten"]], "from_identity() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.from_identity"]], "from_matrix() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_matrix"]], "from_matrix() (bosdyn.client.math_helpers.se2pose static method)": [[149, "bosdyn.client.math_helpers.SE2Pose.from_matrix"]], "from_matrix() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.from_matrix"]], "from_numpy() (bosdyn.client.math_helpers.vec3 static method)": [[149, "bosdyn.client.math_helpers.Vec3.from_numpy"]], "from_obj() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se2pose static method)": [[149, "bosdyn.client.math_helpers.SE2Pose.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se2velocity static method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se3velocity static method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.from_obj"]], "from_pitch() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_pitch"]], "from_proto() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se2pose static method)": [[149, "bosdyn.client.math_helpers.SE2Pose.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se2velocity static method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se3velocity static method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.from_proto"]], "from_proto() (bosdyn.client.math_helpers.vec2 static method)": [[149, "bosdyn.client.math_helpers.Vec2.from_proto"]], "from_proto() (bosdyn.client.math_helpers.vec3 static method)": [[149, "bosdyn.client.math_helpers.Vec3.from_proto"]], "from_roll() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_roll"]], "from_se2() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.from_se2"]], "from_two_vectors() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_two_vectors"]], "from_vector() (bosdyn.client.math_helpers.se2velocity static method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.from_vector"]], "from_vector() (bosdyn.client.math_helpers.se3velocity static method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.from_vector"]], "from_yaw() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.from_yaw"]], "get_closest_se2_transform() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.get_closest_se2_transform"]], "get_closest_se3_transform() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.get_closest_se3_transform"]], "get_translation() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.get_translation"]], "interp() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.interp"]], "inverse() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.inverse"]], "inverse() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.inverse"]], "inverse() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.inverse"]], "is_within_threshold() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.is_within_threshold"]], "length() (bosdyn.client.math_helpers.vec2 method)": [[149, "bosdyn.client.math_helpers.Vec2.length"]], "length() (bosdyn.client.math_helpers.vec3 method)": [[149, "bosdyn.client.math_helpers.Vec3.length"]], "linear (bosdyn.client.math_helpers.se2velocity property)": [[149, "bosdyn.client.math_helpers.SE2Velocity.linear"]], "linear (bosdyn.client.math_helpers.se3velocity property)": [[149, "bosdyn.client.math_helpers.SE3Velocity.linear"]], "mult() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.mult"]], "mult() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.mult"]], "mult() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.mult"]], "normalize() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.normalize"]], "pose_to_xyz_yaw() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.pose_to_xyz_yaw"]], "position (bosdyn.client.math_helpers.se2pose property)": [[149, "bosdyn.client.math_helpers.SE2Pose.position"]], "position (bosdyn.client.math_helpers.se3pose property)": [[149, "bosdyn.client.math_helpers.SE3Pose.position"]], "quat_to_eulerzyx() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.quat_to_eulerZYX"]], "recenter_angle() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.recenter_angle"]], "recenter_angle_mod() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.recenter_angle_mod"]], "recenter_value_mod() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.recenter_value_mod"]], "rotation (bosdyn.client.math_helpers.se3pose property)": [[149, "bosdyn.client.math_helpers.SE3Pose.rotation"]], "skew_matrix_2d() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.skew_matrix_2d"]], "skew_matrix_3d() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.skew_matrix_3d"]], "slerp() (bosdyn.client.math_helpers.quat static method)": [[149, "bosdyn.client.math_helpers.Quat.slerp"]], "to_adjoint_matrix() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.to_adjoint_matrix"]], "to_adjoint_matrix() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.to_adjoint_matrix"]], "to_axis_angle() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_axis_angle"]], "to_matrix() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_matrix"]], "to_matrix() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.to_matrix"]], "to_matrix() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.to_matrix"]], "to_numpy() (bosdyn.client.math_helpers.vec3 method)": [[149, "bosdyn.client.math_helpers.Vec3.to_numpy"]], "to_obj() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se2velocity method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se3velocity method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.to_obj"]], "to_pitch() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_pitch"]], "to_proto() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se2velocity method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se3velocity method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.to_proto"]], "to_proto() (bosdyn.client.math_helpers.vec2 method)": [[149, "bosdyn.client.math_helpers.Vec2.to_proto"]], "to_proto() (bosdyn.client.math_helpers.vec3 method)": [[149, "bosdyn.client.math_helpers.Vec3.to_proto"]], "to_roll() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_roll"]], "to_rot_matrix() (bosdyn.client.math_helpers.se2pose method)": [[149, "bosdyn.client.math_helpers.SE2Pose.to_rot_matrix"]], "to_vector() (bosdyn.client.math_helpers.se2velocity method)": [[149, "bosdyn.client.math_helpers.SE2Velocity.to_vector"]], "to_vector() (bosdyn.client.math_helpers.se3velocity method)": [[149, "bosdyn.client.math_helpers.SE3Velocity.to_vector"]], "to_yaw() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.to_yaw"]], "transform_cloud() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.transform_cloud"]], "transform_cloud_from_matrix() (bosdyn.client.math_helpers.se3pose static method)": [[149, "bosdyn.client.math_helpers.SE3Pose.transform_cloud_from_matrix"]], "transform_point() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.transform_point"]], "transform_point() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.transform_point"]], "transform_se2velocity() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.transform_se2velocity"]], "transform_se3velocity() (in module bosdyn.client.math_helpers)": [[149, "bosdyn.client.math_helpers.transform_se3velocity"]], "transform_vec3() (bosdyn.client.math_helpers.quat method)": [[149, "bosdyn.client.math_helpers.Quat.transform_vec3"]], "transform_vec3() (bosdyn.client.math_helpers.se3pose method)": [[149, "bosdyn.client.math_helpers.SE3Pose.transform_vec3"]], "metricsloggingclient (class in bosdyn.client.metrics_logging)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient"]], "missingkeyserror": [[150, "bosdyn.client.metrics_logging.MissingKeysError"]], "unabletooptouterror": [[150, "bosdyn.client.metrics_logging.UnableToOptOutError"]], "bosdyn.client.metrics_logging": [[150, "module-bosdyn.client.metrics_logging"]], "default_service_name (bosdyn.client.metrics_logging.metricsloggingclient attribute)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.default_service_name"]], "get_absolute_metric_snapshot() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_absolute_metric_snapshot"]], "get_absolute_metric_snapshot_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_absolute_metric_snapshot_async"]], "get_metrics() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_metrics"]], "get_metrics_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_metrics_async"]], "get_store_sequence_range() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_store_sequence_range"]], "get_store_sequence_range_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_store_sequence_range_async"]], "make_parameter_update() (in module bosdyn.client.metrics_logging)": [[150, "bosdyn.client.metrics_logging.make_parameter_update"]], "service_type (bosdyn.client.metrics_logging.metricsloggingclient attribute)": [[150, "bosdyn.client.metrics_logging.MetricsLoggingClient.service_type"]], "externalservererror": [[151, "bosdyn.client.network_compute_bridge_client.ExternalServerError"]], "externalservicenotfounderror": [[151, "bosdyn.client.network_compute_bridge_client.ExternalServiceNotFoundError"]], "networkcomputeanalysisfailederror": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeAnalysisFailedError"]], "networkcomputebridgeclient (class in bosdyn.client.network_compute_bridge_client)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient"]], "networkcomputerotationerror": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeRotationError"]], "bosdyn.client.network_compute_bridge_client": [[151, "module-bosdyn.client.network_compute_bridge_client"]], "default_service_name (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient attribute)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.default_service_name"]], "list_available_models() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models"]], "list_available_models_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_async"]], "list_available_models_command() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_command"]], "list_available_models_command_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_command_async"]], "network_compute_bridge_command() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.network_compute_bridge_command"]], "network_compute_bridge_command_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.network_compute_bridge_command_async"]], "service_type (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient attribute)": [[151, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.service_type"]], "payloadclient (class in bosdyn.client.payload)": [[152, "bosdyn.client.payload.PayloadClient"]], "bosdyn.client.payload": [[152, "module-bosdyn.client.payload"]], "default_service_name (bosdyn.client.payload.payloadclient attribute)": [[152, "bosdyn.client.payload.PayloadClient.default_service_name"]], "list_payloads() (bosdyn.client.payload.payloadclient method)": [[152, "bosdyn.client.payload.PayloadClient.list_payloads"]], "list_payloads_async() (bosdyn.client.payload.payloadclient method)": [[152, "bosdyn.client.payload.PayloadClient.list_payloads_async"]], "service_type (bosdyn.client.payload.payloadclient attribute)": [[152, "bosdyn.client.payload.PayloadClient.service_type"]], "invalidpayloadcredentialserror": [[153, "bosdyn.client.payload_registration.InvalidPayloadCredentialsError"]], "payloadalreadyexistserror": [[153, "bosdyn.client.payload_registration.PayloadAlreadyExistsError"]], "payloaddoesnotexisterror": [[153, "bosdyn.client.payload_registration.PayloadDoesNotExistError"]], "payloadnotauthorizederror": [[153, "bosdyn.client.payload_registration.PayloadNotAuthorizedError"]], "payloadregistrationclient (class in bosdyn.client.payload_registration)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient"]], "payloadregistrationkeepalive (class in bosdyn.client.payload_registration)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive"]], "payloadregistrationresponseerror": [[153, "bosdyn.client.payload_registration.PayloadRegistrationResponseError"]], "attach_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.attach_payload"]], "attach_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.attach_payload_async"]], "bosdyn.client.payload_registration": [[153, "module-bosdyn.client.payload_registration"]], "default_service_name (bosdyn.client.payload_registration.payloadregistrationclient attribute)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.default_service_name"]], "detach_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.detach_payload"]], "detach_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.detach_payload_async"]], "get_payload_auth_token() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.get_payload_auth_token"]], "is_alive() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.is_alive"]], "register_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.register_payload"]], "register_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.register_payload_async"]], "service_type (bosdyn.client.payload_registration.payloadregistrationclient attribute)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.service_type"]], "shutdown() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.shutdown"]], "start() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.start"]], "update_payload_version() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.update_payload_version"]], "update_payload_version_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[153, "bosdyn.client.payload_registration.PayloadRegistrationClient.update_payload_version_async"]], "pointcloudclient (class in bosdyn.client.point_cloud)": [[154, "bosdyn.client.point_cloud.PointCloudClient"]], "pointclouddataerror": [[154, "bosdyn.client.point_cloud.PointCloudDataError"]], "pointcloudresponseerror": [[154, "bosdyn.client.point_cloud.PointCloudResponseError"]], "unknownpointcloudsourceerror": [[154, "bosdyn.client.point_cloud.UnknownPointCloudSourceError"]], "bosdyn.client.point_cloud": [[154, "module-bosdyn.client.point_cloud"]], "build_pc_request() (in module bosdyn.client.point_cloud)": [[154, "bosdyn.client.point_cloud.build_pc_request"]], "default_service_name (bosdyn.client.point_cloud.pointcloudclient attribute)": [[154, "bosdyn.client.point_cloud.PointCloudClient.default_service_name"]], "get_point_cloud() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud"]], "get_point_cloud_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_async"]], "get_point_cloud_from_sources() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_from_sources"]], "get_point_cloud_from_sources_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_from_sources_async"]], "list_point_cloud_sources() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.list_point_cloud_sources"]], "list_point_cloud_sources_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[154, "bosdyn.client.point_cloud.PointCloudClient.list_point_cloud_sources_async"]], "service_type (bosdyn.client.point_cloud.pointcloudclient attribute)": [[154, "bosdyn.client.point_cloud.PointCloudClient.service_type"]], "batterymissingerror": [[155, "bosdyn.client.power.BatteryMissingError"]], "commandinprogresserror": [[155, "bosdyn.client.power.CommandInProgressError"]], "commandtimedouterror": [[155, "bosdyn.client.power.CommandTimedOutError"], [160, "bosdyn.client.robot_command.CommandTimedOutError"]], "estoppederror": [[155, "bosdyn.client.power.EstoppedError"]], "fancontroltemperatureerror": [[155, "bosdyn.client.power.FanControlTemperatureError"]], "faultederror": [[155, "bosdyn.client.power.FaultedError"]], "keepalivemotorsofferror": [[155, "bosdyn.client.power.KeepaliveMotorsOffError"]], "overriddenerror": [[155, "bosdyn.client.power.OverriddenError"]], "powerclient (class in bosdyn.client.power)": [[155, "bosdyn.client.power.PowerClient"]], "powererror": [[155, "bosdyn.client.power.PowerError"]], "powerresponseerror": [[155, "bosdyn.client.power.PowerResponseError"]], "safetystopfailederror": [[155, "bosdyn.client.power.SafetyStopFailedError"]], "safetystopincompatiblehardwareerror": [[155, "bosdyn.client.power.SafetyStopIncompatibleHardwareError"]], "safetystopunknownstoptypeerror": [[155, "bosdyn.client.power.SafetyStopUnknownStopTypeError"]], "shorepowerconnectederror": [[155, "bosdyn.client.power.ShorePowerConnectedError"]], "bosdyn.client.power": [[155, "module-bosdyn.client.power"]], "default_service_name (bosdyn.client.power.powerclient attribute)": [[155, "bosdyn.client.power.PowerClient.default_service_name"]], "fan_power_command() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.fan_power_command"]], "fan_power_command_async() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.fan_power_command_async"]], "fan_power_command_feedback() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.fan_power_command_feedback"]], "fan_power_command_feedback_async() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.fan_power_command_feedback_async"]], "is_powered_on() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.is_powered_on"]], "power_command() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.power_command"]], "power_command_async() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.power_command_async"]], "power_command_feedback() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.power_command_feedback"]], "power_command_feedback_async() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.power_command_feedback_async"]], "power_cycle_robot() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_cycle_robot"]], "power_off() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_off"]], "power_off_motors() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_off_motors"]], "power_off_payload_ports() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_off_payload_ports"]], "power_off_robot() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_off_robot"]], "power_off_wifi_radio() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_off_wifi_radio"]], "power_on() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_on"]], "power_on_motors() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_on_motors"]], "power_on_payload_ports() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_on_payload_ports"]], "power_on_wifi_radio() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.power_on_wifi_radio"]], "reset_safety_stop() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.reset_safety_stop"]], "reset_safety_stop_async() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.reset_safety_stop_async"]], "safe_power_cycle_robot() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.safe_power_cycle_robot"]], "safe_power_off() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.safe_power_off"]], "safe_power_off_motors() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.safe_power_off_motors"]], "safe_power_off_robot() (in module bosdyn.client.power)": [[155, "bosdyn.client.power.safe_power_off_robot"]], "service_type (bosdyn.client.power.powerclient attribute)": [[155, "bosdyn.client.power.PowerClient.service_type"]], "update_from() (bosdyn.client.power.powerclient method)": [[155, "bosdyn.client.power.PowerClient.update_from"]], "addrequestheader (class in bosdyn.client.processors)": [[156, "bosdyn.client.processors.AddRequestHeader"]], "bosdyn.client.processors": [[156, "module-bosdyn.client.processors"]], "mutate() (bosdyn.client.processors.addrequestheader method)": [[156, "bosdyn.client.processors.AddRequestHeader.mutate"]], "invalidintersectiontypeerror": [[157, "bosdyn.client.ray_cast.InvalidIntersectionTypeError"]], "raycastclient (class in bosdyn.client.ray_cast)": [[157, "bosdyn.client.ray_cast.RayCastClient"]], "raycastresponseerror": [[157, "bosdyn.client.ray_cast.RayCastResponseError"]], "unknownframeerror": [[157, "bosdyn.client.ray_cast.UnknownFrameError"], [160, "bosdyn.client.robot_command.UnknownFrameError"]], "bosdyn.client.ray_cast": [[157, "module-bosdyn.client.ray_cast"]], "default_authority (bosdyn.client.ray_cast.raycastclient attribute)": [[157, "bosdyn.client.ray_cast.RayCastClient.default_authority"]], "default_service_name (bosdyn.client.ray_cast.raycastclient attribute)": [[157, "bosdyn.client.ray_cast.RayCastClient.default_service_name"]], "raycast() (bosdyn.client.ray_cast.raycastclient method)": [[157, "bosdyn.client.ray_cast.RayCastClient.raycast"]], "raycast_async() (bosdyn.client.ray_cast.raycastclient method)": [[157, "bosdyn.client.ray_cast.RayCastClient.raycast_async"]], "service_type (bosdyn.client.ray_cast.raycastclient attribute)": [[157, "bosdyn.client.ray_cast.RayCastClient.service_type"]], "circle_region (bosdyn.client.recording.waypointregion attribute)": [[158, "bosdyn.client.recording.WaypointRegion.CIRCLE_REGION"]], "couldnotcreatewaypointerror": [[158, "bosdyn.client.recording.CouldNotCreateWaypointError"]], "default_region (bosdyn.client.recording.waypointregion attribute)": [[158, "bosdyn.client.recording.WaypointRegion.DEFAULT_REGION"]], "empty_region (bosdyn.client.recording.waypointregion attribute)": [[158, "bosdyn.client.recording.WaypointRegion.EMPTY_REGION"]], "edgeexistserror": [[158, "bosdyn.client.recording.EdgeExistsError"]], "edgemissingtransformerror": [[158, "bosdyn.client.recording.EdgeMissingTransformError"]], "fiducialposeerror": [[158, "bosdyn.client.recording.FiducialPoseError"]], "followingrouteerror": [[158, "bosdyn.client.recording.FollowingRouteError"]], "graphnavrecordingserviceclient (class in bosdyn.client.recording)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient"]], "missingfiducialserror": [[158, "bosdyn.client.recording.MissingFiducialsError"]], "notlocalizedtoenderror": [[158, "bosdyn.client.recording.NotLocalizedToEndError"]], "notlocalizedtoexistingmaperror": [[158, "bosdyn.client.recording.NotLocalizedToExistingMapError"]], "notreadyyeterror": [[158, "bosdyn.client.recording.NotReadyYetError"]], "notrecordingerror": [[158, "bosdyn.client.recording.NotRecordingError"]], "recordingserviceresponseerror": [[158, "bosdyn.client.recording.RecordingServiceResponseError"]], "remotecloudfailurenodataerror": [[158, "bosdyn.client.recording.RemoteCloudFailureNoDataError"]], "remotecloudfailurenotindirectoryerror": [[158, "bosdyn.client.recording.RemoteCloudFailureNotInDirectoryError"]], "toofarfromexistingmaperror": [[158, "bosdyn.client.recording.TooFarFromExistingMapError"]], "waypointregion (class in bosdyn.client.recording)": [[158, "bosdyn.client.recording.WaypointRegion"]], "bosdyn.client.recording": [[158, "module-bosdyn.client.recording"]], "create_edge() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_edge"]], "create_edge_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_edge_async"]], "create_waypoint() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_waypoint"]], "create_waypoint_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_waypoint_async"]], "default_service_name (bosdyn.client.recording.graphnavrecordingserviceclient attribute)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.default_service_name"]], "get_record_status() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.get_record_status"]], "get_record_status_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.get_record_status_async"]], "make_client_metadata() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_client_metadata"]], "make_edge() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_edge"]], "make_edge_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_edge_environment"]], "make_recording_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_recording_environment"]], "make_waypoint_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_waypoint_environment"]], "service_type (bosdyn.client.recording.graphnavrecordingserviceclient attribute)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.service_type"]], "set_recording_environment() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.set_recording_environment"]], "set_recording_environment_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.set_recording_environment_async"]], "start_recording() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording"]], "start_recording_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_async"]], "start_recording_full() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_full"]], "start_recording_full_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_full_async"]], "stop_recording() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.stop_recording"]], "stop_recording_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[158, "bosdyn.client.recording.GraphNavRecordingServiceClient.stop_recording_async"]], "robot (class in bosdyn.client.robot)": [[159, "bosdyn.client.robot.Robot"]], "roboterror": [[159, "bosdyn.client.robot.RobotError"]], "unregisteredserviceerror": [[159, "bosdyn.client.robot.UnregisteredServiceError"]], "unregisteredservicenameerror": [[159, "bosdyn.client.robot.UnregisteredServiceNameError"]], "unregisteredservicetypeerror": [[159, "bosdyn.client.robot.UnregisteredServiceTypeError"]], "authenticate() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.authenticate"]], "authenticate_from_cache() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.authenticate_from_cache"]], "authenticate_from_payload_credentials() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.authenticate_from_payload_credentials"]], "authenticate_with_token() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.authenticate_with_token"]], "bosdyn.client.robot": [[159, "module-bosdyn.client.robot"]], "ensure_channel() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.ensure_channel"]], "ensure_client() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.ensure_client"]], "ensure_secure_channel() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.ensure_secure_channel"]], "get_cached_hardware_hardware_configuration() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.get_cached_hardware_hardware_configuration"]], "get_cached_robot_id() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.get_cached_robot_id"]], "get_cached_usernames() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.get_cached_usernames"]], "get_frame_tree_snapshot() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.get_frame_tree_snapshot"]], "get_id() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.get_id"]], "has_arm() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.has_arm"]], "host (bosdyn.client.robot.robot property)": [[159, "bosdyn.client.robot.Robot.host"]], "is_estopped() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.is_estopped"]], "is_powered_on() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.is_powered_on"]], "list_services() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.list_services"]], "log_event() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.log_event"]], "operator_comment() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.operator_comment"]], "power_off() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.power_off"]], "power_on() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.power_on"]], "register_payload_and_authenticate() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.register_payload_and_authenticate"]], "setup_token_cache() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.setup_token_cache"]], "shutdown() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.shutdown"]], "start_time_sync() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.start_time_sync"]], "stop_time_sync() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.stop_time_sync"]], "sync_with_directory() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.sync_with_directory"]], "sync_with_services_list() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.sync_with_services_list"]], "time_sec() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.time_sec"]], "time_sync (bosdyn.client.robot.robot property)": [[159, "bosdyn.client.robot.Robot.time_sync"]], "update_from() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.update_from"]], "update_secure_channel_port() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.update_secure_channel_port"]], "update_user_token() (bosdyn.client.robot.robot method)": [[159, "bosdyn.client.robot.Robot.update_user_token"]], "behaviorfaulterror": [[160, "bosdyn.client.robot_command.BehaviorFaultError"]], "commandfailederror": [[160, "bosdyn.client.robot_command.CommandFailedError"]], "commandfailederrorwithfeedback": [[160, "bosdyn.client.robot_command.CommandFailedErrorWithFeedback"]], "dockederror": [[160, "bosdyn.client.robot_command.DockedError"]], "expirederror": [[160, "bosdyn.client.robot_command.ExpiredError"]], "notclearederror": [[160, "bosdyn.client.robot_command.NotClearedError"]], "notpoweredonerror": [[160, "bosdyn.client.robot_command.NotPoweredOnError"]], "robotcommandbuilder (class in bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder"]], "robotcommandclient (class in bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.RobotCommandClient"]], "robotcommandresponseerror": [[160, "bosdyn.client.robot_command.RobotCommandResponseError"]], "robotcommandstreamingclient (class in bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.RobotCommandStreamingClient"]], "unsupportederror": [[160, "bosdyn.client.robot_command.UnsupportedError"]], "arm_carry_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_carry_command"]], "arm_cartesian_move_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_cartesian_move_helper"]], "arm_gaze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_gaze_command"]], "arm_joint_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_command"]], "arm_joint_freeze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_freeze_command"]], "arm_joint_move_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_move_helper"]], "arm_pose_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_pose_command"]], "arm_pose_command_from_pose() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_pose_command_from_pose"]], "arm_ready_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_ready_command"]], "arm_stow_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_stow_command"]], "arm_wrench_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.arm_wrench_command"]], "battery_change_pose_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.battery_change_pose_command"]], "block_for_trajectory_cmd() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.block_for_trajectory_cmd"]], "block_until_arm_arrives() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.block_until_arm_arrives"]], "blocking_command() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.blocking_command"]], "blocking_selfright() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.blocking_selfright"]], "blocking_sit() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.blocking_sit"]], "blocking_stand() (in module bosdyn.client.robot_command)": [[160, "bosdyn.client.robot_command.blocking_stand"]], "body_pose() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.body_pose"]], "bosdyn.client.robot_command": [[160, "module-bosdyn.client.robot_command"]], "build_body_external_forces() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.build_body_external_forces"]], "build_synchro_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.build_synchro_command"]], "claw_gripper_close_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_close_command"]], "claw_gripper_command_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_command_helper"]], "claw_gripper_open_angle_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_angle_command"]], "claw_gripper_open_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_command"]], "claw_gripper_open_fraction_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_fraction_command"]], "clear_behavior_fault() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.clear_behavior_fault"]], "clear_behavior_fault_async() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.clear_behavior_fault_async"]], "constrained_manipulation_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.constrained_manipulation_command"]], "create_arm_joint_trajectory_point() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.create_arm_joint_trajectory_point"]], "default_service_name (bosdyn.client.robot_command.robotcommandclient attribute)": [[160, "bosdyn.client.robot_command.RobotCommandClient.default_service_name"]], "default_service_name (bosdyn.client.robot_command.robotcommandstreamingclient attribute)": [[160, "bosdyn.client.robot_command.RobotCommandStreamingClient.default_service_name"]], "follow_arm_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.follow_arm_command"]], "freeze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.freeze_command"]], "joint_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.joint_command"]], "mobility_params() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.mobility_params"]], "payload_estimation_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.payload_estimation_command"]], "robot_command() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.robot_command"]], "robot_command_async() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.robot_command_async"]], "robot_command_feedback() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.robot_command_feedback"]], "robot_command_feedback_async() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.robot_command_feedback_async"]], "safe_power_off_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.safe_power_off_command"]], "selfright_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.selfright_command"]], "send_joint_control_commands() (bosdyn.client.robot_command.robotcommandstreamingclient method)": [[160, "bosdyn.client.robot_command.RobotCommandStreamingClient.send_joint_control_commands"]], "service_type (bosdyn.client.robot_command.robotcommandclient attribute)": [[160, "bosdyn.client.robot_command.RobotCommandClient.service_type"]], "service_type (bosdyn.client.robot_command.robotcommandstreamingclient attribute)": [[160, "bosdyn.client.robot_command.RobotCommandStreamingClient.service_type"]], "stance_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.stance_command"]], "stop_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.stop_command"]], "synchro_se2_trajectory_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_se2_trajectory_command"]], "synchro_se2_trajectory_point_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_se2_trajectory_point_command"]], "synchro_sit_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_sit_command"]], "synchro_stand_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_stand_command"]], "synchro_trajectory_command_in_body_frame() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_trajectory_command_in_body_frame"]], "synchro_velocity_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[160, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_velocity_command"]], "timesync_endpoint (bosdyn.client.robot_command.robotcommandclient property)": [[160, "bosdyn.client.robot_command.RobotCommandClient.timesync_endpoint"]], "update_from() (bosdyn.client.robot_command.robotcommandclient method)": [[160, "bosdyn.client.robot_command.RobotCommandClient.update_from"]], "robotidclient (class in bosdyn.client.robot_id)": [[161, "bosdyn.client.robot_id.RobotIdClient"]], "bosdyn.client.robot_id": [[161, "module-bosdyn.client.robot_id"]], "create_strict_version() (in module bosdyn.client.robot_id)": [[161, "bosdyn.client.robot_id.create_strict_version"]], "default_service_name (bosdyn.client.robot_id.robotidclient attribute)": [[161, "bosdyn.client.robot_id.RobotIdClient.default_service_name"]], "get_id() (bosdyn.client.robot_id.robotidclient method)": [[161, "bosdyn.client.robot_id.RobotIdClient.get_id"]], "get_id_async() (bosdyn.client.robot_id.robotidclient method)": [[161, "bosdyn.client.robot_id.RobotIdClient.get_id_async"]], "service_type (bosdyn.client.robot_id.robotidclient attribute)": [[161, "bosdyn.client.robot_id.RobotIdClient.service_type"]], "version_tuple() (in module bosdyn.client.robot_id)": [[161, "bosdyn.client.robot_id.version_tuple"]], "robotstateclient (class in bosdyn.client.robot_state)": [[162, "bosdyn.client.robot_state.RobotStateClient"]], "robotstatestreamingclient (class in bosdyn.client.robot_state)": [[162, "bosdyn.client.robot_state.RobotStateStreamingClient"]], "bosdyn.client.robot_state": [[162, "module-bosdyn.client.robot_state"]], "default_service_name (bosdyn.client.robot_state.robotstateclient attribute)": [[162, "bosdyn.client.robot_state.RobotStateClient.default_service_name"]], "default_service_name (bosdyn.client.robot_state.robotstatestreamingclient attribute)": [[162, "bosdyn.client.robot_state.RobotStateStreamingClient.default_service_name"]], "get_hardware_config_with_link_info() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_hardware_config_with_link_info"]], "get_robot_hardware_configuration() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_hardware_configuration"]], "get_robot_hardware_configuration_async() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_hardware_configuration_async"]], "get_robot_link_model() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_link_model"]], "get_robot_link_model_async() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_link_model_async"]], "get_robot_metrics() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_metrics"]], "get_robot_metrics_async() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_metrics_async"]], "get_robot_state() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_state"]], "get_robot_state_async() (bosdyn.client.robot_state.robotstateclient method)": [[162, "bosdyn.client.robot_state.RobotStateClient.get_robot_state_async"]], "get_robot_state_stream() (bosdyn.client.robot_state.robotstatestreamingclient method)": [[162, "bosdyn.client.robot_state.RobotStateStreamingClient.get_robot_state_stream"]], "has_arm() (in module bosdyn.client.robot_state)": [[162, "bosdyn.client.robot_state.has_arm"]], "service_type (bosdyn.client.robot_state.robotstateclient attribute)": [[162, "bosdyn.client.robot_state.RobotStateClient.service_type"]], "service_type (bosdyn.client.robot_state.robotstatestreamingclient attribute)": [[162, "bosdyn.client.robot_state.RobotStateStreamingClient.service_type"]], "sdk (class in bosdyn.client.sdk)": [[163, "bosdyn.client.sdk.Sdk"]], "sdkerror": [[163, "bosdyn.client.sdk.SdkError"]], "unabletoloadapptokenerror": [[163, "bosdyn.client.sdk.UnableToLoadAppTokenError"]], "unsetapptokenerror": [[163, "bosdyn.client.sdk.UnsetAppTokenError"]], "bosdyn.client.sdk": [[163, "module-bosdyn.client.sdk"]], "clear_robots() (bosdyn.client.sdk.sdk method)": [[163, "bosdyn.client.sdk.Sdk.clear_robots"]], "create_robot() (bosdyn.client.sdk.sdk method)": [[163, "bosdyn.client.sdk.Sdk.create_robot"]], "create_standard_sdk() (in module bosdyn.client.sdk)": [[163, "bosdyn.client.sdk.create_standard_sdk"]], "decode_token() (in module bosdyn.client.sdk)": [[163, "bosdyn.client.sdk.decode_token"]], "generate_client_name() (in module bosdyn.client.sdk)": [[163, "bosdyn.client.sdk.generate_client_name"]], "load_robot_cert() (bosdyn.client.sdk.sdk method)": [[163, "bosdyn.client.sdk.Sdk.load_robot_cert"]], "log_token_time_remaining() (in module bosdyn.client.sdk)": [[163, "bosdyn.client.sdk.log_token_time_remaining"]], "register_service_client() (bosdyn.client.sdk.sdk method)": [[163, "bosdyn.client.sdk.Sdk.register_service_client"]], "set_max_message_length() (bosdyn.client.sdk.sdk method)": [[163, "bosdyn.client.sdk.Sdk.set_max_message_length"]], "grpcservicerunner (class in bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.GrpcServiceRunner"]], "responsecontext (class in bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.ResponseContext"]], "bosdyn.client.server_util": [[164, "module-bosdyn.client.server_util"]], "get_bytes_field_allowlist() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.get_bytes_field_allowlist"]], "populate_response_header() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.populate_response_header"]], "run_until_interrupt() (bosdyn.client.server_util.grpcservicerunner method)": [[164, "bosdyn.client.server_util.GrpcServiceRunner.run_until_interrupt"]], "stop() (bosdyn.client.server_util.grpcservicerunner method)": [[164, "bosdyn.client.server_util.GrpcServiceRunner.stop"]], "strip_get_image_response() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_get_image_response"]], "strip_image_response() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_image_response"]], "strip_large_bytes_fields() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_large_bytes_fields"]], "strip_local_grid_responses() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_local_grid_responses"]], "strip_record_data_blob() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_record_data_blob"]], "strip_record_signal_tick() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_record_signal_tick"]], "strip_store_data_request() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_store_data_request"]], "strip_store_image_request() (in module bosdyn.client.server_util)": [[164, "bosdyn.client.server_util.strip_store_image_request"]], "invalidcustomparamspecerror": [[165, "bosdyn.client.service_customization_helpers.InvalidCustomParamSpecError"]], "invalidcustomparamvalueerror": [[165, "bosdyn.client.service_customization_helpers.InvalidCustomParamValueError"]], "bool_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.bool_spec_to_default"]], "bosdyn.client.service_customization_helpers": [[165, "module-bosdyn.client.service_customization_helpers"]], "check_types_match() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.check_types_match"]], "create_value_validator() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.create_value_validator"]], "custom_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.custom_param_coerce_to"]], "custom_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.custom_spec_to_default"]], "dict_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.dict_param_coerce_to"]], "dict_params_to_dict() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.dict_params_to_dict"]], "dict_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.dict_spec_to_default"]], "double_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.double_param_coerce_to"]], "double_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.double_spec_to_default"]], "int_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.int_param_coerce_to"]], "int_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.int_spec_to_default"]], "list_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.list_param_coerce_to"]], "list_params_to_list() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.list_params_to_list"]], "list_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.list_spec_to_default"]], "make_bool_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_bool_param_spec"]], "make_custom_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_custom_param_spec"]], "make_dict_child_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_dict_child_spec"]], "make_dict_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_dict_param_spec"]], "make_double_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_double_param_spec"]], "make_int64_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_int64_param_spec"]], "make_list_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_list_param_spec"]], "make_one_of_child_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_one_of_child_spec"]], "make_one_of_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_one_of_param_spec"]], "make_region_of_interest_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_region_of_interest_param_spec"]], "make_roi_service_and_source() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_roi_service_and_source"]], "make_string_param_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_string_param_spec"]], "make_user_interface_info() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.make_user_interface_info"]], "one_of_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.one_of_param_coerce_to"]], "one_of_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.one_of_spec_to_default"]], "oneof_param_to_dict() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.oneof_param_to_dict"]], "roi_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.roi_param_coerce_to"]], "roi_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.roi_spec_to_default"]], "string_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.string_param_coerce_to"]], "string_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.string_spec_to_default"]], "validate_dict_spec() (in module bosdyn.client.service_customization_helpers)": [[165, "bosdyn.client.service_customization_helpers.validate_dict_spec"]], "bosdyn.client.signals_helpers": [[166, "module-bosdyn.client.signals_helpers"]], "build_capability_live_data() (in module bosdyn.client.signals_helpers)": [[166, "bosdyn.client.signals_helpers.build_capability_live_data"]], "build_live_data_response() (in module bosdyn.client.signals_helpers)": [[166, "bosdyn.client.signals_helpers.build_live_data_response"]], "build_max_alert_spec() (in module bosdyn.client.signals_helpers)": [[166, "bosdyn.client.signals_helpers.build_max_alert_spec"]], "build_simple_signal() (in module bosdyn.client.signals_helpers)": [[166, "bosdyn.client.signals_helpers.build_simple_signal"]], "get_data() (in module bosdyn.client.signals_helpers)": [[166, "bosdyn.client.signals_helpers.get_data"]], "audioclient (class in bosdyn.client.spot_cam.audio)": [[168, "bosdyn.client.spot_cam.audio.AudioClient"]], "bosdyn.client.spot_cam.audio": [[168, "module-bosdyn.client.spot_cam.audio"]], "default_service_name (bosdyn.client.spot_cam.audio.audioclient attribute)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.default_service_name"]], "delete_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.delete_sound"]], "delete_sound_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.delete_sound_async"]], "get_audio_capture_channel() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_channel"]], "get_audio_capture_channel_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_channel_async"]], "get_audio_capture_gain() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_gain"]], "get_audio_capture_gain_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_gain_async"]], "get_volume() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_volume"]], "get_volume_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.get_volume_async"]], "list_sounds() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.list_sounds"]], "list_sounds_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.list_sounds_async"]], "load_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.load_sound"]], "play_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.play_sound"]], "play_sound_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.play_sound_async"]], "service_type (bosdyn.client.spot_cam.audio.audioclient attribute)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.service_type"]], "set_audio_capture_channel() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_channel"]], "set_audio_capture_channel_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_channel_async"]], "set_audio_capture_gain() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_gain"]], "set_audio_capture_gain_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_gain_async"]], "set_volume() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_volume"]], "set_volume_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[168, "bosdyn.client.spot_cam.audio.AudioClient.set_volume_async"]], "compositorclient (class in bosdyn.client.spot_cam.compositor)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient"]], "bosdyn.client.spot_cam.compositor": [[169, "module-bosdyn.client.spot_cam.compositor"]], "default_service_name (bosdyn.client.spot_cam.compositor.compositorclient attribute)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.default_service_name"]], "get_ir_colormap() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_colormap"]], "get_ir_colormap_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_colormap_async"]], "get_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_meter_overlay"]], "get_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_meter_overlay_async"]], "get_screen() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_screen"]], "get_screen_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_screen_async"]], "get_visible_cameras() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_visible_cameras"]], "get_visible_cameras_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.get_visible_cameras_async"]], "list_screens() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.list_screens"]], "list_screens_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.list_screens_async"]], "service_type (bosdyn.client.spot_cam.compositor.compositorclient attribute)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.service_type"]], "set_ir_colormap() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_colormap"]], "set_ir_colormap_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_colormap_async"]], "set_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_meter_overlay"]], "set_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_meter_overlay_async"]], "set_multi_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_multi_ir_meter_overlay"]], "set_multi_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_multi_ir_meter_overlay_async"]], "set_screen() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_screen"]], "set_screen_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[169, "bosdyn.client.spot_cam.compositor.CompositorClient.set_screen_async"]], "healthclient (class in bosdyn.client.spot_cam.health)": [[170, "bosdyn.client.spot_cam.health.HealthClient"]], "bosdyn.client.spot_cam.health": [[170, "module-bosdyn.client.spot_cam.health"]], "clear_bit_events() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.clear_bit_events"]], "clear_bit_events_async() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.clear_bit_events_async"]], "default_service_name (bosdyn.client.spot_cam.health.healthclient attribute)": [[170, "bosdyn.client.spot_cam.health.HealthClient.default_service_name"]], "get_bit_status() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_bit_status"]], "get_bit_status_async() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_bit_status_async"]], "get_system_log() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_system_log"]], "get_system_log_async() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_system_log_async"]], "get_temperature() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_temperature"]], "get_temperature_async() (bosdyn.client.spot_cam.health.healthclient method)": [[170, "bosdyn.client.spot_cam.health.HealthClient.get_temperature_async"]], "service_type (bosdyn.client.spot_cam.health.healthclient attribute)": [[170, "bosdyn.client.spot_cam.health.HealthClient.service_type"]], "lightingclient (class in bosdyn.client.spot_cam.lighting)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient"]], "bosdyn.client.spot_cam.lighting": [[171, "module-bosdyn.client.spot_cam.lighting"]], "default_service_name (bosdyn.client.spot_cam.lighting.lightingclient attribute)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.default_service_name"]], "get_led_brightness() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.get_led_brightness"]], "get_led_brightness_async() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.get_led_brightness_async"]], "service_type (bosdyn.client.spot_cam.lighting.lightingclient attribute)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.service_type"]], "set_led_brightness() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.set_led_brightness"]], "set_led_brightness_async() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[171, "bosdyn.client.spot_cam.lighting.LightingClient.set_led_brightness_async"]], "lightshelper (class in bosdyn.client.spot_cam.lights_helper)": [[172, "bosdyn.client.spot_cam.lights_helper.LightsHelper"]], "bosdyn.client.spot_cam.lights_helper": [[172, "module-bosdyn.client.spot_cam.lights_helper"]], "set_lights_with_freq_and_brightness() (in module bosdyn.client.spot_cam.lights_helper)": [[172, "bosdyn.client.spot_cam.lights_helper.set_lights_with_freq_and_brightness"]], "medialogclient (class in bosdyn.client.spot_cam.media_log)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient"]], "bosdyn.client.spot_cam.media_log": [[173, "module-bosdyn.client.spot_cam.media_log"]], "default_service_name (bosdyn.client.spot_cam.media_log.medialogclient attribute)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.default_service_name"]], "delete() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.delete"]], "delete_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.delete_async"]], "enable_debug() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.enable_debug"]], "enable_debug_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.enable_debug_async"]], "get_status() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.get_status"]], "get_status_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.get_status_async"]], "list_cameras() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_cameras"]], "list_cameras_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_cameras_async"]], "list_logpoints() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_logpoints"]], "retrieve() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.retrieve"]], "retrieve_raw_data() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.retrieve_raw_data"]], "service_type (bosdyn.client.spot_cam.media_log.medialogclient attribute)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.service_type"]], "set_passphrase() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.set_passphrase"]], "set_passphrase_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.set_passphrase_async"]], "store() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.store"]], "store_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.store_async"]], "tag() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.tag"]], "tag_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[173, "bosdyn.client.spot_cam.media_log.MediaLogClient.tag_async"]], "networkclient (class in bosdyn.client.spot_cam.network)": [[174, "bosdyn.client.spot_cam.network.NetworkClient"]], "bosdyn.client.spot_cam.network": [[174, "module-bosdyn.client.spot_cam.network"]], "default_service_name (bosdyn.client.spot_cam.network.networkclient attribute)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.default_service_name"]], "get_ice_configuration() (bosdyn.client.spot_cam.network.networkclient method)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.get_ice_configuration"]], "get_ice_configuration_async() (bosdyn.client.spot_cam.network.networkclient method)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.get_ice_configuration_async"]], "service_type (bosdyn.client.spot_cam.network.networkclient attribute)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.service_type"]], "set_ice_configuration() (bosdyn.client.spot_cam.network.networkclient method)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.set_ice_configuration"]], "set_ice_configuration_async() (bosdyn.client.spot_cam.network.networkclient method)": [[174, "bosdyn.client.spot_cam.network.NetworkClient.set_ice_configuration_async"]], "powerclient (class in bosdyn.client.spot_cam.power)": [[175, "bosdyn.client.spot_cam.power.PowerClient"]], "bosdyn.client.spot_cam.power": [[175, "module-bosdyn.client.spot_cam.power"]], "cycle_power() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.cycle_power"]], "cycle_power_async() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.cycle_power_async"]], "default_service_name (bosdyn.client.spot_cam.power.powerclient attribute)": [[175, "bosdyn.client.spot_cam.power.PowerClient.default_service_name"]], "get_power_status() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.get_power_status"]], "get_power_status_async() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.get_power_status_async"]], "service_type (bosdyn.client.spot_cam.power.powerclient attribute)": [[175, "bosdyn.client.spot_cam.power.PowerClient.service_type"]], "set_power_status() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.set_power_status"]], "set_power_status_async() (bosdyn.client.spot_cam.power.powerclient method)": [[175, "bosdyn.client.spot_cam.power.PowerClient.set_power_status_async"]], "ptzclient (class in bosdyn.client.spot_cam.ptz)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient"]], "bosdyn.client.spot_cam.ptz": [[176, "module-bosdyn.client.spot_cam.ptz"]], "default_service_name (bosdyn.client.spot_cam.ptz.ptzclient attribute)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.default_service_name"]], "get_ptz_focus_state() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_focus_state"]], "get_ptz_focus_state_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_focus_state_async"]], "get_ptz_position() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_position"]], "get_ptz_position_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_position_async"]], "get_ptz_velocity() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_velocity"]], "get_ptz_velocity_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_velocity_async"]], "initialize_lens() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.initialize_lens"]], "initialize_lens_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.initialize_lens_async"]], "list_ptz() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.list_ptz"]], "list_ptz_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.list_ptz_async"]], "service_type (bosdyn.client.spot_cam.ptz.ptzclient attribute)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.service_type"]], "set_ptz_focus_state() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_focus_state"]], "set_ptz_focus_state_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_focus_state_async"]], "set_ptz_position() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_position"]], "set_ptz_position_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_position_async"]], "set_ptz_velocity() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_velocity"]], "set_ptz_velocity_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[176, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_velocity_async"]], "shift_pan_angle() (in module bosdyn.client.spot_cam.ptz)": [[176, "bosdyn.client.spot_cam.ptz.shift_pan_angle"]], "streamqualityclient (class in bosdyn.client.spot_cam.streamquality)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient"]], "bosdyn.client.spot_cam.streamquality": [[177, "module-bosdyn.client.spot_cam.streamquality"]], "default_service_name (bosdyn.client.spot_cam.streamquality.streamqualityclient attribute)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.default_service_name"]], "enable_congestion_control() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.enable_congestion_control"]], "enable_congestion_control_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.enable_congestion_control_async"]], "get_stream_params() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.get_stream_params"]], "get_stream_params_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.get_stream_params_async"]], "service_type (bosdyn.client.spot_cam.streamquality.streamqualityclient attribute)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.service_type"]], "set_stream_params() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.set_stream_params"]], "set_stream_params_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[177, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.set_stream_params_async"]], "versionclient (class in bosdyn.client.spot_cam.version)": [[178, "bosdyn.client.spot_cam.version.VersionClient"]], "bosdyn.client.spot_cam.version": [[178, "module-bosdyn.client.spot_cam.version"]], "default_service_name (bosdyn.client.spot_cam.version.versionclient attribute)": [[178, "bosdyn.client.spot_cam.version.VersionClient.default_service_name"]], "get_software_version() (bosdyn.client.spot_cam.version.versionclient method)": [[178, "bosdyn.client.spot_cam.version.VersionClient.get_software_version"]], "get_software_version_async() (bosdyn.client.spot_cam.version.versionclient method)": [[178, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_async"]], "get_software_version_full() (bosdyn.client.spot_cam.version.versionclient method)": [[178, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_full"]], "get_software_version_full_async() (bosdyn.client.spot_cam.version.versionclient method)": [[178, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_full_async"]], "service_type (bosdyn.client.spot_cam.version.versionclient attribute)": [[178, "bosdyn.client.spot_cam.version.VersionClient.service_type"]], "cameracalibrationcalibrationerror": [[179, "bosdyn.client.spot_check.CameraCalibrationCalibrationError"]], "cameracalibrationinternalerror": [[179, "bosdyn.client.spot_check.CameraCalibrationInternalError"]], "cameracalibrationpowererror": [[179, "bosdyn.client.spot_check.CameraCalibrationPowerError"]], "cameracalibrationresponseerror": [[179, "bosdyn.client.spot_check.CameraCalibrationResponseError"]], "cameracalibrationrobotcommanderror": [[179, "bosdyn.client.spot_check.CameraCalibrationRobotCommandError"]], "cameracalibrationtargetnotcenterederror": [[179, "bosdyn.client.spot_check.CameraCalibrationTargetNotCenteredError"]], "cameracalibrationtimedouterror": [[179, "bosdyn.client.spot_check.CameraCalibrationTimedOutError"]], "cameracalibrationusercancelederror": [[179, "bosdyn.client.spot_check.CameraCalibrationUserCanceledError"]], "cameraspotcheckfeedbackerror": [[179, "bosdyn.client.spot_check.CameraSpotCheckFeedbackError"]], "cameraspotchecktimedouterror": [[179, "bosdyn.client.spot_check.CameraSpotCheckTimedOutError"]], "grippercameracalibrationcalibrationerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationCalibrationError"]], "grippercameracalibrationinitializationerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationInitializationError"]], "grippercameracalibrationinternalerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationInternalError"]], "grippercameracalibrationleaseerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationLeaseError"]], "grippercameracalibrationpowererror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationPowerError"]], "grippercameracalibrationresponseerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationResponseError"]], "grippercameracalibrationstuckerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationStuckError"]], "grippercameracalibrationtargetnotcenterederror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationTargetNotCenteredError"]], "grippercameracalibrationtargetupsidedownerror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationTargetUpsideDownError"]], "grippercameracalibrationusercancelederror": [[179, "bosdyn.client.spot_check.GripperCameraCalibrationUserCanceledError"]], "spotcheckcameratimeouterror": [[179, "bosdyn.client.spot_check.SpotCheckCameraTimeoutError"]], "spotcheckclient (class in bosdyn.client.spot_check)": [[179, "bosdyn.client.spot_check.SpotCheckClient"]], "spotcheckendstoptimeouterror": [[179, "bosdyn.client.spot_check.SpotCheckEndstopTimeoutError"]], "spotcheckerror": [[179, "bosdyn.client.spot_check.SpotCheckError"]], "spotcheckgroundcheckerror": [[179, "bosdyn.client.spot_check.SpotCheckGroundCheckError"]], "spotcheckimucheckerror": [[179, "bosdyn.client.spot_check.SpotCheckImuCheckError"]], "spotcheckloadcelltimeouterror": [[179, "bosdyn.client.spot_check.SpotCheckLoadcellTimeoutError"]], "spotchecknotsittingerror": [[179, "bosdyn.client.spot_check.SpotCheckNotSittingError"]], "spotcheckpoweronfailure": [[179, "bosdyn.client.spot_check.SpotCheckPowerOnFailure"]], "spotcheckresponseerror": [[179, "bosdyn.client.spot_check.SpotCheckResponseError"]], "spotcheckstandfailureerror": [[179, "bosdyn.client.spot_check.SpotCheckStandFailureError"]], "spotchecktimedouterror": [[179, "bosdyn.client.spot_check.SpotCheckTimedOutError"]], "spotcheckunexpectedpowerchangeerror": [[179, "bosdyn.client.spot_check.SpotCheckUnexpectedPowerChangeError"]], "bosdyn.client.spot_check": [[179, "module-bosdyn.client.spot_check"]], "camera_calibration_command() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_command"]], "camera_calibration_command_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_command_async"]], "camera_calibration_feedback() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_feedback"]], "camera_calibration_feedback_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_feedback_async"]], "default_service_name (bosdyn.client.spot_check.spotcheckclient attribute)": [[179, "bosdyn.client.spot_check.SpotCheckClient.default_service_name"]], "gripper_camera_calibration_command() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.gripper_camera_calibration_command"]], "gripper_camera_calibration_command_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.gripper_camera_calibration_command_async"]], "gripper_camera_calibration_feedback() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.gripper_camera_calibration_feedback"]], "gripper_camera_calibration_feedback_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.gripper_camera_calibration_feedback_async"]], "run_camera_calibration() (in module bosdyn.client.spot_check)": [[179, "bosdyn.client.spot_check.run_camera_calibration"]], "run_spot_check() (in module bosdyn.client.spot_check)": [[179, "bosdyn.client.spot_check.run_spot_check"]], "service_type (bosdyn.client.spot_check.spotcheckclient attribute)": [[179, "bosdyn.client.spot_check.SpotCheckClient.service_type"]], "spot_check_command() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.spot_check_command"]], "spot_check_command_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.spot_check_command_async"]], "spot_check_feedback() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.spot_check_feedback"]], "spot_check_feedback_async() (bosdyn.client.spot_check.spotcheckclient method)": [[179, "bosdyn.client.spot_check.SpotCheckClient.spot_check_feedback_async"]], "default_time_sync_interval_sec (bosdyn.client.time_sync.timesyncthread attribute)": [[180, "bosdyn.client.time_sync.TimeSyncThread.DEFAULT_TIME_SYNC_INTERVAL_SEC"]], "inactivethreaderror": [[180, "bosdyn.client.time_sync.InactiveThreadError"]], "notestablishederror": [[180, "bosdyn.client.time_sync.NotEstablishedError"]], "time_sync_service_not_ready_interval_sec (bosdyn.client.time_sync.timesyncthread attribute)": [[180, "bosdyn.client.time_sync.TimeSyncThread.TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC"]], "timesyncclient (class in bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.TimeSyncClient"]], "timesyncendpoint (class in bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint"]], "timesyncerror": [[180, "bosdyn.client.time_sync.TimeSyncError"]], "timesyncthread (class in bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.TimeSyncThread"]], "bosdyn.client.time_sync": [[180, "module-bosdyn.client.time_sync"]], "clock_identifier (bosdyn.client.time_sync.timesyncendpoint property)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.clock_identifier"]], "clock_skew (bosdyn.client.time_sync.timesyncendpoint property)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.clock_skew"]], "default_service_name (bosdyn.client.time_sync.timesyncclient attribute)": [[180, "bosdyn.client.time_sync.TimeSyncClient.default_service_name"]], "endpoint (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.endpoint"]], "establish_timesync() (bosdyn.client.time_sync.timesyncendpoint method)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.establish_timesync"]], "get_new_estimate() (bosdyn.client.time_sync.timesyncendpoint method)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.get_new_estimate"]], "get_robot_clock_skew() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.get_robot_clock_skew"]], "get_robot_time_converter() (bosdyn.client.time_sync.timesyncendpoint method)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.get_robot_time_converter"]], "get_robot_time_converter() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.get_robot_time_converter"]], "get_time_sync_update() (bosdyn.client.time_sync.timesyncclient method)": [[180, "bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update"]], "get_time_sync_update_async() (bosdyn.client.time_sync.timesyncclient method)": [[180, "bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update_async"]], "has_established_time_sync (bosdyn.client.time_sync.timesyncendpoint property)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.has_established_time_sync"]], "has_established_time_sync (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.has_established_time_sync"]], "response (bosdyn.client.time_sync.timesyncendpoint property)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.response"]], "robot_time_range_from_datetimes() (in module bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.robot_time_range_from_datetimes"]], "robot_time_range_from_nanoseconds() (in module bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.robot_time_range_from_nanoseconds"]], "robot_timestamp_from_local_secs() (bosdyn.client.time_sync.timesyncendpoint method)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.robot_timestamp_from_local_secs"]], "robot_timestamp_from_local_secs() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.robot_timestamp_from_local_secs"]], "round_trip_time (bosdyn.client.time_sync.timesyncendpoint property)": [[180, "bosdyn.client.time_sync.TimeSyncEndpoint.round_trip_time"]], "service_type (bosdyn.client.time_sync.timesyncclient attribute)": [[180, "bosdyn.client.time_sync.TimeSyncClient.service_type"]], "should_exit (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.should_exit"]], "start() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.start"]], "stop() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.stop"]], "stopped (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.stopped"]], "thread_exception (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.thread_exception"]], "time_sync_interval_sec (bosdyn.client.time_sync.timesyncthread property)": [[180, "bosdyn.client.time_sync.TimeSyncThread.time_sync_interval_sec"]], "timespec_to_robot_timespan() (in module bosdyn.client.time_sync)": [[180, "bosdyn.client.time_sync.timespec_to_robot_timespan"]], "wait_for_sync() (bosdyn.client.time_sync.timesyncthread method)": [[180, "bosdyn.client.time_sync.TimeSyncThread.wait_for_sync"]], "clearfailederror": [[181, "bosdyn.client.token_cache.ClearFailedError"]], "notincacheerror": [[181, "bosdyn.client.token_cache.NotInCacheError"]], "tokencache (class in bosdyn.client.token_cache)": [[181, "bosdyn.client.token_cache.TokenCache"]], "tokencacheerror": [[181, "bosdyn.client.token_cache.TokenCacheError"]], "tokencachefilesystem (class in bosdyn.client.token_cache)": [[181, "bosdyn.client.token_cache.TokenCacheFilesystem"]], "writefailederror": [[181, "bosdyn.client.token_cache.WriteFailedError"]], "atomic_file_write() (in module bosdyn.client.token_cache)": [[181, "bosdyn.client.token_cache.atomic_file_write"]], "bosdyn.client.token_cache": [[181, "module-bosdyn.client.token_cache"]], "clear() (bosdyn.client.token_cache.tokencache method)": [[181, "bosdyn.client.token_cache.TokenCache.clear"]], "clear() (bosdyn.client.token_cache.tokencachefilesystem method)": [[181, "bosdyn.client.token_cache.TokenCacheFilesystem.clear"]], "match() (bosdyn.client.token_cache.tokencache method)": [[181, "bosdyn.client.token_cache.TokenCache.match"]], "match() (bosdyn.client.token_cache.tokencachefilesystem method)": [[181, "bosdyn.client.token_cache.TokenCacheFilesystem.match"]], "read() (bosdyn.client.token_cache.tokencache method)": [[181, "bosdyn.client.token_cache.TokenCache.read"]], "read() (bosdyn.client.token_cache.tokencachefilesystem method)": [[181, "bosdyn.client.token_cache.TokenCacheFilesystem.read"]], "write() (bosdyn.client.token_cache.tokencache method)": [[181, "bosdyn.client.token_cache.TokenCache.write"]], "write() (bosdyn.client.token_cache.tokencachefilesystem method)": [[181, "bosdyn.client.token_cache.TokenCacheFilesystem.write"]], "tokenmanager (class in bosdyn.client.token_manager)": [[182, "bosdyn.client.token_manager.TokenManager"]], "bosdyn.client.token_manager": [[182, "module-bosdyn.client.token_manager"]], "is_alive() (bosdyn.client.token_manager.tokenmanager method)": [[182, "bosdyn.client.token_manager.TokenManager.is_alive"]], "stop() (bosdyn.client.token_manager.tokenmanager method)": [[182, "bosdyn.client.token_manager.TokenManager.stop"]], "update() (bosdyn.client.token_manager.tokenmanager method)": [[182, "bosdyn.client.token_manager.TokenManager.update"]], "bosdyn.client.units_helpers": [[183, "module-bosdyn.client.units_helpers"]], "units_to_string() (in module bosdyn.client.units_helpers)": [[183, "bosdyn.client.units_helpers.units_to_string"]], "deduploggingmessages (class in bosdyn.client.util)": [[184, "bosdyn.client.util.DedupLoggingMessages"]], "grpcservicerunner (class in bosdyn.client.util)": [[184, "bosdyn.client.util.GrpcServiceRunner"]], "add_base_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_base_arguments"]], "add_common_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_common_arguments"]], "add_credentials_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_credentials_arguments"]], "add_payload_credentials_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_payload_credentials_arguments"]], "add_payload_credentials_file_argument() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_payload_credentials_file_argument"]], "add_service_endpoint_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_service_endpoint_arguments"]], "add_service_hosting_arguments() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.add_service_hosting_arguments"]], "authenticate() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.authenticate"]], "bosdyn.client.util": [[184, "module-bosdyn.client.util"]], "cli_auth() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.cli_auth"]], "cli_login_prompt() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.cli_login_prompt"]], "does_dedup_filter_exist() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.does_dedup_filter_exist"]], "filter() (bosdyn.client.util.deduploggingmessages method)": [[184, "bosdyn.client.util.DedupLoggingMessages.filter"]], "get_guid_and_secret() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.get_guid_and_secret"]], "get_logger() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.get_logger"]], "read_or_create_payload_credentials() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.read_or_create_payload_credentials"]], "read_payload_credentials() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.read_payload_credentials"]], "run_until_interrupt() (bosdyn.client.util.grpcservicerunner method)": [[184, "bosdyn.client.util.GrpcServiceRunner.run_until_interrupt"]], "safe_pb_enum_to_string() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.safe_pb_enum_to_string"]], "setup_logging() (in module bosdyn.client.util)": [[184, "bosdyn.client.util.setup_logging"]], "stop() (bosdyn.client.util.grpcservicerunner method)": [[184, "bosdyn.client.util.GrpcServiceRunner.stop"]], "worldobjectclient (class in bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.WorldObjectClient"]], "bosdyn.client.world_object": [[185, "module-bosdyn.client.world_object"]], "default_service_name (bosdyn.client.world_object.worldobjectclient attribute)": [[185, "bosdyn.client.world_object.WorldObjectClient.default_service_name"]], "draw_oriented_bounding_box() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.draw_oriented_bounding_box"]], "draw_sphere() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.draw_sphere"]], "list_world_objects() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.list_world_objects"]], "list_world_objects_async() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.list_world_objects_async"]], "make_add_world_object_req() (in module bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.make_add_world_object_req"]], "make_change_world_object_req() (in module bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.make_change_world_object_req"]], "make_delete_world_object_req() (in module bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.make_delete_world_object_req"]], "mutate_world_objects() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.mutate_world_objects"]], "mutate_world_objects_async() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.mutate_world_objects_async"]], "send_add_mutation_requests() (in module bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.send_add_mutation_requests"]], "send_delete_mutation_requests() (in module bosdyn.client.world_object)": [[185, "bosdyn.client.world_object.send_delete_mutation_requests"]], "service_type (bosdyn.client.world_object.worldobjectclient attribute)": [[185, "bosdyn.client.world_object.WorldObjectClient.service_type"]], "timesync_endpoint (bosdyn.client.world_object.worldobjectclient property)": [[185, "bosdyn.client.world_object.WorldObjectClient.timesync_endpoint"]], "update_from() (bosdyn.client.world_object.worldobjectclient method)": [[185, "bosdyn.client.world_object.WorldObjectClient.update_from"]], "basedatareader (class in bosdyn.bddf.base_data_reader)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader"]], "annotations (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.annotations"]], "bosdyn.bddf.base_data_reader": [[188, "module-bosdyn.bddf.base_data_reader"]], "checksum (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.checksum"]], "file_descriptor (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.file_descriptor"]], "file_index (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.file_index"]], "filename (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.filename"]], "read_checksum (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.read_checksum"]], "series_spec_to_index() (bosdyn.bddf.base_data_reader.basedatareader method)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.series_spec_to_index"]], "version (bosdyn.bddf.base_data_reader.basedatareader property)": [[188, "bosdyn.bddf.base_data_reader.BaseDataReader.version"]], "blockwriter (class in bosdyn.bddf.block_writer)": [[189, "bosdyn.bddf.block_writer.BlockWriter"]], "bosdyn.bddf.block_writer": [[189, "module-bosdyn.bddf.block_writer"]], "close() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.close"]], "closed (bosdyn.bddf.block_writer.blockwriter property)": [[189, "bosdyn.bddf.block_writer.BlockWriter.closed"]], "tell() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.tell"]], "write_data_block() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.write_data_block"]], "write_descriptor_block() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.write_descriptor_block"]], "write_file_end() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.write_file_end"]], "write_header() (bosdyn.bddf.block_writer.blockwriter method)": [[189, "bosdyn.bddf.block_writer.BlockWriter.write_header"]], "channel (bosdyn.bddf.bosdyn.messagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.MessageChannel.CHANNEL"]], "channel (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.TypedMessageChannel.CHANNEL"]], "grpcrequests (class in bosdyn.bddf.bosdyn)": [[190, "bosdyn.bddf.bosdyn.GrpcRequests"]], "grpcresponses (class in bosdyn.bddf.bosdyn)": [[190, "bosdyn.bddf.bosdyn.GrpcResponses"]], "keys (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcRequests.KEYS"]], "keys (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcResponses.KEYS"]], "keys (bosdyn.bddf.bosdyn.messagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.MessageChannel.KEYS"]], "keys (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.TypedMessageChannel.KEYS"]], "message_type (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcRequests.MESSAGE_TYPE"]], "message_type (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcResponses.MESSAGE_TYPE"]], "message_type (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.TypedMessageChannel.MESSAGE_TYPE"]], "messagechannel (class in bosdyn.bddf.bosdyn)": [[190, "bosdyn.bddf.bosdyn.MessageChannel"]], "series_type (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcRequests.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcResponses.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.messagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.MessageChannel.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[190, "bosdyn.bddf.bosdyn.TypedMessageChannel.SERIES_TYPE"]], "service_name (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcRequests.SERVICE_NAME"]], "service_name (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[190, "bosdyn.bddf.bosdyn.GrpcResponses.SERVICE_NAME"]], "typedmessagechannel (class in bosdyn.bddf.bosdyn)": [[190, "bosdyn.bddf.bosdyn.TypedMessageChannel"]], "bosdyn.bddf.bosdyn": [[190, "module-bosdyn.bddf.bosdyn"]], "addserieserror": [[191, "bosdyn.bddf.common.AddSeriesError"]], "checksumerror": [[191, "bosdyn.bddf.common.ChecksumError"]], "dataerror": [[191, "bosdyn.bddf.common.DataError"]], "dataformaterror": [[191, "bosdyn.bddf.common.DataFormatError"]], "keys (bosdyn.bddf.common.seriesidentifier attribute)": [[191, "bosdyn.bddf.common.SeriesIdentifier.KEYS"]], "parseerror": [[191, "bosdyn.bddf.common.ParseError"]], "series_type (bosdyn.bddf.common.seriesidentifier attribute)": [[191, "bosdyn.bddf.common.SeriesIdentifier.SERIES_TYPE"]], "seriesidentifier (class in bosdyn.bddf.common)": [[191, "bosdyn.bddf.common.SeriesIdentifier"]], "seriesnotuniqueerror": [[191, "bosdyn.bddf.common.SeriesNotUniqueError"]], "bosdyn.bddf.common": [[191, "module-bosdyn.bddf.common"]], "datareader (class in bosdyn.bddf.data_reader)": [[192, "bosdyn.bddf.data_reader.DataReader"]], "bosdyn.bddf.data_reader": [[192, "module-bosdyn.bddf.data_reader"]], "num_data_blocks() (bosdyn.bddf.data_reader.datareader method)": [[192, "bosdyn.bddf.data_reader.DataReader.num_data_blocks"]], "read() (bosdyn.bddf.data_reader.datareader method)": [[192, "bosdyn.bddf.data_reader.DataReader.read"]], "series_block_index() (bosdyn.bddf.data_reader.datareader method)": [[192, "bosdyn.bddf.data_reader.DataReader.series_block_index"]], "series_descriptor() (bosdyn.bddf.data_reader.datareader method)": [[192, "bosdyn.bddf.data_reader.DataReader.series_descriptor"]], "total_bytes() (bosdyn.bddf.data_reader.datareader method)": [[192, "bosdyn.bddf.data_reader.DataReader.total_bytes"]], "datawriter (class in bosdyn.bddf.data_writer)": [[193, "bosdyn.bddf.data_writer.DataWriter"]], "add_message_series() (bosdyn.bddf.data_writer.datawriter method)": [[193, "bosdyn.bddf.data_writer.DataWriter.add_message_series"]], "add_pod_series() (bosdyn.bddf.data_writer.datawriter method)": [[193, "bosdyn.bddf.data_writer.DataWriter.add_pod_series"]], "add_series() (bosdyn.bddf.data_writer.datawriter method)": [[193, "bosdyn.bddf.data_writer.DataWriter.add_series"]], "bosdyn.bddf.data_writer": [[193, "module-bosdyn.bddf.data_writer"]], "file_index (bosdyn.bddf.data_writer.datawriter property)": [[193, "bosdyn.bddf.data_writer.DataWriter.file_index"]], "run_on_close() (bosdyn.bddf.data_writer.datawriter method)": [[193, "bosdyn.bddf.data_writer.DataWriter.run_on_close"]], "write_data() (bosdyn.bddf.data_writer.datawriter method)": [[193, "bosdyn.bddf.data_writer.DataWriter.write_data"]], "fileindexer (class in bosdyn.bddf.file_indexer)": [[194, "bosdyn.bddf.file_indexer.FileIndexer"]], "add_series() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.add_series"]], "add_series_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.add_series_descriptor"]], "bosdyn.bddf.file_indexer": [[194, "module-bosdyn.bddf.file_indexer"]], "descriptor_index (bosdyn.bddf.file_indexer.fileindexer property)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.descriptor_index"]], "file_index (bosdyn.bddf.file_indexer.fileindexer property)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.file_index"]], "index_data_block() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.index_data_block"]], "make_data_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.make_data_descriptor"]], "series_block_indexes (bosdyn.bddf.file_indexer.fileindexer property)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.series_block_indexes"]], "series_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.series_descriptor"]], "series_identifier_to_hash() (bosdyn.bddf.file_indexer.fileindexer static method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.series_identifier_to_hash"]], "write_index() (bosdyn.bddf.file_indexer.fileindexer method)": [[194, "bosdyn.bddf.file_indexer.FileIndexer.write_index"]], "grpcprotoreader (class in bosdyn.bddf.grpc_proto_reader)": [[195, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader"]], "bosdyn.bddf.grpc_proto_reader": [[195, "module-bosdyn.bddf.grpc_proto_reader"]], "get_message() (bosdyn.bddf.grpc_proto_reader.grpcprotoreader method)": [[195, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader.get_message"]], "num_messages (bosdyn.bddf.grpc_proto_reader.grpcprotoreader property)": [[195, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader.num_messages"]], "grpcreader (class in bosdyn.bddf.grpc_reader)": [[196, "bosdyn.bddf.grpc_reader.GrpcReader"]], "bosdyn.bddf.grpc_reader": [[196, "module-bosdyn.bddf.grpc_reader"]], "data_reader (bosdyn.bddf.grpc_reader.grpcreader property)": [[196, "bosdyn.bddf.grpc_reader.GrpcReader.data_reader"]], "get_message() (bosdyn.bddf.grpc_reader.grpcreader method)": [[196, "bosdyn.bddf.grpc_reader.GrpcReader.get_message"]], "get_proto_reader() (bosdyn.bddf.grpc_reader.grpcreader method)": [[196, "bosdyn.bddf.grpc_reader.GrpcReader.get_proto_reader"]], "grpcservicereader (class in bosdyn.bddf.grpc_service_reader)": [[197, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader"]], "add_proto_reader() (bosdyn.bddf.grpc_service_reader.grpcservicereader method)": [[197, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.add_proto_reader"]], "bosdyn.bddf.grpc_service_reader": [[197, "module-bosdyn.bddf.grpc_service_reader"]], "data_reader (bosdyn.bddf.grpc_service_reader.grpcservicereader property)": [[197, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.data_reader"]], "get_proto_reader() (bosdyn.bddf.grpc_service_reader.grpcservicereader method)": [[197, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.get_proto_reader"]], "grpcservicewriter (class in bosdyn.bddf.grpc_service_writer)": [[198, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter"]], "bosdyn.bddf.grpc_service_writer": [[198, "module-bosdyn.bddf.grpc_service_writer"]], "log_request() (bosdyn.bddf.grpc_service_writer.grpcservicewriter method)": [[198, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter.log_request"]], "log_response() (bosdyn.bddf.grpc_service_writer.grpcservicewriter method)": [[198, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter.log_response"]], "messagereader (class in bosdyn.bddf.message_reader)": [[199, "bosdyn.bddf.message_reader.MessageReader"]], "bosdyn.bddf.message_reader": [[199, "module-bosdyn.bddf.message_reader"]], "channel_name_to_series_decriptor (bosdyn.bddf.message_reader.messagereader property)": [[199, "bosdyn.bddf.message_reader.MessageReader.channel_name_to_series_decriptor"]], "channel_name_to_series_descriptor (bosdyn.bddf.message_reader.messagereader property)": [[199, "bosdyn.bddf.message_reader.MessageReader.channel_name_to_series_descriptor"]], "data_reader (bosdyn.bddf.message_reader.messagereader property)": [[199, "bosdyn.bddf.message_reader.MessageReader.data_reader"]], "get_blob() (bosdyn.bddf.message_reader.messagereader method)": [[199, "bosdyn.bddf.message_reader.MessageReader.get_blob"]], "series_index() (bosdyn.bddf.message_reader.messagereader method)": [[199, "bosdyn.bddf.message_reader.MessageReader.series_index"]], "series_index_to_descriptor() (bosdyn.bddf.message_reader.messagereader method)": [[199, "bosdyn.bddf.message_reader.MessageReader.series_index_to_descriptor"]], "podseriesreader (class in bosdyn.bddf.pod_series_reader)": [[200, "bosdyn.bddf.pod_series_reader.PodSeriesReader"]], "bosdyn.bddf.pod_series_reader": [[200, "module-bosdyn.bddf.pod_series_reader"]], "num_data_blocks (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[200, "bosdyn.bddf.pod_series_reader.PodSeriesReader.num_data_blocks"]], "pod_type (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[200, "bosdyn.bddf.pod_series_reader.PodSeriesReader.pod_type"]], "read_samples() (bosdyn.bddf.pod_series_reader.podseriesreader method)": [[200, "bosdyn.bddf.pod_series_reader.PodSeriesReader.read_samples"]], "series_descriptor (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[200, "bosdyn.bddf.pod_series_reader.PodSeriesReader.series_descriptor"]], "podserieswriter (class in bosdyn.bddf.pod_series_writer)": [[201, "bosdyn.bddf.pod_series_writer.PodSeriesWriter"]], "bosdyn.bddf.pod_series_writer": [[201, "module-bosdyn.bddf.pod_series_writer"]], "finish_block() (bosdyn.bddf.pod_series_writer.podserieswriter method)": [[201, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.finish_block"]], "series_spec (bosdyn.bddf.pod_series_writer.podserieswriter property)": [[201, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.series_spec"]], "series_type (bosdyn.bddf.pod_series_writer.podserieswriter property)": [[201, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.series_type"]], "write() (bosdyn.bddf.pod_series_writer.podserieswriter method)": [[201, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.write"]], "protobufchannelreader (class in bosdyn.bddf.protobuf_channel_reader)": [[202, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader"]], "protobufchannelreader.iterator (class in bosdyn.bddf.protobuf_channel_reader)": [[202, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.Iterator"]], "bosdyn.bddf.protobuf_channel_reader": [[202, "module-bosdyn.bddf.protobuf_channel_reader"]], "get_message() (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader method)": [[202, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.get_message"]], "num_messages (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader property)": [[202, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.num_messages"]], "series_descriptor (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader property)": [[202, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.series_descriptor"]], "protobufreader (class in bosdyn.bddf.protobuf_reader)": [[203, "bosdyn.bddf.protobuf_reader.ProtobufReader"]], "bosdyn.bddf.protobuf_reader": [[203, "module-bosdyn.bddf.protobuf_reader"]], "get_message() (bosdyn.bddf.protobuf_reader.protobufreader method)": [[203, "bosdyn.bddf.protobuf_reader.ProtobufReader.get_message"]], "protobufserieswriter (class in bosdyn.bddf.protobuf_series_writer)": [[204, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter"]], "bosdyn.bddf.protobuf_series_writer": [[204, "module-bosdyn.bddf.protobuf_series_writer"]], "series_spec (bosdyn.bddf.protobuf_series_writer.protobufserieswriter property)": [[204, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.series_spec"]], "series_type (bosdyn.bddf.protobuf_series_writer.protobufserieswriter property)": [[204, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.series_type"]], "write() (bosdyn.bddf.protobuf_series_writer.protobufserieswriter method)": [[204, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.write"]], "streamdatareader (class in bosdyn.bddf.stream_data_reader)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader"]], "bosdyn.bddf.stream_data_reader": [[205, "module-bosdyn.bddf.stream_data_reader"]], "eof (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.eof"]], "read_checksum (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_checksum"]], "read_data_block() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_data_block"]], "read_next_block() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_next_block"]], "series_block_index() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_block_index"]], "series_block_indexes (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_block_indexes"]], "series_descriptor() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_descriptor"]], "stream_file_index (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[205, "bosdyn.bddf.stream_data_reader.StreamDataReader.stream_file_index"]], "bosdyn.deprecated": [[206, "module-bosdyn.deprecated"]], "moved_to() (in module bosdyn.deprecated)": [[206, "bosdyn.deprecated.moved_to"]], "renamed_to() (in module bosdyn.deprecated)": [[206, "bosdyn.deprecated.renamed_to"]], "eulerzxy (class in bosdyn.geometry)": [[207, "bosdyn.geometry.EulerZXY"]], "bosdyn.geometry": [[207, "module-bosdyn.geometry"]], "to_euler_zxy() (in module bosdyn.geometry)": [[207, "bosdyn.geometry.to_euler_zxy"]], "to_quaternion() (bosdyn.geometry.eulerzxy method)": [[207, "bosdyn.geometry.EulerZXY.to_quaternion"]], "datetimeparseerror": [[208, "bosdyn.util.DatetimeParseError"]], "robottimeconverter (class in bosdyn.util)": [[208, "bosdyn.util.RobotTimeConverter"]], "bosdyn.util": [[208, "module-bosdyn.util"]], "convert_timestamp_from_local_to_robot() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.convert_timestamp_from_local_to_robot"]], "distance_str() (in module bosdyn.util)": [[208, "bosdyn.util.distance_str"]], "duration_str() (in module bosdyn.util)": [[208, "bosdyn.util.duration_str"]], "duration_to_seconds() (in module bosdyn.util)": [[208, "bosdyn.util.duration_to_seconds"]], "format_metric() (in module bosdyn.util)": [[208, "bosdyn.util.format_metric"]], "local_seconds_from_robot_timestamp() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.local_seconds_from_robot_timestamp"]], "now_nsec() (in module bosdyn.util)": [[208, "bosdyn.util.now_nsec"]], "now_sec() (in module bosdyn.util)": [[208, "bosdyn.util.now_sec"]], "now_timestamp() (in module bosdyn.util)": [[208, "bosdyn.util.now_timestamp"]], "nsec_to_sec() (in module bosdyn.util)": [[208, "bosdyn.util.nsec_to_sec"]], "nsec_to_timestamp() (in module bosdyn.util)": [[208, "bosdyn.util.nsec_to_timestamp"]], "parse_datetime() (in module bosdyn.util)": [[208, "bosdyn.util.parse_datetime"]], "parse_timespan() (in module bosdyn.util)": [[208, "bosdyn.util.parse_timespan"]], "robot_seconds_from_local_seconds() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.robot_seconds_from_local_seconds"]], "robot_timestamp_from_local() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local"]], "robot_timestamp_from_local_nsecs() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local_nsecs"]], "robot_timestamp_from_local_secs() (bosdyn.util.robottimeconverter method)": [[208, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local_secs"]], "sec_to_nsec() (in module bosdyn.util)": [[208, "bosdyn.util.sec_to_nsec"]], "seconds_to_duration() (in module bosdyn.util)": [[208, "bosdyn.util.seconds_to_duration"]], "seconds_to_timestamp() (in module bosdyn.util)": [[208, "bosdyn.util.seconds_to_timestamp"]], "secs_to_hms() (in module bosdyn.util)": [[208, "bosdyn.util.secs_to_hms"]], "set_clock_source() (in module bosdyn.util)": [[208, "bosdyn.util.set_clock_source"]], "set_timestamp_from_datetime() (in module bosdyn.util)": [[208, "bosdyn.util.set_timestamp_from_datetime"]], "set_timestamp_from_now() (in module bosdyn.util)": [[208, "bosdyn.util.set_timestamp_from_now"]], "set_timestamp_from_nsec() (in module bosdyn.util)": [[208, "bosdyn.util.set_timestamp_from_nsec"]], "timestamp_str() (in module bosdyn.util)": [[208, "bosdyn.util.timestamp_str"]], "timestamp_to_datetime() (in module bosdyn.util)": [[208, "bosdyn.util.timestamp_to_datetime"]], "timestamp_to_nsec() (in module bosdyn.util)": [[208, "bosdyn.util.timestamp_to_nsec"]], "timestamp_to_sec() (in module bosdyn.util)": [[208, "bosdyn.util.timestamp_to_sec"]], "customparamserror": [[210, "bosdyn.mission.client.CustomParamsError"]], "incompatibleanswer": [[210, "bosdyn.mission.client.IncompatibleAnswer"]], "invalidanswercode": [[210, "bosdyn.mission.client.InvalidAnswerCode"]], "invalidquestionid": [[210, "bosdyn.mission.client.InvalidQuestionId"]], "missionclient (class in bosdyn.mission.client)": [[210, "bosdyn.mission.client.MissionClient"]], "missionresponseerror": [[210, "bosdyn.mission.client.MissionResponseError"]], "nomissionerror": [[210, "bosdyn.mission.client.NoMissionError"]], "nomissionplayingerror": [[210, "bosdyn.mission.client.NoMissionPlayingError"]], "questionalreadyanswered": [[210, "bosdyn.mission.client.QuestionAlreadyAnswered"]], "answer_question() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.answer_question"]], "answer_question_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.answer_question_async"]], "bosdyn.mission.client": [[210, "module-bosdyn.mission.client"]], "default_service_name (bosdyn.mission.client.missionclient attribute)": [[210, "bosdyn.mission.client.MissionClient.default_service_name"]], "get_info() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_info"]], "get_info_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_info_async"]], "get_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_mission"]], "get_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_mission_async"]], "get_state() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_state"]], "get_state_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.get_state_async"]], "load_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.load_mission"]], "load_mission_as_chunks() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.load_mission_as_chunks"]], "load_mission_as_chunks2() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.load_mission_as_chunks2"]], "load_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.load_mission_async"]], "pause_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.pause_mission"]], "pause_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.pause_mission_async"]], "play_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.play_mission"]], "play_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.play_mission_async"]], "restart_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.restart_mission"]], "restart_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.restart_mission_async"]], "service_type (bosdyn.mission.client.missionclient attribute)": [[210, "bosdyn.mission.client.MissionClient.service_type"]], "stop_mission() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.stop_mission"]], "stop_mission_async() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.stop_mission_async"]], "timesync_endpoint (bosdyn.mission.client.missionclient property)": [[210, "bosdyn.mission.client.MissionClient.timesync_endpoint"]], "update_from() (bosdyn.mission.client.missionclient method)": [[210, "bosdyn.mission.client.MissionClient.update_from"]], "error (bosdyn.mission.constants.result attribute)": [[211, "bosdyn.mission.constants.Result.ERROR"]], "failure (bosdyn.mission.constants.result attribute)": [[211, "bosdyn.mission.constants.Result.FAILURE"]], "running (bosdyn.mission.constants.result attribute)": [[211, "bosdyn.mission.constants.Result.RUNNING"]], "result (class in bosdyn.mission.constants)": [[211, "bosdyn.mission.constants.Result"]], "success (bosdyn.mission.constants.result attribute)": [[211, "bosdyn.mission.constants.Result.SUCCESS"]], "bosdyn.mission.constants": [[211, "module-bosdyn.mission.constants"]], "compileerror": [[212, "bosdyn.mission.exceptions.CompileError"]], "inaccessibleparametererror": [[212, "bosdyn.mission.exceptions.InaccessibleParameterError"]], "messageoverrideerror": [[212, "bosdyn.mission.exceptions.MessageOverrideError"]], "missingparametererror": [[212, "bosdyn.mission.exceptions.MissingParameterError"]], "nodeunreferenceableerror": [[212, "bosdyn.mission.exceptions.NodeUnreferenceableError"]], "unknowntype": [[212, "bosdyn.mission.exceptions.UnknownType"]], "bosdyn.mission.exceptions": [[212, "module-bosdyn.mission.exceptions"]], "get_node_details() (bosdyn.mission.exceptions.compileerror method)": [[212, "bosdyn.mission.exceptions.CompileError.get_node_details"]], "node_impl() (bosdyn.mission.exceptions.compileerror method)": [[212, "bosdyn.mission.exceptions.CompileError.node_impl"]], "node_name() (bosdyn.mission.exceptions.compileerror method)": [[212, "bosdyn.mission.exceptions.CompileError.node_name"]], "invalidsessionid": [[213, "bosdyn.mission.remote_client.InvalidSessionId"]], "missinginputs": [[213, "bosdyn.mission.remote_client.MissingInputs"]], "missingleases": [[213, "bosdyn.mission.remote_client.MissingLeases"]], "remoteclient (class in bosdyn.mission.remote_client)": [[213, "bosdyn.mission.remote_client.RemoteClient"]], "bosdyn.mission.remote_client": [[213, "module-bosdyn.mission.remote_client"]], "default_service_name (bosdyn.mission.remote_client.remoteclient attribute)": [[213, "bosdyn.mission.remote_client.RemoteClient.default_service_name"]], "establish_session() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.establish_session"]], "establish_session_async() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.establish_session_async"]], "get_service_info() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.get_service_info"]], "get_service_info_async() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.get_service_info_async"]], "service_type (bosdyn.mission.remote_client.remoteclient attribute)": [[213, "bosdyn.mission.remote_client.RemoteClient.service_type"]], "stop() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.stop"]], "stop_async() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.stop_async"]], "teardown_session() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.teardown_session"]], "teardown_session_async() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.teardown_session_async"]], "tick() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.tick"]], "tick_async() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.tick_async"]], "tree_status_from_tick_status() (in module bosdyn.mission.remote_client)": [[213, "bosdyn.mission.remote_client.tree_status_from_tick_status"]], "update_from() (bosdyn.mission.remote_client.remoteclient method)": [[213, "bosdyn.mission.remote_client.RemoteClient.update_from"]], "responsecontext (class in bosdyn.mission.server_util)": [[214, "bosdyn.mission.server_util.ResponseContext"]], "bosdyn.mission.server_util": [[214, "module-bosdyn.mission.server_util"]], "invalidconversion": [[215, "bosdyn.mission.util.InvalidConversion"]], "resultfromproto (class in bosdyn.mission.util)": [[215, "bosdyn.mission.util.ResultFromProto"]], "bosdyn.mission.util": [[215, "module-bosdyn.mission.util"]], "create_value() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.create_value"]], "define_blackboard() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.define_blackboard"]], "field_desc_to_pb_type() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.field_desc_to_pb_type"]], "get_value_from_constant_value_message() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.get_value_from_constant_value_message"]], "get_value_from_value_message() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.get_value_from_value_message"]], "is_string_identifier() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.is_string_identifier"]], "most_restrictive_travel_params() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.most_restrictive_travel_params"]], "node_spec_to_short_string() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.node_spec_to_short_string"]], "one_line_str() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.one_line_str"]], "proto_enum_to_result_constant() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.proto_enum_to_result_constant"]], "proto_from_results (bosdyn.mission.util.resultfromproto attribute)": [[215, "bosdyn.mission.util.ResultFromProto.proto_from_results"]], "proto_from_tuple() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.proto_from_tuple"]], "python_type_to_pb_type() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.python_type_to_pb_type"]], "python_var_to_value() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.python_var_to_value"]], "result_constant_to_proto_enum() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.result_constant_to_proto_enum"]], "results_from_proto (bosdyn.mission.util.resultfromproto attribute)": [[215, "bosdyn.mission.util.ResultFromProto.results_from_proto"]], "safe_pb_type_to_string() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.safe_pb_type_to_string"]], "set_blackboard() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.set_blackboard"]], "tree_to_string() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.tree_to_string"]], "type_to_field_name() (in module bosdyn.mission.util)": [[215, "bosdyn.mission.util.type_to_field_name"]], "client (class in bosdyn.orbit.client)": [[217, "bosdyn.orbit.client.Client"]], "authenticate_with_api_token() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.authenticate_with_api_token"]], "bosdyn.orbit.client": [[217, "module-bosdyn.orbit.client"]], "create_client() (in module bosdyn.orbit.client)": [[217, "bosdyn.orbit.client.create_client"]], "delete_calendar_event() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.delete_calendar_event"]], "delete_resource() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.delete_resource"]], "delete_robot() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.delete_robot"]], "delete_site_walk() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.delete_site_walk"]], "delete_webhook() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.delete_webhook"]], "get_calendar() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_calendar"]], "get_image() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_image"]], "get_image_response() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_image_response"]], "get_resource() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_resource"]], "get_robot_by_hostname() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_robot_by_hostname"]], "get_robot_info() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_robot_info"]], "get_robots() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_robots"]], "get_run_archives_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_archives_by_id"]], "get_run_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_by_id"]], "get_run_capture_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_capture_by_id"]], "get_run_captures() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_captures"]], "get_run_event_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_event_by_id"]], "get_run_events() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_run_events"]], "get_runs() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_runs"]], "get_site_dock_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_dock_by_id"]], "get_site_docks() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_docks"]], "get_site_element_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_element_by_id"]], "get_site_elements() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_elements"]], "get_site_walk_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_walk_by_id"]], "get_site_walks() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_site_walks"]], "get_system_time() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_system_time"]], "get_version() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_version"]], "get_webhook() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_webhook"]], "get_webhook_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.get_webhook_by_id"]], "post_calendar_event() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_calendar_event"]], "post_calendar_event_disable_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_calendar_event_disable_by_id"]], "post_calendar_event_enable_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_calendar_event_enable_by_id"]], "post_calendar_events_disable_all() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_calendar_events_disable_all"]], "post_calendar_events_enable_all() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_calendar_events_enable_all"]], "post_dispatch_mission_to_robot() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_dispatch_mission_to_robot"]], "post_export_as_walk() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_export_as_walk"]], "post_import_from_walk() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_import_from_walk"]], "post_resource() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_resource"]], "post_return_to_dock_mission() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_return_to_dock_mission"]], "post_robot() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_robot"]], "post_site_dock() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_site_dock"]], "post_site_element() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_site_element"]], "post_site_walk() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_site_walk"]], "post_webhook() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_webhook"]], "post_webhook_by_id() (bosdyn.orbit.client.client method)": [[217, "bosdyn.orbit.client.Client.post_webhook_by_id"]], "unauthenticatedclienterror": [[218, "bosdyn.orbit.exceptions.UnauthenticatedClientError"]], "webhooksignatureverificationerror": [[218, "bosdyn.orbit.exceptions.WebhookSignatureVerificationError"]], "bosdyn.orbit.exceptions": [[218, "module-bosdyn.orbit.exceptions"]], "bosdyn.orbit.utils": [[219, "module-bosdyn.orbit.utils"]], "data_capture_url_from_run_capture_resources() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.data_capture_url_from_run_capture_resources"]], "data_capture_urls_from_run_events() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.data_capture_urls_from_run_events"]], "datetime_from_isostring() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.datetime_from_isostring"]], "get_action_names_from_run_events() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_action_names_from_run_events"]], "get_api_token() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_api_token"]], "get_latest_created_at_for_run_captures() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_created_at_for_run_captures"]], "get_latest_created_at_for_run_events() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_created_at_for_run_events"]], "get_latest_end_time_for_runs() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_end_time_for_runs"]], "get_latest_run_capture_resources() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_run_capture_resources"]], "get_latest_run_in_progress() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_run_in_progress"]], "get_latest_run_resource() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.get_latest_run_resource"]], "validate_webhook_payload() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.validate_webhook_payload"]], "write_image() (in module bosdyn.orbit.utils)": [[219, "bosdyn.orbit.utils.write_image"]], "scoutclient (class in bosdyn.scout.client)": [[221, "bosdyn.scout.client.ScoutClient"]], "authenticate_with_api_token() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.authenticate_with_api_token"]], "authenticate_with_password() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.authenticate_with_password"]], "bosdyn.scout.client": [[221, "module-bosdyn.scout.client"]], "create_scout_client() (in module bosdyn.scout.client)": [[221, "bosdyn.scout.client.create_scout_client"]], "delete_calendar_event() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.delete_calendar_event"]], "delete_resource() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.delete_resource"]], "delete_robot() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.delete_robot"]], "delete_site_walk() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.delete_site_walk"]], "delete_webhook() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.delete_webhook"]], "get_calendar() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_calendar"]], "get_image() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_image"]], "get_image_response() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_image_response"]], "get_resource() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_resource"]], "get_robot_by_hostname() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_robot_by_hostname"]], "get_robot_info() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_robot_info"]], "get_robots() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_robots"]], "get_run_archives_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_archives_by_id"]], "get_run_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_by_id"]], "get_run_capture_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_capture_by_id"]], "get_run_captures() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_captures"]], "get_run_event_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_event_by_id"]], "get_run_events() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_run_events"]], "get_runs() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_runs"]], "get_scout_system_time() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_scout_system_time"]], "get_scout_version() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_scout_version"]], "get_site_dock_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_dock_by_id"]], "get_site_docks() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_docks"]], "get_site_element_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_element_by_id"]], "get_site_elements() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_elements"]], "get_site_walk_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_walk_by_id"]], "get_site_walks() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_site_walks"]], "get_webhook() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_webhook"]], "get_webhook_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.get_webhook_by_id"]], "post_calendar_event() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_calendar_event"]], "post_calendar_event_disable_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_calendar_event_disable_by_id"]], "post_calendar_event_enable_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_calendar_event_enable_by_id"]], "post_calendar_events_disable_all() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_calendar_events_disable_all"]], "post_calendar_events_enable_all() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_calendar_events_enable_all"]], "post_dispatch_mission_to_robot() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_dispatch_mission_to_robot"]], "post_export_as_walk() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_export_as_walk"]], "post_import_from_walk() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_import_from_walk"]], "post_resource() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_resource"]], "post_return_to_dock_mission() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_return_to_dock_mission"]], "post_robot() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_robot"]], "post_site_dock() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_site_dock"]], "post_site_element() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_site_element"]], "post_site_walk() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_site_walk"]], "post_webhook() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_webhook"]], "post_webhook_by_id() (bosdyn.scout.client.scoutclient method)": [[221, "bosdyn.scout.client.ScoutClient.post_webhook_by_id"]], "bosdyn.scout.exceptions": [[222, "module-bosdyn.scout.exceptions"]], "bosdyn.scout.utils": [[223, "module-bosdyn.scout.utils"]], "data_capture_url_from_run_capture_resources() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.data_capture_url_from_run_capture_resources"]], "data_capture_urls_from_run_events() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.data_capture_urls_from_run_events"]], "get_credentials() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_credentials"]], "get_latest_created_at_for_run_captures() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_created_at_for_run_captures"]], "get_latest_created_at_for_run_events() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_created_at_for_run_events"]], "get_latest_end_time_for_runs() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_end_time_for_runs"]], "get_latest_run_capture_resources() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_run_capture_resources"]], "get_latest_run_in_progress() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_run_in_progress"]], "get_latest_run_resource() (in module bosdyn.scout.utils)": [[223, "bosdyn.scout.utils.get_latest_run_resource"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["README", "docs/concepts/README", "docs/concepts/about_spot", "docs/concepts/arm/README", "docs/concepts/arm/arm_concepts", "docs/concepts/arm/arm_services", "docs/concepts/arm/arm_specification", "docs/concepts/autonomy/README", "docs/concepts/autonomy/auto_return", "docs/concepts/autonomy/autonomous_navigation_code_examples", "docs/concepts/autonomy/autonomous_navigation_services", "docs/concepts/autonomy/autowalk_service", "docs/concepts/autonomy/components_of_autonomous_navigation", "docs/concepts/autonomy/directed_exploration", "docs/concepts/autonomy/docking", "docs/concepts/autonomy/gps", "docs/concepts/autonomy/graphnav_and_robot_locomotion", "docs/concepts/autonomy/graphnav_area_callbacks", "docs/concepts/autonomy/graphnav_map_structure", "docs/concepts/autonomy/graphnav_service", "docs/concepts/autonomy/graphnav_tech_summary", "docs/concepts/autonomy/initialization", "docs/concepts/autonomy/localization", "docs/concepts/autonomy/missions_service", "docs/concepts/autonomy/typical_autonomous_navigation_use_case", "docs/concepts/base_services", "docs/concepts/bddf", "docs/concepts/choreography/README", "docs/concepts/choreography/animation_file_specification", "docs/concepts/choreography/animations_in_choreographer", "docs/concepts/choreography/choreographer", "docs/concepts/choreography/choreographer_setup", "docs/concepts/choreography/choreography_in_autowalk", "docs/concepts/choreography/choreography_in_tablet", "docs/concepts/choreography/choreography_service", "docs/concepts/choreography/custom_gait", "docs/concepts/choreography/move_reference", "docs/concepts/choreography/robot_controls_in_choreographer", "docs/concepts/data", "docs/concepts/data_acquisition_output", "docs/concepts/data_acquisition_overview", "docs/concepts/data_acquisition_thermal_raw", "docs/concepts/data_buffer_overview", "docs/concepts/developing_api_services", "docs/concepts/estop_service", "docs/concepts/faults", "docs/concepts/geometry_and_frames", "docs/concepts/joint_control/README", "docs/concepts/joint_control/knee_torque_limits", "docs/concepts/joint_control/supplemental_data", "docs/concepts/keepalive_service", "docs/concepts/lease_service", "docs/concepts/network_compute_bridge", "docs/concepts/networking", "docs/concepts/orbit/about_orbit", "docs/concepts/orbit/orbit_api", "docs/concepts/robot_services", "docs/concepts/service_customization", "docs/concepts/writing_services_for_data_acquisition", "docs/payload/README", "docs/payload/configuring_payload_software", "docs/payload/coreio_documentation", "docs/payload/coreio_openvpn_extension", "docs/payload/docker_containers", "docs/payload/guidelines_for_robust_payload_design", "docs/payload/mechanical_interfaces", "docs/payload/payload_configuration_requirements", "docs/payload/robot_electrical_interface", "docs/payload/robot_mounting_rails", "docs/payload/spot_core_cockpit", "docs/payload/spot_core_documentation", "docs/payload/spot_core_portainer", "docs/payload/spot_core_vnc", "docs/protos/README", "docs/protos/style_guide", "docs/python/README", "docs/python/daq_tutorial/daq1", "docs/python/daq_tutorial/daq2", "docs/python/daq_tutorial/daq3", "docs/python/daq_tutorial/daq4", "docs/python/daq_tutorial/daq5", "docs/python/daq_tutorial/daq6", "docs/python/fetch_tutorial/fetch1", "docs/python/fetch_tutorial/fetch2", "docs/python/fetch_tutorial/fetch3", "docs/python/fetch_tutorial/fetch4", "docs/python/fetch_tutorial/fetch5", "docs/python/fetch_tutorial/fetch6", "docs/python/quickstart", "docs/python/understanding_spot_programming", "docs/release_notes", "protos/bosdyn/api/README", "protos/bosdyn/api/proto_reference", "python/README", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/README", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography", "python/bosdyn-client/src/bosdyn/client/README", "python/bosdyn-client/src/bosdyn/client/area_callback", "python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base", "python/bosdyn-client/src/bosdyn/client/area_callback_service_runner", "python/bosdyn-client/src/bosdyn/client/area_callback_service_servicer", "python/bosdyn-client/src/bosdyn/client/area_callback_service_utils", "python/bosdyn-client/src/bosdyn/client/arm_surface_contact", "python/bosdyn-client/src/bosdyn/client/async_tasks", "python/bosdyn-client/src/bosdyn/client/auth", "python/bosdyn-client/src/bosdyn/client/auto_return", "python/bosdyn-client/src/bosdyn/client/autowalk", "python/bosdyn-client/src/bosdyn/client/bddf", "python/bosdyn-client/src/bosdyn/client/bddf_download", "python/bosdyn-client/src/bosdyn/client/channel", "python/bosdyn-client/src/bosdyn/client/command_line", "python/bosdyn-client/src/bosdyn/client/common", "python/bosdyn-client/src/bosdyn/client/data_acquisition", "python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service", "python/bosdyn-client/src/bosdyn/client/data_acquisition_store", "python/bosdyn-client/src/bosdyn/client/data_buffer", "python/bosdyn-client/src/bosdyn/client/data_chunk", "python/bosdyn-client/src/bosdyn/client/data_service", "python/bosdyn-client/src/bosdyn/client/directory", "python/bosdyn-client/src/bosdyn/client/directory_registration", "python/bosdyn-client/src/bosdyn/client/docking", "python/bosdyn-client/src/bosdyn/client/door", "python/bosdyn-client/src/bosdyn/client/estop", "python/bosdyn-client/src/bosdyn/client/exceptions", "python/bosdyn-client/src/bosdyn/client/fault", "python/bosdyn-client/src/bosdyn/client/frame_helpers", "python/bosdyn-client/src/bosdyn/client/gps/NMEAParser", "python/bosdyn-client/src/bosdyn/client/gps/README", "python/bosdyn-client/src/bosdyn/client/gps/aggregator_client", "python/bosdyn-client/src/bosdyn/client/gps/gps_listener", "python/bosdyn-client/src/bosdyn/client/gps/registration_client", "python/bosdyn-client/src/bosdyn/client/graph_nav", "python/bosdyn-client/src/bosdyn/client/gripper_camera_param", "python/bosdyn-client/src/bosdyn/client/image", "python/bosdyn-client/src/bosdyn/client/image_service_helpers", "python/bosdyn-client/src/bosdyn/client/inverse_kinematics", "python/bosdyn-client/src/bosdyn/client/ir_enable_disable", "python/bosdyn-client/src/bosdyn/client/keepalive", "python/bosdyn-client/src/bosdyn/client/lease", "python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy", "python/bosdyn-client/src/bosdyn/client/lease_validator", "python/bosdyn-client/src/bosdyn/client/license", "python/bosdyn-client/src/bosdyn/client/local_grid", "python/bosdyn-client/src/bosdyn/client/log_status", "python/bosdyn-client/src/bosdyn/client/manipulation_api_client", "python/bosdyn-client/src/bosdyn/client/map_processing", "python/bosdyn-client/src/bosdyn/client/math_helpers", "python/bosdyn-client/src/bosdyn/client/metrics_logging", "python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client", "python/bosdyn-client/src/bosdyn/client/payload", "python/bosdyn-client/src/bosdyn/client/payload_registration", "python/bosdyn-client/src/bosdyn/client/point_cloud", "python/bosdyn-client/src/bosdyn/client/power", "python/bosdyn-client/src/bosdyn/client/processors", "python/bosdyn-client/src/bosdyn/client/ray_cast", "python/bosdyn-client/src/bosdyn/client/recording", "python/bosdyn-client/src/bosdyn/client/robot", "python/bosdyn-client/src/bosdyn/client/robot_command", "python/bosdyn-client/src/bosdyn/client/robot_id", "python/bosdyn-client/src/bosdyn/client/robot_state", "python/bosdyn-client/src/bosdyn/client/sdk", "python/bosdyn-client/src/bosdyn/client/server_util", "python/bosdyn-client/src/bosdyn/client/service_customization_helpers", "python/bosdyn-client/src/bosdyn/client/signals_helpers", "python/bosdyn-client/src/bosdyn/client/spot_cam/README", "python/bosdyn-client/src/bosdyn/client/spot_cam/audio", "python/bosdyn-client/src/bosdyn/client/spot_cam/compositor", "python/bosdyn-client/src/bosdyn/client/spot_cam/health", "python/bosdyn-client/src/bosdyn/client/spot_cam/lighting", "python/bosdyn-client/src/bosdyn/client/spot_cam/lights_helper", "python/bosdyn-client/src/bosdyn/client/spot_cam/media_log", "python/bosdyn-client/src/bosdyn/client/spot_cam/network", "python/bosdyn-client/src/bosdyn/client/spot_cam/power", "python/bosdyn-client/src/bosdyn/client/spot_cam/ptz", "python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality", "python/bosdyn-client/src/bosdyn/client/spot_cam/version", "python/bosdyn-client/src/bosdyn/client/spot_check", "python/bosdyn-client/src/bosdyn/client/time_sync", "python/bosdyn-client/src/bosdyn/client/token_cache", "python/bosdyn-client/src/bosdyn/client/token_manager", "python/bosdyn-client/src/bosdyn/client/units_helpers", "python/bosdyn-client/src/bosdyn/client/util", "python/bosdyn-client/src/bosdyn/client/world_object", "python/bosdyn-core/src/bosdyn/README", "python/bosdyn-core/src/bosdyn/bddf/README", "python/bosdyn-core/src/bosdyn/bddf/base_data_reader", "python/bosdyn-core/src/bosdyn/bddf/block_writer", "python/bosdyn-core/src/bosdyn/bddf/bosdyn", "python/bosdyn-core/src/bosdyn/bddf/common", "python/bosdyn-core/src/bosdyn/bddf/data_reader", "python/bosdyn-core/src/bosdyn/bddf/data_writer", "python/bosdyn-core/src/bosdyn/bddf/file_indexer", "python/bosdyn-core/src/bosdyn/bddf/grpc_proto_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_reader", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_writer", "python/bosdyn-core/src/bosdyn/bddf/message_reader", "python/bosdyn-core/src/bosdyn/bddf/pod_series_reader", "python/bosdyn-core/src/bosdyn/bddf/pod_series_writer", "python/bosdyn-core/src/bosdyn/bddf/protobuf_channel_reader", "python/bosdyn-core/src/bosdyn/bddf/protobuf_reader", "python/bosdyn-core/src/bosdyn/bddf/protobuf_series_writer", "python/bosdyn-core/src/bosdyn/bddf/stream_data_reader", "python/bosdyn-core/src/bosdyn/deprecated", "python/bosdyn-core/src/bosdyn/geometry", "python/bosdyn-core/src/bosdyn/util", "python/bosdyn-mission/src/bosdyn/mission/README", "python/bosdyn-mission/src/bosdyn/mission/client", "python/bosdyn-mission/src/bosdyn/mission/constants", "python/bosdyn-mission/src/bosdyn/mission/exceptions", "python/bosdyn-mission/src/bosdyn/mission/remote_client", "python/bosdyn-mission/src/bosdyn/mission/server_util", "python/bosdyn-mission/src/bosdyn/mission/util", "python/bosdyn-orbit/src/bosdyn/orbit/README", "python/bosdyn-orbit/src/bosdyn/orbit/client", "python/bosdyn-orbit/src/bosdyn/orbit/exceptions", "python/bosdyn-orbit/src/bosdyn/orbit/utils", "python/bosdyn-scout/src/bosdyn/scout/README", "python/bosdyn-scout/src/bosdyn/scout/client", "python/bosdyn-scout/src/bosdyn/scout/exceptions", "python/bosdyn-scout/src/bosdyn/scout/utils", "python/examples/README", "python/examples/animation_recorder/README", "python/examples/area_callback/README", "python/examples/arm_and_mobility_command/README", "python/examples/arm_constrained_manipulation/README", "python/examples/arm_door/README", "python/examples/arm_force_control/README", "python/examples/arm_freeze/README", "python/examples/arm_gaze/README", "python/examples/arm_gcode/README", "python/examples/arm_grasp/README", "python/examples/arm_grasp_carry_overrides/README", "python/examples/arm_impedance_control/README", "python/examples/arm_joint_move/README", "python/examples/arm_simple/README", "python/examples/arm_stow_unstow/README", "python/examples/arm_surface_contact/README", "python/examples/arm_trajectory/README", "python/examples/arm_walk_to_object/README", "python/examples/arm_wasd/README", "python/examples/arm_with_body_follow/README", "python/examples/auto_return/README", "python/examples/bddf_download/README", "python/examples/cloud_upload/README", "python/examples/comms_mapping/README", "python/examples/comms_test/README", "python/examples/core_io_gpio/README", "python/examples/data_acquisition_service/README", "python/examples/data_acquisition_service/signals_coreio_modem_plugin/README", "python/examples/data_buffer/README", "python/examples/data_service/README", "python/examples/directory/README", "python/examples/disable_ir_emission/README", "python/examples/docking/README", "python/examples/docs/arm_examples", "python/examples/docs/autonomy_and_missions_examples", "python/examples/docs/basic_service_examples", "python/examples/docs/data_acquisition_examples", "python/examples/docs/joint_control_examples", "python/examples/docs/logging_examples", "python/examples/docs/orbit", "python/examples/docs/payloads_examples", "python/examples/docs/perception_world_objects_examples", "python/examples/docs/robot_behavior_examples", "python/examples/edit_autowalk/README", "python/examples/estop/README", "python/examples/extensions/README", "python/examples/extract_images_from_walk/README", "python/examples/fan_command/README", "python/examples/fiducial_follow/README", "python/examples/frame_trajectory_command/README", "python/examples/get_depth_plus_visual_image/README", "python/examples/get_image/README", "python/examples/get_mission_state/README", "python/examples/get_robot_state/README", "python/examples/get_robot_state_async/README", "python/examples/get_world_objects/README", "python/examples/gps_service/README", "python/examples/graph_nav_anchoring_optimization/README", "python/examples/graph_nav_command_line/README", "python/examples/graph_nav_extract_point_cloud/README", "python/examples/graph_nav_view_gps/README", "python/examples/graph_nav_view_map/README", "python/examples/gripper_camera_params/README", "python/examples/hello_spot/README", "python/examples/inverse_kinematics/README", "python/examples/joint_control/README", "python/examples/log_status/README", "python/examples/logging/README", "python/examples/metrics_over_coreio/README", "python/examples/mission_question_answerer/README", "python/examples/mission_recorder/README", "python/examples/network_compute_bridge/README", "python/examples/network_compute_bridge/fire_extinguisher_server/README", "python/examples/network_request_callback/README", "python/examples/orbit/anomalies/README", "python/examples/orbit/backups/README", "python/examples/orbit/export_run_archives/README", "python/examples/orbit/export_site_walk_archives/README", "python/examples/orbit/hello_orbit/README", "python/examples/orbit/runs_response/README", "python/examples/orbit/schedule_mission/README", "python/examples/orbit/send_robot_back_to_dock/README", "python/examples/orbit/toggle_mission_based_on_weather/README", "python/examples/orbit/webhook/README", "python/examples/orbit/webhook_integration/README", "python/examples/payloads/README", "python/examples/post_docking_callbacks/README", "python/examples/ray_cast/README", "python/examples/record_autowalk/README", "python/examples/remote_mission_service/README", "python/examples/replay_mission/README", "python/examples/reset_safety_stop/README", "python/examples/ricoh_theta/README", "python/examples/self_registration/README", "python/examples/service_customization/custom_parameter_image_server/README", "python/examples/service_customization/custom_parameter_ncb_worker/README", "python/examples/service_customization/custom_parameters_data_acquisition/README", "python/examples/service_faults/README", "python/examples/spot_cam/README", "python/examples/spot_light/README", "python/examples/spot_tensorflow_detector/README", "python/examples/stance/README", "python/examples/stitch_front_images/README", "python/examples/tester_programs/README", "python/examples/time_sync/README", "python/examples/upload_choreographed_sequence/README", "python/examples/user_nogo_regions/README", "python/examples/velodyne_client/README", "python/examples/visualizer/README", "python/examples/wasd/README", "python/examples/world_object_mutations/README", "python/examples/world_object_with_image_coordinates/README", "python/examples/xbox_controller/README"], "filenames": ["README.md", "docs/concepts/README.md", "docs/concepts/about_spot.md", "docs/concepts/arm/README.md", "docs/concepts/arm/arm_concepts.md", "docs/concepts/arm/arm_services.md", "docs/concepts/arm/arm_specification.md", "docs/concepts/autonomy/README.md", "docs/concepts/autonomy/auto_return.md", "docs/concepts/autonomy/autonomous_navigation_code_examples.md", "docs/concepts/autonomy/autonomous_navigation_services.md", "docs/concepts/autonomy/autowalk_service.md", "docs/concepts/autonomy/components_of_autonomous_navigation.md", "docs/concepts/autonomy/directed_exploration.md", "docs/concepts/autonomy/docking.md", "docs/concepts/autonomy/gps.md", "docs/concepts/autonomy/graphnav_and_robot_locomotion.md", "docs/concepts/autonomy/graphnav_area_callbacks.md", "docs/concepts/autonomy/graphnav_map_structure.md", "docs/concepts/autonomy/graphnav_service.md", "docs/concepts/autonomy/graphnav_tech_summary.md", "docs/concepts/autonomy/initialization.md", "docs/concepts/autonomy/localization.md", "docs/concepts/autonomy/missions_service.md", "docs/concepts/autonomy/typical_autonomous_navigation_use_case.md", "docs/concepts/base_services.md", "docs/concepts/bddf.md", "docs/concepts/choreography/README.md", "docs/concepts/choreography/animation_file_specification.md", "docs/concepts/choreography/animations_in_choreographer.md", "docs/concepts/choreography/choreographer.md", "docs/concepts/choreography/choreographer_setup.md", "docs/concepts/choreography/choreography_in_autowalk.md", "docs/concepts/choreography/choreography_in_tablet.md", "docs/concepts/choreography/choreography_service.md", "docs/concepts/choreography/custom_gait.md", "docs/concepts/choreography/move_reference.md", "docs/concepts/choreography/robot_controls_in_choreographer.md", "docs/concepts/data.md", "docs/concepts/data_acquisition_output.md", "docs/concepts/data_acquisition_overview.md", "docs/concepts/data_acquisition_thermal_raw.md", "docs/concepts/data_buffer_overview.md", "docs/concepts/developing_api_services.md", "docs/concepts/estop_service.md", "docs/concepts/faults.md", "docs/concepts/geometry_and_frames.md", "docs/concepts/joint_control/README.md", "docs/concepts/joint_control/knee_torque_limits.md", "docs/concepts/joint_control/supplemental_data.md", "docs/concepts/keepalive_service.md", "docs/concepts/lease_service.md", "docs/concepts/network_compute_bridge.md", "docs/concepts/networking.md", "docs/concepts/orbit/about_orbit.md", "docs/concepts/orbit/orbit_api.md", "docs/concepts/robot_services.md", "docs/concepts/service_customization.md", "docs/concepts/writing_services_for_data_acquisition.md", "docs/payload/README.md", "docs/payload/configuring_payload_software.md", "docs/payload/coreio_documentation.md", "docs/payload/coreio_openvpn_extension.md", "docs/payload/docker_containers.md", "docs/payload/guidelines_for_robust_payload_design.md", "docs/payload/mechanical_interfaces.md", "docs/payload/payload_configuration_requirements.md", "docs/payload/robot_electrical_interface.md", "docs/payload/robot_mounting_rails.md", "docs/payload/spot_core_cockpit.md", "docs/payload/spot_core_documentation.md", "docs/payload/spot_core_portainer.md", "docs/payload/spot_core_vnc.md", "docs/protos/README.md", "docs/protos/style_guide.md", "docs/python/README.md", "docs/python/daq_tutorial/daq1.md", "docs/python/daq_tutorial/daq2.md", "docs/python/daq_tutorial/daq3.md", "docs/python/daq_tutorial/daq4.md", "docs/python/daq_tutorial/daq5.md", "docs/python/daq_tutorial/daq6.md", "docs/python/fetch_tutorial/fetch1.md", "docs/python/fetch_tutorial/fetch2.md", "docs/python/fetch_tutorial/fetch3.md", "docs/python/fetch_tutorial/fetch4.md", "docs/python/fetch_tutorial/fetch5.md", "docs/python/fetch_tutorial/fetch6.md", "docs/python/quickstart.md", "docs/python/understanding_spot_programming.md", "docs/release_notes.md", "protos/bosdyn/api/README.md", "protos/bosdyn/api/proto_reference.md", "python/README.md", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/README.md", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_conversion_helpers.rst", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.rst", "python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.rst", "python/bosdyn-client/src/bosdyn/client/README.md", "python/bosdyn-client/src/bosdyn/client/area_callback.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_region_handler_base.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_runner.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_servicer.rst", "python/bosdyn-client/src/bosdyn/client/area_callback_service_utils.rst", "python/bosdyn-client/src/bosdyn/client/arm_surface_contact.rst", "python/bosdyn-client/src/bosdyn/client/async_tasks.rst", "python/bosdyn-client/src/bosdyn/client/auth.rst", "python/bosdyn-client/src/bosdyn/client/auto_return.rst", "python/bosdyn-client/src/bosdyn/client/autowalk.rst", "python/bosdyn-client/src/bosdyn/client/bddf.rst", "python/bosdyn-client/src/bosdyn/client/bddf_download.rst", "python/bosdyn-client/src/bosdyn/client/channel.rst", "python/bosdyn-client/src/bosdyn/client/command_line.rst", "python/bosdyn-client/src/bosdyn/client/common.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.rst", "python/bosdyn-client/src/bosdyn/client/data_acquisition_store.rst", "python/bosdyn-client/src/bosdyn/client/data_buffer.rst", "python/bosdyn-client/src/bosdyn/client/data_chunk.rst", "python/bosdyn-client/src/bosdyn/client/data_service.rst", "python/bosdyn-client/src/bosdyn/client/directory.rst", "python/bosdyn-client/src/bosdyn/client/directory_registration.rst", "python/bosdyn-client/src/bosdyn/client/docking.rst", "python/bosdyn-client/src/bosdyn/client/door.rst", "python/bosdyn-client/src/bosdyn/client/estop.rst", "python/bosdyn-client/src/bosdyn/client/exceptions.rst", "python/bosdyn-client/src/bosdyn/client/fault.rst", "python/bosdyn-client/src/bosdyn/client/frame_helpers.rst", "python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.rst", "python/bosdyn-client/src/bosdyn/client/gps/README.md", "python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.rst", "python/bosdyn-client/src/bosdyn/client/gps/gps_listener.rst", "python/bosdyn-client/src/bosdyn/client/gps/registration_client.rst", "python/bosdyn-client/src/bosdyn/client/graph_nav.rst", "python/bosdyn-client/src/bosdyn/client/gripper_camera_param.rst", "python/bosdyn-client/src/bosdyn/client/image.rst", "python/bosdyn-client/src/bosdyn/client/image_service_helpers.rst", "python/bosdyn-client/src/bosdyn/client/inverse_kinematics.rst", "python/bosdyn-client/src/bosdyn/client/ir_enable_disable.rst", "python/bosdyn-client/src/bosdyn/client/keepalive.rst", "python/bosdyn-client/src/bosdyn/client/lease.rst", "python/bosdyn-client/src/bosdyn/client/lease_resource_hierarchy.rst", "python/bosdyn-client/src/bosdyn/client/lease_validator.rst", "python/bosdyn-client/src/bosdyn/client/license.rst", "python/bosdyn-client/src/bosdyn/client/local_grid.rst", "python/bosdyn-client/src/bosdyn/client/log_status.rst", "python/bosdyn-client/src/bosdyn/client/manipulation_api_client.rst", "python/bosdyn-client/src/bosdyn/client/map_processing.rst", "python/bosdyn-client/src/bosdyn/client/math_helpers.rst", "python/bosdyn-client/src/bosdyn/client/metrics_logging.rst", "python/bosdyn-client/src/bosdyn/client/network_compute_bridge_client.rst", "python/bosdyn-client/src/bosdyn/client/payload.rst", "python/bosdyn-client/src/bosdyn/client/payload_registration.rst", "python/bosdyn-client/src/bosdyn/client/point_cloud.rst", "python/bosdyn-client/src/bosdyn/client/power.rst", "python/bosdyn-client/src/bosdyn/client/processors.rst", "python/bosdyn-client/src/bosdyn/client/ray_cast.rst", "python/bosdyn-client/src/bosdyn/client/recording.rst", "python/bosdyn-client/src/bosdyn/client/robot.rst", "python/bosdyn-client/src/bosdyn/client/robot_command.rst", "python/bosdyn-client/src/bosdyn/client/robot_id.rst", "python/bosdyn-client/src/bosdyn/client/robot_state.rst", "python/bosdyn-client/src/bosdyn/client/sdk.rst", "python/bosdyn-client/src/bosdyn/client/server_util.rst", "python/bosdyn-client/src/bosdyn/client/service_customization_helpers.rst", "python/bosdyn-client/src/bosdyn/client/signals_helpers.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/README.md", "python/bosdyn-client/src/bosdyn/client/spot_cam/audio.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/compositor.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/health.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/lighting.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/lights_helper.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/media_log.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/network.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/power.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/ptz.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.rst", "python/bosdyn-client/src/bosdyn/client/spot_cam/version.rst", "python/bosdyn-client/src/bosdyn/client/spot_check.rst", "python/bosdyn-client/src/bosdyn/client/time_sync.rst", "python/bosdyn-client/src/bosdyn/client/token_cache.rst", "python/bosdyn-client/src/bosdyn/client/token_manager.rst", "python/bosdyn-client/src/bosdyn/client/units_helpers.rst", "python/bosdyn-client/src/bosdyn/client/util.rst", "python/bosdyn-client/src/bosdyn/client/world_object.rst", "python/bosdyn-core/src/bosdyn/README.md", "python/bosdyn-core/src/bosdyn/bddf/README.md", "python/bosdyn-core/src/bosdyn/bddf/base_data_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/block_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/bosdyn.rst", "python/bosdyn-core/src/bosdyn/bddf/common.rst", "python/bosdyn-core/src/bosdyn/bddf/data_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/data_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/file_indexer.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_proto_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/grpc_service_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/message_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/pod_series_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/pod_series_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_channel_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_reader.rst", "python/bosdyn-core/src/bosdyn/bddf/protobuf_series_writer.rst", "python/bosdyn-core/src/bosdyn/bddf/stream_data_reader.rst", "python/bosdyn-core/src/bosdyn/deprecated.rst", "python/bosdyn-core/src/bosdyn/geometry.rst", "python/bosdyn-core/src/bosdyn/util.rst", "python/bosdyn-mission/src/bosdyn/mission/README.md", "python/bosdyn-mission/src/bosdyn/mission/client.rst", "python/bosdyn-mission/src/bosdyn/mission/constants.rst", "python/bosdyn-mission/src/bosdyn/mission/exceptions.rst", "python/bosdyn-mission/src/bosdyn/mission/remote_client.rst", "python/bosdyn-mission/src/bosdyn/mission/server_util.rst", "python/bosdyn-mission/src/bosdyn/mission/util.rst", "python/bosdyn-orbit/src/bosdyn/orbit/README.md", "python/bosdyn-orbit/src/bosdyn/orbit/client.rst", "python/bosdyn-orbit/src/bosdyn/orbit/exceptions.rst", "python/bosdyn-orbit/src/bosdyn/orbit/utils.rst", "python/bosdyn-scout/src/bosdyn/scout/README.md", "python/bosdyn-scout/src/bosdyn/scout/client.rst", "python/bosdyn-scout/src/bosdyn/scout/exceptions.rst", "python/bosdyn-scout/src/bosdyn/scout/utils.rst", "python/examples/README.md", "python/examples/animation_recorder/README.md", "python/examples/area_callback/README.md", "python/examples/arm_and_mobility_command/README.md", "python/examples/arm_constrained_manipulation/README.md", "python/examples/arm_door/README.md", "python/examples/arm_force_control/README.md", "python/examples/arm_freeze/README.md", "python/examples/arm_gaze/README.md", "python/examples/arm_gcode/README.md", "python/examples/arm_grasp/README.md", "python/examples/arm_grasp_carry_overrides/README.md", "python/examples/arm_impedance_control/README.md", "python/examples/arm_joint_move/README.md", "python/examples/arm_simple/README.md", "python/examples/arm_stow_unstow/README.md", "python/examples/arm_surface_contact/README.md", "python/examples/arm_trajectory/README.md", "python/examples/arm_walk_to_object/README.md", "python/examples/arm_wasd/README.md", "python/examples/arm_with_body_follow/README.md", "python/examples/auto_return/README.md", "python/examples/bddf_download/README.md", "python/examples/cloud_upload/README.md", "python/examples/comms_mapping/README.md", "python/examples/comms_test/README.md", "python/examples/core_io_gpio/README.md", "python/examples/data_acquisition_service/README.md", "python/examples/data_acquisition_service/signals_coreio_modem_plugin/README.md", "python/examples/data_buffer/README.md", "python/examples/data_service/README.md", "python/examples/directory/README.md", "python/examples/disable_ir_emission/README.md", "python/examples/docking/README.md", "python/examples/docs/arm_examples.md", "python/examples/docs/autonomy_and_missions_examples.md", "python/examples/docs/basic_service_examples.md", "python/examples/docs/data_acquisition_examples.md", "python/examples/docs/joint_control_examples.md", "python/examples/docs/logging_examples.md", "python/examples/docs/orbit.md", "python/examples/docs/payloads_examples.md", "python/examples/docs/perception_world_objects_examples.md", "python/examples/docs/robot_behavior_examples.md", "python/examples/edit_autowalk/README.md", "python/examples/estop/README.md", "python/examples/extensions/README.md", "python/examples/extract_images_from_walk/README.md", "python/examples/fan_command/README.md", "python/examples/fiducial_follow/README.md", "python/examples/frame_trajectory_command/README.md", "python/examples/get_depth_plus_visual_image/README.md", "python/examples/get_image/README.md", "python/examples/get_mission_state/README.md", "python/examples/get_robot_state/README.md", "python/examples/get_robot_state_async/README.md", "python/examples/get_world_objects/README.md", "python/examples/gps_service/README.md", "python/examples/graph_nav_anchoring_optimization/README.md", "python/examples/graph_nav_command_line/README.md", "python/examples/graph_nav_extract_point_cloud/README.md", "python/examples/graph_nav_view_gps/README.md", "python/examples/graph_nav_view_map/README.md", "python/examples/gripper_camera_params/README.md", "python/examples/hello_spot/README.md", "python/examples/inverse_kinematics/README.md", "python/examples/joint_control/README.md", "python/examples/log_status/README.md", "python/examples/logging/README.md", "python/examples/metrics_over_coreio/README.md", "python/examples/mission_question_answerer/README.md", "python/examples/mission_recorder/README.md", "python/examples/network_compute_bridge/README.md", "python/examples/network_compute_bridge/fire_extinguisher_server/README.md", "python/examples/network_request_callback/README.md", "python/examples/orbit/anomalies/README.md", "python/examples/orbit/backups/README.md", "python/examples/orbit/export_run_archives/README.md", "python/examples/orbit/export_site_walk_archives/README.md", "python/examples/orbit/hello_orbit/README.md", "python/examples/orbit/runs_response/README.md", "python/examples/orbit/schedule_mission/README.md", "python/examples/orbit/send_robot_back_to_dock/README.md", "python/examples/orbit/toggle_mission_based_on_weather/README.md", "python/examples/orbit/webhook/README.md", "python/examples/orbit/webhook_integration/README.md", "python/examples/payloads/README.md", "python/examples/post_docking_callbacks/README.md", "python/examples/ray_cast/README.md", "python/examples/record_autowalk/README.md", "python/examples/remote_mission_service/README.md", "python/examples/replay_mission/README.md", "python/examples/reset_safety_stop/README.md", "python/examples/ricoh_theta/README.md", "python/examples/self_registration/README.md", "python/examples/service_customization/custom_parameter_image_server/README.md", "python/examples/service_customization/custom_parameter_ncb_worker/README.md", "python/examples/service_customization/custom_parameters_data_acquisition/README.md", "python/examples/service_faults/README.md", "python/examples/spot_cam/README.md", "python/examples/spot_light/README.md", "python/examples/spot_tensorflow_detector/README.md", "python/examples/stance/README.md", "python/examples/stitch_front_images/README.md", "python/examples/tester_programs/README.md", "python/examples/time_sync/README.md", "python/examples/upload_choreographed_sequence/README.md", "python/examples/user_nogo_regions/README.md", "python/examples/velodyne_client/README.md", "python/examples/visualizer/README.md", "python/examples/wasd/README.md", "python/examples/world_object_mutations/README.md", "python/examples/world_object_with_image_coordinates/README.md", "python/examples/xbox_controller/README.md"], "titles": ["Spot SDK", "Concepts", "About Spot", "Spot Arm and Gripper", "Arm Concepts", "Arm Services", "Arm and gripper specifications", "Autonomy", "AutoReturn Service", "Autonomous navigation code examples", "Navigation Services", "Autowalk Service", "Components of Navigation", "Directed Exploration", "Docking", "GPS on Spot", "GraphNav and Robot Locomotion", "GraphNav Area Callbacks", "GraphNav Map Structure", "GraphNav Service", "Autonomy Technical Summary", "GraphNav Initialization", "GraphNav Localization", "Mission Service", "Typical Autonomous Use Case", "Base Services", "BDDF data format", "Spot Choreography SDK", "Animation files for Choreographer", "Animations in Choreography", "Boston Dynamics Choreographer Developer Guide", "Install Choreographer", "Choreography in Autowalk", "Boston Dynamics Choreography tablet UI", "Choreography service", "Custom Gait", "Choreography moves reference", "Connecting robots to Choreographer", "Spot Data", "Data Acquisition Output", "Data Acquisition Overview", "Thermal Raw Data", "Data Buffer Overview", "Developing API Services", "E-Stop Service", "Faults", "Geometry and Frames", "Joint Control API (Beta)", "Knee Torque Limits", "Supplemental Data", "Keepalive Service", "Lease Service", "Machine Learning Bridge and External Compute", "Networking", "About Orbit (formerly Scout)", "Orbit API", "Robot Services", "Service Customization", "Integrate a Payload with the Data Acquisition Pipeline", "Payload Developer Guide", "Payload Software Interface", "CORE I/O Documentation", "CORE I/O OpenVPN Extension Documentation", "Running Custom Applications with Spot", "Guidelines for Robust Payload Design", "Mechanical Interfaces", "Configuration Requirements", "Electrical Interface", "Mounting Rails", "Spot CORE Cockpit - System Management Tool", "Pre-3.2 Spot CORE Documentation", "Manage Docker Containers in Spot CORE", "Spot CORE VNC", "API Protocol", "Boston Dynamics API Protobuf Guidelines", "Python Library", "Tutorial: Data Collection", "Part 2: Capturing Images", "Part 3: Capturing Other Data", "Part 4: Deploying to the CORE I/O", "Part 5: Collecting Data", "Part 6: Processing Collected Data", "Tutorial: Playing Fetch with Spot", "Fetch Part 2: Training the Model", "Fetch Part 3: Evaluating the Model", "Fetch Part 4: Autonomous Pick Up", "Fetch Part 5: Detecting People and Playing Fetch", "Fetch Part 6: Running the model on CORE I/O", "QuickStart", "Understanding Spot Programming", "Spot Release Notes", "Basic Proto Definitions", "Protocol Documentation", "Boston Dynamics Python Reference Guide", "Python Choreography Client", "Animation File Conversion Helpers", "Animation File To Proto", "Choreography", "Python Client", "Area Callback", "Area Callback Region Handler Base", "Area Callback Service Runner", "Area Callback Service Servicer", "Area Callback Service Utils", "Arm Surface Contact", "Async Tasks", "Auth", "Auto Return", "Autowalk", "Bddf", "Bddf Download", "Channel", "Command Line", "Common", "Data Acquisition", "Data Acquisition Helpers", "Data Acquisition Plugin", "Data Acquisition Plugin Service", "Data Acquisition Store", "Data Buffer", "Data Chunk", "Data Service", "Directory", "Directory Registration", "Docking", "Door", "Estop", "Exceptions", "Fault", "Frame Helpers", "Nmeaparser", "GPS clients and helpers", "Aggregator Client", "Gps Listener", "Registration Client", "Graph Nav", "Gripper Camera Param", "Image", "Image Service Helpers", "Inverse Kinematics", "Ir Enable Disable", "Keepalive", "Lease", "Lease Resource Hierarchy", "Lease Validator", "License", "Local Grid", "Log Status", "Manipulation Api Client", "Map Processing", "Math Helpers", "Metrics Logging", "Network Compute Bridge Client", "Payload", "Payload Registration", "Point Cloud", "Power", "Processors", "Ray Cast", "Recording", "Robot", "Robot Command", "Robot Id", "Robot State", "Sdk", "Server Util", "Service Customization Helpers", "Signals Helpers", "SpotCAM Python Client", "Audio", "Compositor", "Health", "Lighting", "Lights Helper", "Media Log", "Network", "Power", "Ptz", "Streamquality", "Version", "Spot Check", "Time Sync", "Token Cache", "Token Manager", "Units Helpers", "Util", "World Object", "Python Core", "BDDF Python", "Base Data Reader", "Block Writer", "Bosdyn", "Common", "Data Reader", "Data Writer", "File Indexer", "Grpc Proto Reader", "Grpc Reader", "Grpc Service Reader", "Grpc Service Writer", "Message Reader", "Pod Series Reader", "Pod Series Writer", "Protobuf Channel Reader", "Protobuf Reader", "Protobuf Series Writer", "Stream Data Reader", "Deprecated", "Geometry", "Util", "Python Mission", "Client", "Constants", "Exceptions", "Remote Client", "Server Util", "Util", "Python Orbit", "Client", "Exceptions", "Utils", "Python Scout", "Client", "Exceptions", "Utils", "Python Examples", "Animation Recorder", "Area Callback Tutorial", "Arm and Mobility", "Constrained Manipulation", "Arm Door Command", "Force Command", "Arm Freeze Hand in Body / World", "Arm Gaze Command", "GCODE Drawing", "Grasping", "Setting Spot Arm grasp state and carry overrides", "Arm Impedance Command", "Arm JointMove Command", "Arm Simple", "Arm Deploy and Stow", "Arm Surface Contact", "Arm Trajectory", "Walking to an Object", "Controlling the Arm with a Keyboard", "Arm and Mobility Follow", "Auto Return Example", "BDDF data download", "Cloud Upload Example", "Comms image service", "Comms Testing", "CORE I/O GPIO", "Data Acquisition Plugin Services", "Modem Signals", "Using the Data Buffer service", "Using the Robot Data Service", "Manipulating Spot Service Configurations in Directory", "Disable IR Emission", "Robot Docking", "Arm Examples", "Autonomy and Missions Examples", "Basic Service Examples", "Data Acquisition Examples", "Joint Control API Examples", "Logging and Data Retrieval Examples", "Orbit Examples", "Payload Examples", "Perception & World Objects Examples", "Robot Behavior and Commands Examples", "Edit Autowalk", "Creating an E-Stop endpoint", "Spot Extensions Build Script", "Extract Images from Walk File Example", "Fan Power Commands with the Python SDK", "Follow a Fiducial", "Frame Trajectory Commands", "API Example - Visualize Depth in Visual Image", "Using the Image Service", "Retrieving Mission state", "Using the Robot State Service", "Performing Asynchronous State Queries on Spot", "Using the World Object Service", "GPS Listener", "Graph Nav Anchoring Optimization Example", "GraphNav and Recording Service Command Line Interfaces", "GraphNav Point Cloud Extractor", "GraphNav GPS Viewer", "GraphNav Map Viewer", "Gripper Camera Parameter Examples", "Hello Spot", "Inverse Kinematics Service", "Joint Control", "Using the Log Status Service", "Logging Through the API", "Overview", "Answering a Mission Question", "Mission Recorder", "Network Compute Bridge", "Fire Extinguisher Detector Server", "Network Request Callback", "Anomalies in Orbit", "Orbit Backups", "Export Run Archives - Mission Data", "Export Sitewalk Archives - Mission Data", "Hello Orbit", "Runs Response", "Create, Edit, and Delete Scheduled Missions on Orbit", "Send robot back to the dock during a mission playback", "Enable - disable Orbit missions based on weather forcast", "Hello Webhooks", "Webhook Integrations", "Using the Payload Service", "Post Docking Callback Examples", "Ray Cast Example", "Recording an Autowalk with a Keyboard", "Run and Interact with a RemoteMissionService.", "Replaying a Mission", "Reset Safety Stop Command with the Python SDK", "Interacting with a Ricoh Theta Camera", "Payload & Service Initialization", "Custom Parameter Image Service for a Web Cam", "Network Compute Bridge", "Custom Parameter Data Acquisition", "Handling Service Faults", "Spot CAM Services", "Responding to User Interaction via Light", "Spot Tensorflow Object Detection", "Adjusting Robot Stance In Place", "Stitch Front Spot Images Together", "Tester Programs", "Using the Timesync Service", "Upload and Execute Choreography Sequence", "Setting user no-go regions for locomotion", "Using the Velodyne Point Cloud Service", "Basic Streaming Visualizer for API Messages", "Controlling the Robot with a Keyboard", "World Object Mutations", "Using World Object Service with Image Coordinates", "Controlling the Robot with an Xbox Controller"], "terms": {"The": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 111, 113, 114, 115, 116, 117, 119, 122, 123, 124, 125, 126, 127, 128, 129, 132, 135, 136, 137, 138, 139, 141, 142, 143, 144, 147, 148, 149, 150, 151, 152, 154, 155, 156, 158, 159, 160, 161, 163, 165, 166, 167, 178, 180, 181, 183, 185, 186, 192, 193, 205, 209, 210, 211, 213, 215, 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 254, 255, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 274, 277, 282, 283, 284, 285, 286, 287, 289, 290, 291, 294, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 318, 319, 320, 321, 322, 324, 325, 326, 329, 331, 334, 337, 338], "document": [0, 1, 15, 18, 21, 22, 25, 27, 30, 32, 34, 37, 40, 42, 43, 44, 47, 52, 54, 55, 56, 58, 59, 60, 63, 72, 73, 74, 75, 77, 78, 79, 83, 86, 87, 88, 89, 106, 180, 227, 232, 249, 251, 252, 255, 259, 261, 263, 267, 268, 269, 270, 274, 275, 284, 285, 286, 287, 289, 297, 299, 312, 316, 318, 319, 320, 321, 323, 331], "i": [0, 1, 2, 4, 5, 6, 7, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 81, 82, 83, 84, 85, 86, 88, 89, 92, 97, 100, 105, 106, 110, 111, 113, 114, 115, 116, 117, 118, 119, 123, 124, 126, 127, 129, 135, 137, 138, 141, 142, 143, 144, 147, 149, 150, 151, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 170, 173, 175, 176, 177, 178, 180, 181, 183, 185, 186, 189, 192, 193, 194, 195, 197, 199, 200, 201, 202, 204, 205, 206, 208, 209, 211, 216, 218, 219, 220, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 250, 252, 253, 254, 255, 266, 269, 270, 271, 272, 273, 274, 275, 277, 280, 282, 283, 284, 286, 287, 289, 290, 291, 294, 295, 296, 297, 299, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 321, 322, 324, 326, 328, 329, 331, 333, 334, 335, 337, 338], "best": [0, 1, 15, 17, 18, 20, 21, 33, 55, 58, 59, 73, 75, 83, 85, 90, 92, 181, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 266, 282, 286, 288, 289, 290, 313, 318, 326, 338], "view": [0, 1, 2, 5, 9, 28, 30, 33, 34, 35, 37, 41, 45, 52, 54, 58, 59, 63, 71, 72, 73, 75, 77, 80, 82, 84, 85, 90, 92, 170, 225, 260, 269, 274, 284, 285, 286, 287, 296, 316, 320, 321, 334], "via": [0, 1, 5, 12, 15, 17, 18, 21, 29, 35, 37, 42, 43, 45, 46, 47, 50, 53, 54, 59, 60, 67, 69, 73, 75, 77, 78, 84, 85, 87, 88, 89, 90, 92, 97, 100, 154, 161, 174, 185, 186, 211, 227, 251, 254, 255, 263, 269, 271, 273, 282, 284, 294, 297, 311, 315, 316, 318, 319, 320, 321, 328], "our": [0, 1, 4, 23, 56, 57, 59, 69, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 119, 161, 283, 286, 310], "develop": [0, 1, 7, 9, 11, 15, 20, 27, 42, 45, 47, 49, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 66, 69, 73, 74, 75, 77, 78, 79, 88, 92, 142, 161, 164, 225, 251, 252, 282, 294, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 320, 322, 329], "site": [0, 1, 18, 19, 22, 54, 59, 71, 73, 75, 89, 90, 218, 222, 251, 274, 333], "dev": [0, 1, 54, 59, 61, 62, 72, 73, 75, 76, 77, 79, 90, 92, 320], "bostondynam": [0, 1, 54, 59, 65, 66, 73, 75, 88, 90, 92, 294, 310], "com": [0, 1, 28, 54, 55, 59, 61, 65, 66, 69, 73, 75, 77, 78, 88, 89, 90, 92, 274, 294, 297, 310, 321], "applic": [0, 1, 10, 11, 12, 17, 19, 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 37, 40, 41, 45, 46, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 72, 73, 75, 77, 84, 89, 90, 92, 111, 116, 126, 142, 159, 160, 185, 248, 252, 267, 270, 272, 274, 282, 283, 284, 293, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 315, 316, 318, 320, 325, 337], "payload": [0, 1, 4, 15, 21, 22, 23, 25, 34, 38, 40, 41, 45, 52, 53, 56, 61, 65, 68, 69, 70, 71, 73, 75, 79, 87, 98, 112, 123, 128, 138, 156, 160, 161, 185, 220, 225, 249, 252, 282, 284, 286, 297, 298, 299, 310, 312, 318, 320, 321, 322, 323, 329], "us": [0, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 55, 56, 57, 59, 60, 61, 62, 64, 66, 67, 69, 71, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 95, 96, 97, 100, 101, 102, 105, 106, 107, 108, 109, 111, 113, 114, 115, 116, 117, 118, 119, 121, 123, 124, 126, 127, 128, 129, 132, 135, 137, 138, 141, 142, 144, 146, 150, 151, 154, 155, 159, 160, 161, 162, 163, 164, 165, 166, 169, 170, 173, 175, 176, 180, 181, 184, 185, 186, 189, 194, 195, 197, 198, 200, 209, 211, 214, 215, 216, 218, 220, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 250, 251, 253, 256, 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, 268, 269, 270, 271, 274, 275, 276, 278, 280, 282, 283, 285, 286, 287, 288, 289, 290, 291, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 313, 314, 316, 319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 334, 335, 336, 338], "boston": [0, 15, 20, 21, 26, 31, 34, 47, 53, 56, 57, 58, 59, 60, 61, 63, 64, 65, 69, 77, 78, 88, 89, 90, 91, 92, 94, 98, 113, 142, 168, 187, 188, 191, 217, 221, 225, 247, 261, 282, 300, 301, 318, 329], "dynam": [0, 15, 20, 21, 23, 26, 31, 34, 37, 46, 47, 53, 56, 57, 58, 59, 60, 61, 63, 64, 65, 69, 77, 78, 87, 88, 89, 90, 91, 92, 94, 98, 113, 142, 168, 187, 188, 191, 217, 221, 225, 247, 261, 282, 300, 301, 318, 329], "consist": [0, 12, 18, 20, 22, 23, 25, 26, 27, 28, 30, 34, 40, 49, 58, 74, 88, 92, 97, 105, 149, 161, 285, 287, 334], "conceptu": [0, 74, 90], "These": [0, 4, 11, 12, 15, 16, 17, 18, 25, 26, 29, 30, 33, 34, 40, 42, 43, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 58, 60, 63, 69, 77, 78, 79, 83, 89, 90, 91, 92, 97, 150, 161, 227, 229, 246, 247, 251, 252, 255, 256, 258, 269, 272, 274, 281, 282, 283, 284, 285, 288, 291, 297, 299, 311, 316, 318, 319, 324, 326, 327, 332, 336, 337], "explain": [0, 20, 26, 89, 90, 92, 166], "kei": [0, 25, 26, 28, 29, 30, 34, 37, 47, 53, 57, 61, 75, 81, 82, 83, 84, 89, 90, 92, 96, 97, 113, 114, 116, 118, 119, 121, 124, 135, 151, 156, 166, 175, 182, 186, 189, 191, 192, 194, 195, 202, 211, 214, 216, 296, 297, 299, 308, 312, 338], "abstract": [0, 11, 53, 55, 77, 92, 112, 138], "api": [0, 4, 5, 7, 9, 10, 11, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31, 35, 38, 42, 45, 46, 52, 53, 56, 57, 58, 63, 67, 76, 81, 82, 83, 84, 85, 87, 88, 89, 91, 94, 97, 98, 99, 100, 102, 104, 106, 107, 108, 110, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 132, 134, 135, 136, 137, 139, 140, 141, 142, 145, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 186, 187, 188, 189, 209, 211, 214, 216, 217, 218, 220, 221, 222, 224, 225, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 244, 245, 247, 251, 252, 254, 255, 256, 257, 258, 259, 261, 265, 266, 269, 271, 274, 277, 279, 280, 282, 283, 284, 288, 290, 291, 292, 294, 297, 299, 310, 311, 313, 316, 318, 320, 321, 322, 323, 327, 329, 331], "python": [0, 9, 10, 11, 17, 23, 25, 27, 28, 31, 43, 44, 45, 47, 53, 57, 58, 60, 61, 63, 74, 77, 78, 79, 81, 82, 83, 84, 85, 87, 92, 113, 119, 159, 209, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 252, 257, 269, 270, 271, 274, 278, 282, 284, 285, 286, 287, 288, 289, 290, 291, 293, 294, 295, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 313, 315, 318, 319, 321, 325, 326, 328, 333, 334, 338], "client": [0, 1, 7, 10, 11, 12, 16, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29, 31, 40, 42, 43, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 72, 73, 74, 75, 76, 77, 78, 82, 84, 85, 86, 87, 88, 89, 92, 93, 95, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 215, 217, 219, 220, 221, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 244, 245, 250, 252, 254, 255, 256, 257, 258, 261, 266, 273, 274, 276, 277, 279, 280, 282, 283, 284, 288, 290, 291, 292, 294, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 315, 317, 318, 320, 321, 322, 323, 327, 329, 333, 334], "librari": [0, 7, 25, 33, 34, 43, 44, 51, 53, 63, 74, 85, 87, 88, 89, 90, 92, 93, 97, 218, 220, 222, 224, 286, 310, 324], "can": [0, 1, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 92, 96, 97, 100, 102, 106, 113, 114, 116, 117, 119, 123, 124, 127, 129, 135, 137, 138, 142, 147, 150, 154, 158, 159, 160, 161, 162, 165, 166, 176, 178, 180, 185, 186, 195, 211, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 262, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 334, 335, 336, 337], "control": [0, 1, 3, 4, 5, 7, 8, 12, 14, 19, 20, 23, 24, 25, 29, 34, 35, 36, 40, 49, 50, 51, 52, 53, 56, 57, 58, 61, 63, 64, 72, 73, 75, 76, 77, 85, 86, 87, 88, 89, 92, 100, 102, 106, 112, 124, 141, 142, 161, 166, 170, 178, 225, 226, 227, 228, 229, 231, 235, 237, 249, 250, 259, 268, 270, 273, 274, 283, 284, 296, 298, 314, 315, 324, 325], "read": [0, 1, 4, 11, 23, 26, 30, 34, 41, 42, 51, 53, 54, 60, 61, 62, 73, 74, 75, 77, 78, 87, 88, 90, 92, 95, 96, 97, 100, 112, 126, 133, 142, 153, 155, 164, 182, 185, 189, 193, 195, 196, 197, 200, 201, 203, 204, 206, 213, 252, 253, 263, 282, 318, 326], "sensor": [0, 1, 4, 6, 13, 15, 18, 19, 20, 21, 22, 23, 25, 40, 42, 43, 46, 56, 58, 60, 61, 73, 75, 76, 77, 78, 85, 90, 92, 135, 137, 138, 140, 252, 257, 277, 284, 311, 322, 324], "health": [0, 30, 56, 60, 90, 168, 174, 180], "inform": [0, 1, 2, 5, 11, 12, 14, 15, 17, 18, 20, 21, 22, 23, 25, 26, 28, 30, 33, 34, 36, 39, 40, 42, 43, 45, 47, 49, 51, 52, 53, 54, 55, 56, 58, 59, 60, 61, 69, 72, 73, 74, 75, 77, 78, 79, 88, 89, 90, 92, 96, 97, 114, 116, 117, 122, 123, 135, 138, 142, 150, 159, 160, 161, 164, 165, 166, 179, 181, 193, 211, 214, 218, 222, 225, 226, 227, 248, 252, 253, 255, 256, 261, 269, 270, 272, 273, 278, 282, 283, 299, 306, 311, 315, 317, 318, 319, 320, 323, 329, 337], "from": [0, 1, 2, 4, 5, 6, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 67, 68, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 95, 96, 97, 100, 102, 104, 106, 108, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 133, 135, 136, 137, 138, 141, 142, 144, 146, 148, 149, 150, 151, 153, 154, 155, 156, 159, 160, 161, 162, 164, 165, 173, 174, 175, 178, 180, 181, 182, 185, 186, 189, 190, 193, 195, 196, 197, 200, 201, 203, 204, 206, 209, 211, 214, 216, 218, 220, 222, 224, 225, 227, 229, 230, 235, 243, 247, 250, 253, 254, 255, 258, 260, 269, 271, 273, 274, 277, 282, 283, 284, 285, 286, 287, 289, 291, 294, 295, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 329, 331], "A": [0, 2, 5, 8, 11, 12, 13, 14, 15, 16, 18, 20, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 65, 66, 67, 69, 72, 74, 76, 77, 78, 79, 81, 82, 83, 84, 87, 88, 89, 90, 92, 95, 96, 97, 99, 100, 106, 107, 111, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 126, 127, 129, 135, 137, 138, 139, 140, 141, 142, 144, 146, 147, 150, 151, 153, 154, 155, 156, 158, 159, 160, 161, 163, 164, 165, 166, 167, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 185, 186, 195, 197, 198, 199, 200, 201, 202, 203, 204, 205, 209, 214, 216, 218, 220, 224, 231, 234, 242, 247, 248, 252, 253, 255, 273, 282, 283, 284, 287, 294, 303, 309, 311, 315, 317, 318, 319, 320, 322, 326, 338], "wide": [0, 11, 15, 30, 34, 66, 84, 89, 90, 92], "varieti": [0, 1, 20, 25, 30, 31, 34, 36, 53, 55, 63, 79, 82, 84, 89, 90, 92, 217, 221], "exampl": [0, 1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 15, 16, 19, 20, 21, 22, 25, 26, 28, 30, 31, 39, 40, 44, 46, 50, 51, 53, 54, 55, 56, 61, 63, 64, 69, 72, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 88, 89, 90, 92, 96, 117, 119, 126, 135, 137, 141, 142, 149, 150, 159, 161, 216, 249, 253, 271, 296, 297, 298, 299, 318, 319, 321, 326, 328, 329, 338], "program": [0, 9, 11, 21, 30, 45, 52, 53, 54, 55, 58, 61, 63, 74, 75, 76, 77, 78, 79, 82, 88, 90, 92, 97, 100, 123, 160, 225, 227, 252, 255, 260, 262, 274, 277, 278, 279, 280, 282, 285, 286, 287, 291, 292, 293, 295, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 314, 318, 320, 322, 323, 326, 328, 331, 334, 338], "quickstart": [0, 75, 76, 77, 78, 82, 83, 89, 90, 225, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 288, 289, 290, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 313, 326, 338], "guid": [0, 27, 33, 45, 58, 60, 63, 71, 73, 74, 75, 76, 77, 78, 82, 83, 88, 89, 90, 92, 128, 154, 160, 185, 225, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 252, 257, 266, 274, 288, 289, 290, 294, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 318, 319, 320, 323, 329], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 67, 68, 69, 70, 71, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 91, 92, 93, 95, 96, 97, 106, 110, 111, 113, 117, 118, 119, 123, 124, 126, 127, 135, 137, 141, 142, 144, 147, 149, 150, 154, 155, 156, 157, 159, 160, 161, 170, 175, 181, 185, 186, 194, 202, 205, 209, 214, 222, 227, 229, 231, 235, 244, 247, 248, 249, 250, 251, 252, 255, 269, 270, 271, 274, 275, 277, 282, 283, 284, 285, 287, 294, 296, 297, 310, 311, 315, 316, 318, 319, 320, 321, 325, 326, 328, 329, 334, 335, 338], "also": [0, 3, 4, 6, 8, 11, 15, 16, 17, 18, 19, 20, 22, 23, 25, 28, 29, 30, 31, 33, 34, 35, 36, 40, 42, 44, 45, 46, 47, 53, 54, 55, 56, 57, 58, 59, 61, 63, 64, 67, 69, 71, 72, 74, 77, 78, 79, 81, 82, 86, 87, 88, 89, 90, 92, 111, 123, 135, 141, 142, 160, 161, 164, 185, 218, 222, 226, 232, 238, 247, 250, 251, 269, 270, 271, 272, 273, 274, 283, 284, 287, 290, 297, 298, 311, 312, 315, 316, 318, 319, 320, 321, 326, 333, 338], "includ": [0, 2, 3, 5, 6, 7, 9, 10, 13, 15, 17, 18, 20, 22, 23, 25, 26, 28, 29, 30, 32, 33, 35, 36, 37, 39, 40, 42, 43, 45, 46, 47, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 67, 69, 71, 74, 77, 78, 79, 81, 82, 83, 84, 85, 87, 88, 89, 90, 92, 93, 97, 113, 114, 115, 116, 117, 125, 135, 137, 138, 142, 148, 149, 151, 159, 161, 163, 181, 185, 186, 190, 218, 225, 227, 229, 248, 252, 255, 271, 277, 282, 284, 287, 294, 295, 297, 299, 301, 311, 318, 321, 326], "add": [0, 4, 17, 23, 28, 30, 32, 33, 37, 42, 46, 50, 52, 54, 55, 56, 58, 61, 62, 63, 71, 72, 79, 80, 82, 84, 85, 86, 87, 88, 90, 92, 97, 105, 112, 113, 119, 141, 142, 149, 150, 160, 165, 167, 185, 186, 194, 195, 202, 218, 222, 227, 248, 271, 283, 297, 298, 314, 319, 320, 321, 322, 324, 326, 332, 336], "addit": [0, 5, 15, 17, 18, 20, 22, 23, 26, 27, 28, 32, 34, 35, 37, 41, 42, 43, 46, 47, 49, 54, 56, 57, 58, 60, 61, 63, 71, 72, 74, 77, 79, 81, 86, 87, 89, 92, 96, 111, 115, 117, 137, 138, 164, 165, 166, 186, 194, 195, 202, 205, 218, 225, 247, 253, 258, 269, 271, 273, 282, 306, 315, 318, 319, 320, 323, 329], "sens": [0, 11, 18, 58, 59, 92, 149], "commun": [0, 1, 8, 11, 15, 17, 23, 25, 27, 30, 33, 43, 44, 47, 51, 52, 53, 56, 58, 60, 61, 63, 66, 69, 71, 73, 76, 77, 78, 84, 88, 89, 92, 107, 108, 111, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 135, 137, 138, 142, 146, 149, 151, 152, 153, 154, 155, 156, 160, 161, 163, 164, 181, 186, 211, 214, 227, 250, 277, 282, 309, 310, 315, 318, 320, 322, 326, 329, 338], "capabl": [0, 4, 6, 9, 12, 15, 20, 23, 32, 35, 43, 52, 56, 61, 64, 78, 82, 87, 89, 90, 92, 112, 114, 116, 117, 167, 252, 284, 320, 329], "beyond": [0, 1, 4, 34, 43, 56, 89, 90, 92, 100, 227], "what": [0, 11, 14, 17, 25, 28, 35, 36, 40, 45, 49, 50, 51, 53, 55, 57, 58, 60, 63, 69, 74, 77, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 117, 119, 135, 152, 161, 225, 227, 283, 284, 287, 298, 310, 315, 319, 325], "base": [0, 1, 4, 5, 9, 12, 15, 17, 18, 19, 21, 23, 26, 28, 29, 34, 35, 36, 40, 41, 42, 43, 44, 45, 47, 51, 52, 53, 54, 56, 57, 58, 60, 61, 62, 63, 69, 78, 85, 87, 90, 92, 96, 97, 99, 102, 103, 104, 105, 106, 107, 108, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 185, 186, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 208, 209, 211, 212, 213, 214, 215, 216, 218, 219, 222, 225, 229, 232, 245, 252, 261, 274, 277, 285, 291, 294, 310, 326], "platform": [0, 18, 21, 25, 30, 56, 59, 60, 63, 74, 76, 79, 87, 90, 92, 248, 250, 270, 285, 312], "provid": [0, 1, 2, 5, 7, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29, 30, 31, 33, 34, 35, 40, 43, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 77, 78, 79, 81, 83, 87, 89, 90, 92, 96, 97, 99, 106, 108, 111, 113, 114, 116, 117, 124, 126, 127, 135, 137, 138, 142, 147, 150, 154, 155, 159, 160, 161, 163, 164, 165, 166, 185, 213, 214, 216, 217, 218, 221, 222, 227, 252, 270, 273, 274, 277, 282, 283, 284, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 315, 317, 318, 319, 320, 321, 324, 329, 331], "icd": 0, "cover": [0, 22, 25, 64, 69, 75, 83, 84, 88, 89, 92, 161, 225, 259, 268], "mechan": [0, 5, 16, 42, 49, 53, 54, 56, 59, 90, 92, 177, 309, 310], "electr": [0, 14, 59, 61, 64], "softwar": [0, 7, 25, 26, 29, 41, 44, 45, 53, 56, 59, 61, 64, 66, 71, 88, 90, 92, 126, 159, 179, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 252, 266, 274, 275, 289, 290, 296, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 314, 318, 319, 320, 323, 324, 331], "interfac": [0, 14, 15, 17, 18, 25, 29, 31, 40, 42, 47, 52, 53, 54, 58, 59, 61, 62, 64, 69, 74, 75, 76, 77, 89, 90, 92, 94, 98, 110, 112, 113, 117, 131, 138, 161, 168, 182, 187, 188, 210, 217, 221, 244, 247, 260, 269, 270, 285, 286, 287, 294, 296, 314, 318, 335], "support": [0, 3, 4, 5, 7, 9, 11, 15, 18, 20, 25, 26, 27, 30, 31, 34, 37, 47, 53, 54, 55, 56, 57, 59, 62, 63, 65, 66, 67, 68, 69, 71, 74, 77, 78, 81, 82, 84, 87, 88, 89, 92, 98, 113, 118, 138, 146, 161, 164, 210, 247, 252, 271, 274, 277, 282, 294, 298, 310, 312, 326, 338], "protocol": [0, 15, 23, 27, 60, 61, 74, 84, 88, 89, 90, 175, 250, 282], "definit": [0, 15, 17, 23, 27, 28, 43, 46, 53, 56, 74, 88, 89, 90, 92, 96, 98, 122, 123, 153, 160, 161, 210, 315, 319], "thi": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 96, 97, 100, 101, 102, 105, 111, 112, 113, 114, 116, 117, 118, 119, 123, 124, 126, 132, 133, 135, 137, 138, 141, 142, 143, 144, 147, 149, 150, 153, 154, 155, 156, 159, 160, 161, 163, 164, 165, 166, 170, 173, 175, 180, 181, 185, 186, 194, 195, 197, 198, 200, 201, 202, 203, 205, 209, 211, 214, 218, 220, 222, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 337, 338], "refer": [0, 2, 5, 7, 9, 10, 12, 18, 21, 22, 27, 28, 30, 33, 39, 40, 46, 47, 49, 50, 52, 53, 54, 55, 56, 58, 60, 61, 63, 67, 71, 73, 75, 77, 78, 88, 90, 92, 135, 150, 161, 226, 227, 252, 270, 271, 273, 283, 286, 287, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 318, 320], "detail": [0, 3, 4, 10, 11, 12, 17, 18, 21, 22, 32, 34, 35, 39, 42, 43, 44, 47, 53, 54, 55, 58, 59, 60, 65, 66, 69, 72, 74, 75, 77, 79, 83, 87, 88, 89, 90, 92, 102, 106, 117, 123, 124, 135, 142, 161, 170, 181, 213, 229, 248, 252, 263, 266, 273, 282, 284, 286, 301, 319], "who": [0, 30, 32, 33, 51, 53, 64, 90, 92], "wish": [0, 22, 33, 36, 50, 53, 60, 92, 283, 311], "languag": [0, 1, 11, 33, 53, 55, 74, 89, 90, 97], "other": [0, 4, 5, 7, 8, 11, 13, 15, 17, 18, 19, 20, 21, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 59, 60, 61, 66, 71, 74, 76, 79, 81, 83, 84, 87, 88, 89, 92, 97, 104, 108, 113, 114, 116, 118, 119, 121, 122, 123, 124, 125, 129, 135, 137, 138, 141, 142, 148, 150, 155, 156, 160, 161, 165, 178, 185, 186, 194, 211, 214, 218, 222, 251, 252, 255, 262, 266, 271, 273, 277, 284, 286, 287, 294, 297, 299, 303, 310, 315, 318, 320, 321, 325, 329, 334], "than": [0, 4, 8, 11, 17, 18, 22, 23, 25, 28, 34, 35, 36, 39, 44, 47, 51, 53, 54, 56, 57, 58, 63, 68, 69, 72, 74, 75, 77, 78, 83, 85, 88, 89, 90, 92, 106, 117, 127, 135, 137, 142, 154, 161, 277, 296, 298, 309, 310, 318, 334], "implement": [0, 1, 7, 9, 11, 17, 19, 20, 23, 25, 44, 45, 52, 53, 55, 56, 58, 63, 74, 77, 78, 79, 89, 90, 92, 100, 101, 102, 107, 114, 116, 117, 118, 119, 126, 138, 141, 158, 216, 262, 315, 319], "speak": [0, 53, 89, 90], "repositori": [0, 83, 164, 274], "github": [0, 77, 78, 92, 274, 297, 321], "repo": [0, 274], "where": [0, 1, 4, 5, 11, 12, 13, 15, 17, 18, 21, 22, 23, 26, 28, 29, 30, 32, 33, 34, 35, 36, 40, 42, 45, 46, 47, 53, 54, 55, 56, 57, 61, 63, 66, 68, 73, 74, 77, 78, 80, 82, 83, 84, 85, 86, 88, 89, 90, 92, 97, 104, 108, 115, 125, 135, 142, 148, 151, 159, 160, 161, 185, 186, 195, 209, 227, 247, 252, 255, 269, 273, 283, 284, 286, 287, 294, 297, 301, 310, 311, 312, 315, 316, 317, 318, 319, 320, 321, 326], "all": [0, 4, 11, 13, 15, 17, 18, 19, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 49, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 66, 67, 69, 71, 72, 74, 75, 77, 78, 79, 81, 83, 84, 85, 86, 87, 88, 89, 90, 92, 95, 97, 112, 113, 114, 115, 116, 117, 119, 122, 123, 127, 128, 129, 132, 137, 138, 141, 142, 143, 152, 153, 155, 157, 158, 160, 161, 163, 164, 175, 177, 178, 179, 186, 195, 206, 211, 218, 220, 222, 224, 226, 228, 229, 247, 252, 255, 262, 270, 271, 272, 274, 277, 283, 284, 289, 296, 297, 298, 308, 310, 311, 315, 317, 318, 319, 320, 321, 324, 325, 326, 327, 329], "code": [0, 2, 4, 7, 10, 11, 15, 16, 17, 21, 23, 26, 43, 45, 53, 54, 55, 56, 60, 61, 63, 74, 77, 81, 82, 85, 86, 87, 88, 89, 94, 98, 110, 112, 113, 119, 131, 142, 145, 146, 147, 153, 154, 155, 168, 187, 188, 209, 210, 211, 217, 220, 221, 225, 227, 248, 261, 274, 277, 280, 282, 284, 294, 299, 306, 308, 320], "host": [0, 23, 25, 43, 44, 53, 54, 60, 61, 62, 63, 69, 71, 77, 78, 79, 82, 84, 87, 90, 92, 101, 110, 111, 123, 160, 165, 185, 249, 250, 252, 273, 282, 297, 298, 312, 315, 318, 319, 320, 321, 322, 323, 329], "version": [0, 15, 23, 25, 26, 33, 36, 39, 41, 47, 51, 60, 61, 62, 63, 71, 72, 74, 76, 77, 79, 82, 83, 87, 88, 89, 90, 97, 104, 107, 112, 113, 114, 116, 118, 119, 121, 124, 125, 126, 128, 132, 135, 136, 137, 139, 140, 141, 142, 146, 148, 150, 151, 152, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 180, 181, 185, 186, 189, 200, 211, 214, 215, 216, 218, 222, 224, 271, 274, 324, 328], "4": [0, 2, 6, 11, 15, 18, 25, 26, 28, 30, 32, 34, 36, 40, 53, 55, 58, 60, 61, 63, 67, 69, 72, 74, 76, 77, 82, 83, 84, 87, 88, 89, 92, 124, 126, 142, 156, 159, 162, 165, 170, 186, 194, 212, 216, 222, 224, 227, 273, 282, 284, 294, 310, 324, 338], "1": [0, 2, 4, 11, 13, 15, 18, 22, 25, 26, 28, 30, 33, 34, 35, 36, 39, 40, 41, 42, 44, 46, 48, 49, 50, 51, 53, 55, 57, 58, 60, 61, 63, 67, 69, 71, 72, 74, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 117, 119, 126, 135, 137, 138, 141, 142, 147, 150, 156, 159, 160, 161, 164, 165, 169, 170, 172, 173, 177, 186, 200, 212, 216, 227, 229, 230, 234, 247, 251, 274, 275, 282, 284, 296, 297, 307, 310, 311, 313, 315, 318, 321, 324, 326, 338], "0": [0, 2, 3, 4, 6, 15, 18, 22, 26, 28, 32, 35, 36, 39, 40, 41, 46, 47, 48, 49, 50, 53, 55, 57, 60, 61, 62, 63, 68, 69, 72, 74, 77, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 97, 113, 119, 123, 124, 126, 130, 133, 135, 137, 138, 142, 150, 156, 158, 159, 160, 161, 162, 164, 165, 169, 170, 172, 173, 174, 177, 180, 181, 185, 186, 200, 208, 216, 222, 224, 227, 228, 229, 251, 252, 273, 274, 277, 282, 283, 284, 291, 294, 296, 297, 310, 313, 318, 320, 324, 326], "pleas": [0, 11, 15, 18, 22, 40, 52, 55, 58, 62, 63, 69, 72, 77, 78, 79, 80, 87, 88, 90, 92, 113, 149, 185, 215, 222, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 252, 257, 270, 274, 280, 283, 288, 289, 290, 291, 294, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 313, 318, 320, 321, 325, 326, 338], "review": [0, 10, 34, 42, 69, 92, 318, 328], "releas": [0, 3, 11, 18, 22, 26, 32, 33, 37, 40, 42, 53, 54, 57, 58, 63, 69, 70, 71, 92, 141, 161, 163, 185, 227, 244, 270, 274, 296, 318], "note": [0, 8, 11, 15, 17, 18, 21, 23, 25, 28, 30, 31, 32, 35, 36, 37, 39, 42, 43, 49, 51, 56, 57, 58, 61, 63, 66, 67, 69, 76, 77, 78, 81, 82, 84, 85, 86, 88, 89, 95, 97, 117, 118, 119, 138, 151, 159, 160, 175, 216, 227, 229, 250, 251, 252, 271, 274, 275, 277, 282, 283, 284, 285, 286, 294, 296, 297, 298, 301, 312, 315, 318, 319, 320, 323, 325, 328, 329], "see": [0, 3, 4, 5, 11, 12, 13, 15, 17, 18, 22, 23, 25, 30, 32, 33, 34, 35, 36, 37, 40, 44, 47, 51, 54, 55, 56, 57, 61, 62, 63, 69, 72, 80, 82, 83, 84, 85, 86, 87, 89, 90, 92, 106, 113, 119, 123, 124, 126, 156, 160, 161, 162, 164, 216, 226, 227, 228, 232, 235, 243, 246, 247, 248, 250, 251, 252, 255, 256, 258, 259, 260, 261, 262, 263, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 278, 280, 281, 282, 283, 284, 285, 286, 289, 291, 293, 294, 295, 296, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 314, 315, 316, 317, 318, 319, 320, 323, 324, 325, 327, 330, 331, 332, 333, 335, 336, 337], "ha": [0, 2, 4, 5, 6, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 42, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 69, 72, 78, 81, 82, 83, 84, 85, 86, 88, 89, 90, 92, 97, 99, 100, 113, 117, 118, 119, 123, 126, 135, 137, 138, 142, 143, 144, 147, 149, 155, 156, 159, 160, 161, 163, 174, 180, 181, 185, 190, 192, 215, 216, 222, 224, 227, 234, 247, 251, 255, 269, 270, 274, 282, 283, 294, 297, 299, 311, 316, 318, 319, 321, 329, 338], "chang": [0, 8, 12, 13, 15, 16, 17, 19, 20, 22, 25, 30, 34, 36, 46, 51, 53, 55, 56, 57, 60, 61, 63, 69, 71, 72, 83, 84, 85, 86, 87, 88, 89, 92, 97, 100, 102, 123, 126, 141, 150, 154, 160, 161, 163, 170, 178, 186, 218, 227, 234, 248, 252, 270, 274, 277, 283, 310, 314, 315, 318, 320, 335, 336, 338], "concept": [0, 3, 12, 18, 38, 74, 75, 84, 86, 89, 90, 92, 225, 283, 319], "sdk": [1, 2, 3, 7, 9, 10, 11, 13, 15, 18, 20, 21, 25, 31, 40, 41, 43, 45, 47, 51, 52, 53, 56, 58, 59, 60, 61, 63, 73, 75, 77, 78, 79, 82, 84, 85, 92, 97, 98, 105, 111, 159, 160, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 250, 251, 252, 257, 258, 267, 269, 270, 272, 274, 281, 282, 283, 284, 288, 289, 290, 313, 316, 318, 324, 325, 326, 327, 329, 330, 331, 332, 333, 336, 337, 338], "let": [1, 4, 5, 16, 17, 30, 50, 54, 57, 72, 73, 74, 77, 82, 83, 84, 85, 86, 87, 89, 90, 92, 175, 227, 283], "creat": [1, 2, 9, 12, 13, 19, 20, 22, 25, 26, 28, 29, 30, 32, 33, 34, 36, 40, 43, 46, 51, 53, 54, 56, 60, 61, 65, 66, 71, 74, 76, 77, 78, 82, 83, 84, 85, 87, 88, 90, 92, 96, 97, 100, 102, 106, 111, 113, 114, 115, 117, 119, 138, 142, 150, 151, 159, 160, 161, 162, 164, 165, 166, 173, 185, 186, 198, 218, 220, 222, 224, 227, 244, 249, 252, 266, 269, 271, 275, 277, 282, 283, 284, 286, 295, 296, 297, 298, 301, 309, 310, 311, 312, 314, 315, 316, 318, 319, 321, 322, 324, 326, 329, 330, 332, 333, 334, 335, 338], "integr": [1, 6, 12, 29, 35, 38, 40, 52, 54, 59, 63, 66, 69, 73, 76, 84, 131, 227, 251, 265, 309, 329], "follow": [1, 2, 4, 5, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 30, 31, 32, 33, 34, 36, 37, 40, 41, 42, 44, 45, 46, 47, 50, 51, 53, 54, 55, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 74, 75, 76, 79, 80, 82, 83, 85, 86, 87, 88, 89, 90, 92, 93, 117, 119, 123, 135, 150, 159, 161, 163, 173, 185, 216, 218, 222, 227, 234, 244, 247, 249, 251, 252, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 270, 271, 273, 282, 283, 284, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 314, 315, 318, 319, 320, 321, 325, 326, 328, 329, 333, 335, 338], "server": [1, 11, 15, 19, 42, 44, 45, 53, 54, 57, 60, 63, 69, 73, 77, 84, 85, 86, 87, 90, 92, 98, 106, 111, 126, 127, 135, 142, 149, 152, 175, 181, 185, 210, 214, 227, 250, 252, 267, 271, 282, 283, 294, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 321], "model": [1, 17, 18, 40, 47, 52, 56, 61, 65, 66, 69, 73, 82, 85, 86, 90, 92, 112, 152, 163, 225, 227, 252, 283, 285, 297, 298, 321, 326], "servic": [1, 3, 7, 9, 12, 16, 18, 20, 21, 22, 26, 27, 29, 32, 38, 39, 41, 46, 47, 52, 53, 54, 59, 62, 63, 71, 72, 73, 74, 75, 76, 80, 81, 84, 85, 86, 87, 88, 97, 98, 99, 100, 104, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 118, 119, 122, 123, 124, 125, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 139, 140, 141, 142, 144, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 185, 186, 188, 191, 210, 211, 212, 214, 225, 226, 227, 247, 248, 259, 260, 262, 263, 264, 267, 268, 274, 280, 282, 283, 286, 293, 297, 299, 308, 309, 310, 312, 313, 321, 322, 331, 332, 336], "run": [1, 2, 8, 9, 11, 12, 14, 15, 20, 21, 23, 25, 26, 29, 32, 34, 36, 37, 39, 43, 45, 46, 52, 53, 56, 61, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 84, 85, 86, 89, 90, 92, 97, 100, 102, 103, 105, 111, 112, 113, 115, 117, 119, 133, 135, 147, 152, 165, 173, 178, 180, 181, 185, 211, 212, 216, 218, 220, 222, 224, 225, 253, 265, 271, 292, 294, 295, 296, 297, 298, 299, 319, 321, 322, 326, 329, 338], "over": [1, 4, 5, 16, 17, 18, 21, 25, 30, 34, 39, 44, 51, 53, 54, 56, 62, 65, 66, 69, 73, 74, 81, 82, 83, 84, 85, 86, 87, 89, 92, 124, 141, 156, 159, 161, 170, 203, 218, 222, 227, 228, 229, 231, 234, 258, 283, 310, 311, 315, 326], "network": [1, 7, 15, 25, 40, 43, 52, 54, 55, 56, 59, 62, 63, 71, 72, 73, 74, 79, 82, 83, 84, 85, 87, 89, 98, 164, 168, 170, 174, 249, 250, 260, 261, 267, 272, 294, 298, 310, 312, 318, 320, 324, 326, 329], "connect": [1, 12, 13, 14, 15, 17, 18, 19, 20, 22, 25, 27, 29, 30, 31, 33, 45, 47, 49, 53, 54, 59, 60, 63, 64, 65, 67, 69, 72, 73, 76, 77, 78, 79, 81, 82, 84, 85, 87, 88, 89, 90, 92, 101, 111, 118, 127, 135, 138, 160, 175, 227, 262, 271, 273, 277, 282, 284, 286, 287, 294, 304, 310, 315, 319, 320, 321, 326, 329, 338], "diagram": [1, 15, 23, 37, 40, 52, 53, 58, 61, 85, 87, 90, 326], "high": [1, 4, 5, 11, 14, 15, 16, 23, 25, 29, 30, 34, 35, 36, 42, 47, 53, 54, 56, 60, 61, 67, 84, 89, 90, 92, 156, 263, 273, 283, 285, 294, 318], "level": [1, 4, 5, 11, 15, 18, 21, 23, 34, 36, 42, 44, 47, 53, 54, 56, 57, 61, 74, 78, 81, 82, 88, 89, 90, 119, 126, 160, 178, 185, 216, 271, 273, 291, 294, 320], "overview": [1, 27, 29, 38, 58, 69, 82, 84, 90, 232, 260, 262, 265, 266, 267, 275, 320], "robot": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 21, 23, 24, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 39, 40, 42, 44, 45, 50, 51, 52, 54, 55, 58, 59, 60, 61, 62, 63, 64, 68, 69, 71, 74, 76, 77, 78, 79, 81, 82, 84, 85, 86, 87, 92, 94, 96, 97, 98, 100, 101, 102, 104, 105, 106, 108, 110, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 132, 133, 135, 136, 137, 138, 140, 141, 142, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 164, 168, 173, 176, 180, 181, 183, 185, 186, 187, 188, 209, 211, 214, 218, 222, 225, 226, 227, 228, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 249, 250, 252, 254, 257, 259, 261, 263, 267, 270, 273, 275, 277, 280, 282, 284, 285, 286, 287, 289, 290, 294, 295, 296, 298, 303, 304, 311, 312, 313, 314, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 328, 329, 330, 331, 333, 334], "": [1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 42, 44, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 65, 66, 67, 69, 71, 72, 74, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 90, 92, 93, 96, 97, 100, 112, 113, 117, 119, 127, 129, 135, 138, 140, 141, 142, 144, 145, 150, 151, 152, 154, 159, 160, 161, 162, 163, 164, 165, 179, 181, 185, 186, 209, 213, 220, 222, 224, 225, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 249, 250, 252, 255, 256, 257, 258, 260, 267, 270, 271, 273, 274, 275, 277, 282, 283, 284, 286, 287, 288, 289, 290, 291, 294, 295, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 317, 318, 319, 320, 322, 326, 327, 329, 330, 334, 337, 338], "tablet": [1, 7, 8, 11, 12, 13, 17, 19, 20, 22, 24, 27, 29, 32, 34, 35, 40, 41, 45, 51, 52, 56, 57, 58, 59, 60, 69, 77, 80, 81, 82, 84, 85, 86, 87, 90, 92, 117, 159, 226, 227, 229, 252, 258, 269, 273, 277, 284, 286, 296, 298, 315, 316, 318, 320, 321, 327, 328, 331], "laptop": [1, 31, 52, 79, 86, 87, 227, 315, 319], "cloud": [1, 15, 18, 22, 46, 53, 54, 61, 76, 79, 92, 98, 135, 137, 159, 260, 262, 283, 287, 297, 299, 321], "long": [1, 14, 18, 21, 22, 25, 30, 34, 36, 44, 45, 54, 58, 78, 83, 84, 85, 86, 89, 90, 92, 117, 161, 234, 259, 273, 283], "thei": [1, 4, 8, 11, 12, 14, 17, 18, 20, 21, 23, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 40, 41, 42, 44, 45, 46, 47, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 77, 78, 79, 83, 86, 88, 89, 90, 92, 95, 103, 129, 138, 142, 150, 178, 226, 227, 248, 251, 252, 273, 277, 284, 287, 319, 320], "establish": [1, 21, 25, 43, 54, 56, 67, 92, 111, 127, 175, 181, 214, 273, 282, 317, 318, 330], "ani": [1, 3, 4, 5, 6, 7, 8, 11, 12, 14, 15, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 68, 72, 77, 78, 79, 81, 82, 84, 85, 88, 89, 90, 92, 96, 97, 100, 107, 113, 114, 116, 117, 119, 123, 126, 128, 135, 138, 142, 149, 152, 154, 159, 160, 161, 165, 166, 180, 181, 185, 209, 213, 214, 226, 227, 252, 271, 274, 277, 282, 283, 284, 294, 295, 296, 298, 299, 312, 315, 319, 320, 326, 329, 337, 338], "ip": [1, 31, 37, 42, 53, 60, 61, 63, 69, 71, 72, 76, 77, 78, 79, 82, 84, 86, 90, 92, 101, 110, 112, 113, 123, 218, 222, 227, 247, 249, 250, 252, 273, 282, 294, 297, 298, 310, 312, 315, 318, 319, 320, 321, 322, 324, 329], "direct": [1, 3, 4, 5, 7, 17, 18, 22, 25, 28, 30, 32, 33, 36, 54, 61, 62, 63, 69, 74, 85, 86, 90, 92, 123, 158, 159, 161, 228, 252, 287, 296, 297, 299, 313, 314, 318, 319, 321, 335], "wifi": [1, 2, 52, 53, 60, 61, 62, 63, 76, 79, 85, 87, 88, 90, 92, 112, 113, 227, 249, 273, 315, 318], "ethernet": [1, 2, 6, 14, 15, 53, 60, 61, 62, 67, 69, 90, 92, 113], "intranet": 1, "internet": [1, 53, 61, 69, 286, 294, 299, 312], "imag": [1, 2, 5, 15, 18, 21, 23, 30, 34, 37, 39, 40, 41, 43, 46, 51, 52, 54, 61, 62, 69, 71, 78, 80, 81, 82, 83, 84, 85, 86, 87, 98, 112, 114, 116, 117, 118, 135, 152, 166, 174, 178, 218, 220, 222, 230, 234, 235, 243, 250, 251, 252, 253, 260, 261, 262, 267, 271, 274, 282, 283, 286, 289, 294, 297, 298, 310, 312, 321, 324, 326, 335], "command": [1, 3, 4, 5, 8, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 29, 31, 34, 35, 36, 37, 40, 45, 49, 51, 52, 58, 61, 64, 69, 71, 72, 74, 76, 77, 78, 79, 82, 85, 86, 87, 97, 98, 99, 104, 110, 124, 125, 126, 135, 136, 148, 156, 158, 160, 180, 185, 216, 225, 226, 228, 232, 234, 235, 239, 240, 242, 243, 244, 247, 248, 249, 250, 251, 252, 255, 259, 260, 261, 263, 269, 271, 274, 277, 278, 279, 281, 282, 285, 286, 287, 289, 290, 291, 293, 294, 295, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 314, 315, 316, 318, 319, 320, 321, 322, 323, 324, 325, 326, 328, 329, 330, 331, 332, 333, 334, 338], "higher": [1, 5, 18, 25, 28, 30, 36, 47, 51, 53, 56, 64, 71, 90, 92, 126, 287, 320, 324], "layer": [1, 11, 20, 25, 29, 53, 56, 64, 82, 92], "stack": [1, 25, 30, 53, 63, 137], "autonomi": [1, 18, 25, 63, 69, 90, 225, 284], "built": [1, 20, 25, 42, 52, 53, 54, 57, 60, 61, 63, 78, 81, 87, 88, 90, 92, 97, 158, 252, 271, 274, 298, 312], "top": [1, 4, 5, 11, 14, 15, 21, 22, 33, 36, 46, 53, 54, 60, 63, 65, 68, 69, 80, 81, 82, 85, 88, 90, 92, 283, 318, 320, 326, 329], "lower": [1, 14, 18, 33, 35, 36, 41, 47, 49, 53, 89, 90, 92, 150, 283, 287, 296, 318], "core": [1, 11, 15, 25, 52, 56, 59, 60, 74, 76, 82, 86, 88, 89, 92, 93, 185, 227, 250, 252, 253, 266, 267, 270, 271, 294, 297, 310, 311, 312, 315, 318, 321], "final": [1, 5, 13, 16, 23, 26, 51, 57, 63, 77, 78, 79, 80, 81, 82, 83, 89, 90, 92, 118, 135, 151, 227, 271, 283, 284, 302, 303, 304, 310, 320, 329], "allow": [1, 3, 4, 5, 8, 10, 11, 12, 13, 15, 16, 17, 19, 20, 22, 23, 26, 28, 29, 30, 31, 33, 34, 35, 36, 40, 41, 42, 44, 47, 51, 54, 55, 56, 57, 58, 60, 61, 62, 63, 67, 69, 71, 72, 76, 77, 78, 79, 84, 86, 87, 89, 90, 92, 97, 102, 111, 119, 122, 123, 126, 127, 138, 145, 147, 150, 153, 154, 155, 158, 159, 161, 165, 185, 227, 235, 243, 250, 251, 252, 269, 271, 273, 284, 291, 296, 297, 309, 312, 315, 316, 318, 320, 321, 323, 325, 326, 329, 338], "expans": 1, "those": [1, 4, 5, 13, 17, 20, 25, 28, 30, 34, 35, 36, 39, 40, 50, 52, 53, 54, 58, 61, 63, 76, 77, 78, 79, 80, 82, 85, 87, 88, 90, 92, 117, 283, 284, 294, 295, 326, 338], "itself": [1, 4, 15, 16, 17, 19, 25, 30, 39, 41, 42, 43, 44, 46, 53, 56, 60, 61, 64, 69, 84, 89, 90, 92, 102, 123, 142, 154, 160, 166, 214, 249, 282, 315, 319], "For": [1, 2, 4, 5, 7, 8, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 39, 40, 41, 42, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 64, 74, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90, 92, 96, 97, 106, 108, 117, 119, 125, 126, 128, 132, 135, 137, 141, 142, 148, 149, 150, 152, 156, 159, 161, 162, 163, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 182, 183, 186, 211, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 250, 252, 255, 257, 271, 274, 277, 282, 283, 284, 285, 288, 289, 290, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 312, 313, 315, 318, 319, 320, 321, 325, 326, 338], "cam": [1, 23, 39, 41, 43, 56, 58, 60, 63, 80, 81, 92, 98, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 267, 277, 298, 318, 329], "offer": [1, 6, 11, 42, 53, 56, 60, 63, 84, 92, 175], "stream": [1, 18, 19, 26, 34, 42, 53, 57, 90, 97, 108, 113, 117, 118, 120, 133, 135, 161, 163, 168, 170, 176, 178, 185, 188, 189, 211, 252, 277, 282, 318, 320, 324], "qualiti": [1, 15, 22, 56, 77, 89, 90, 92, 135, 137, 138, 168, 178, 277, 282, 283, 318, 324], "led": [1, 34, 90, 172, 173, 227, 251], "light": [1, 2, 12, 21, 30, 32, 33, 34, 35, 54, 59, 82, 90, 92, 140, 168, 257, 268, 299, 324], "collect": [1, 7, 20, 21, 24, 25, 40, 43, 45, 54, 60, 61, 74, 75, 78, 82, 87, 90, 92, 97, 113, 117, 132, 137, 138, 155, 218, 252, 282, 283, 287, 326, 329], "organ": [1, 40, 54, 83, 87, 92, 326], "store": [1, 12, 13, 15, 18, 19, 20, 24, 26, 29, 33, 34, 38, 39, 40, 42, 46, 54, 56, 58, 60, 61, 78, 81, 82, 85, 92, 97, 98, 103, 115, 116, 117, 124, 138, 151, 159, 174, 185, 192, 194, 195, 197, 199, 200, 204, 205, 213, 247, 248, 255, 269, 283, 287, 300, 311, 312, 316, 319, 322, 324], "data": [1, 2, 12, 14, 15, 17, 19, 21, 22, 23, 24, 25, 29, 43, 45, 46, 47, 52, 53, 54, 56, 57, 59, 60, 61, 63, 67, 75, 82, 83, 84, 85, 86, 87, 89, 97, 98, 99, 100, 102, 103, 105, 110, 112, 113, 129, 132, 133, 135, 137, 138, 147, 152, 155, 159, 160, 165, 167, 169, 174, 178, 182, 185, 188, 190, 191, 192, 195, 197, 200, 201, 202, 203, 204, 205, 216, 218, 220, 222, 224, 225, 253, 260, 267, 271, 277, 282, 284, 285, 286, 287, 294, 297, 299, 300, 301, 309, 310, 311, 312, 313, 318, 319, 321, 324], "everi": [1, 11, 15, 17, 18, 21, 22, 23, 29, 30, 34, 36, 39, 43, 47, 52, 54, 55, 57, 78, 79, 83, 89, 90, 92, 123, 141, 161, 282], "mission": [1, 7, 10, 12, 13, 17, 18, 20, 21, 24, 39, 40, 42, 43, 51, 60, 76, 81, 87, 88, 93, 108, 211, 212, 213, 214, 215, 216, 218, 222, 225, 227, 248, 250, 261, 265, 269, 272, 299, 301, 305, 312], "teleoper": [1, 39, 40, 54, 55, 57, 90, 92, 117, 252, 253, 298], "session": [1, 23, 39, 40, 53, 54, 72, 90, 92, 97, 159, 214], "execut": [1, 4, 8, 11, 12, 14, 15, 23, 27, 28, 29, 30, 31, 32, 33, 35, 45, 47, 51, 54, 55, 56, 61, 63, 72, 74, 79, 87, 88, 89, 90, 92, 97, 100, 105, 113, 124, 156, 161, 211, 216, 226, 227, 231, 233, 237, 238, 240, 242, 248, 270, 273, 284, 301, 312, 317, 318, 319, 329], "fleet": [1, 7, 24, 54, 164], "open": [1, 3, 4, 5, 6, 9, 12, 13, 17, 21, 28, 30, 31, 33, 37, 41, 42, 63, 67, 77, 78, 81, 82, 83, 84, 86, 87, 88, 89, 92, 125, 161, 227, 230, 244, 252, 259, 269, 282, 285, 286, 287, 300, 311, 315, 318, 319, 320, 328, 329], "custom": [1, 20, 22, 23, 25, 28, 29, 31, 33, 36, 39, 40, 41, 43, 53, 60, 61, 62, 69, 86, 92, 98, 107, 113, 114, 127, 138, 147, 165, 185, 211, 214, 227, 252, 262, 267, 294, 298, 316], "through": [1, 4, 5, 8, 13, 15, 17, 18, 20, 21, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 45, 47, 49, 52, 53, 54, 55, 56, 58, 61, 63, 67, 69, 72, 76, 77, 81, 84, 86, 87, 88, 90, 92, 116, 117, 123, 127, 128, 135, 165, 181, 185, 217, 221, 225, 229, 230, 251, 252, 267, 269, 273, 282, 283, 285, 289, 294, 310, 311, 317, 318, 319, 320, 322, 329, 333, 338], "programmat": [1, 40, 45, 54, 90, 92, 311, 319], "web": [1, 25, 43, 54, 55, 58, 60, 62, 69, 71, 76, 80, 81, 87, 90, 154, 160, 217, 218, 220, 222, 224, 248, 251, 254, 277, 282, 286, 310, 318, 319, 329], "call": [1, 4, 11, 12, 17, 18, 19, 20, 21, 23, 33, 34, 40, 52, 53, 54, 56, 57, 58, 60, 62, 74, 77, 78, 79, 81, 82, 83, 84, 85, 86, 88, 89, 90, 92, 100, 102, 105, 112, 113, 114, 116, 117, 119, 123, 124, 127, 135, 138, 142, 152, 153, 154, 155, 156, 160, 161, 164, 165, 166, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 194, 197, 200, 204, 209, 218, 222, 227, 229, 252, 254, 261, 265, 273, 283, 284, 287, 297, 298, 306, 311, 312, 318, 319, 321, 329], "similar": [1, 5, 11, 17, 21, 36, 37, 40, 47, 56, 61, 69, 87, 89, 90, 92, 142, 150, 234, 254, 270, 271, 286, 298, 320], "written": [1, 17, 23, 26, 28, 29, 34, 74, 89, 90, 92, 129, 185, 194, 195, 202, 209, 319], "mani": [1, 4, 11, 17, 20, 25, 28, 31, 34, 36, 37, 45, 46, 53, 54, 55, 56, 57, 59, 61, 78, 79, 82, 83, 88, 89, 90, 92, 119, 135, 160, 161, 234, 238, 283, 297, 299, 312, 321, 329], "most": [1, 15, 17, 25, 29, 30, 31, 34, 35, 36, 41, 42, 45, 46, 47, 49, 50, 51, 54, 55, 56, 57, 58, 61, 63, 69, 78, 83, 84, 88, 89, 90, 92, 97, 100, 102, 113, 142, 144, 154, 155, 164, 170, 177, 178, 185, 225, 283, 294, 319, 320], "devic": [1, 4, 15, 45, 59, 61, 62, 63, 64, 69, 77, 79, 87, 89, 90, 92, 132, 138, 171, 175, 176, 227, 249, 269, 271, 282, 299, 310, 316, 319, 320], "about": [1, 5, 9, 10, 11, 14, 15, 16, 17, 18, 25, 26, 32, 34, 35, 36, 42, 44, 45, 46, 47, 51, 56, 57, 58, 59, 60, 63, 65, 69, 78, 82, 84, 85, 87, 88, 89, 90, 92, 97, 102, 114, 116, 122, 123, 132, 142, 159, 161, 164, 181, 211, 214, 218, 222, 227, 230, 255, 256, 260, 261, 273, 278, 282, 283, 284, 317, 329], "formerli": [1, 93], "scout": [1, 40, 41, 52, 55, 57, 58, 63, 92, 93, 159, 222, 223, 224, 315], "geometri": [1, 15, 18, 47, 49, 56, 64, 66, 89, 129, 161, 187, 232, 259, 268, 275], "frame": [1, 16, 18, 20, 22, 26, 28, 29, 34, 36, 47, 56, 57, 64, 81, 85, 86, 92, 98, 135, 137, 149, 150, 158, 160, 161, 166, 178, 186, 225, 232, 259, 268, 274, 282, 283, 284, 285, 286, 287, 334, 337], "e": [1, 8, 15, 21, 23, 25, 26, 30, 34, 35, 37, 45, 47, 50, 51, 54, 55, 56, 58, 60, 61, 62, 77, 83, 84, 85, 87, 90, 92, 98, 135, 138, 142, 149, 159, 164, 170, 181, 182, 218, 222, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 255, 258, 261, 262, 269, 271, 284, 285, 289, 290, 291, 296, 297, 298, 311, 312, 314, 316, 319, 320, 321, 327, 329, 335, 338], "stop": [1, 8, 16, 22, 23, 24, 29, 30, 32, 33, 35, 36, 37, 47, 50, 56, 58, 61, 62, 71, 72, 79, 82, 84, 86, 87, 92, 97, 98, 100, 123, 126, 138, 141, 142, 154, 156, 159, 160, 161, 164, 165, 173, 181, 183, 185, 211, 214, 218, 222, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 258, 261, 269, 273, 284, 289, 290, 291, 296, 298, 314, 315, 316, 318, 327, 335, 338], "keepal": [1, 45, 89, 111, 112, 142, 156], "beta": [1, 88, 89, 92, 141, 161, 163], "leas": [1, 16, 17, 37, 50, 56, 85, 97, 98, 99, 100, 107, 108, 112, 113, 124, 125, 127, 135, 141, 156, 159, 161, 180, 211, 214, 227, 229, 244, 246, 273, 283, 284, 296, 314, 315, 317, 335, 338], "fault": [1, 16, 30, 47, 56, 58, 77, 89, 92, 98, 112, 123, 135, 138, 156, 161, 262, 266, 282, 318], "choreographi": [1, 23, 28, 31, 35, 37, 88, 92, 93, 95, 96, 226], "joint": [1, 28, 29, 34, 36, 46, 56, 87, 92, 161, 180, 225, 226, 232, 238, 259, 290], "arm": [1, 29, 30, 34, 35, 47, 51, 59, 62, 63, 82, 85, 86, 87, 89, 92, 97, 98, 160, 161, 163, 225, 227, 231, 235, 243, 263, 268, 282], "5": [2, 4, 6, 13, 25, 29, 34, 36, 51, 53, 54, 57, 60, 61, 62, 63, 67, 68, 69, 71, 76, 77, 82, 83, 84, 85, 87, 89, 92, 97, 102, 111, 126, 135, 141, 142, 161, 181, 215, 220, 227, 228, 229, 234, 247, 251, 255, 273, 283, 284, 297, 299, 313, 315, 324, 326, 338], "pair": [2, 26, 35, 36, 44, 67, 76, 92, 113, 117, 165, 194, 195, 199, 216, 284], "stereo": [2, 90], "black": [2, 35, 92], "white": [2, 21, 33, 35, 90, 92, 178, 287], "video": [2, 23, 29, 63, 77, 86, 87, 90, 92, 252, 267, 320, 335], "2": [2, 3, 4, 6, 11, 13, 15, 22, 25, 28, 33, 34, 36, 39, 40, 42, 44, 48, 51, 57, 58, 59, 60, 61, 62, 63, 67, 69, 71, 72, 75, 79, 81, 82, 84, 85, 86, 87, 89, 92, 97, 117, 123, 126, 129, 130, 133, 135, 137, 141, 142, 150, 156, 159, 161, 170, 212, 215, 216, 227, 235, 236, 243, 247, 274, 284, 291, 294, 297, 299, 307, 310, 311, 313, 318, 321, 324, 338], "actuat": [2, 44, 49, 56, 90, 92], "each": [2, 4, 10, 11, 12, 15, 17, 18, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 54, 55, 56, 57, 58, 60, 63, 66, 67, 68, 74, 77, 78, 81, 82, 84, 85, 89, 90, 92, 97, 98, 100, 108, 113, 117, 120, 137, 138, 144, 146, 149, 151, 155, 161, 165, 166, 172, 178, 186, 194, 195, 208, 210, 211, 218, 225, 228, 248, 252, 255, 261, 272, 277, 280, 282, 283, 284, 285, 287, 296, 311, 318, 319, 320, 326, 329, 334], "one": [2, 4, 12, 15, 16, 17, 18, 20, 21, 23, 25, 26, 28, 29, 30, 31, 34, 35, 36, 37, 39, 42, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 60, 61, 63, 74, 77, 81, 82, 85, 86, 88, 89, 90, 92, 97, 119, 122, 123, 126, 138, 141, 154, 159, 160, 161, 178, 209, 213, 229, 247, 255, 271, 273, 274, 277, 279, 282, 283, 284, 286, 287, 294, 296, 297, 299, 309, 310, 311, 312, 317, 319, 321, 334], "knee": [2, 21, 34, 36, 46, 47, 66, 92], "hx": [2, 28, 49, 92], "hy": [2, 28, 49, 92], "plane": [2, 5, 36, 46, 66, 90, 137, 161], "rotat": [2, 4, 30, 34, 36, 46, 47, 82, 85, 86, 89, 90, 92, 150, 152, 226, 244, 277, 282, 283, 287, 297, 334, 338], "degre": [2, 6, 15, 36, 57, 74, 85, 90, 92, 177, 277], "freedom": [2, 6, 15, 30, 92], "limit": [2, 6, 8, 19, 25, 28, 34, 35, 42, 44, 47, 49, 53, 57, 60, 63, 66, 67, 86, 90, 110, 127, 147, 151, 154, 229, 242, 250, 274, 294, 319], "axi": [2, 4, 5, 15, 36, 46, 81, 85, 89, 90, 92, 150, 244, 283, 287, 338], "12": [2, 25, 42, 54, 60, 67, 82, 87, 88, 90, 92, 299, 319], "dof": [2, 92], "3": [2, 3, 4, 6, 15, 18, 21, 25, 28, 29, 30, 31, 32, 33, 34, 36, 37, 41, 44, 46, 51, 53, 57, 58, 59, 60, 61, 62, 63, 67, 69, 71, 72, 75, 79, 81, 82, 83, 85, 86, 87, 88, 89, 92, 113, 124, 129, 135, 141, 142, 150, 156, 159, 164, 165, 174, 181, 185, 194, 200, 212, 215, 216, 227, 228, 229, 250, 251, 272, 273, 284, 285, 286, 287, 294, 298, 299, 308, 310, 313, 315, 324, 333, 338], "per": [2, 18, 23, 28, 29, 30, 34, 35, 36, 43, 45, 46, 54, 60, 83, 90, 92, 185, 283, 311], "leg": [2, 29, 30, 34, 35, 36, 46, 47, 49, 51, 90], "x": [2, 4, 5, 6, 15, 16, 18, 28, 30, 31, 33, 35, 36, 37, 39, 46, 51, 56, 57, 58, 60, 63, 72, 81, 83, 84, 85, 86, 87, 89, 90, 92, 96, 137, 150, 158, 161, 170, 186, 208, 244, 282, 283, 284, 287, 297, 313, 319, 324, 327, 338], "45": [2, 6, 21, 48, 53, 248], "vertic": [2, 15, 21, 30, 34, 35, 36, 46, 92, 170, 231, 283], "intern": [2, 15, 19, 21, 22, 26, 45, 47, 53, 56, 60, 61, 63, 74, 90, 92, 100, 117, 119, 126, 137, 138, 142, 155, 167, 180, 181, 283, 310], "extern": [2, 19, 20, 26, 42, 45, 54, 56, 58, 60, 63, 85, 88, 90, 92, 152, 160, 161, 229, 252, 258, 277, 299, 320, 322, 325, 327, 338], "y": [2, 4, 16, 18, 28, 30, 35, 36, 37, 46, 56, 60, 61, 63, 79, 81, 84, 85, 86, 87, 90, 92, 137, 150, 158, 161, 170, 186, 208, 244, 252, 282, 283, 284, 287, 297, 313, 324, 327, 338], "91": [2, 48], "50": [2, 18, 48, 49, 60, 61, 63, 69, 71, 72, 79, 87, 90, 92, 185, 227, 250, 298, 315], "bia": 2, "flexion": 2, "extens": [2, 6, 10, 15, 29, 34, 54, 59, 72, 87, 92, 117, 118, 137, 229, 249, 250, 252, 253, 266, 267, 310, 311, 312, 319, 320], "14": [2, 66, 67, 75, 83, 87, 88, 89, 92, 229, 299, 315], "160": [2, 26, 92, 189], "straight": [2, 15, 18, 35, 85, 86, 92, 234, 284], "rang": [2, 8, 15, 28, 29, 30, 34, 35, 42, 49, 53, 56, 59, 63, 66, 67, 79, 84, 90, 92, 115, 151, 170, 177, 181, 229, 274], "front": [2, 4, 14, 30, 34, 35, 36, 46, 66, 82, 83, 85, 86, 90, 92, 161, 230, 267, 277, 313, 325], "hind": [2, 35, 36, 92], "left": [2, 4, 17, 30, 33, 35, 36, 37, 39, 41, 45, 46, 57, 68, 71, 77, 80, 82, 89, 90, 92, 97, 138, 161, 277, 283, 287, 296, 318, 320, 325, 334, 338], "right": [2, 11, 17, 23, 30, 33, 34, 35, 36, 37, 40, 41, 54, 56, 62, 63, 66, 67, 68, 69, 81, 82, 83, 85, 86, 89, 90, 92, 114, 116, 138, 160, 161, 185, 226, 227, 274, 277, 283, 287, 296, 314, 321, 334, 335, 338], "fl": [2, 28, 35, 92], "hl": [2, 28, 35, 92], "complet": [2, 6, 11, 12, 14, 15, 16, 17, 21, 23, 25, 28, 29, 30, 33, 34, 36, 37, 40, 46, 51, 53, 55, 57, 58, 60, 67, 71, 74, 77, 78, 80, 83, 85, 87, 89, 90, 97, 105, 115, 117, 124, 127, 135, 138, 142, 152, 159, 161, 173, 180, 225, 227, 268, 273, 284, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 318, 320, 329], "look": [2, 4, 11, 17, 22, 28, 34, 36, 55, 57, 67, 69, 77, 78, 81, 82, 83, 84, 86, 87, 89, 90, 92, 122, 138, 226, 227, 229, 269, 280, 283, 289, 300, 302, 303, 304, 305, 307, 308, 309, 310, 312, 315, 318, 320, 321], "like": [2, 8, 10, 11, 14, 15, 16, 18, 28, 29, 30, 34, 35, 36, 39, 45, 46, 54, 55, 56, 57, 60, 61, 66, 69, 74, 78, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 113, 114, 116, 118, 119, 121, 124, 127, 135, 156, 186, 193, 194, 209, 211, 214, 227, 252, 273, 277, 284, 287, 299, 311, 315, 317, 319, 320, 329], "kn": [2, 28, 49, 92], "state": [2, 4, 11, 12, 15, 17, 19, 20, 22, 23, 25, 29, 30, 34, 45, 49, 51, 53, 54, 58, 60, 78, 83, 85, 86, 97, 98, 112, 117, 123, 124, 127, 128, 135, 138, 142, 144, 154, 156, 159, 160, 161, 174, 176, 181, 211, 225, 229, 252, 260, 261, 263, 267, 270, 284, 294, 295, 318, 334], "protobuf": [2, 11, 26, 28, 29, 30, 34, 43, 44, 53, 57, 58, 77, 78, 81, 83, 84, 85, 87, 88, 92, 95, 96, 97, 98, 100, 113, 114, 117, 119, 135, 137, 138, 142, 143, 150, 154, 155, 159, 161, 165, 167, 174, 181, 185, 188, 191, 197, 198, 199, 209, 210, 214, 216, 247, 252, 284, 293, 319, 320, 331], "messag": [2, 3, 4, 5, 11, 15, 17, 18, 20, 22, 23, 25, 26, 28, 29, 30, 34, 35, 40, 44, 45, 46, 47, 52, 53, 54, 56, 57, 58, 74, 78, 81, 83, 84, 90, 92, 95, 96, 97, 104, 108, 110, 111, 112, 113, 114, 115, 116, 117, 119, 120, 121, 122, 125, 127, 128, 130, 135, 136, 137, 138, 139, 142, 143, 144, 148, 150, 153, 154, 155, 157, 159, 160, 161, 164, 165, 166, 167, 178, 181, 184, 185, 186, 188, 191, 193, 194, 195, 196, 197, 198, 199, 203, 204, 205, 211, 213, 214, 216, 220, 247, 254, 255, 263, 271, 282, 293, 294, 319, 320, 329], "describ": [2, 11, 12, 17, 18, 20, 21, 23, 25, 26, 28, 29, 30, 34, 36, 38, 40, 41, 42, 46, 47, 49, 51, 53, 54, 55, 56, 61, 62, 63, 66, 70, 71, 74, 79, 83, 88, 89, 90, 92, 117, 137, 150, 159, 161, 165, 174, 180, 186, 189, 194, 195, 209, 214, 252, 273, 275, 277, 289, 295, 297, 303, 315, 316, 318, 320, 321, 322, 325, 326, 328, 331, 337, 338], "snippet": [2, 23, 45, 60, 248], "show": [2, 5, 17, 18, 23, 25, 26, 28, 30, 34, 36, 41, 43, 51, 52, 53, 54, 56, 57, 58, 60, 61, 63, 71, 81, 83, 85, 87, 88, 89, 90, 92, 112, 135, 159, 166, 185, 228, 232, 235, 238, 241, 242, 243, 247, 248, 251, 252, 254, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 275, 277, 283, 284, 287, 288, 290, 310, 313, 315, 316, 318, 320, 323, 326, 328, 331, 332, 334], "return": [2, 4, 5, 8, 11, 14, 15, 16, 17, 18, 22, 23, 25, 30, 34, 35, 36, 37, 39, 42, 51, 52, 53, 54, 55, 56, 57, 58, 61, 67, 69, 74, 77, 78, 81, 82, 84, 85, 86, 87, 88, 89, 92, 96, 97, 98, 100, 101, 102, 104, 106, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 123, 124, 125, 126, 128, 129, 132, 133, 135, 136, 137, 138, 139, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 173, 174, 177, 179, 180, 181, 182, 184, 185, 186, 189, 190, 193, 194, 195, 197, 198, 200, 201, 202, 203, 204, 205, 206, 209, 213, 214, 216, 218, 220, 222, 224, 227, 244, 255, 265, 268, 273, 277, 282, 283, 284, 290, 296, 297, 313, 314, 317, 318, 319, 320, 335, 338], "get_robot_st": [2, 78, 86, 89, 163, 279], "joint_stat": [2, 92], "name": [2, 15, 17, 18, 23, 25, 26, 29, 30, 32, 33, 34, 39, 40, 42, 43, 45, 46, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 67, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 92, 96, 97, 105, 106, 110, 112, 113, 114, 115, 119, 122, 123, 126, 127, 128, 129, 133, 137, 138, 141, 142, 146, 154, 155, 157, 159, 160, 161, 163, 164, 166, 167, 170, 174, 182, 185, 186, 189, 191, 192, 194, 195, 197, 198, 200, 205, 213, 214, 216, 218, 220, 222, 224, 248, 252, 254, 271, 272, 274, 277, 282, 283, 287, 297, 298, 299, 304, 305, 311, 312, 314, 315, 318, 319, 320, 321, 329], "posit": [2, 4, 5, 8, 15, 16, 17, 18, 20, 21, 22, 23, 28, 30, 34, 35, 36, 37, 39, 46, 47, 54, 56, 67, 68, 77, 80, 81, 82, 85, 86, 89, 90, 150, 158, 159, 161, 170, 177, 186, 226, 229, 230, 231, 232, 234, 240, 241, 245, 274, 275, 282, 283, 284, 291, 296, 312, 313, 314, 318, 334], "valu": [2, 4, 14, 15, 23, 26, 28, 30, 34, 35, 36, 40, 41, 42, 44, 46, 47, 51, 54, 56, 57, 58, 60, 63, 64, 67, 74, 78, 79, 83, 84, 85, 89, 95, 96, 97, 111, 112, 113, 119, 126, 127, 135, 137, 138, 142, 150, 151, 158, 159, 161, 164, 165, 166, 167, 172, 185, 186, 189, 192, 194, 195, 201, 202, 209, 211, 212, 216, 218, 220, 234, 249, 255, 271, 274, 282, 283, 284, 297, 299, 321, 326, 327, 334], "21174180507659912": 2, "veloc": [2, 20, 23, 35, 36, 47, 49, 56, 86, 89, 90, 92, 96, 129, 150, 161, 177, 229, 242, 244], "003905495163053274": 2, "acceler": [2, 4, 35, 47, 90, 92, 161, 242], "1059951782226562": 2, "load": [2, 11, 12, 15, 21, 23, 28, 29, 32, 33, 34, 37, 47, 63, 79, 81, 83, 84, 86, 90, 92, 97, 108, 118, 164, 193, 211, 227, 249, 250, 252, 269, 270, 284, 285, 286, 294, 297, 298, 310, 321, 324, 331], "86274254322052": 2, "type": [2, 5, 12, 14, 15, 16, 17, 18, 21, 25, 26, 29, 35, 40, 43, 45, 46, 51, 53, 54, 56, 58, 60, 63, 64, 69, 72, 74, 77, 79, 81, 85, 88, 89, 90, 96, 97, 100, 102, 110, 111, 112, 114, 115, 117, 119, 124, 135, 137, 138, 146, 150, 152, 156, 158, 159, 160, 163, 164, 165, 167, 174, 180, 186, 191, 194, 195, 196, 197, 198, 200, 205, 206, 209, 211, 213, 216, 218, 220, 222, 224, 227, 229, 247, 252, 254, 272, 283, 284, 299, 313, 317, 319, 320], "gamma": [2, 90, 92], "length": [2, 18, 34, 35, 56, 74, 86, 90, 92, 111, 150, 161, 164, 165, 185, 209, 234], "1100": 2, "mm": [2, 6, 92, 209, 252], "43": [2, 48], "width": [2, 30, 35, 36, 41, 61, 82, 251, 320], "500": [2, 85, 92, 313], "19": [2, 67, 84, 87, 88, 90, 92], "7": [2, 4, 50, 60, 61, 63, 67, 75, 79, 82, 83, 87, 88, 90, 92, 142, 170, 251, 274, 284, 326, 338], "height": [2, 6, 15, 18, 21, 35, 36, 41, 56, 82, 89, 90, 92, 150, 161, 283, 284, 286, 287, 320, 334, 338], "stand": [2, 4, 14, 23, 25, 28, 30, 33, 34, 35, 36, 37, 43, 56, 61, 66, 67, 80, 84, 85, 86, 89, 90, 92, 161, 180, 226, 231, 233, 236, 237, 238, 239, 240, 241, 242, 244, 258, 274, 284, 289, 296, 314, 315, 325, 327, 335, 338], "840": 2, "33": [2, 48], "sit": [2, 8, 11, 14, 23, 28, 30, 33, 34, 37, 44, 56, 66, 67, 80, 89, 90, 92, 119, 126, 156, 161, 180, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 258, 284, 289, 290, 291, 296, 314, 325, 327, 335, 338], "191": 2, "net": [2, 62, 92], "weight": [2, 6, 36, 82, 83, 149, 249], "32": [2, 26, 48, 57, 92], "kg": [2, 6, 66, 92], "71": [2, 48, 299], "lb": [2, 338], "maximum": [2, 4, 8, 16, 22, 28, 29, 30, 34, 35, 36, 40, 47, 49, 54, 66, 67, 90, 92, 97, 137, 147, 149, 161, 166, 170, 181, 220, 272, 274, 324], "speed": [2, 6, 12, 14, 16, 22, 23, 28, 34, 35, 36, 58, 71, 86, 90, 92, 135, 159, 274, 299], "6": [2, 4, 6, 13, 15, 25, 28, 35, 50, 51, 60, 61, 63, 67, 68, 75, 76, 82, 83, 85, 86, 88, 89, 90, 92, 142, 161, 284, 338], "m": [2, 4, 6, 25, 26, 35, 48, 58, 61, 63, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 161, 209, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "ingress": [2, 6, 65], "protect": [2, 4, 6, 65, 90, 92, 117], "ip54": [2, 64, 65], "oper": [2, 3, 4, 6, 7, 8, 10, 11, 12, 17, 18, 19, 20, 22, 23, 24, 25, 35, 45, 50, 51, 53, 55, 56, 60, 61, 64, 67, 74, 77, 79, 82, 88, 89, 90, 92, 112, 117, 119, 121, 126, 135, 160, 177, 255, 270, 274, 293, 296, 303, 312, 318, 320, 323, 326, 328, 335], "temperatur": [2, 11, 41, 54, 57, 78, 90, 156, 170, 171, 174, 273, 299], "20c": 2, "45c": 2, "slope": [2, 92], "30": [2, 14, 35, 48, 58, 61, 78, 87, 88, 89, 90, 92, 117, 123, 124, 141, 154, 156, 161, 315], "stairwai": 2, "stair": [2, 12, 17, 18, 20, 56, 66, 161, 226, 338], "meet": [2, 5, 21, 57, 85, 285], "u": [2, 21, 62, 69, 74, 77, 78, 79, 83, 84, 90, 92, 137, 150, 283, 299], "build": [2, 18, 19, 20, 23, 42, 52, 53, 54, 55, 57, 71, 74, 76, 79, 85, 86, 87, 90, 92, 137, 155, 161, 167, 181, 250, 251, 252, 253, 274, 297, 310, 311, 312, 315, 318, 319, 320, 321, 324], "standard": [2, 8, 11, 15, 23, 28, 35, 36, 43, 53, 58, 59, 60, 63, 64, 69, 72, 77, 82, 85, 89, 90, 92, 166, 273, 318, 323], "typic": [2, 7, 15, 19, 21, 22, 25, 42, 46, 51, 53, 58, 60, 61, 66, 89, 92, 113, 119, 135, 142, 164, 255, 320], "rise": [2, 66, 67, 92, 299], "10": [2, 6, 15, 23, 25, 28, 31, 39, 41, 50, 51, 54, 60, 61, 62, 67, 69, 72, 75, 83, 84, 85, 87, 88, 89, 90, 92, 119, 138, 161, 227, 231, 247, 251, 273, 314, 315, 324], "11": [2, 6, 28, 51, 54, 60, 61, 67, 88, 89, 92, 247, 255, 315], "max": [2, 4, 6, 8, 34, 41, 47, 48, 57, 61, 90, 92, 96, 108, 111, 113, 118, 120, 127, 156, 159, 160, 164, 165, 167, 172, 180, 185, 211, 220, 224, 229, 299, 326], "step": [2, 17, 18, 28, 29, 33, 35, 44, 54, 56, 58, 63, 66, 69, 72, 75, 79, 80, 83, 86, 87, 89, 90, 213, 227, 271, 273, 282, 297, 298, 307, 310, 312, 319, 321, 334], "300": [2, 83, 84], "8": [2, 6, 26, 36, 54, 60, 61, 66, 67, 80, 82, 83, 84, 86, 87, 88, 89, 90, 92, 159, 227, 284, 324, 338], "abov": [2, 11, 15, 17, 18, 21, 23, 25, 30, 35, 37, 40, 46, 47, 53, 54, 63, 64, 66, 69, 71, 72, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 92, 185, 227, 248, 250, 271, 277, 283, 284, 289, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 311, 313, 318, 319, 320, 321, 334], "lux": 2, "batteri": [2, 8, 11, 12, 17, 23, 30, 45, 47, 55, 56, 61, 63, 67, 78, 79, 80, 81, 88, 89, 90, 92, 156, 161, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 252, 289, 290, 314, 318, 335, 338], "capac": [2, 6, 66, 90, 92], "605": 2, "wh": 2, "voltag": [2, 61, 67, 90, 92, 251], "58": [2, 48, 57, 67, 87], "8v": [2, 67], "runtim": [2, 18, 55, 90, 92, 112, 283, 320], "90": [2, 6, 48, 92, 277, 312], "minut": [2, 25, 28, 29, 30, 34, 36, 54, 83, 87, 90, 92, 97, 220, 247, 252, 255, 312, 326], "standbi": 2, "time": [2, 4, 8, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23, 26, 28, 29, 30, 32, 33, 35, 36, 37, 40, 42, 43, 45, 46, 47, 50, 51, 53, 55, 56, 57, 58, 61, 63, 66, 67, 69, 71, 74, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 98, 99, 100, 102, 105, 110, 111, 112, 115, 117, 119, 124, 126, 127, 135, 137, 138, 141, 142, 147, 149, 155, 156, 159, 160, 161, 163, 164, 165, 180, 186, 209, 211, 218, 220, 222, 224, 226, 227, 228, 229, 252, 261, 273, 277, 281, 282, 283, 287, 292, 296, 298, 310, 311, 312, 314, 317, 318, 319, 324, 326, 329, 330, 334, 335, 338], "180": [2, 36, 57, 64, 92, 277], "charger": [2, 90], "400w": 2, "charg": [2, 12, 14, 23, 30, 47, 56, 67, 86, 89, 90, 92], "current": [2, 4, 5, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 25, 26, 28, 30, 32, 34, 35, 36, 37, 42, 44, 46, 51, 55, 56, 60, 63, 67, 78, 83, 85, 86, 89, 90, 92, 97, 99, 100, 107, 112, 117, 119, 124, 126, 135, 136, 142, 150, 151, 156, 158, 159, 160, 161, 163, 164, 169, 170, 177, 179, 180, 181, 195, 206, 209, 211, 218, 222, 234, 247, 248, 250, 252, 255, 269, 272, 273, 275, 277, 278, 279, 284, 288, 294, 299, 301, 307, 316, 318, 319, 327, 329], "7a": 2, "120": [2, 324], "9": [2, 6, 30, 54, 57, 60, 61, 63, 67, 83, 87, 88, 89, 90, 92, 283, 284], "port": [2, 6, 37, 43, 45, 53, 54, 59, 61, 65, 69, 71, 72, 77, 78, 79, 84, 86, 87, 89, 90, 92, 101, 111, 123, 156, 160, 165, 185, 227, 249, 250, 252, 282, 297, 298, 315, 318, 319, 320, 321, 329], "150w": [2, 67], "project": [2, 26, 46, 56, 68, 69, 92, 267, 310], "field": [2, 11, 13, 15, 17, 21, 22, 28, 30, 33, 34, 39, 40, 42, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 63, 69, 71, 74, 79, 80, 84, 85, 89, 92, 95, 96, 97, 113, 118, 120, 123, 127, 135, 137, 138, 149, 150, 155, 157, 165, 166, 174, 181, 209, 213, 216, 218, 252, 274, 310, 318, 319, 320, 337], "360": [2, 37, 58, 90, 92, 177, 338], "13": [2, 51, 60, 67, 87, 89, 92, 271], "ft": 2, "802": 2, "1000base": [2, 67], "t": [2, 4, 11, 13, 14, 15, 18, 22, 25, 29, 33, 34, 36, 54, 57, 62, 63, 67, 68, 72, 74, 77, 78, 82, 83, 84, 85, 86, 87, 88, 90, 92, 97, 115, 119, 135, 159, 160, 161, 181, 186, 202, 211, 250, 251, 271, 277, 283, 284, 285, 296, 297, 298, 312, 314, 320, 321, 335], "have": [3, 4, 5, 11, 13, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 28, 30, 32, 33, 34, 35, 36, 37, 39, 42, 43, 44, 45, 46, 50, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 65, 66, 69, 71, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 113, 117, 119, 124, 127, 137, 138, 142, 150, 161, 165, 181, 185, 186, 200, 206, 227, 228, 229, 245, 246, 247, 248, 250, 258, 269, 271, 272, 273, 274, 275, 277, 281, 283, 284, 285, 286, 287, 289, 291, 294, 296, 299, 310, 311, 312, 315, 316, 318, 319, 320, 324, 325, 327, 329, 330, 331, 332, 333, 336, 337], "been": [3, 4, 8, 13, 15, 17, 18, 19, 20, 22, 23, 25, 30, 32, 36, 37, 42, 44, 45, 47, 51, 53, 54, 57, 58, 60, 61, 77, 78, 85, 88, 89, 90, 92, 100, 113, 117, 119, 126, 137, 142, 144, 159, 160, 174, 181, 190, 202, 206, 222, 224, 248, 273, 274, 282, 283, 285, 297, 318, 319, 321], "ad": [3, 7, 11, 13, 17, 22, 23, 28, 34, 36, 37, 39, 40, 50, 54, 56, 57, 61, 63, 64, 68, 77, 87, 92, 97, 117, 119, 121, 160, 161, 165, 185, 186, 194, 195, 227, 247, 253, 255, 274, 277, 296, 299, 319], "synchron": [3, 15, 25, 27, 30, 31, 36, 56, 66, 67, 86, 90, 92, 113, 118, 119, 127, 147, 161, 181], "request": [3, 5, 9, 11, 13, 15, 17, 18, 23, 25, 26, 34, 35, 42, 43, 44, 46, 47, 51, 53, 54, 55, 56, 58, 60, 66, 69, 74, 77, 78, 84, 85, 86, 87, 89, 90, 97, 99, 100, 102, 104, 107, 112, 113, 114, 115, 116, 117, 122, 123, 125, 126, 127, 135, 136, 137, 138, 139, 142, 144, 146, 147, 148, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 163, 165, 180, 181, 186, 191, 196, 199, 218, 220, 222, 224, 227, 230, 232, 233, 235, 238, 240, 241, 242, 245, 252, 260, 271, 273, 277, 279, 282, 284, 290, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 317, 318, 319, 320, 321, 322, 324, 329, 337], "combin": [3, 4, 11, 22, 23, 25, 28, 30, 31, 34, 35, 36, 40, 42, 53, 56, 60, 61, 63, 66, 67, 78, 86, 89, 90, 92, 161, 271, 285, 319, 338], "mobil": [3, 25, 51, 66, 86, 89, 92, 161, 259], "we": [3, 4, 5, 9, 15, 17, 18, 21, 23, 26, 29, 30, 34, 35, 36, 46, 47, 55, 57, 60, 61, 62, 63, 66, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 96, 102, 117, 119, 123, 135, 154, 159, 161, 186, 204, 225, 227, 229, 234, 247, 283, 284, 294, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 318, 319], "new": [3, 4, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 28, 30, 32, 33, 34, 36, 40, 42, 43, 44, 45, 46, 47, 51, 52, 53, 54, 56, 57, 60, 61, 63, 69, 72, 74, 76, 77, 79, 80, 82, 83, 84, 85, 86, 87, 89, 92, 96, 97, 100, 102, 106, 117, 123, 126, 128, 132, 133, 135, 142, 147, 149, 154, 160, 185, 194, 195, 218, 222, 252, 253, 277, 283, 284, 298, 311, 315, 318, 319, 321, 329], "manipul": [3, 4, 47, 53, 59, 82, 84, 92, 98, 161, 243, 259, 283, 310], "door": [3, 4, 12, 13, 17, 56, 98, 227, 259, 283, 299], "surfac": [3, 5, 15, 17, 64, 68, 89, 90, 92, 98, 259, 285], "contact": [3, 4, 5, 16, 17, 28, 29, 34, 35, 47, 56, 64, 66, 76, 77, 78, 88, 90, 98, 161, 251, 259], "below": [3, 4, 8, 11, 13, 14, 15, 18, 22, 23, 25, 28, 29, 30, 33, 37, 40, 42, 43, 45, 47, 51, 52, 53, 54, 55, 57, 61, 63, 66, 67, 68, 69, 71, 72, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 98, 210, 225, 227, 234, 247, 248, 255, 271, 274, 282, 295, 297, 298, 299, 312, 313, 315, 318, 320, 321, 326, 338], "section": [3, 8, 11, 21, 23, 30, 33, 34, 35, 36, 37, 38, 40, 54, 56, 59, 60, 61, 62, 63, 66, 70, 71, 72, 76, 79, 80, 82, 83, 85, 86, 87, 88, 89, 90, 92, 96, 252, 277, 282, 283, 310, 317, 318, 319, 320, 326, 338], "more": [3, 4, 5, 7, 8, 10, 11, 12, 15, 17, 18, 20, 22, 25, 26, 28, 30, 31, 32, 34, 35, 36, 39, 41, 42, 43, 44, 46, 47, 50, 53, 54, 55, 56, 57, 58, 60, 61, 63, 66, 68, 69, 72, 77, 78, 79, 82, 83, 84, 87, 88, 89, 90, 92, 106, 107, 113, 135, 138, 142, 149, 150, 154, 156, 158, 159, 161, 225, 227, 229, 231, 232, 238, 242, 248, 252, 260, 261, 262, 263, 266, 269, 271, 273, 275, 277, 282, 283, 284, 291, 296, 318, 319, 320, 323, 326, 329, 334], "specif": [3, 5, 9, 12, 17, 18, 20, 23, 29, 30, 34, 35, 36, 40, 41, 42, 43, 45, 46, 47, 51, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 69, 71, 74, 76, 78, 79, 83, 87, 88, 89, 90, 92, 95, 96, 97, 110, 111, 113, 125, 127, 135, 138, 142, 144, 148, 150, 151, 152, 161, 163, 164, 186, 218, 222, 226, 229, 252, 255, 261, 271, 281, 283, 284, 289, 298, 300, 301, 302, 303, 304, 305, 307, 308, 309, 310, 315, 319, 320, 329, 330], "gripper": [4, 5, 29, 30, 34, 35, 51, 85, 86, 89, 92, 98, 161, 234, 236, 244, 259, 267, 311], "incorpor": [4, 65, 90, 225], "you": [4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 21, 23, 26, 29, 30, 31, 32, 33, 34, 36, 37, 39, 44, 45, 46, 50, 52, 55, 56, 57, 58, 60, 61, 63, 66, 69, 71, 72, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 117, 126, 132, 135, 150, 154, 165, 176, 209, 211, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 250, 252, 254, 255, 257, 269, 271, 273, 274, 275, 277, 282, 283, 284, 286, 288, 289, 290, 291, 294, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 318, 319, 320, 321, 324, 325, 326, 327, 329, 331, 334, 337, 338], "specifi": [4, 5, 11, 12, 15, 16, 17, 18, 21, 23, 25, 26, 28, 29, 34, 35, 36, 40, 42, 44, 47, 50, 53, 54, 56, 57, 58, 63, 71, 72, 74, 77, 78, 79, 81, 83, 85, 87, 89, 92, 96, 97, 98, 108, 110, 111, 112, 115, 117, 118, 119, 122, 123, 126, 128, 135, 137, 138, 141, 142, 143, 146, 147, 155, 158, 161, 163, 169, 174, 177, 178, 181, 185, 189, 197, 198, 200, 203, 210, 211, 218, 222, 227, 229, 235, 243, 250, 251, 252, 254, 255, 271, 274, 275, 277, 279, 282, 283, 284, 297, 298, 301, 312, 315, 318, 320, 321, 326, 327, 329, 334, 338], "By": [4, 11, 25, 30, 36, 42, 44, 46, 58, 60, 61, 63, 69, 74, 76, 90, 92, 97, 137, 160, 161, 228, 274, 277, 283, 310, 320, 334], "pack": [4, 46, 57, 67, 84, 85, 92, 117], "individu": [4, 15, 18, 28, 30, 34, 35, 39, 42, 44, 51, 58, 61, 63, 78, 81, 90, 92, 97, 186, 252, 282, 283, 320], "singl": [4, 11, 12, 17, 21, 23, 25, 28, 30, 34, 36, 39, 41, 42, 44, 45, 46, 51, 53, 55, 57, 61, 63, 68, 77, 82, 89, 90, 92, 97, 100, 117, 118, 119, 124, 126, 129, 138, 142, 150, 161, 164, 178, 194, 203, 222, 271, 277, 283, 319, 337], "guarante": [4, 25, 44, 46, 54, 56, 90, 92, 97, 273], "arriv": [4, 15, 86, 92, 100], "same": [4, 11, 15, 17, 18, 21, 22, 23, 25, 28, 29, 30, 31, 33, 34, 36, 37, 39, 40, 41, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 67, 76, 77, 78, 81, 82, 83, 85, 86, 88, 89, 90, 92, 97, 114, 116, 119, 127, 130, 135, 138, 141, 142, 159, 161, 227, 228, 232, 248, 249, 252, 271, 273, 277, 284, 287, 289, 297, 310, 312, 315, 318, 319, 320, 321, 322], "without": [4, 5, 8, 13, 14, 15, 17, 18, 20, 21, 22, 26, 28, 29, 32, 33, 34, 44, 51, 53, 55, 57, 59, 60, 61, 62, 63, 64, 66, 69, 72, 87, 88, 89, 90, 92, 100, 106, 115, 117, 120, 123, 160, 161, 164, 206, 236, 250, 255, 284, 291, 296, 297, 319, 337], "_": [4, 13, 15, 17, 18, 28, 29, 31, 34, 36, 39, 40, 42, 46, 47, 49, 53, 56, 57, 58, 60, 61, 62, 63, 67, 69, 71, 74, 77, 78, 79, 80, 81, 82, 83, 85, 87, 88, 89, 90, 92, 113, 226, 227, 228, 229, 234, 248, 250, 251, 252, 253, 255, 269, 271, 273, 277, 282, 283, 284, 285, 286, 287, 291, 294, 295, 296, 298, 300, 303, 310, 311, 312, 315, 316, 317, 318, 319, 320, 321, 326, 328, 329, 331], "ignor": [4, 15, 17, 28, 30, 34, 35, 36, 44, 45, 63, 86, 90, 92, 102, 135, 138, 161, 170], "arm_command": [4, 86, 161], "mobilitycommand": [4, 23], "mobility_command": [4, 23, 90, 161], "grippercommand": 4, "gripper_command": [4, 86, 161], "end": [4, 5, 8, 11, 14, 16, 17, 18, 23, 24, 26, 28, 30, 34, 35, 36, 40, 42, 47, 53, 54, 55, 58, 60, 61, 69, 72, 75, 76, 80, 82, 85, 86, 87, 90, 92, 99, 100, 110, 115, 119, 135, 141, 160, 161, 180, 181, 189, 190, 195, 206, 218, 220, 222, 224, 232, 239, 241, 255, 273, 284, 312, 314, 318], "effector": [4, 5, 90, 92, 232, 239, 241], "space": [4, 5, 18, 21, 22, 28, 29, 30, 32, 34, 42, 46, 57, 64, 66, 68, 74, 85, 90, 92, 161, 177, 228, 229, 230, 232, 235, 236, 243, 244, 270, 283, 287, 296, 327, 335], "mix": [4, 63, 92, 97], "wrench": [4, 90, 161], "trajectori": [4, 5, 15, 28, 29, 36, 47, 51, 85, 89, 90, 161, 225, 228, 229, 231, 237, 241, 259, 268, 282], "angl": [4, 28, 30, 36, 48, 49, 85, 86, 87, 90, 92, 135, 150, 161, 177, 208, 229, 290], "some": [4, 5, 6, 11, 13, 15, 17, 18, 20, 23, 25, 26, 28, 30, 33, 34, 35, 36, 41, 44, 45, 47, 50, 51, 53, 54, 55, 56, 59, 60, 63, 75, 77, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 105, 108, 117, 149, 158, 160, 216, 225, 227, 228, 229, 241, 273, 277, 283, 284, 285, 294, 310, 315], "configur": [4, 5, 14, 21, 28, 30, 32, 33, 34, 36, 40, 47, 49, 50, 53, 56, 58, 59, 62, 69, 70, 72, 77, 79, 87, 88, 90, 92, 99, 100, 102, 107, 112, 126, 135, 138, 156, 158, 163, 164, 175, 180, 220, 227, 234, 248, 250, 252, 266, 273, 274, 277, 282, 290, 294, 297, 310, 315, 317, 319, 320, 321, 323, 325, 326, 338], "point": [4, 5, 8, 15, 17, 18, 22, 23, 25, 26, 36, 46, 53, 54, 55, 56, 57, 59, 60, 61, 62, 64, 69, 72, 77, 78, 79, 82, 83, 84, 85, 86, 88, 92, 98, 100, 135, 137, 150, 159, 160, 161, 164, 209, 238, 248, 260, 273, 274, 275, 283, 287, 296, 313, 318, 324, 326, 337], "world": [4, 5, 15, 20, 21, 22, 36, 54, 86, 89, 90, 92, 98, 149, 161, 225, 261, 274, 283, 315, 332, 334], "an": [4, 5, 7, 8, 9, 12, 13, 14, 16, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 67, 69, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 90, 92, 95, 96, 97, 100, 104, 105, 107, 111, 112, 113, 114, 115, 116, 117, 119, 123, 125, 126, 127, 128, 129, 132, 133, 135, 137, 138, 139, 141, 142, 144, 146, 147, 148, 149, 150, 152, 154, 155, 158, 159, 160, 161, 163, 164, 165, 166, 174, 175, 178, 181, 182, 185, 186, 195, 202, 209, 211, 212, 218, 220, 222, 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, 236, 238, 240, 241, 242, 244, 247, 248, 249, 250, 251, 252, 258, 267, 269, 271, 273, 274, 275, 277, 282, 283, 284, 285, 286, 287, 289, 291, 294, 296, 297, 298, 299, 300, 302, 303, 304, 305, 307, 308, 309, 310, 312, 316, 317, 318, 319, 320, 321, 322, 324, 325, 326, 327, 328, 331, 334, 335, 337], "object": [4, 5, 15, 17, 22, 29, 42, 43, 46, 54, 57, 58, 74, 77, 78, 82, 83, 84, 85, 86, 90, 92, 96, 97, 98, 100, 101, 102, 103, 104, 105, 108, 110, 112, 113, 114, 115, 116, 117, 118, 119, 121, 123, 124, 125, 126, 130, 133, 135, 138, 141, 142, 143, 144, 148, 149, 150, 154, 156, 157, 159, 160, 161, 162, 164, 165, 167, 173, 181, 182, 183, 185, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 208, 209, 211, 214, 215, 216, 218, 220, 222, 225, 236, 248, 259, 261, 274, 283, 297, 318, 319, 321, 332], "held": [4, 28, 51, 90, 92, 141, 160, 234], "hold": [4, 6, 36, 42, 83, 86, 88, 90, 92, 112, 161, 232, 236, 274, 326], "place": [4, 5, 9, 12, 18, 19, 20, 22, 23, 33, 35, 36, 37, 53, 55, 57, 62, 81, 82, 83, 85, 86, 90, 92, 161, 166, 185, 209, 227, 283, 296, 310, 315], "If": [4, 5, 8, 11, 12, 14, 15, 17, 18, 20, 21, 22, 23, 25, 26, 28, 29, 30, 33, 34, 35, 36, 37, 42, 44, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 74, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 100, 106, 111, 114, 115, 116, 117, 118, 119, 123, 135, 138, 142, 149, 159, 160, 161, 164, 176, 181, 185, 194, 202, 209, 222, 226, 227, 248, 250, 251, 270, 271, 274, 277, 282, 283, 285, 286, 287, 289, 294, 296, 297, 298, 299, 310, 311, 312, 314, 315, 318, 319, 320, 324, 325, 329, 331, 338], "send": [4, 11, 15, 17, 18, 25, 30, 34, 37, 40, 42, 44, 47, 50, 51, 53, 54, 55, 56, 60, 78, 84, 85, 86, 90, 92, 97, 100, 108, 111, 112, 115, 117, 119, 123, 132, 133, 135, 154, 160, 164, 181, 186, 218, 222, 228, 237, 238, 244, 283, 294, 297, 309, 310, 315, 319, 320, 322], "onli": [4, 5, 8, 17, 18, 21, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 39, 40, 42, 45, 46, 51, 53, 54, 55, 56, 57, 58, 60, 61, 63, 69, 72, 74, 77, 78, 81, 82, 83, 84, 85, 88, 89, 90, 92, 97, 111, 113, 115, 118, 124, 126, 135, 136, 137, 147, 149, 150, 154, 155, 160, 161, 165, 177, 185, 214, 216, 218, 222, 226, 252, 255, 271, 274, 277, 283, 284, 287, 294, 295, 315, 318, 319, 320, 329, 338], "subset": [4, 35, 40, 42, 51, 63, 90, 92, 326], "fill": [4, 17, 44, 45, 46, 54, 58, 77, 81, 84, 86, 90, 92, 97, 113, 124, 135, 137, 155, 161, 163, 174, 181, 319], "out": [4, 10, 11, 12, 17, 18, 23, 24, 25, 30, 36, 40, 44, 45, 46, 48, 50, 53, 54, 55, 57, 58, 61, 69, 74, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 106, 112, 113, 119, 120, 123, 126, 135, 137, 149, 150, 151, 155, 156, 161, 163, 171, 174, 180, 181, 186, 209, 225, 251, 252, 273, 277, 283, 285, 287, 291, 296, 298, 310, 315, 317, 319, 324, 329, 334], "overwritten": [4, 90, 92, 156, 319], "consid": [4, 11, 17, 18, 21, 22, 30, 35, 45, 47, 51, 56, 57, 64, 66, 67, 74, 84, 88, 90, 92, 113, 135, 142, 144, 161, 220, 234, 298, 326], "pseudo": [4, 92], "stow": [4, 85, 86, 90, 92, 161, 244, 259], "close": [4, 13, 16, 18, 19, 21, 22, 28, 30, 34, 83, 84, 86, 90, 92, 119, 149, 161, 190, 194, 218, 227, 229, 244, 258, 274, 284, 300], "se2_trajectory_request": [4, 92], "after": [4, 5, 11, 13, 15, 16, 17, 18, 20, 21, 25, 28, 29, 30, 31, 33, 34, 35, 36, 37, 41, 42, 45, 50, 53, 54, 55, 56, 57, 60, 61, 63, 69, 71, 72, 74, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 100, 111, 113, 117, 123, 126, 135, 141, 150, 154, 160, 161, 181, 186, 218, 222, 227, 230, 249, 252, 273, 277, 281, 282, 283, 284, 297, 298, 299, 310, 312, 314, 319, 320, 322, 338], "receiv": [4, 5, 8, 17, 25, 34, 43, 44, 47, 50, 51, 53, 58, 60, 88, 89, 90, 92, 97, 100, 102, 107, 111, 119, 123, 126, 135, 160, 161, 164, 165, 185, 230, 273, 274, 282, 299, 305, 315, 317, 326], "second": [4, 14, 17, 22, 23, 25, 26, 28, 29, 30, 34, 35, 36, 37, 42, 44, 47, 50, 51, 53, 54, 56, 57, 58, 63, 74, 77, 78, 85, 86, 88, 89, 90, 92, 97, 100, 105, 117, 119, 123, 126, 135, 138, 141, 142, 147, 151, 154, 159, 160, 161, 163, 165, 181, 185, 209, 227, 231, 247, 251, 252, 255, 273, 283, 284, 298, 314, 324, 326], "continu": [4, 6, 8, 11, 12, 15, 16, 17, 20, 34, 51, 54, 55, 56, 58, 61, 62, 67, 71, 77, 80, 81, 84, 85, 86, 89, 90, 97, 100, 112, 127, 135, 138, 142, 164, 227, 238, 242, 269, 274, 275, 292, 296, 309, 310, 318, 319, 334], "while": [4, 5, 6, 8, 10, 14, 15, 17, 18, 20, 22, 23, 25, 26, 29, 30, 33, 34, 35, 36, 37, 39, 40, 41, 45, 47, 53, 54, 55, 56, 58, 60, 61, 64, 81, 82, 83, 84, 85, 86, 88, 90, 92, 117, 126, 135, 147, 156, 159, 161, 180, 227, 228, 252, 258, 259, 271, 274, 282, 283, 284, 286, 295, 301, 307, 311, 314, 329, 334], "write": [4, 9, 11, 18, 19, 23, 26, 40, 42, 43, 45, 58, 61, 63, 76, 77, 78, 82, 84, 85, 87, 92, 96, 112, 115, 117, 118, 123, 126, 137, 154, 182, 190, 192, 194, 195, 202, 205, 220, 254, 259, 262, 263, 271, 273, 294, 311, 319, 329], "se2": [4, 92, 129], "similarli": [4, 17, 46, 90, 92, 137], "sent": [4, 17, 25, 34, 35, 39, 44, 47, 51, 53, 54, 55, 56, 57, 58, 60, 85, 90, 92, 97, 111, 119, 126, 160, 161, 165, 178, 185, 186, 247, 310, 319], "partial": [4, 11, 61, 87, 92, 283], "fullbodycommand": 4, "empti": [4, 20, 22, 28, 30, 34, 39, 45, 51, 57, 80, 83, 85, 89, 90, 97, 124, 129, 159, 164, 181, 194, 298, 315, 321, 324], "auto": [4, 5, 29, 34, 36, 43, 45, 50, 82, 92, 98, 141, 161, 170, 218, 222, 268, 277], "safe_stop": 4, "With": [4, 25, 30, 36, 52, 63, 86, 88, 90, 92, 96, 185, 252, 267, 282], "introduct": [4, 225], "insid": [4, 12, 15, 17, 35, 39, 56, 57, 63, 66, 87, 88, 90, 92, 100, 150, 227, 283, 297, 312, 319], "modifi": [4, 8, 11, 15, 17, 28, 33, 34, 35, 36, 54, 56, 57, 58, 61, 66, 72, 78, 87, 89, 90, 92, 97, 117, 123, 149, 166, 185, 252, 269, 282, 308], "three": [4, 5, 15, 16, 26, 28, 30, 34, 40, 53, 54, 55, 78, 81, 86, 90, 92, 150, 161, 282, 283, 307, 317, 326], "respect": [4, 12, 15, 19, 22, 28, 36, 42, 46, 47, 56, 57, 89, 90, 92, 150, 161, 186, 259, 268, 282, 283, 297, 305, 321], "There": [4, 11, 14, 15, 17, 18, 20, 25, 26, 28, 29, 30, 34, 39, 41, 43, 44, 45, 50, 51, 53, 55, 56, 58, 61, 69, 82, 83, 88, 89, 90, 92, 135, 142, 160, 161, 211, 231, 235, 236, 238, 243, 247, 252, 274, 282, 284, 297, 310, 315, 320, 321, 331], "differ": [4, 8, 13, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 40, 45, 46, 51, 53, 54, 55, 56, 57, 58, 60, 61, 63, 69, 72, 74, 79, 82, 83, 84, 88, 89, 90, 92, 96, 97, 112, 114, 116, 135, 137, 138, 142, 146, 155, 161, 181, 227, 232, 239, 250, 252, 259, 261, 264, 265, 267, 268, 273, 275, 277, 282, 283, 284, 287, 293, 315, 318, 320, 322, 329, 334], "list": [4, 11, 14, 16, 17, 19, 23, 25, 26, 29, 30, 33, 34, 39, 40, 41, 46, 51, 54, 55, 56, 60, 61, 63, 69, 71, 72, 77, 78, 79, 81, 84, 88, 90, 92, 97, 103, 105, 107, 111, 112, 114, 116, 117, 118, 119, 121, 122, 124, 129, 130, 133, 135, 137, 138, 141, 142, 145, 146, 150, 151, 152, 153, 155, 160, 161, 164, 166, 167, 169, 170, 171, 174, 177, 186, 191, 194, 195, 206, 213, 214, 216, 218, 220, 222, 224, 226, 227, 235, 243, 244, 246, 247, 250, 252, 254, 255, 256, 258, 269, 270, 271, 272, 273, 277, 278, 281, 284, 286, 289, 291, 293, 295, 296, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 315, 316, 317, 318, 319, 320, 324, 325, 326, 327, 329, 330, 331, 332, 333, 335, 336, 337], "fall": [4, 22, 30, 32, 33, 34, 36, 42, 64, 66, 67, 86, 90, 92, 226, 294], "under": [4, 8, 14, 30, 33, 57, 62, 69, 71, 81, 83, 90, 92, 165, 194, 226, 269, 310, 315, 316, 317], "banner": 4, "directli": [4, 15, 16, 17, 18, 23, 29, 30, 31, 36, 40, 41, 45, 52, 53, 76, 78, 80, 84, 86, 88, 90, 92, 114, 116, 120, 142, 160, 161, 164, 252, 271, 283, 294, 298, 306, 315, 318], "desir": [4, 11, 17, 18, 20, 29, 30, 34, 35, 36, 47, 51, 54, 55, 58, 60, 63, 69, 72, 80, 85, 90, 92, 126, 138, 149, 161, 173, 176, 186, 213, 218, 220, 222, 224, 269, 273, 283, 284, 296, 310, 314, 315, 318, 338], "orient": [4, 5, 15, 22, 23, 28, 35, 36, 46, 56, 67, 89, 90, 92, 149, 159, 161, 208, 277, 283, 334], "should": [4, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 42, 43, 44, 45, 46, 51, 53, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 74, 77, 78, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 96, 97, 100, 101, 113, 116, 117, 119, 123, 126, 135, 138, 141, 142, 144, 149, 150, 151, 152, 154, 156, 160, 161, 164, 165, 166, 176, 178, 180, 181, 185, 186, 211, 218, 222, 227, 228, 235, 236, 243, 248, 250, 255, 271, 273, 277, 283, 284, 285, 286, 287, 289, 291, 296, 299, 310, 311, 312, 315, 317, 318, 319, 320, 324, 325, 326, 329, 338], "radian": [4, 28, 36, 47, 74, 85, 92, 135, 150, 161, 208, 284], "3d": [4, 5, 18, 29, 46, 66, 86, 89, 92, 138, 150, 161, 186, 230, 283, 285, 287], "meter": [4, 6, 8, 15, 18, 21, 28, 30, 32, 33, 36, 37, 46, 47, 81, 82, 86, 90, 92, 135, 137, 158, 159, 161, 209, 230, 235, 236, 243, 274, 275, 283, 284], "express": [4, 5, 11, 12, 23, 26, 29, 46, 47, 54, 56, 85, 86, 89, 90, 92, 137, 150, 161, 164, 186, 208, 232, 252], "unit": [4, 15, 18, 26, 41, 47, 54, 56, 60, 72, 74, 86, 90, 98, 119, 142, 151, 166, 167, 170, 176, 252, 255, 299, 319, 324], "quaternion": [4, 46, 86, 89, 150, 282, 284], "when": [4, 6, 9, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 45, 46, 47, 49, 50, 51, 53, 55, 56, 57, 58, 60, 61, 63, 64, 66, 67, 74, 76, 77, 78, 79, 80, 82, 84, 85, 86, 88, 89, 90, 92, 96, 97, 100, 102, 105, 106, 113, 114, 116, 117, 119, 123, 124, 126, 135, 137, 142, 152, 154, 159, 160, 161, 164, 166, 180, 181, 185, 186, 194, 209, 211, 218, 222, 226, 227, 228, 229, 234, 244, 251, 252, 258, 270, 273, 274, 277, 279, 280, 282, 283, 284, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 314, 315, 318, 319, 320, 321, 323, 324, 326, 327, 329, 335], "user": [4, 5, 8, 9, 11, 12, 15, 16, 17, 18, 21, 25, 26, 31, 32, 33, 34, 37, 40, 42, 45, 47, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 69, 71, 72, 78, 79, 80, 82, 83, 84, 85, 86, 87, 89, 90, 92, 97, 100, 106, 111, 115, 116, 117, 119, 123, 127, 154, 156, 159, 160, 161, 180, 181, 183, 185, 218, 222, 227, 230, 235, 243, 247, 248, 251, 252, 269, 270, 271, 273, 274, 282, 294, 297, 298, 299, 312, 315, 316, 319, 320, 321, 322, 323], "abl": [4, 15, 17, 18, 22, 23, 30, 31, 33, 34, 42, 45, 53, 54, 56, 57, 58, 60, 79, 80, 84, 87, 89, 90, 92, 97, 117, 119, 277, 282, 284, 310, 315, 319, 320, 322], "transform": [4, 12, 15, 18, 20, 29, 56, 58, 77, 81, 86, 89, 90, 92, 129, 138, 150, 159, 161, 232, 274, 275, 282, 283, 285, 287, 337], "between": [4, 6, 9, 12, 15, 18, 19, 20, 22, 23, 25, 28, 29, 30, 33, 35, 36, 42, 44, 51, 52, 53, 54, 57, 61, 63, 65, 66, 67, 71, 84, 85, 86, 88, 89, 90, 92, 97, 105, 111, 112, 129, 135, 138, 142, 150, 154, 159, 161, 177, 181, 227, 251, 258, 273, 274, 277, 282, 283, 284, 287, 294, 310, 313, 315, 321, 326, 330], "fulli": [4, 11, 12, 29, 34, 36, 47, 49, 56, 58, 65, 67, 68, 82, 86, 90, 92, 123, 156, 161, 165, 252, 274, 315, 318, 319, 320], "defin": [4, 5, 10, 11, 12, 15, 17, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 34, 36, 40, 42, 43, 45, 53, 55, 56, 57, 69, 74, 77, 78, 81, 84, 85, 86, 90, 92, 96, 100, 102, 117, 119, 120, 123, 135, 138, 154, 165, 166, 185, 194, 218, 222, 227, 248, 252, 299, 303, 319, 329, 332], "its": [4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 30, 33, 34, 35, 36, 37, 39, 40, 42, 43, 44, 46, 47, 49, 54, 56, 58, 60, 61, 63, 64, 66, 70, 74, 77, 78, 82, 84, 85, 86, 87, 88, 89, 90, 92, 93, 100, 114, 116, 117, 124, 135, 138, 142, 157, 159, 161, 185, 196, 227, 228, 235, 236, 243, 245, 273, 274, 275, 277, 282, 283, 284, 294, 297, 314, 315, 318, 319, 321, 325, 327, 328], "first": [4, 22, 23, 25, 26, 28, 30, 32, 34, 36, 39, 41, 42, 44, 51, 53, 54, 56, 57, 60, 61, 63, 72, 74, 76, 77, 78, 79, 80, 81, 82, 84, 86, 87, 88, 89, 90, 92, 97, 116, 118, 126, 135, 151, 154, 161, 163, 164, 181, 185, 218, 222, 247, 258, 271, 274, 282, 283, 284, 285, 297, 301, 310, 311, 319, 320, 321, 329], "root": [4, 5, 11, 12, 23, 25, 45, 46, 51, 53, 57, 61, 63, 89, 90, 92, 129, 143, 161, 185, 211, 213, 216, 271, 294], "which": [4, 5, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 40, 41, 42, 43, 44, 46, 47, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 69, 72, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 92, 95, 96, 97, 100, 105, 111, 112, 113, 114, 116, 117, 118, 119, 123, 125, 135, 136, 137, 138, 142, 144, 148, 152, 154, 155, 156, 159, 160, 161, 162, 163, 165, 166, 175, 181, 185, 186, 189, 193, 194, 195, 199, 202, 205, 206, 209, 218, 220, 224, 225, 226, 227, 235, 243, 244, 246, 247, 249, 250, 251, 252, 254, 256, 258, 259, 262, 268, 269, 270, 271, 272, 273, 274, 275, 277, 278, 279, 281, 282, 283, 284, 289, 291, 293, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 314, 315, 316, 317, 318, 319, 320, 323, 324, 325, 327, 329, 330, 331, 332, 334, 335, 336, 337, 338], "common": [4, 17, 20, 30, 53, 56, 58, 63, 72, 74, 77, 78, 79, 82, 83, 84, 88, 89, 90, 92, 98, 126, 127, 150, 157, 160, 164, 185, 188, 209, 215, 326, 338], "choic": [4, 54, 90, 92, 251], "odom": [4, 5, 15, 20, 46, 47, 90, 92, 129, 150, 161, 232, 275], "vision": [4, 5, 14, 17, 46, 47, 56, 85, 86, 90, 92, 129, 150, 161, 275, 334], "flat": [4, 21, 34, 35, 36, 46, 92, 180], "tool": [4, 5, 18, 26, 29, 30, 42, 58, 61, 63, 70, 92, 96, 161, 234, 264, 284, 318, 319, 320], "try": [4, 6, 8, 11, 17, 18, 20, 22, 25, 28, 33, 35, 41, 54, 62, 71, 77, 83, 85, 86, 87, 88, 90, 92, 100, 113, 117, 119, 127, 135, 138, 142, 149, 159, 160, 161, 163, 164, 176, 185, 247, 252, 258, 273, 283, 315, 318, 320, 322, 329], "grasp": [4, 5, 12, 85, 86, 90, 92, 148, 243, 259], "someth": [4, 11, 16, 23, 34, 36, 54, 60, 62, 81, 82, 84, 87, 88, 90, 92, 122, 123, 128, 154, 156, 273, 315, 317], "just": [4, 5, 14, 23, 29, 30, 34, 54, 57, 77, 78, 83, 85, 86, 87, 88, 89, 90, 92, 97, 113, 119, 159, 164, 227, 250, 251, 252, 277, 283, 284, 318], "around": [4, 6, 8, 13, 17, 18, 21, 22, 30, 32, 33, 36, 39, 46, 53, 54, 56, 63, 65, 66, 76, 80, 82, 84, 86, 89, 90, 92, 100, 106, 161, 162, 183, 228, 232, 235, 236, 243, 245, 282, 284, 287, 291, 298, 314, 326, 327], "often": [4, 35, 44, 46, 54, 56, 76, 79, 82, 83, 86, 89, 92, 117, 119, 127, 178, 180, 271, 282, 310, 318, 337], "unset": [4, 21, 53, 74, 90, 92, 113, 161, 166, 181], "default": [4, 5, 13, 17, 18, 28, 29, 30, 34, 35, 36, 42, 47, 53, 54, 57, 58, 60, 63, 69, 71, 72, 74, 77, 79, 81, 82, 84, 85, 87, 88, 89, 90, 96, 97, 100, 102, 111, 113, 117, 119, 123, 135, 137, 138, 142, 154, 155, 159, 160, 161, 164, 165, 166, 182, 185, 194, 205, 209, 220, 224, 228, 247, 248, 252, 271, 272, 273, 274, 277, 283, 284, 294, 297, 310, 312, 315, 318, 319, 320, 321, 326, 329, 331, 334], "howev": [4, 6, 7, 11, 14, 17, 18, 20, 21, 22, 25, 31, 34, 35, 46, 51, 53, 54, 58, 60, 64, 69, 74, 88, 90, 92, 117, 129, 142, 154, 252, 273, 274, 277, 283, 284, 319, 320, 321, 322], "attach": [4, 18, 20, 26, 35, 43, 45, 52, 53, 59, 60, 61, 63, 66, 79, 90, 92, 97, 119, 142, 154, 160, 161, 163, 165, 185, 269, 286, 291, 316, 319], "set": [4, 5, 8, 11, 13, 14, 15, 16, 17, 20, 21, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 39, 40, 42, 44, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 71, 72, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 95, 96, 97, 100, 105, 107, 110, 111, 115, 117, 119, 126, 135, 136, 137, 138, 141, 142, 143, 144, 150, 152, 154, 157, 159, 160, 161, 164, 165, 169, 170, 172, 173, 174, 175, 177, 178, 181, 182, 185, 194, 195, 209, 211, 216, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 251, 254, 257, 269, 274, 282, 288, 289, 290, 291, 294, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 318, 320, 321, 326, 333, 338], "interest": [4, 40, 84, 92, 137, 229, 321], "As": [4, 11, 15, 17, 18, 29, 30, 32, 37, 42, 46, 47, 54, 57, 58, 61, 63, 77, 85, 89, 90, 92, 97, 226, 227, 273, 277, 279, 282, 283, 284, 297, 318, 321, 326, 334], "want": [4, 5, 11, 14, 15, 17, 18, 30, 32, 33, 37, 46, 51, 52, 54, 57, 58, 64, 74, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 123, 132, 165, 204, 209, 227, 274, 282, 283, 284, 295, 297, 314, 319, 321, 337], "touch": [4, 6, 36, 61, 92], "center": [4, 15, 27, 28, 30, 31, 33, 34, 35, 36, 46, 65, 66, 68, 72, 81, 85, 89, 90, 92, 149, 150, 286], "fiduci": [4, 12, 15, 18, 20, 22, 36, 46, 56, 80, 90, 92, 135, 159, 258, 267, 269, 283, 284, 287, 314, 316, 334, 337], "5m": [4, 228, 247, 255], "stick": [4, 23, 234, 338], "would": [4, 11, 13, 14, 15, 17, 18, 25, 29, 33, 34, 39, 46, 53, 54, 55, 57, 58, 60, 63, 78, 79, 83, 87, 88, 90, 92, 96, 100, 142, 161, 216, 227, 252, 283, 284, 311, 319], "root_frame_nam": [4, 92, 161], "fiducial_001": 4, "wrist_tform_tool": [4, 92, 161], "z": [4, 15, 16, 18, 28, 36, 46, 56, 60, 63, 85, 86, 89, 92, 137, 150, 158, 161, 186, 208, 244, 252, 282, 283, 284, 287, 313, 318], "w": [4, 28, 30, 37, 46, 82, 86, 90, 92, 150, 283, 284, 296], "7071": 4, "root_tform_task": [4, 92, 161], "sequenc": [4, 11, 14, 17, 19, 25, 26, 27, 28, 29, 31, 36, 37, 42, 51, 89, 90, 96, 97, 112, 119, 142, 151, 156, 160, 216, 226, 227, 268, 294], "option": [4, 5, 17, 18, 19, 23, 25, 29, 30, 33, 34, 35, 36, 39, 40, 47, 53, 54, 55, 56, 57, 58, 61, 62, 63, 69, 74, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 96, 97, 100, 102, 111, 112, 115, 117, 123, 124, 135, 137, 138, 141, 142, 160, 161, 164, 165, 166, 167, 169, 170, 174, 178, 185, 194, 195, 200, 218, 220, 222, 227, 249, 255, 271, 272, 273, 282, 283, 284, 296, 297, 301, 309, 312, 315, 318, 320, 321, 326, 331, 334], "well": [4, 5, 8, 15, 16, 17, 23, 25, 26, 27, 31, 34, 35, 39, 40, 42, 44, 45, 46, 53, 54, 56, 57, 58, 63, 67, 71, 74, 77, 78, 83, 84, 86, 89, 90, 92, 93, 96, 97, 114, 116, 129, 251, 266, 271, 273, 277, 279, 282, 284, 316, 318, 319, 320, 329, 330, 334], "proto": [4, 11, 12, 13, 21, 28, 34, 36, 43, 46, 49, 51, 53, 56, 57, 58, 60, 73, 74, 77, 83, 84, 85, 86, 87, 88, 89, 90, 94, 97, 98, 105, 114, 117, 119, 122, 123, 126, 129, 137, 138, 141, 142, 144, 150, 151, 153, 157, 160, 161, 162, 165, 167, 179, 181, 184, 188, 189, 194, 195, 209, 210, 213, 252, 283, 319], "torqu": [4, 47, 90, 92, 161, 229], "task": [4, 5, 10, 11, 17, 23, 51, 55, 69, 87, 90, 92, 98, 148, 161, 229, 283, 303], "select": [4, 5, 17, 28, 29, 32, 33, 34, 35, 36, 37, 42, 53, 57, 63, 67, 69, 71, 80, 82, 84, 85, 86, 88, 90, 92, 135, 146, 166, 170, 193, 230, 235, 247, 249, 252, 273, 294, 298, 311, 315, 318, 320, 321, 324], "mode": [4, 5, 11, 12, 27, 35, 36, 37, 40, 58, 60, 61, 63, 82, 83, 90, 161, 177, 178, 227, 229, 231, 234, 251, 274, 296, 299, 318, 335, 338], "input": [4, 5, 20, 28, 49, 52, 53, 58, 61, 63, 67, 74, 78, 83, 84, 85, 90, 92, 96, 97, 108, 117, 129, 142, 150, 152, 161, 181, 189, 209, 214, 218, 220, 222, 224, 227, 230, 244, 251, 252, 253, 284, 297, 298, 315, 318, 320, 321, 322], "se3trajectori": [4, 161], "wrenchtrajectori": 4, "hybrid": [4, 92, 231], "armcartesiancommand": [4, 5, 90, 161], "simpl": [4, 11, 17, 26, 42, 47, 55, 63, 72, 75, 78, 79, 81, 82, 88, 90, 92, 167, 234, 242, 252, 259, 263, 271, 295, 316, 319, 320], "travel": [4, 8, 13, 18, 36, 90, 92, 135, 163, 284, 286], "full": [4, 6, 18, 19, 28, 34, 35, 36, 37, 40, 45, 46, 47, 49, 53, 55, 56, 58, 63, 67, 81, 82, 89, 90, 92, 96, 97, 104, 112, 114, 116, 119, 124, 125, 135, 148, 152, 159, 160, 179, 180, 202, 205, 227, 254, 273, 277, 284], "reach": [4, 6, 11, 13, 16, 17, 23, 36, 51, 53, 60, 69, 74, 85, 88, 90, 92, 97, 100, 119, 127, 135, 147, 149, 161, 206, 227, 229, 261, 275, 290, 294, 310, 315, 319], "especi": [4, 30, 31, 35, 36, 60, 64, 85, 92], "hard": [4, 11, 28, 60, 64, 77, 86, 92, 248, 258], "make": [4, 8, 11, 15, 16, 17, 18, 19, 20, 23, 26, 30, 32, 33, 34, 35, 36, 43, 45, 54, 55, 56, 58, 65, 67, 69, 71, 74, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 100, 149, 216, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 258, 261, 269, 274, 275, 277, 282, 283, 284, 289, 290, 296, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 318, 319], "wave": [4, 90], "armjointmovecommand": [4, 90, 161], "tuck": 4, "awai": [4, 6, 8, 18, 19, 21, 22, 30, 32, 33, 35, 36, 41, 55, 82, 86, 90, 92, 135, 159, 230], "readi": [4, 15, 76, 82, 83, 84, 87, 88, 92, 100, 161, 227, 240, 282, 338], "walk": [4, 5, 8, 11, 14, 15, 17, 18, 23, 30, 32, 33, 37, 47, 52, 56, 64, 76, 82, 84, 85, 86, 90, 100, 108, 161, 218, 222, 227, 228, 230, 235, 245, 258, 259, 274, 283, 284, 285, 286, 287, 289, 303, 319, 338], "carri": [4, 6, 10, 22, 23, 24, 60, 66, 85, 86, 90, 92, 259], "somewher": [4, 36, 135], "refus": [4, 22, 82, 90, 92], "still": [4, 11, 13, 16, 17, 19, 28, 37, 45, 47, 50, 51, 54, 58, 60, 83, 85, 86, 87, 89, 90, 92, 97, 119, 123, 142, 154, 227, 273, 319, 329], "issu": [4, 5, 13, 14, 18, 23, 25, 45, 51, 53, 56, 60, 71, 74, 79, 83, 84, 85, 88, 89, 92, 96, 97, 104, 106, 124, 125, 126, 135, 136, 137, 138, 139, 142, 148, 152, 155, 156, 160, 161, 180, 230, 252, 273, 275, 279, 284, 314, 317, 318, 319, 320, 322, 329, 337], "awar": [4, 17, 51, 54, 90, 228, 235, 236, 243, 245], "system": [4, 8, 14, 15, 16, 17, 18, 20, 22, 23, 25, 29, 30, 32, 33, 34, 36, 42, 51, 53, 54, 56, 57, 58, 59, 60, 62, 63, 64, 66, 67, 70, 72, 74, 76, 77, 79, 83, 84, 85, 89, 90, 92, 107, 119, 123, 126, 127, 135, 137, 142, 151, 155, 161, 165, 171, 174, 181, 185, 192, 209, 218, 222, 227, 267, 270, 271, 274, 282, 283, 287, 294, 310, 319, 320, 323, 333], "exist": [4, 9, 15, 18, 25, 28, 29, 30, 34, 40, 44, 46, 51, 53, 55, 56, 57, 63, 74, 82, 84, 88, 90, 92, 97, 114, 122, 123, 126, 128, 129, 135, 138, 142, 147, 151, 154, 159, 160, 164, 174, 175, 185, 186, 189, 206, 218, 222, 229, 252, 271, 273, 283, 284, 286, 315, 318, 320, 322, 331], "item": [4, 5, 56, 60, 83, 84, 90, 92, 235, 243], "mai": [4, 8, 11, 12, 13, 15, 17, 18, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 40, 42, 43, 45, 46, 47, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 66, 69, 72, 74, 79, 80, 83, 85, 88, 89, 90, 92, 100, 113, 123, 126, 127, 129, 138, 141, 142, 146, 149, 159, 160, 161, 163, 166, 176, 185, 194, 200, 225, 226, 227, 250, 252, 255, 269, 270, 271, 273, 283, 284, 286, 287, 295, 296, 297, 310, 314, 315, 316, 318, 320, 321, 324], "occur": [4, 16, 17, 18, 30, 36, 45, 50, 54, 56, 58, 67, 79, 90, 92, 97, 117, 127, 158, 159, 160, 161, 163, 180, 213, 226, 282, 309, 310, 329], "dure": [4, 7, 10, 11, 12, 16, 17, 18, 19, 20, 23, 24, 25, 30, 32, 35, 39, 40, 47, 53, 54, 55, 56, 58, 60, 67, 78, 80, 81, 83, 84, 88, 90, 92, 100, 117, 122, 123, 128, 135, 138, 142, 149, 154, 156, 161, 180, 213, 214, 226, 227, 250, 252, 253, 273, 312, 329], "motion": [4, 25, 28, 29, 30, 32, 33, 34, 35, 36, 66, 90, 92, 97, 161, 226, 234, 259, 275], "unstow": [4, 90, 244, 259], "namedarmposit": 4, "joystick": [4, 30, 33, 35, 92], "becaus": [4, 11, 13, 15, 16, 17, 18, 19, 25, 26, 28, 41, 51, 52, 53, 54, 56, 57, 61, 63, 83, 84, 86, 87, 88, 90, 92, 108, 119, 135, 142, 156, 159, 207, 270, 282, 283, 311], "latenc": [4, 47, 58, 90, 92, 326], "better": [4, 8, 18, 30, 42, 54, 66, 74, 85, 86, 87, 90, 92, 284, 297], "rather": [4, 17, 18, 28, 35, 39, 53, 54, 56, 63, 69, 74, 85, 90, 92, 135, 161, 166, 309, 310], "cylindr": [4, 92, 244], "own": [4, 18, 20, 25, 30, 39, 42, 45, 46, 51, 57, 58, 60, 75, 76, 78, 82, 84, 90, 92, 105, 113, 142, 195, 252, 271, 273, 282, 317, 318], "both": [4, 5, 12, 13, 15, 16, 18, 20, 22, 25, 26, 28, 29, 30, 31, 35, 36, 39, 41, 43, 45, 47, 54, 55, 56, 57, 58, 60, 63, 67, 80, 84, 86, 87, 89, 90, 92, 96, 111, 126, 227, 231, 248, 273, 282, 315, 318, 320, 325], "linear": [4, 11, 23, 86, 90, 92, 150, 161, 229], "angular": [4, 15, 39, 47, 74, 86, 90, 92, 150, 161, 244], "sometim": [4, 17, 28, 30, 31, 85, 88, 90, 92, 113, 227, 318, 324], "target": [4, 5, 11, 17, 21, 34, 36, 50, 54, 60, 63, 64, 72, 74, 80, 84, 86, 88, 90, 126, 159, 178, 229, 271, 274, 312, 315, 324], "camera": [4, 5, 6, 15, 25, 30, 40, 41, 45, 46, 56, 57, 77, 79, 80, 82, 84, 85, 90, 98, 137, 138, 170, 174, 177, 178, 180, 249, 259, 267, 269, 274, 277, 289, 296, 297, 314, 316, 320, 321, 325, 326, 329], "sinc": [4, 11, 22, 25, 36, 46, 51, 53, 54, 56, 60, 75, 83, 84, 86, 89, 90, 92, 97, 113, 124, 135, 150, 156, 160, 162, 164, 174, 181, 185, 194, 200, 202, 205, 209, 215, 218, 222, 224, 232, 247, 252, 255, 275, 277, 301, 315, 318, 320], "constrain": [4, 16, 20, 57, 92, 161, 259], "gazecommand": [4, 161], "go": [4, 16, 18, 23, 30, 33, 35, 36, 47, 57, 63, 69, 71, 72, 76, 79, 81, 82, 83, 85, 86, 87, 88, 89, 90, 92, 116, 119, 124, 127, 135, 161, 227, 267, 274, 284, 298, 318, 319, 324], "wrong": [4, 21, 53, 83, 84, 85, 86, 88, 89, 92, 106, 122, 123, 126, 128, 142, 154, 156, 160, 192, 282], "bring": [4, 37, 80, 86, 92], "It": [4, 5, 8, 11, 14, 17, 22, 25, 26, 28, 29, 30, 31, 34, 35, 36, 39, 40, 43, 45, 50, 53, 54, 55, 56, 57, 58, 60, 61, 63, 71, 75, 77, 78, 84, 85, 86, 88, 89, 90, 92, 97, 100, 111, 117, 138, 160, 161, 165, 195, 218, 222, 228, 234, 235, 236, 239, 241, 243, 252, 271, 272, 275, 283, 284, 285, 286, 289, 293, 298, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 318, 319, 320, 321, 326, 333, 334, 338], "appli": [4, 5, 15, 18, 28, 34, 35, 36, 37, 54, 56, 63, 69, 90, 92, 97, 123, 142, 161, 214, 282], "minim": [4, 8, 25, 26, 45, 47, 64, 69, 89, 90, 92, 161, 270], "middl": [4, 8, 17, 30, 33, 46, 54, 66, 90, 92, 283, 287, 334], "heavi": [4, 59, 64, 66, 92], "compli": [4, 43, 92], "onc": [4, 11, 12, 14, 16, 17, 19, 20, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 36, 37, 42, 44, 45, 54, 55, 56, 58, 60, 61, 63, 71, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87, 89, 90, 154, 180, 227, 229, 252, 258, 269, 273, 282, 283, 300, 312, 314, 315, 317, 319, 327, 333], "put": [4, 8, 28, 58, 64, 74, 77, 78, 82, 83, 84, 86, 87, 90, 92, 160, 161, 272, 310], "compliant": 4, "pull": [4, 61, 67, 77, 79, 86, 92, 271, 294, 324, 326], "gener": [4, 6, 9, 11, 17, 19, 23, 25, 26, 28, 30, 35, 36, 39, 40, 41, 42, 43, 46, 47, 50, 51, 53, 54, 56, 57, 58, 60, 61, 63, 71, 74, 76, 77, 79, 85, 89, 90, 92, 96, 97, 99, 106, 108, 111, 114, 115, 116, 119, 122, 123, 126, 128, 129, 135, 137, 142, 149, 150, 154, 155, 156, 158, 159, 160, 161, 164, 165, 180, 181, 182, 185, 211, 218, 222, 251, 252, 271, 286, 287, 291, 294, 296, 297, 307, 312, 318, 319, 320, 326, 329], "keep": [4, 6, 8, 15, 20, 22, 29, 32, 34, 43, 45, 51, 54, 56, 58, 66, 71, 74, 79, 81, 83, 84, 85, 86, 87, 88, 90, 92, 98, 101, 123, 126, 127, 142, 154, 180, 195, 252, 320, 322], "appropri": [4, 17, 29, 30, 42, 46, 55, 56, 67, 77, 78, 90, 92, 117, 120, 137, 185, 216, 294], "locomot": [4, 7, 9, 18, 19, 36, 60, 92, 161], "backward": [4, 26, 30, 35, 36, 37, 47, 53, 57, 89, 90, 92], "thing": [4, 8, 11, 17, 50, 51, 54, 57, 58, 76, 78, 81, 82, 83, 84, 85, 87, 90, 92, 141, 142, 150, 161], "respons": [4, 11, 14, 17, 22, 23, 34, 40, 42, 44, 45, 53, 55, 56, 58, 74, 77, 84, 85, 88, 89, 90, 92, 97, 99, 100, 102, 104, 105, 106, 107, 108, 113, 114, 116, 117, 118, 122, 123, 126, 127, 128, 135, 137, 141, 142, 144, 147, 149, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 163, 164, 165, 180, 181, 182, 186, 191, 196, 199, 211, 214, 218, 220, 222, 248, 252, 265, 273, 277, 282, 283, 299, 318, 319, 329], "workspac": [4, 28, 36, 90, 92], "forward": [4, 15, 30, 35, 36, 37, 46, 47, 52, 53, 55, 69, 71, 72, 87, 89, 90, 92, 116, 135, 161, 245, 258, 275, 296, 313, 319], "begin": [4, 5, 8, 17, 18, 19, 21, 23, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 45, 50, 51, 54, 58, 78, 80, 90, 92, 97, 100, 102, 218, 222, 273, 282, 286, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 317, 319, 326], "chalk": [4, 5, 90], "draw": [4, 5, 34, 57, 81, 84, 85, 86, 90, 92, 283, 326], "take": [4, 5, 8, 15, 16, 17, 19, 21, 22, 23, 25, 28, 30, 33, 34, 36, 40, 44, 45, 47, 50, 51, 53, 54, 56, 57, 58, 63, 69, 72, 74, 77, 78, 82, 83, 84, 85, 86, 87, 90, 92, 100, 112, 113, 114, 119, 120, 124, 142, 160, 161, 167, 178, 209, 227, 229, 235, 243, 244, 248, 252, 273, 282, 283, 284, 297, 301, 310, 315, 317, 318, 320, 321, 322, 323, 326, 328, 334, 335], "advantag": [4, 45, 85, 86, 90, 123, 297, 321, 323], "entir": [4, 15, 17, 28, 34, 36, 39, 43, 51, 58, 63, 85, 89, 90, 92, 112, 178, 273, 315], "recruit": 4, "accomplish": [4, 17, 21, 54, 90, 92, 105, 225, 280], "gcode": [4, 5, 90, 259], "avail": [4, 5, 10, 15, 17, 18, 19, 20, 21, 22, 28, 30, 32, 33, 34, 40, 42, 47, 49, 50, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 65, 66, 69, 72, 77, 83, 85, 87, 88, 89, 90, 92, 100, 117, 122, 123, 138, 142, 146, 152, 160, 169, 170, 177, 181, 220, 224, 227, 235, 247, 252, 260, 261, 264, 267, 270, 277, 282, 284, 291, 297, 318, 319, 321, 329], "origin": [4, 11, 18, 28, 30, 33, 34, 36, 42, 46, 54, 60, 61, 79, 81, 89, 90, 92, 115, 142, 283, 326], "slightli": [4, 26, 28, 34, 90, 92, 161], "palm": [4, 5, 85, 92, 161], "plate": [4, 90, 92, 161], "align": [4, 5, 18, 46, 56, 80, 85, 86, 89, 90, 129, 150, 159, 161, 230, 283, 297, 324], "parent": [4, 46, 51, 58, 89, 90, 92, 112, 129, 185, 189, 216], "link": [4, 5, 8, 36, 37, 41, 43, 44, 47, 53, 54, 55, 56, 58, 60, 63, 64, 69, 71, 83, 87, 111, 138, 163, 283, 294], "wrist": [4, 5, 90, 92, 161], "rel": [4, 5, 12, 15, 16, 18, 20, 21, 22, 29, 34, 35, 36, 39, 45, 46, 47, 54, 56, 57, 60, 74, 82, 86, 90, 92, 119, 135, 160, 161, 181, 186, 232, 234, 275, 284, 287, 301, 331], "19557": [4, 92], "ident": [4, 5, 11, 25, 36, 54, 57, 63, 72, 92, 124, 135, 150, 277, 283, 284], "matrix": [4, 46, 86, 87, 90, 150, 194, 283], "proxim": [4, 53], "so": [4, 11, 14, 17, 18, 19, 20, 21, 23, 26, 28, 30, 31, 32, 36, 40, 41, 42, 44, 46, 53, 54, 55, 56, 57, 58, 60, 63, 71, 74, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 117, 119, 138, 142, 154, 161, 166, 177, 181, 186, 211, 227, 228, 229, 234, 250, 251, 255, 258, 270, 274, 275, 282, 283, 284, 291, 298, 315, 318, 320, 321, 333, 337, 338], "maintain": [4, 16, 18, 22, 25, 35, 36, 45, 53, 56, 63, 64, 65, 88, 89, 90, 92, 123, 181, 319, 323], "safe": [4, 12, 17, 22, 23, 26, 44, 45, 50, 55, 83, 84, 86, 89, 92, 126, 142, 156, 160, 161, 181, 185, 273, 320, 322], "distanc": [4, 6, 8, 21, 28, 30, 35, 36, 37, 56, 85, 86, 90, 92, 135, 137, 159, 163, 177, 209, 313, 324, 334], "essenti": [4, 86, 88, 225], "obstacl": [4, 13, 16, 17, 18, 19, 30, 32, 35, 37, 56, 90, 92, 274, 332, 334], "peopl": [4, 8, 30, 32, 33, 82, 85, 92, 274, 297, 321, 326], "path": [4, 8, 13, 16, 17, 18, 20, 22, 32, 39, 41, 61, 63, 74, 77, 82, 84, 85, 87, 88, 90, 92, 96, 100, 117, 118, 135, 164, 218, 222, 248, 252, 253, 258, 271, 272, 282, 283, 284, 285, 286, 294, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 320, 321, 324, 326, 338], "prevent": [4, 14, 18, 21, 25, 28, 30, 34, 45, 47, 51, 53, 54, 56, 58, 64, 89, 90, 92, 126, 129, 135, 142, 165, 173, 185, 274, 282, 283, 318, 325], "depend": [4, 8, 15, 20, 21, 22, 23, 25, 26, 28, 30, 31, 35, 36, 47, 49, 51, 54, 57, 60, 61, 63, 74, 79, 82, 84, 88, 92, 161, 165, 297, 312, 320, 321, 322, 326], "observ": [4, 6, 20, 25, 30, 32, 33, 42, 60, 92, 283, 296, 298], "situat": [4, 13, 22, 30, 54, 89, 90, 92], "halt": [4, 92], "risk": [4, 30, 32, 33, 89, 90, 92], "warn": [4, 11, 30, 32, 33, 34, 42, 45, 56, 58, 77, 80, 84, 90, 92, 97, 138, 142, 167, 255, 274, 314, 318, 319, 320, 329], "doe": [4, 5, 8, 11, 12, 15, 18, 20, 22, 25, 26, 30, 33, 34, 36, 40, 42, 44, 50, 52, 53, 54, 56, 57, 58, 61, 63, 69, 77, 78, 79, 84, 87, 89, 90, 92, 97, 99, 100, 113, 114, 119, 122, 123, 127, 128, 142, 147, 151, 154, 160, 161, 164, 166, 185, 192, 211, 227, 251, 271, 273, 282, 284, 294, 297, 299, 315, 316, 318, 320, 325], "even": [4, 8, 11, 13, 16, 17, 18, 28, 30, 32, 33, 35, 45, 53, 54, 56, 61, 63, 66, 71, 77, 85, 87, 88, 89, 90, 92, 97, 113, 175, 232, 270, 282, 295, 329], "onboard": [4, 20, 43, 52, 61, 87, 90, 92, 319], "cannot": [4, 22, 28, 30, 34, 56, 58, 60, 63, 79, 84, 90, 92, 97, 106, 135, 137, 138, 147, 154, 155, 156, 159, 161, 164, 185, 213, 252, 271, 275, 282, 315, 318, 320], "intervent": [4, 92], "In": [4, 5, 6, 11, 15, 17, 18, 19, 21, 23, 28, 30, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 51, 53, 54, 55, 56, 58, 60, 61, 63, 64, 66, 69, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 89, 90, 92, 100, 137, 161, 225, 227, 229, 232, 251, 258, 269, 274, 283, 284, 294, 299, 310, 311, 313, 319, 320, 321, 323, 325, 329, 333], "tight": 4, "possibl": [4, 6, 8, 11, 14, 15, 17, 18, 19, 21, 25, 30, 34, 35, 43, 44, 45, 53, 56, 64, 69, 74, 86, 89, 90, 92, 114, 116, 119, 185, 213, 234, 252, 273, 282, 283, 297, 299, 312, 315, 318, 320, 321], "head": [4, 15, 36, 82, 83, 84, 85, 86, 92, 161], "inadvert": [4, 90], "collid": 4, "sensit": [4, 35, 64, 89, 92, 296, 314], "fragil": 4, "extra": [4, 14, 28, 53, 61, 67, 77, 83, 90, 92, 106, 117, 153, 154, 155, 170, 271, 329], "care": [4, 44, 51, 57, 58, 64, 78, 83, 85, 86, 88, 89, 90, 92, 234, 282], "taken": [4, 18, 19, 24, 25, 54, 55, 57, 58, 64, 85, 88, 89, 90, 92, 105, 138, 142, 287], "abil": [4, 19, 29, 54, 56, 60, 66, 90, 92], "properli": [4, 42, 44, 45, 60, 63, 69, 77, 78, 88, 90, 99, 218, 219, 220, 222, 224, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 257, 258, 283, 288, 289, 290, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 313, 318, 319, 326, 327, 338], "order": [4, 11, 12, 13, 15, 18, 20, 23, 28, 34, 41, 42, 43, 47, 53, 54, 55, 57, 60, 63, 64, 69, 72, 77, 78, 79, 90, 92, 117, 135, 138, 160, 165, 166, 185, 208, 225, 275, 282, 284, 291, 310, 314, 315, 331, 333], "larg": [4, 11, 13, 18, 19, 20, 22, 29, 30, 35, 36, 42, 45, 52, 53, 56, 63, 81, 82, 89, 90, 92, 118, 135, 161, 165, 234, 283, 284], "being": [4, 5, 6, 14, 15, 20, 25, 26, 28, 29, 30, 37, 40, 51, 53, 54, 55, 56, 58, 60, 62, 63, 74, 79, 84, 85, 87, 88, 89, 90, 92, 97, 103, 117, 123, 126, 135, 151, 159, 170, 185, 218, 222, 271, 273, 277, 283, 312, 319, 326, 329], "automat": [4, 5, 8, 14, 15, 17, 23, 28, 30, 34, 37, 40, 45, 50, 51, 53, 54, 57, 58, 60, 61, 63, 69, 72, 78, 79, 83, 84, 85, 87, 90, 92, 97, 107, 154, 165, 178, 181, 227, 230, 243, 254, 277, 284, 285, 286, 309, 310, 318, 319, 323, 329, 338], "disturb": [4, 51, 86, 90], "damag": [4, 21, 90, 92], "environ": [4, 8, 13, 15, 17, 18, 19, 21, 22, 42, 53, 54, 56, 63, 64, 69, 72, 79, 80, 82, 83, 86, 87, 89, 90, 92, 158, 159, 185, 220, 222, 224, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 250, 257, 282, 283, 288, 289, 290, 291, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 313, 320, 326, 333, 338], "NOT": [4, 22, 44, 92, 251, 329], "featur": [4, 7, 13, 17, 18, 19, 20, 21, 40, 50, 54, 57, 69, 89, 92, 135, 145, 225, 229, 285, 287, 310, 317, 318], "design": [4, 15, 21, 23, 24, 26, 30, 32, 33, 36, 42, 43, 45, 53, 54, 59, 65, 66, 67, 79, 88, 90, 92, 161, 235, 243], "reduc": [4, 21, 22, 30, 35, 55, 56, 58, 66, 90, 92, 97, 298, 320, 326], "likelihood": [4, 53], "outstretch": 4, "attempt": [4, 6, 11, 13, 15, 17, 20, 22, 25, 33, 34, 35, 36, 37, 44, 51, 53, 55, 58, 60, 64, 69, 77, 78, 84, 90, 92, 97, 124, 126, 135, 138, 141, 154, 156, 160, 161, 181, 185, 258, 273, 284, 318, 319], "lift": [4, 6, 35, 36, 92], "too": [4, 11, 15, 19, 22, 30, 33, 35, 36, 53, 56, 82, 86, 89, 90, 92, 118, 135, 156, 159, 161, 273, 282], "disabl": [4, 30, 35, 37, 61, 67, 77, 78, 82, 84, 87, 92, 98, 126, 156, 161, 218, 222, 261, 274, 277, 294, 296, 318, 319], "menu": [4, 8, 28, 29, 30, 32, 33, 35, 37, 80, 84, 86, 298, 310, 315, 318, 320, 321], "potenti": [4, 8, 11, 56, 64, 88, 92, 97, 138], "caus": [4, 5, 8, 11, 17, 18, 22, 28, 30, 33, 34, 37, 45, 51, 53, 56, 57, 58, 60, 63, 67, 80, 83, 89, 90, 127, 161, 176, 226, 227, 228, 232, 235, 236, 243, 245, 258, 284, 314, 318], "inoper": 4, "pick": [5, 6, 33, 36, 52, 54, 55, 57, 82, 84, 86, 90, 92, 235, 259, 311], "up": [5, 6, 8, 14, 15, 17, 18, 22, 23, 25, 26, 28, 30, 34, 35, 36, 37, 43, 44, 45, 46, 52, 53, 54, 57, 58, 59, 61, 63, 64, 66, 67, 71, 72, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 92, 97, 119, 122, 158, 161, 181, 185, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 252, 254, 257, 258, 259, 271, 274, 282, 288, 289, 290, 296, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 318, 320, 325, 327, 333, 338], "idea": [5, 54, 55, 56, 90, 92], "interact": [5, 6, 23, 25, 53, 54, 55, 59, 63, 69, 72, 76, 88, 89, 90, 92, 97, 112, 142, 147, 175, 185, 274, 290, 299, 306, 324, 334], "paramet": [5, 8, 11, 18, 20, 21, 23, 27, 29, 34, 36, 39, 42, 43, 47, 52, 55, 56, 58, 62, 63, 79, 81, 82, 83, 85, 86, 89, 90, 96, 97, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 132, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 163, 164, 165, 166, 167, 169, 170, 173, 174, 177, 178, 180, 181, 184, 185, 186, 193, 194, 195, 197, 200, 202, 203, 204, 209, 211, 213, 214, 216, 218, 220, 222, 224, 227, 234, 252, 259, 262, 267, 283, 299, 303, 326], "depth": [5, 6, 25, 56, 82, 85, 89, 90, 92, 137, 138, 267, 297], "press": [5, 29, 30, 32, 33, 37, 63, 65, 69, 80, 82, 84, 86, 92, 227, 270, 284, 296, 314, 315, 318, 321, 338], "tightli": [5, 17, 29, 64], "against": [5, 21, 23, 44, 55, 61, 83, 90, 92, 142, 144, 158, 166, 283, 284], "squeez": [5, 28, 92], "tip": [5, 6, 8, 82, 83, 88, 92], "finger": [5, 6, 92], "constraint": [5, 13, 34, 85, 92, 135, 149, 159], "do": [5, 6, 14, 15, 17, 20, 21, 23, 25, 28, 30, 31, 34, 36, 42, 45, 46, 50, 51, 52, 53, 54, 55, 57, 58, 60, 61, 63, 66, 67, 68, 69, 72, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 100, 102, 113, 117, 119, 126, 135, 141, 142, 149, 154, 161, 181, 216, 227, 241, 248, 250, 251, 271, 282, 284, 286, 287, 288, 298, 315, 316, 321], "down": [5, 8, 12, 17, 22, 30, 34, 35, 36, 40, 44, 47, 51, 53, 56, 57, 63, 64, 67, 69, 80, 83, 84, 85, 86, 88, 89, 90, 92, 99, 100, 102, 142, 161, 165, 181, 185, 226, 231, 244, 284, 285, 289, 298, 313, 318, 319, 320, 325, 338], "how": [5, 9, 12, 15, 18, 20, 22, 23, 25, 28, 30, 34, 35, 36, 38, 40, 43, 44, 45, 46, 52, 53, 54, 55, 56, 57, 58, 62, 63, 69, 70, 72, 74, 75, 76, 77, 79, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 97, 100, 117, 124, 135, 158, 161, 164, 178, 180, 189, 194, 195, 225, 227, 228, 229, 231, 232, 235, 236, 237, 238, 239, 241, 243, 247, 248, 250, 251, 252, 254, 255, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 288, 289, 290, 292, 294, 295, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 322, 323, 324, 328, 330, 331, 332, 333, 334, 336], "much": [5, 20, 28, 30, 35, 36, 54, 55, 56, 82, 83, 89, 90, 92, 228, 275], "move": [5, 8, 11, 12, 13, 15, 18, 20, 21, 23, 25, 27, 28, 29, 31, 32, 33, 34, 35, 37, 46, 47, 55, 56, 57, 60, 64, 76, 80, 82, 84, 85, 86, 87, 92, 96, 97, 113, 149, 161, 185, 207, 215, 226, 227, 228, 229, 232, 235, 236, 239, 241, 243, 245, 258, 259, 269, 274, 275, 282, 291, 296, 314, 315, 316, 338], "sourc": [5, 20, 39, 40, 42, 54, 56, 57, 58, 63, 76, 77, 78, 80, 81, 82, 83, 84, 85, 88, 89, 90, 92, 95, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 218, 219, 220, 222, 224, 235, 243, 272, 274, 276, 277, 283, 297, 310, 313, 318, 320, 321, 329, 334], "produc": [5, 20, 21, 29, 30, 34, 55, 64, 83, 90, 92, 149, 234], "correct": [5, 15, 17, 25, 34, 51, 77, 78, 81, 86, 88, 90, 92, 97, 149, 161, 186, 252, 273, 282, 283, 297, 310, 315, 318, 319, 320, 321, 322, 329], "calibr": [5, 42, 85, 90, 180], "error": [5, 11, 15, 18, 25, 29, 30, 34, 35, 42, 45, 47, 50, 54, 56, 57, 74, 77, 78, 79, 84, 85, 88, 89, 90, 97, 99, 100, 105, 106, 107, 108, 110, 111, 113, 114, 116, 117, 119, 121, 122, 123, 124, 126, 127, 128, 129, 135, 137, 138, 141, 142, 146, 147, 149, 152, 154, 155, 156, 158, 159, 160, 161, 164, 165, 166, 180, 181, 182, 192, 211, 212, 213, 214, 216, 219, 229, 255, 270, 271, 273, 282, 283, 310, 315, 317, 318, 319, 320, 329], "toward": [5, 15, 18, 36, 90, 92, 181, 274, 313], "prepar": [5, 83, 87, 92, 243], "click": [5, 29, 30, 31, 32, 35, 37, 54, 63, 69, 71, 79, 80, 82, 90, 227, 235, 243, 298, 311, 320], "autonom": [5, 7, 8, 10, 11, 12, 15, 20, 22, 23, 55, 76, 80, 82, 84, 92, 230, 258, 284, 303], "coordin": [5, 10, 15, 16, 18, 39, 40, 46, 52, 54, 56, 84, 85, 89, 90, 92, 137, 142, 150, 161, 170, 186, 252, 267, 274, 282, 283, 284, 286, 287, 297, 334], "pixel": [5, 56, 58, 77, 84, 85, 90, 92, 137, 138, 274, 277, 283, 337], "push": [5, 49, 54, 88, 90, 92, 326], "wipe": [5, 90, 92], "behavior": [5, 7, 8, 11, 12, 14, 16, 20, 25, 28, 29, 30, 33, 34, 36, 50, 56, 63, 64, 74, 85, 87, 92, 107, 135, 161, 165, 185, 225, 227, 255, 259], "accuraci": [5, 15, 47, 67, 83, 90, 161, 283], "requir": [5, 11, 12, 14, 15, 16, 17, 18, 19, 21, 23, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 42, 43, 44, 45, 47, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 63, 64, 68, 69, 71, 72, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 96, 97, 99, 100, 103, 114, 124, 127, 154, 156, 157, 159, 161, 166, 185, 214, 218, 222, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "forc": [5, 6, 11, 21, 34, 47, 64, 83, 90, 92, 102, 113, 161, 218, 222, 229, 241, 246, 259], "robotcommand": [5, 23, 86, 89, 90, 161], "special": [5, 17, 21, 27, 31, 42, 44, 46, 47, 63, 66, 90, 92, 159], "ground": [5, 15, 21, 28, 30, 33, 35, 36, 46, 47, 56, 61, 67, 82, 92, 180, 226, 241, 251, 313], "interpret": [5, 11, 25, 28, 53, 81, 87, 88, 89, 90, 92, 96, 135, 194, 216, 234], "sidewalk": [5, 90, 234], "framework": [5, 29, 34, 63], "autograsp": 5, "locat": [5, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 28, 30, 33, 34, 35, 36, 37, 43, 46, 49, 53, 54, 55, 56, 60, 61, 62, 63, 68, 69, 77, 78, 80, 81, 82, 83, 84, 85, 86, 89, 90, 92, 96, 97, 107, 161, 185, 190, 195, 207, 215, 227, 245, 249, 252, 269, 271, 274, 282, 283, 284, 296, 316, 318, 320, 324, 327, 334, 337], "search": [5, 12, 57, 69, 85, 86, 92, 227], "handl": [5, 11, 26, 30, 42, 43, 54, 56, 57, 58, 66, 67, 72, 74, 77, 78, 83, 92, 100, 102, 113, 117, 119, 142, 153, 155, 156, 160, 161, 164, 182, 227, 230, 297, 319, 321], "along": [5, 7, 8, 13, 15, 18, 19, 20, 24, 26, 34, 42, 47, 50, 68, 74, 77, 81, 83, 84, 86, 90, 92, 135, 161, 226, 229, 271, 274, 282, 284, 296, 299, 310, 318], "spot": [5, 7, 8, 9, 10, 11, 13, 17, 18, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43, 45, 49, 50, 52, 53, 54, 55, 56, 57, 60, 62, 64, 65, 66, 67, 73, 74, 75, 80, 83, 84, 85, 86, 87, 97, 98, 111, 125, 139, 154, 158, 161, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 225, 229, 246, 247, 250, 251, 252, 253, 258, 260, 261, 264, 267, 268, 269, 270, 272, 274, 275, 277, 281, 282, 291, 293, 294, 296, 297, 299, 310, 311, 312, 315, 316, 319, 320, 323, 325, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "grab": [5, 92, 97, 112, 142, 161, 186, 211, 230, 310], "warmstart": 5, "assumpt": [5, 92], "alreadi": [5, 14, 17, 23, 28, 34, 45, 61, 71, 77, 78, 83, 84, 85, 86, 87, 90, 92, 97, 99, 100, 117, 119, 123, 128, 135, 142, 147, 154, 159, 160, 161, 169, 177, 181, 185, 190, 194, 195, 211, 218, 222, 227, 273, 284, 319], "skip": [5, 17, 30, 77, 78, 81, 90, 92, 97, 218, 222, 274, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 326], "stage": [5, 11, 17, 79, 100], "immedi": [5, 17, 29, 31, 34, 36, 37, 44, 50, 58, 66, 67, 89, 90, 92, 100, 117, 126, 141, 160, 273, 315, 317], "travers": [5, 8, 9, 17, 18, 19, 20, 22, 54, 92, 100, 159], "doorwai": [5, 21], "autopush": [5, 90], "pushbar": [5, 92], "crashbar": 5, "latch": [5, 92], "hand": [5, 6, 28, 29, 33, 36, 82, 85, 86, 90, 92, 140, 161, 244, 245, 257, 325], "suppli": [5, 25, 61, 67, 88, 90, 92, 135, 138, 161, 185, 273, 277, 284, 312, 319], "manipulationapiservic": [5, 148, 230], "doorservic": [5, 90, 125, 230], "semi": 5, "displai": [5, 18, 25, 28, 30, 34, 40, 56, 57, 58, 60, 63, 80, 81, 86, 88, 89, 90, 92, 117, 166, 170, 184, 249, 252, 253, 277, 283, 286, 287, 315, 318, 320, 323, 326, 329, 333, 334, 337], "hing": [5, 90, 92, 230], "estim": [5, 15, 18, 20, 22, 25, 35, 46, 47, 54, 56, 92, 135, 160, 161, 181, 209, 230, 287, 334], "Then": [5, 25, 63, 79, 80, 82, 88, 92, 227, 230, 271, 289, 298, 300, 302, 303, 304, 305, 307, 308, 309, 310, 319, 324, 329, 338], "ik": [5, 139, 244, 290], "satisfi": [5, 15, 26, 80, 84, 90, 92, 118, 290], "given": [5, 11, 12, 15, 16, 17, 18, 19, 21, 23, 33, 34, 36, 37, 41, 43, 46, 51, 54, 55, 56, 57, 66, 79, 81, 90, 92, 97, 100, 111, 112, 113, 119, 120, 121, 126, 135, 137, 138, 141, 142, 150, 155, 159, 160, 161, 173, 181, 185, 186, 189, 193, 195, 196, 198, 200, 201, 206, 209, 216, 218, 220, 222, 224, 247, 251, 252, 271, 282, 286, 308, 319, 320, 324], "stanc": [5, 28, 33, 35, 36, 90, 161, 268], "fix": [5, 15, 20, 28, 30, 34, 36, 46, 53, 58, 60, 86, 92, 97, 138, 229, 232, 270, 274, 282, 283, 286, 320], "valid": [5, 11, 15, 16, 19, 25, 28, 34, 42, 44, 46, 50, 51, 53, 54, 55, 56, 57, 58, 60, 61, 63, 69, 87, 89, 90, 92, 97, 98, 100, 103, 106, 108, 111, 115, 117, 119, 129, 135, 138, 141, 142, 156, 158, 159, 160, 161, 166, 181, 182, 185, 194, 205, 211, 213, 214, 282, 315, 319], "solut": [5, 7, 71, 88, 89, 90, 92, 139, 227, 282, 290, 328], "must": [5, 8, 11, 12, 15, 16, 18, 20, 21, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 47, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 69, 74, 76, 77, 83, 89, 90, 92, 108, 111, 113, 115, 117, 118, 123, 129, 142, 159, 161, 173, 174, 186, 194, 211, 218, 222, 228, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 244, 245, 248, 252, 254, 255, 257, 271, 273, 274, 276, 277, 279, 280, 282, 283, 284, 286, 288, 290, 292, 296, 297, 299, 311, 312, 313, 314, 315, 318, 319, 320, 321, 322, 323, 329, 334], "feet": [5, 28, 30, 33, 34, 35, 36, 46, 89, 90, 92, 161, 226, 327], "unspecifi": [5, 28, 42, 47, 82, 92, 161], "On": [5, 16, 17, 28, 29, 31, 35, 37, 40, 57, 61, 63, 69, 79, 92, 123, 161, 227, 250, 274, 315, 318, 326, 333, 338], "mount": [5, 20, 59, 60, 61, 62, 63, 65, 66, 67, 76, 77, 79, 87, 90, 92, 185, 282, 283, 311, 318, 319], "pose": [5, 15, 18, 19, 20, 21, 22, 28, 29, 34, 36, 37, 46, 82, 88, 90, 92, 124, 129, 135, 149, 150, 159, 161, 186, 232, 239, 282, 283, 289, 290, 298, 314, 335, 338], "bodi": [5, 15, 18, 20, 22, 26, 29, 30, 33, 34, 35, 46, 51, 54, 56, 64, 66, 68, 86, 89, 90, 92, 129, 140, 142, 161, 165, 220, 226, 227, 245, 257, 259, 275, 282, 284, 290, 298, 315, 317, 324, 327, 332, 338], "li": [5, 11, 66], "respond": [5, 17, 23, 34, 35, 43, 44, 45, 51, 56, 58, 60, 74, 77, 78, 79, 89, 90, 92, 100, 117, 138, 152], "statu": [5, 11, 14, 19, 20, 22, 23, 29, 30, 32, 33, 34, 36, 40, 42, 44, 45, 51, 53, 55, 58, 61, 63, 69, 70, 72, 74, 77, 78, 84, 85, 89, 90, 97, 98, 100, 112, 113, 114, 115, 116, 117, 123, 124, 126, 127, 135, 138, 141, 142, 146, 156, 159, 160, 161, 165, 166, 174, 180, 185, 220, 227, 264, 270, 273, 282, 283, 284, 299, 300, 305, 315, 317, 318, 320, 324, 338], "indic": [5, 12, 14, 16, 17, 25, 28, 29, 30, 33, 34, 35, 36, 45, 47, 51, 53, 54, 57, 58, 86, 89, 90, 92, 97, 100, 106, 115, 117, 135, 137, 138, 142, 143, 159, 160, 161, 166, 172, 174, 177, 185, 211, 218, 220, 222, 224, 255, 271, 273, 290, 296, 297, 298, 313, 317, 318, 321], "wa": [5, 13, 15, 16, 17, 18, 20, 22, 23, 24, 25, 26, 28, 33, 34, 39, 40, 41, 44, 51, 53, 54, 55, 56, 57, 58, 60, 77, 78, 81, 83, 84, 85, 86, 87, 88, 90, 92, 97, 99, 106, 107, 108, 114, 115, 117, 122, 124, 126, 127, 132, 135, 137, 138, 141, 142, 147, 149, 152, 154, 155, 156, 158, 160, 161, 166, 177, 194, 195, 202, 207, 211, 213, 214, 227, 234, 270, 273, 282, 284, 285, 294, 312, 314, 317, 320, 338], "unabl": [5, 18, 54, 56, 58, 77, 90, 92, 97, 108, 114, 116, 124, 127, 135, 151, 152, 320], "find": [5, 8, 11, 13, 15, 25, 26, 33, 47, 57, 63, 79, 82, 83, 84, 85, 86, 87, 88, 90, 92, 112, 127, 129, 135, 137, 155, 181, 186, 213, 225, 227, 252, 283, 284, 290, 312, 338], "action": [5, 7, 11, 17, 18, 20, 24, 27, 30, 33, 39, 43, 57, 58, 72, 74, 76, 78, 81, 84, 85, 87, 90, 100, 105, 114, 115, 116, 118, 141, 142, 186, 220, 227, 269, 272, 273, 299, 310, 314, 315, 321, 322], "popul": [5, 11, 22, 45, 53, 54, 55, 58, 63, 90, 92, 96, 97, 128, 138, 165, 184, 319], "usual": [5, 15, 16, 25, 34, 39, 50, 63, 64, 77, 79, 84, 90, 92, 102, 159, 160, 243], "sever": [5, 11, 25, 30, 35, 40, 44, 56, 57, 77, 87, 89, 90, 161, 167, 216, 318, 328], "problem": [5, 11, 16, 17, 25, 45, 53, 55, 69, 74, 79, 83, 84, 90, 92, 97, 107, 108, 113, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 135, 137, 146, 149, 151, 152, 153, 154, 155, 156, 160, 161, 163, 181, 186, 193, 197, 200, 201, 204, 206, 211, 214, 270, 324, 328], "either": [5, 9, 11, 12, 15, 17, 18, 23, 26, 28, 29, 34, 35, 36, 37, 39, 42, 45, 46, 47, 56, 57, 58, 72, 77, 78, 84, 88, 90, 92, 97, 127, 135, 150, 152, 159, 161, 181, 185, 194, 195, 209, 220, 222, 224, 227, 229, 269, 271, 273, 274, 277, 282, 283, 284, 312, 317, 318, 320], "scene": [5, 20, 56, 90, 92, 186, 324, 334], "foot": [5, 28, 29, 34, 35, 36, 47, 56, 90, 92, 161, 327, 332], "relat": [5, 10, 22, 27, 34, 45, 46, 56, 61, 89, 92, 97, 112, 129, 135, 142, 185, 192, 193, 251, 266, 317, 319, 328], "quantiti": [5, 15, 74, 92], "fame": 5, "lie": [5, 46, 92, 159], "xy": [5, 60, 92], "984": 6, "1800": 6, "mass": [6, 28, 35, 36, 66, 77, 78, 90, 92, 161], "endpoint": [6, 39, 40, 44, 50, 53, 54, 55, 56, 71, 78, 80, 84, 88, 90, 97, 101, 126, 135, 160, 161, 181, 185, 186, 211, 217, 218, 220, 221, 222, 224, 229, 251, 252, 258, 284, 299, 310, 312, 315, 319, 327, 329], "drag": [6, 30, 63, 79, 82, 90, 92, 269], "carpet": 6, "25": [6, 50, 53, 67, 85, 86, 87, 180, 181], "temp": [6, 57, 92, 174], "20": [6, 23, 26, 34, 48, 49, 61, 67, 84, 88, 89, 92, 97, 124, 126, 160, 247], "c": [6, 11, 30, 47, 54, 57, 61, 62, 63, 67, 69, 72, 76, 82, 83, 85, 86, 88, 89, 92, 112, 129, 150, 248, 315, 320, 322, 324, 327, 329], "water": [6, 64], "dust": [6, 64], "resist": [6, 67, 92], "At": [6, 17, 21, 24, 26, 28, 30, 35, 36, 43, 47, 54, 61, 76, 78, 82, 85, 88, 90, 92, 178, 273, 294], "22": [6, 31, 48, 60, 67, 75, 88], "peak": 6, "clamp": [6, 67, 90, 92], "130": 6, "n": [6, 48, 76, 83, 84, 87, 89, 90, 92, 112, 161, 247, 255], "tof": 6, "imu": [6, 47, 92, 180], "4k": 6, "rgb": [6, 36, 84, 92, 138, 186, 277], "accessori": 6, "gigabit": 6, "50w": 6, "power": [6, 8, 14, 23, 25, 26, 29, 30, 32, 33, 34, 37, 44, 47, 50, 57, 59, 60, 61, 63, 66, 69, 74, 84, 88, 98, 112, 126, 142, 154, 160, 161, 163, 168, 180, 226, 229, 244, 258, 270, 274, 284, 294, 296, 314, 317, 318, 319, 320, 325, 327, 329, 335, 338], "sync": [6, 30, 74, 85, 89, 90, 92, 97, 98, 112, 124, 135, 160, 164, 261, 282, 296, 314, 330, 335], "pp": [6, 61, 92], "fov": [6, 92], "60": [6, 35, 42, 48, 50, 54, 61, 90, 92, 97, 181], "46": [6, 48, 72, 87], "55": [6, 48, 49], "44": [6, 48], "fit": [6, 30, 83, 90, 92], "jaw": [6, 92], "mean": [6, 11, 15, 16, 17, 23, 26, 28, 34, 35, 36, 41, 44, 47, 54, 57, 60, 63, 68, 74, 83, 84, 86, 90, 92, 97, 100, 118, 156, 161, 194, 227, 232, 255, 271, 274, 284, 286, 318, 326], "person": [6, 82, 85, 86, 267, 318], "manag": [6, 17, 25, 30, 37, 43, 45, 51, 54, 58, 60, 61, 64, 70, 72, 77, 78, 79, 85, 90, 92, 98, 105, 117, 141, 142, 143, 173, 180, 181, 182, 227, 283, 294, 301], "recommend": [6, 14, 15, 17, 18, 30, 34, 35, 54, 55, 58, 60, 61, 63, 64, 66, 69, 71, 75, 79, 87, 88, 89, 90, 92, 117, 227, 229, 234, 266, 282, 284, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 318, 319, 320, 333], "activ": [6, 8, 18, 19, 23, 30, 32, 33, 34, 35, 36, 37, 45, 51, 53, 56, 58, 60, 76, 77, 78, 82, 83, 84, 85, 88, 89, 90, 92, 112, 128, 135, 141, 142, 144, 147, 180, 292, 338], "small": [6, 19, 21, 22, 30, 32, 33, 34, 35, 53, 65, 84, 85, 90, 92, 138, 150, 249, 334], "clearanc": [6, 30, 32, 33, 235, 236, 243, 245], "avoid": [6, 19, 21, 25, 30, 32, 33, 34, 35, 37, 47, 54, 64, 66, 74, 84, 90, 92, 185, 226, 273, 274, 299, 315], "alwai": [6, 17, 18, 23, 32, 33, 34, 36, 37, 45, 46, 52, 57, 58, 63, 74, 79, 84, 85, 86, 88, 90, 92, 185, 216, 250], "human": [6, 21, 28, 29, 34, 40, 51, 56, 58, 90, 92, 112, 119, 159, 160, 166, 170, 186, 319], "never": [6, 25, 26, 47, 53, 54, 55, 67, 74, 92, 160, 275], "introduc": [6, 18, 63, 90, 92], "interfer": [6, 54, 90], "stai": [6, 19, 20, 30, 32, 33, 35, 46, 66, 86, 90, 92], "navig": [7, 8, 13, 17, 18, 20, 21, 22, 23, 24, 30, 32, 33, 35, 37, 54, 56, 80, 87, 92, 100, 135, 227, 282, 283, 286, 294, 295, 316, 318, 320, 328], "graphnav": [7, 9, 10, 12, 13, 53, 56, 92, 98, 100, 102, 135, 149, 159, 260], "map": [7, 9, 11, 12, 13, 16, 17, 19, 21, 22, 24, 26, 30, 37, 39, 46, 53, 56, 57, 58, 62, 63, 76, 81, 83, 87, 96, 98, 112, 113, 119, 135, 159, 160, 170, 189, 200, 218, 225, 227, 249, 260, 282, 283, 285, 286, 320, 334, 338], "record": [7, 9, 11, 12, 13, 19, 20, 21, 22, 23, 24, 25, 29, 32, 34, 39, 40, 50, 57, 76, 81, 83, 97, 98, 117, 119, 135, 141, 174, 185, 225, 260, 268, 269, 273, 282, 285, 286, 287, 316, 319, 324], "save": [7, 18, 20, 23, 24, 26, 29, 32, 39, 40, 42, 47, 55, 58, 60, 62, 63, 71, 78, 79, 80, 81, 82, 83, 84, 87, 90, 92, 96, 97, 112, 114, 116, 117, 137, 160, 182, 226, 247, 250, 251, 271, 272, 277, 283, 284, 285, 295, 296, 298, 301, 311, 312, 314, 315, 321, 322, 324, 329, 331], "later": [7, 11, 15, 18, 23, 25, 33, 36, 39, 40, 42, 44, 53, 54, 58, 69, 77, 78, 81, 83, 84, 90, 92, 117, 186, 254, 284, 319], "replai": [7, 8, 13, 16, 19, 20, 21, 40, 54, 90, 260, 269, 314], "your": [7, 10, 17, 18, 20, 21, 24, 30, 32, 35, 37, 45, 52, 55, 57, 58, 61, 63, 69, 75, 76, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 117, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 252, 257, 269, 271, 274, 283, 284, 285, 286, 287, 288, 289, 290, 291, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 318, 319, 320, 321, 326, 328, 329, 330, 335, 337, 338], "process": [7, 11, 12, 15, 19, 20, 23, 24, 26, 30, 32, 40, 41, 42, 43, 45, 52, 56, 58, 60, 61, 63, 69, 74, 76, 79, 84, 89, 90, 92, 97, 98, 112, 113, 114, 116, 117, 123, 141, 152, 159, 178, 181, 252, 283, 297, 301, 307, 318, 319, 321, 326], "assign": [7, 17, 24, 56, 90, 92, 137, 159, 165, 181, 185, 186, 283], "callback": [7, 9, 12, 16, 24, 41, 51, 60, 80, 84, 92, 98, 111, 113, 135, 142, 161, 185, 260, 262, 271, 273, 280], "waypoint": [7, 9, 12, 13, 15, 16, 17, 19, 21, 22, 24, 36, 55, 81, 90, 135, 149, 159, 283, 284, 285, 286, 287, 303, 307, 315], "rout": [7, 9, 12, 13, 16, 19, 22, 24, 43, 54, 55, 60, 69, 90, 100, 102, 123, 135, 159, 284, 294, 319], "access": [7, 10, 18, 19, 22, 23, 25, 26, 29, 30, 32, 33, 42, 45, 47, 53, 54, 55, 56, 59, 60, 61, 69, 71, 72, 77, 79, 82, 84, 87, 89, 90, 92, 111, 117, 122, 123, 126, 127, 138, 142, 146, 150, 154, 160, 161, 162, 165, 185, 189, 194, 195, 200, 217, 221, 277, 283, 299, 312, 318, 320], "autowalk": [7, 8, 9, 13, 17, 18, 19, 20, 21, 22, 27, 33, 39, 40, 57, 58, 61, 80, 98, 227, 250, 260, 272, 273, 285, 286, 287, 296, 303, 312, 316], "plai": [7, 9, 11, 12, 23, 28, 30, 32, 34, 35, 36, 54, 80, 85, 90, 92, 169, 211, 226, 269, 295, 307, 324], "back": [7, 8, 9, 11, 16, 17, 18, 28, 35, 36, 37, 40, 47, 53, 54, 57, 58, 59, 61, 66, 67, 80, 82, 83, 84, 85, 86, 87, 88, 90, 92, 100, 149, 161, 176, 218, 222, 226, 227, 273, 283, 284, 295, 296, 297, 301, 312, 319, 326, 338], "likewis": [7, 42, 47, 55], "complex": [7, 11, 18, 47, 59, 92, 225, 231], "topologi": [7, 19, 90, 92, 149], "therefor": [7, 35, 58, 67, 89, 90, 92, 138, 273, 283, 320], "engin": [7, 45, 271], "flexibl": [7, 11, 26, 29, 90], "technic": 7, "summari": [7, 90, 92], "compon": [7, 29, 30, 43, 59, 60, 63, 64, 67, 89, 90, 92, 262, 266, 329], "dock": [7, 17, 23, 55, 80, 98, 161, 218, 222, 260, 262, 265, 268, 271, 291, 314], "case": [7, 11, 15, 17, 19, 20, 21, 25, 34, 40, 44, 45, 51, 53, 54, 56, 61, 63, 66, 74, 77, 78, 80, 83, 85, 88, 89, 90, 92, 97, 100, 113, 123, 129, 137, 141, 154, 160, 161, 252, 273, 283, 296, 310, 312, 313, 314, 318, 319, 329], "structur": [7, 15, 19, 29, 34, 42, 46, 47, 49, 51, 53, 54, 58, 61, 64, 79, 81, 82, 84, 86, 89, 90, 92, 96, 114, 116, 129, 135, 161, 171, 190, 192], "area": [7, 8, 9, 12, 14, 15, 16, 18, 20, 21, 30, 32, 33, 41, 45, 52, 54, 64, 66, 82, 98, 135, 166, 260, 291, 327], "initi": [7, 12, 17, 18, 19, 22, 25, 30, 34, 35, 36, 40, 45, 46, 47, 56, 74, 77, 78, 80, 81, 82, 83, 87, 89, 90, 92, 97, 108, 135, 138, 142, 149, 159, 164, 166, 177, 181, 211, 218, 222, 228, 231, 233, 235, 237, 238, 239, 240, 241, 242, 243, 244, 269, 270, 273, 277, 283, 284, 289, 302, 303, 304, 305, 307, 308, 309, 310, 312, 316, 318], "local": [7, 9, 10, 12, 15, 16, 18, 19, 39, 69, 71, 72, 90, 97, 98, 100, 112, 119, 135, 159, 160, 161, 181, 209, 248, 252, 274, 277, 282, 283, 284, 285, 286, 287, 298, 301, 302, 303, 304, 305, 306, 307, 308, 309, 312, 315, 318, 322, 334], "comput": [7, 15, 18, 20, 21, 22, 25, 26, 28, 30, 31, 34, 37, 39, 40, 46, 50, 53, 56, 58, 60, 71, 76, 77, 78, 79, 82, 84, 85, 86, 87, 88, 92, 98, 101, 112, 138, 150, 156, 161, 189, 192, 227, 249, 250, 267, 269, 272, 273, 274, 277, 298, 312, 315, 318, 319, 320, 322, 330], "bridg": [7, 40, 53, 84, 85, 92, 98, 267, 298], "autoreturn": [7, 50, 90, 107, 246], "explor": [7, 53, 88, 90, 92, 273], "gp": [7, 16, 18, 20, 39, 40, 58, 98, 130, 132, 134, 135, 149, 225, 252, 260, 267, 284, 287], "recent": [8, 15, 29, 36, 51, 56, 58, 63, 88, 89, 90, 92, 97, 142, 144, 155, 284, 302], "pilot": 8, "inaccess": 8, "suddenli": 8, "lose": [8, 30, 90, 150, 282], "off": [8, 9, 14, 17, 23, 29, 30, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 50, 52, 54, 56, 57, 60, 61, 67, 82, 85, 86, 88, 92, 117, 119, 123, 141, 142, 154, 156, 160, 161, 166, 176, 218, 222, 226, 227, 251, 252, 258, 270, 273, 274, 282, 284, 297, 318, 320, 321, 325, 327, 338], "valuabl": 8, "instead": [8, 11, 15, 17, 22, 25, 26, 28, 30, 34, 35, 36, 41, 45, 55, 58, 60, 61, 63, 69, 77, 78, 81, 83, 84, 86, 87, 90, 92, 97, 109, 113, 124, 135, 150, 160, 162, 164, 176, 185, 200, 222, 224, 248, 271, 277, 284, 297, 298, 315, 318], "tell": [8, 17, 18, 19, 23, 34, 50, 79, 83, 85, 86, 87, 90, 92, 100, 132, 135, 161, 164, 190, 283, 311, 319, 321], "come": [8, 18, 33, 36, 44, 50, 53, 54, 61, 63, 66, 71, 72, 84, 86, 88, 89, 90, 92, 161, 174, 294, 310], "hopefulli": 8, "wors": [8, 92], "veri": [8, 11, 17, 18, 22, 29, 34, 35, 40, 47, 53, 54, 63, 66, 69, 74, 79, 89, 90, 92, 234, 252, 274, 283, 318, 319, 325], "poor": [8, 53, 84, 92, 294, 299], "leav": [8, 9, 17, 21, 45, 54, 78, 88, 90, 92, 97, 100, 117, 124, 327], "unsupervis": [8, 32], "import": [8, 22, 25, 30, 41, 42, 44, 45, 54, 55, 57, 58, 61, 62, 63, 69, 71, 76, 77, 78, 81, 82, 83, 84, 85, 88, 89, 90, 92, 96, 119, 160, 218, 222, 227, 250, 283, 329], "bypass": [8, 63, 92, 252, 315, 318, 320, 323], "wai": [8, 11, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 33, 34, 36, 40, 50, 56, 57, 61, 63, 71, 74, 75, 76, 77, 79, 83, 84, 85, 88, 89, 90, 92, 100, 112, 117, 135, 138, 142, 158, 160, 161, 176, 227, 250, 258, 282, 319, 320], "timeout": [8, 16, 30, 40, 44, 45, 50, 51, 53, 56, 58, 78, 85, 89, 92, 102, 117, 119, 123, 124, 126, 135, 138, 154, 160, 161, 163, 181, 320], "trigger": [8, 9, 17, 19, 20, 23, 30, 32, 33, 40, 43, 47, 54, 60, 63, 74, 79, 80, 90, 92, 114, 116, 117, 118, 127, 128, 135, 138, 141, 251, 270, 273, 282, 297, 299, 315, 323], "need": [8, 11, 12, 14, 15, 16, 17, 18, 20, 21, 25, 26, 28, 30, 31, 32, 33, 34, 39, 41, 43, 45, 46, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 71, 72, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 87, 88, 89, 90, 92, 96, 100, 102, 106, 108, 117, 118, 127, 142, 154, 159, 160, 176, 181, 183, 193, 194, 195, 205, 211, 214, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 256, 258, 269, 271, 272, 273, 277, 281, 283, 289, 290, 291, 294, 296, 308, 310, 312, 314, 315, 316, 318, 319, 320, 323, 324, 325, 326, 327, 330, 331, 332, 333, 336, 337, 338], "stricter": 8, "work": [8, 15, 16, 18, 21, 30, 31, 35, 37, 46, 50, 53, 54, 55, 56, 57, 58, 60, 62, 63, 66, 69, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 105, 142, 152, 164, 167, 184, 216, 227, 270, 273, 277, 284, 296, 298, 310, 311, 312, 315, 318, 319, 320, 329, 333, 338], "behav": [8, 34, 35, 37, 44, 58, 90, 92, 250, 252, 329], "certain": [8, 11, 17, 21, 23, 25, 30, 32, 33, 34, 45, 51, 54, 56, 63, 64, 72, 90, 92, 225, 227, 273, 281], "becom": [8, 17, 20, 28, 42, 51, 67, 90, 92, 112, 160, 216, 283, 318], "trap": 8, "possibli": [8, 15, 28, 34, 47, 90, 92, 127, 135, 255, 258], "until": [8, 17, 23, 26, 29, 30, 33, 34, 35, 42, 43, 47, 54, 58, 61, 78, 82, 84, 85, 86, 88, 89, 90, 92, 100, 112, 115, 117, 141, 142, 156, 160, 161, 164, 165, 173, 180, 181, 185, 209, 227, 247, 255, 274, 280, 296, 319], "drop": [8, 30, 56, 63, 79, 80, 82, 85, 86, 92, 269, 318, 320], "threshold": [8, 11, 23, 34, 42, 47, 54, 57, 90, 92, 135, 167, 321, 325, 326], "block": [8, 13, 17, 21, 26, 28, 34, 45, 53, 54, 58, 61, 77, 78, 79, 84, 85, 90, 92, 100, 113, 115, 117, 124, 135, 141, 142, 156, 160, 161, 165, 180, 185, 188, 193, 195, 201, 202, 206, 227, 252, 273, 280, 315, 318, 319, 320, 326, 329], "previou": [8, 18, 23, 28, 33, 34, 36, 44, 45, 55, 61, 63, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 119, 123, 124, 181, 218, 222, 273], "befor": [8, 11, 17, 18, 22, 23, 25, 28, 30, 31, 32, 33, 34, 36, 37, 42, 45, 51, 54, 56, 58, 60, 63, 72, 76, 77, 82, 83, 84, 85, 86, 87, 89, 90, 92, 100, 119, 123, 126, 138, 142, 149, 156, 159, 160, 161, 165, 181, 194, 218, 220, 222, 225, 226, 227, 229, 230, 231, 233, 234, 237, 238, 240, 242, 244, 253, 269, 273, 282, 283, 284, 311, 315, 318, 319, 320, 326, 329], "explicitli": [8, 12, 14, 17, 18, 20, 36, 39, 50, 69, 74, 88, 90, 92, 160, 274], "enabl": [8, 15, 18, 28, 29, 30, 34, 35, 37, 41, 42, 43, 45, 47, 56, 58, 60, 61, 63, 67, 69, 80, 82, 84, 85, 86, 87, 88, 89, 92, 98, 123, 156, 161, 170, 174, 178, 218, 222, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 261, 274, 289, 290, 294, 317, 318, 319, 320, 322, 323], "drive": [8, 13, 14, 17, 18, 29, 37, 40, 59, 80, 82, 84, 89, 90, 92, 229, 284, 296, 321], "b": [8, 11, 13, 18, 23, 30, 37, 46, 54, 57, 61, 67, 83, 89, 90, 92, 129, 138, 150, 216, 294, 314, 335, 338], "themselv": [8, 44, 51, 57, 60, 83, 90, 319], "primari": [8, 29, 62, 72, 74, 89, 90, 92, 247], "tune": [8, 47, 87, 89, 90, 92, 234, 298], "displac": [8, 229], "far": [8, 10, 15, 19, 22, 35, 36, 84, 88, 90, 92, 97, 135, 158, 159, 161, 282, 312], "number": [8, 16, 18, 21, 23, 25, 26, 28, 30, 34, 35, 36, 42, 44, 51, 53, 54, 55, 57, 58, 61, 63, 72, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 115, 119, 123, 124, 129, 135, 138, 142, 147, 149, 151, 154, 159, 160, 161, 163, 165, 166, 181, 185, 193, 196, 201, 203, 209, 218, 222, 227, 251, 252, 273, 283, 284, 294, 296, 299, 315, 318, 320, 326], "contain": [8, 11, 12, 15, 18, 19, 20, 22, 23, 26, 28, 29, 30, 32, 34, 39, 40, 41, 42, 44, 46, 47, 49, 50, 51, 54, 55, 56, 57, 58, 61, 67, 70, 74, 77, 80, 81, 82, 87, 88, 89, 90, 92, 96, 97, 111, 113, 114, 116, 117, 135, 136, 137, 138, 142, 146, 149, 151, 152, 157, 160, 161, 164, 166, 177, 182, 186, 191, 195, 198, 216, 218, 222, 226, 227, 250, 252, 255, 271, 282, 283, 284, 294, 297, 298, 299, 303, 310, 311, 312, 318, 319, 320, 321, 322], "turn": [8, 17, 22, 30, 35, 36, 37, 44, 50, 56, 57, 61, 69, 72, 77, 88, 90, 92, 97, 117, 119, 141, 176, 226, 227, 273, 296, 314, 335, 338], "equal": [8, 23, 47, 54, 72, 81, 92, 283], "act": [8, 30, 53, 56, 60, 62, 63, 89, 92, 160, 310], "radial": [8, 92, 244], "outsid": [8, 17, 22, 30, 34, 35, 43, 45, 53, 56, 74, 92, 149, 297, 321], "dot": [8, 34, 150, 227], "line": [8, 15, 18, 24, 25, 28, 29, 31, 34, 35, 37, 41, 42, 58, 60, 61, 62, 68, 72, 74, 76, 77, 78, 81, 83, 84, 85, 86, 88, 89, 92, 95, 96, 110, 126, 185, 227, 234, 235, 247, 248, 249, 255, 260, 269, 274, 275, 277, 279, 282, 283, 285, 286, 287, 296, 312, 315, 318, 319, 320, 323, 326, 328, 329, 334], "boundari": 8, "omit": [8, 47, 63, 92], "portion": [8, 30, 35, 36, 83, 84, 90, 92], "red": [8, 15, 18, 28, 34, 35, 40, 80, 88, 92, 126, 227, 270, 283, 286, 287, 298, 313, 321, 334], "comm": [8, 11, 16, 23, 42, 50, 89, 90, 92, 156, 258, 261, 262], "main": [8, 28, 30, 36, 50, 51, 52, 63, 69, 77, 78, 79, 82, 84, 85, 87, 90, 92, 96, 110, 112, 114, 152, 160, 161, 227, 248, 270, 310, 320, 326], "whether": [8, 12, 13, 17, 18, 22, 23, 25, 30, 34, 35, 36, 46, 51, 56, 57, 74, 90, 92, 119, 121, 135, 138, 140, 142, 143, 150, 151, 159, 161, 166, 177, 218, 222, 271, 283, 315, 319], "restor": [8, 83], "hear": [8, 92, 141, 211], "normal": [8, 14, 15, 17, 34, 35, 36, 46, 54, 55, 56, 66, 67, 84, 87, 90, 92, 150, 227, 229, 283], "loss": [8, 11, 42, 50, 83, 89, 90, 92, 142, 258], "unexpect": [8, 11, 13, 45, 56, 90, 92, 127, 142, 252, 271, 315, 318, 320], "danger": 8, "anyon": [8, 11, 32], "nearbi": [8, 11, 13, 17, 56, 90, 92, 135, 296], "low": [8, 12, 17, 18, 21, 23, 30, 35, 42, 47, 53, 66, 67, 89, 90, 92, 135, 161, 229, 291], "ventur": 8, "further": [8, 11, 26, 28, 29, 33, 34, 35, 64, 86, 90, 92, 97, 100, 106, 162, 282, 298, 310, 331], "necessari": [8, 17, 18, 31, 33, 34, 41, 43, 47, 51, 53, 54, 58, 61, 63, 65, 69, 71, 72, 79, 80, 85, 89, 90, 92, 96, 99, 135, 142, 159, 193, 211, 252, 271, 274, 286, 312, 319, 325], "amount": [8, 19, 22, 29, 30, 36, 40, 42, 50, 53, 56, 83, 85, 90, 92, 138, 241, 283, 326], "found": [8, 15, 17, 18, 21, 27, 29, 34, 36, 42, 46, 47, 49, 52, 56, 57, 66, 69, 77, 79, 83, 84, 85, 86, 87, 88, 90, 92, 122, 127, 135, 137, 138, 147, 152, 155, 160, 169, 225, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 248, 253, 257, 270, 282, 283, 286, 288, 289, 290, 294, 306, 310, 313, 317, 320, 326, 338], "supervis": [8, 89], "alongsid": [8, 90, 92, 226, 273], "edg": [9, 12, 13, 16, 17, 19, 30, 46, 68, 81, 87, 90, 129, 135, 149, 159, 227, 283, 284, 287, 303], "help": [9, 12, 14, 18, 19, 20, 21, 25, 26, 30, 34, 37, 44, 51, 52, 55, 56, 57, 58, 63, 64, 69, 75, 77, 81, 82, 83, 84, 85, 87, 88, 89, 90, 92, 124, 126, 138, 161, 181, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 252, 257, 282, 283, 288, 289, 290, 313, 318, 326, 329, 338], "get": [9, 12, 13, 14, 15, 17, 18, 19, 21, 22, 23, 25, 30, 34, 41, 42, 46, 54, 55, 56, 57, 60, 62, 63, 64, 75, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 97, 100, 105, 107, 112, 113, 114, 115, 116, 117, 119, 122, 124, 125, 129, 136, 138, 141, 142, 143, 144, 145, 146, 147, 150, 151, 154, 155, 159, 160, 161, 162, 163, 164, 169, 170, 174, 175, 178, 181, 184, 185, 186, 189, 194, 195, 196, 203, 211, 213, 214, 216, 218, 220, 222, 224, 225, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 255, 257, 260, 261, 262, 267, 270, 271, 273, 274, 282, 283, 284, 288, 289, 290, 292, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 312, 313, 319, 324, 326, 329, 338], "start": [9, 11, 12, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 39, 40, 42, 45, 47, 50, 53, 55, 57, 58, 63, 67, 75, 77, 78, 79, 80, 83, 84, 85, 86, 87, 88, 89, 90, 92, 97, 100, 101, 107, 110, 112, 115, 119, 123, 135, 138, 141, 147, 151, 154, 159, 160, 161, 165, 166, 174, 180, 181, 185, 189, 190, 218, 222, 225, 226, 227, 246, 252, 255, 269, 270, 283, 284, 291, 296, 299, 301, 312, 313, 314, 316, 318, 321, 325, 326, 338], "learn": [9, 10, 47, 54, 58, 76, 82, 83, 84, 85, 86, 87, 90, 92, 225, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 260, 261, 262, 267, 273, 288, 289, 290, 313, 318, 326, 338], "exercis": [9, 20, 58, 90, 327], "descript": [9, 11, 14, 16, 19, 23, 25, 26, 27, 28, 30, 34, 45, 54, 55, 56, 58, 60, 62, 63, 67, 72, 78, 79, 87, 88, 89, 90, 92, 119, 160, 164, 166, 209, 255, 271, 299, 319], "recording_command_lin": [9, 18, 19, 90, 284], "demonstr": [9, 25, 34, 36, 45, 53, 57, 58, 74, 75, 83, 89, 90, 92, 228, 229, 231, 232, 235, 236, 239, 241, 243, 250, 251, 252, 255, 256, 257, 260, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 289, 292, 293, 295, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 315, 319, 320, 322, 323, 324, 330, 333, 334, 336, 337], "download": [9, 14, 15, 19, 20, 23, 24, 26, 27, 29, 30, 31, 34, 39, 41, 53, 58, 61, 63, 72, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 90, 92, 97, 98, 115, 135, 226, 254, 264, 271, 284, 286, 294, 297, 318, 324, 329], "graph_nav_command_lin": [9, 18, 90, 284], "upload": [9, 11, 13, 19, 20, 23, 27, 28, 30, 34, 53, 55, 61, 62, 63, 69, 71, 76, 79, 84, 87, 90, 92, 96, 97, 135, 149, 169, 226, 262, 268, 271, 282, 284, 294, 298, 312], "robotiniti": 9, "robotget": 9, "mapnavig": 9, "destin": [9, 13, 16, 22, 23, 69, 78, 90, 92, 96, 135, 216, 252, 284, 312, 329], "id": [9, 11, 14, 17, 18, 19, 26, 28, 36, 42, 45, 46, 50, 56, 74, 78, 81, 83, 85, 87, 90, 97, 98, 99, 112, 114, 115, 116, 117, 118, 119, 124, 125, 126, 128, 135, 138, 141, 147, 148, 159, 160, 161, 167, 186, 194, 195, 211, 214, 218, 222, 247, 258, 273, 283, 284, 287, 299, 300, 307, 310, 312, 334], "clear": [9, 13, 14, 17, 19, 45, 47, 56, 58, 90, 92, 97, 123, 128, 135, 138, 161, 171, 182, 227, 258, 284, 291, 298, 323], "remote_mission_servic": [9, 90], "remotemissionservic": [9, 10, 90, 214], "part": [9, 11, 15, 17, 21, 28, 34, 35, 36, 39, 40, 51, 54, 55, 56, 57, 58, 60, 61, 63, 74, 82, 90, 92, 100, 108, 118, 194, 225, 252, 271, 282, 309, 310, 320], "view_map": [9, 18, 283, 287], "pars": [9, 23, 26, 28, 29, 34, 41, 42, 74, 77, 81, 90, 92, 96, 97, 103, 112, 120, 130, 137, 185, 192, 206, 209, 220, 226, 282, 285, 286, 287], "area_callback": [9, 17, 90, 99, 227], "extend": [9, 15, 18, 28, 30, 34, 36, 40, 49, 54, 58, 63, 66, 90, 92, 147, 320], "enter": [9, 12, 22, 29, 30, 32, 33, 34, 37, 39, 57, 61, 72, 76, 80, 82, 83, 84, 88, 90, 92, 284], "cross": [9, 12, 17, 18, 22, 23, 30, 36, 62, 64, 86, 87, 90, 92, 100, 150, 159, 227], "region": [9, 12, 16, 17, 22, 35, 56, 65, 90, 98, 102, 159, 227, 267, 288, 321], "independ": [10, 14, 31, 36, 45, 53, 54, 57, 89, 92, 127, 178], "fashion": [10, 90], "catalog": 10, "graphnavservic": [10, 25, 89, 90, 135], "graphnavrecordingservic": [10, 12, 23, 90, 159], "missionservic": [10, 90, 211], "benefici": 11, "understand": [11, 15, 22, 25, 34, 42, 46, 53, 74, 75, 85, 86, 88, 92, 170, 318, 319], "term": [11, 27, 53, 54, 74, 89, 90, 92, 218, 222], "bosdyn": [11, 17, 18, 25, 26, 28, 29, 31, 42, 44, 53, 54, 55, 57, 58, 60, 74, 76, 77, 78, 81, 82, 84, 85, 87, 88, 89, 95, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 189, 190, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 218, 219, 220, 222, 223, 224, 228, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 244, 245, 247, 252, 254, 255, 257, 269, 273, 274, 276, 277, 279, 280, 282, 283, 284, 285, 286, 287, 288, 290, 291, 292, 294, 297, 298, 311, 313, 315, 316, 318, 319, 320, 321, 322, 323, 329, 334], "tree": [11, 12, 46, 51, 56, 77, 78, 90, 92, 129, 143, 160, 213, 216, 299, 337], "infinit": [11, 119], "recurs": 11, "grpc": [11, 17, 25, 26, 34, 42, 58, 73, 74, 77, 78, 84, 88, 89, 90, 92, 93, 105, 110, 111, 113, 117, 123, 138, 142, 151, 153, 154, 155, 156, 160, 165, 181, 182, 185, 188, 191, 252, 261, 282, 315, 318, 319, 326, 329], "compil": [11, 23, 40, 43, 62, 74, 83, 87, 90, 92, 108, 165, 185, 211, 213, 319, 328], "amp": [11, 92, 244, 296, 314, 335, 338], "script": [11, 28, 30, 34, 41, 52, 58, 60, 61, 62, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 90, 92, 165, 185, 229, 230, 247, 248, 252, 258, 269, 273, 277, 282, 284, 294, 296, 297, 298, 312, 316, 317, 318, 320, 321, 327, 329], "medium": [11, 30, 42, 59, 60, 92], "etc": [11, 15, 18, 26, 42, 53, 57, 60, 61, 63, 69, 71, 72, 78, 88, 89, 90, 92, 112, 159, 160, 161, 175, 194, 229, 251, 287, 315], "translat": [11, 15, 17, 35, 36, 37, 46, 89, 92, 111, 127, 150, 175, 282], "noth": [11, 15, 30, 36, 83, 85, 90, 92, 96, 97, 119, 159, 161, 165, 227], "reason": [11, 14, 15, 17, 21, 25, 26, 33, 53, 54, 82, 84, 89, 90, 92, 218, 222, 283, 318], "resili": [11, 90], "playmiss": [11, 23, 92], "ever": [11, 15, 51, 58, 92, 97, 154], "again": [11, 17, 30, 51, 55, 62, 69, 79, 83, 85, 86, 88, 89, 90, 92, 97, 135, 149, 159, 211, 227, 283, 315, 325], "constant": [11, 28, 34, 35, 45, 49, 77, 78, 84, 85, 90, 92, 161, 192, 210], "advanc": [11, 12, 27, 35, 41, 53, 57, 69, 83, 92, 142, 161, 238, 242], "To": [11, 12, 13, 14, 15, 17, 18, 20, 25, 29, 30, 31, 32, 33, 34, 36, 37, 40, 41, 45, 46, 47, 51, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 69, 71, 72, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 90, 92, 117, 161, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 247, 250, 251, 252, 253, 256, 257, 258, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 288, 289, 290, 291, 293, 294, 295, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 329, 330, 331, 332, 333, 334, 336, 337, 338], "deal": [11, 13], "few": [11, 15, 17, 20, 22, 25, 26, 45, 47, 50, 53, 54, 56, 74, 79, 82, 87, 88, 89, 90, 92, 141, 271, 310, 326], "fail": [11, 12, 13, 15, 17, 23, 25, 29, 34, 42, 51, 53, 54, 55, 56, 58, 60, 61, 62, 71, 77, 83, 84, 85, 88, 89, 90, 92, 99, 108, 115, 118, 119, 125, 126, 127, 135, 137, 138, 149, 152, 155, 156, 159, 160, 161, 164, 180, 182, 209, 211, 213, 258, 270, 283, 299, 317, 318, 319, 320, 323, 328, 329], "difficult": [11, 20, 22, 28, 35, 45, 54, 74, 82, 85, 90, 92, 283, 320], "wait": [11, 14, 40, 44, 51, 54, 58, 82, 84, 85, 86, 87, 88, 89, 90, 92, 100, 105, 117, 123, 138, 142, 154, 156, 160, 161, 163, 165, 180, 181, 185, 227, 277, 280, 314, 319], "finish": [11, 14, 17, 33, 36, 51, 76, 80, 82, 85, 86, 87, 92, 100, 117, 161, 227, 283, 296, 298, 315], "grown": 11, "successfulli": [11, 15, 17, 20, 23, 32, 34, 36, 56, 76, 82, 85, 87, 88, 89, 90, 92, 115, 117, 124, 138, 152, 161, 181, 186, 229, 234, 271, 273, 277, 318, 320, 329], "boilerpl": [11, 82, 84, 85], "track": [11, 20, 29, 35, 36, 45, 47, 56, 74, 83, 90, 92, 96, 97, 117, 138, 142, 144, 181, 255], "logic": [11, 26, 34, 42, 60, 61, 67, 79, 92, 142, 294], "consum": [11, 15, 45, 90, 92, 282, 318], "might": [11, 15, 18, 21, 23, 26, 28, 34, 36, 45, 52, 54, 60, 63, 64, 66, 74, 82, 84, 85, 87, 88, 89, 92, 152, 271, 297, 321], "easier": [11, 26, 35, 43, 69, 74, 90, 92, 161, 225, 298], "seamlessli": 11, "agnost": [11, 55], "correspond": [11, 13, 15, 23, 30, 34, 37, 40, 42, 43, 56, 61, 71, 89, 90, 92, 118, 135, 142, 143, 149, 161, 171, 194, 195, 216, 220, 224, 271, 272, 277, 285, 287, 294, 312], "deep": [11, 52, 83, 297, 321], "42": [11, 48, 299], "1000": [11, 92, 137], "perform": [11, 15, 17, 18, 20, 21, 23, 32, 33, 36, 41, 42, 47, 51, 52, 53, 55, 56, 57, 58, 61, 62, 63, 69, 72, 77, 78, 83, 84, 86, 89, 92, 97, 114, 116, 117, 123, 135, 150, 160, 181, 229, 234, 250, 282, 297, 310, 315, 318, 319, 320, 326, 328], "suppos": [11, 13, 54, 90, 92, 283], "remov": [11, 20, 21, 30, 34, 37, 53, 56, 61, 67, 69, 84, 92, 97, 112, 115, 117, 119, 123, 141, 142, 164, 165, 174, 185, 186, 256, 269, 274, 311, 318, 325], "tediou": 11, "therein": 11, "familiar": [11, 87, 318], "know": [11, 17, 18, 46, 54, 56, 60, 77, 89, 90, 92, 102, 152, 161, 283, 284, 320], "assembli": 11, "harder": 11, "matlab": 11, "though": [11, 13, 18, 90, 92, 213, 252, 270, 282, 314], "formal": 11, "basic": [11, 21, 26, 32, 39, 42, 60, 63, 77, 78, 80, 81, 82, 83, 87, 89, 90, 92, 185, 190, 192, 225, 226, 284, 294, 317], "form": [11, 25, 26, 36, 39, 41, 53, 54, 57, 61, 74, 92, 106, 119, 124, 127, 129, 156, 160, 166, 184, 209, 218, 222, 282, 285, 286, 287, 294], "pattern": [11, 30, 32, 33, 35, 36, 53, 74, 315, 326, 338], "compar": [11, 12, 19, 21, 36, 41, 49, 51, 63, 85, 90, 142, 144, 162], "benefit": [11, 53, 90], "easi": [11, 18, 30, 45, 76, 82, 83, 86, 87, 92, 162, 165, 185, 270], "edit": [11, 28, 29, 33, 57, 61, 72, 88, 90, 92, 166, 209, 218, 222, 260, 300, 314, 318], "method": [11, 15, 17, 21, 25, 26, 28, 30, 40, 43, 53, 55, 69, 71, 77, 78, 79, 85, 88, 89, 90, 92, 105, 111, 117, 118, 119, 123, 138, 142, 154, 160, 185, 193, 197, 200, 201, 204, 227, 252, 254, 284, 293, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 318], "obtain": [11, 15, 55, 89, 90, 92, 119, 135, 137, 138, 155, 163, 181, 211, 218, 220, 222, 224, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 321, 326], "seri": [11, 18, 28, 34, 42, 55, 61, 67, 90, 92, 121, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 206, 247, 252, 283, 303], "associ": [11, 15, 17, 18, 19, 20, 23, 24, 27, 28, 29, 34, 39, 40, 42, 43, 45, 46, 50, 55, 56, 58, 60, 63, 78, 88, 90, 97, 113, 114, 116, 117, 118, 128, 135, 138, 141, 144, 159, 160, 166, 174, 181, 186, 194, 195, 198, 200, 218, 220, 222, 224, 227, 250, 252, 283, 284, 287, 297, 299, 310, 311, 318, 319, 320, 321, 323, 337], "encapsul": [11, 46, 92], "reorder": [11, 269], "wrapper": [11, 90, 92, 100, 106, 120, 126, 162, 181, 183, 185], "within": [11, 15, 18, 20, 22, 25, 26, 28, 29, 30, 32, 34, 39, 42, 46, 50, 51, 54, 56, 58, 63, 66, 74, 85, 90, 92, 95, 96, 97, 102, 127, 138, 143, 156, 160, 173, 192, 193, 195, 197, 200, 202, 203, 204, 252, 282, 310, 318, 337, 338], "context": [11, 15, 20, 42, 55, 60, 84, 85, 90, 92, 102, 117, 138, 141, 173, 227, 271, 273, 283, 317], "graph": [11, 12, 17, 18, 19, 20, 23, 25, 46, 51, 81, 83, 89, 98, 100, 149, 159, 218, 225, 260, 284, 285, 286, 287, 303, 316, 321], "nav": [11, 17, 18, 23, 25, 51, 81, 89, 98, 100, 159, 225, 260, 284, 285, 286, 316], "monitor": [11, 17, 20, 43, 45, 54, 56, 69, 70, 79, 83, 90, 92, 105, 115, 117, 156, 252, 295, 296], "paus": [11, 17, 19, 23, 56, 90, 92, 211, 227, 234], "resum": [11, 17, 53, 90, 92, 314], "multipl": [11, 14, 18, 20, 21, 25, 28, 31, 34, 36, 37, 39, 40, 45, 46, 51, 53, 54, 55, 56, 58, 61, 63, 77, 84, 89, 90, 92, 97, 138, 142, 150, 161, 170, 200, 252, 271, 274, 283, 287, 300, 311, 319, 320], "repeat": [11, 17, 21, 23, 25, 33, 34, 35, 36, 43, 47, 49, 58, 68, 76, 79, 80, 90, 97, 129, 177, 185, 218, 222, 274, 277, 334], "two": [11, 14, 17, 18, 19, 20, 23, 25, 28, 29, 34, 35, 36, 39, 41, 43, 44, 46, 47, 50, 53, 54, 55, 57, 58, 59, 60, 61, 63, 66, 67, 69, 71, 76, 77, 79, 80, 81, 82, 85, 86, 88, 89, 90, 92, 129, 142, 150, 159, 171, 175, 218, 222, 227, 231, 247, 248, 252, 270, 273, 274, 282, 283, 284, 287, 297, 299, 310, 318, 320, 322, 326, 328], "boolean": [11, 30, 34, 56, 57, 58, 90, 92, 96, 97, 115, 117, 135, 138, 142, 143, 144, 159, 161, 166, 170, 181, 185, 186, 220, 274], "disable_recharg": [11, 90, 92], "disable_end": [11, 90, 92], "fals": [11, 17, 23, 36, 54, 55, 57, 58, 60, 77, 85, 87, 89, 90, 92, 96, 97, 100, 103, 107, 110, 112, 113, 117, 119, 121, 124, 126, 128, 135, 137, 138, 141, 142, 144, 149, 151, 156, 159, 160, 161, 163, 166, 174, 180, 181, 185, 186, 194, 200, 205, 206, 216, 274, 283, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "recharg": [11, 14, 90, 92], "nearest": [11, 18, 21, 56, 90, 92, 284, 320], "occup": 11, "ensur": [11, 29, 30, 32, 33, 34, 36, 45, 47, 54, 55, 57, 58, 60, 61, 63, 64, 65, 67, 68, 69, 79, 83, 88, 90, 92, 119, 138, 142, 149, 154, 160, 185, 235, 236, 243, 245, 252, 269, 283, 284, 291, 297, 310, 316, 318, 319, 320, 321, 329], "compet": 11, "convert": [11, 25, 28, 34, 46, 53, 57, 58, 63, 77, 83, 84, 85, 86, 90, 92, 95, 96, 97, 113, 115, 119, 129, 130, 137, 138, 150, 160, 161, 166, 181, 185, 186, 209, 216, 255, 282, 286, 334], "compileautowalk": [11, 92], "loadautowalk": [11, 92], "convers": [11, 57, 84, 90, 92, 96, 114, 138, 181, 209], "queri": [11, 15, 16, 17, 23, 26, 39, 42, 52, 55, 56, 60, 77, 90, 92, 105, 112, 115, 117, 118, 119, 121, 137, 138, 152, 155, 158, 160, 163, 180, 218, 220, 222, 224, 252, 255, 273, 275, 277, 279, 282, 290, 292, 294, 297, 299, 313, 318, 321, 333], "rememb": [11, 22, 30, 32, 45, 87, 88, 92, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 289, 290], "correctli": [11, 21, 28, 45, 54, 55, 56, 61, 63, 65, 71, 76, 77, 79, 82, 85, 88, 89, 90, 92, 100, 102, 135, 274, 294, 298, 301, 318, 319, 320, 333, 337], "everyth": [11, 57, 63, 76, 77, 78, 79, 82, 84, 87, 90, 92, 117, 319], "nodeidentifi": 11, "piec": [11, 39, 52, 55, 58, 63, 78, 81, 86, 89, 90, 92, 117, 118, 234, 319], "node_id": [11, 92], "integ": [11, 26, 28, 30, 34, 51, 57, 58, 77, 92, 126, 137, 194, 209], "equival": [11, 92, 218, 222, 232], "nodeinfo": 11, "user_data_id": [11, 92], "string": [11, 23, 25, 26, 40, 46, 53, 54, 58, 60, 63, 71, 74, 77, 89, 90, 92, 96, 97, 106, 110, 113, 114, 115, 117, 118, 119, 120, 129, 135, 137, 138, 142, 143, 144, 146, 147, 151, 154, 155, 159, 160, 161, 163, 164, 165, 167, 174, 181, 184, 185, 186, 194, 195, 202, 205, 209, 213, 216, 218, 220, 222, 252, 299, 315, 318, 319, 320], "userdata": 11, "give": [11, 17, 29, 30, 33, 35, 50, 51, 60, 69, 74, 89, 90, 92, 112, 161, 273], "insight": 11, "incomplet": [11, 135], "getstat": [11, 23, 90, 92], "determin": [11, 12, 13, 14, 17, 19, 20, 21, 22, 25, 26, 28, 35, 36, 40, 44, 45, 46, 51, 54, 56, 58, 60, 76, 77, 82, 84, 90, 92, 97, 100, 112, 113, 114, 135, 137, 142, 150, 151, 159, 185, 218, 222, 227, 252, 273, 274, 283, 315, 318, 319, 320, 322, 330], "asid": [11, 17, 55], "malform": [11, 90, 92, 108, 158, 160, 283], "failed_el": [11, 92], "inspect": [11, 15, 18, 20, 39, 49, 54, 57, 80, 90, 92, 117, 156, 218, 272, 298, 310, 315, 321, 324], "failedel": 11, "why": [11, 26, 29, 34, 44, 83, 86, 90, 92, 161, 166, 283], "resolv": [11, 45, 88, 90, 92, 127, 164], "result": [11, 12, 15, 16, 17, 18, 20, 22, 25, 28, 29, 30, 34, 35, 39, 45, 47, 51, 52, 54, 57, 66, 78, 81, 82, 83, 84, 85, 89, 90, 97, 105, 108, 113, 117, 135, 137, 138, 142, 144, 162, 174, 180, 185, 212, 216, 250, 252, 271, 273, 277, 291, 297, 312, 315, 318, 320], "modif": [11, 30, 83, 87, 88, 90, 92], "report": [11, 14, 15, 20, 22, 40, 45, 46, 54, 56, 63, 74, 77, 78, 81, 84, 85, 86, 87, 90, 92, 100, 117, 180, 326], "lease_use_result": [11, 92, 127, 142, 144], "failed_nod": [11, 92], "previous": [11, 17, 32, 50, 63, 72, 77, 78, 87, 90, 92, 106, 111, 119, 124, 126, 142, 156, 161, 194, 273], "mention": [11, 46, 90, 92, 97], "confin": 11, "measur": [11, 15, 18, 25, 26, 28, 36, 47, 56, 83, 90, 92, 156, 171, 282, 283], "asset": [11, 54, 90, 271, 310], "alert": [11, 167, 216, 300], "next": [11, 13, 14, 21, 22, 30, 33, 34, 50, 54, 57, 61, 63, 69, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 90, 92, 97, 100, 138, 206, 227, 282, 284, 318, 326, 329, 338], "condit": [11, 17, 19, 20, 23, 30, 44, 54, 89, 135, 161], "conform": [11, 64], "achiev": [11, 15, 18, 20, 25, 35, 47, 49, 54, 69, 90, 92, 160, 161, 181, 274, 320], "inject": [11, 88], "downsid": [11, 92], "editor": [11, 92], "embed": [11, 42, 54, 57, 61, 90, 92, 282], "recompil": 11, "recombin": [11, 34], "ll": [12, 36, 57, 76, 77, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92, 161, 250, 273], "topolog": [12, 18, 92, 135, 149, 283], "rpc": [12, 14, 16, 17, 18, 21, 22, 25, 28, 29, 33, 34, 35, 40, 42, 43, 47, 51, 53, 56, 57, 58, 74, 78, 89, 90, 92, 97, 106, 107, 111, 113, 114, 115, 116, 117, 118, 119, 123, 126, 127, 135, 141, 142, 147, 154, 160, 161, 163, 164, 165, 170, 181, 211, 252, 253, 261, 283, 318, 319, 320, 329], "pointer": 12, "snapshot": [12, 15, 18, 19, 20, 36, 46, 56, 58, 90, 92, 129, 135, 138, 149, 151, 160, 283, 284, 286, 287, 303, 337], "captur": [12, 15, 18, 22, 24, 38, 39, 41, 42, 46, 52, 55, 56, 80, 81, 82, 84, 85, 90, 92, 112, 114, 116, 117, 118, 138, 169, 218, 220, 222, 224, 226, 252, 272, 277, 289, 297, 301, 318, 320, 326], "approxim": [12, 16, 18, 77, 82, 85, 92, 177, 277, 283], "2m": [12, 92, 177, 284], "interv": [12, 18, 54, 90, 92, 105, 123, 160, 181], "otherwis": [12, 18, 22, 23, 28, 35, 36, 45, 57, 63, 84, 85, 92, 96, 100, 113, 114, 119, 126, 127, 129, 138, 142, 156, 160, 161, 163, 164, 166, 178, 181, 185, 213, 252, 271, 284, 298, 301, 318, 320], "anoth": [12, 18, 19, 20, 21, 23, 25, 36, 46, 51, 53, 54, 57, 60, 61, 63, 80, 84, 89, 90, 92, 100, 104, 108, 125, 138, 147, 148, 149, 161, 176, 180, 207, 227, 247, 273, 274, 283, 284, 287, 297, 309, 310, 314, 315, 321, 326], "annot": [12, 15, 17, 18, 19, 22, 30, 34, 60, 78, 82, 83, 84, 85, 86, 87, 90, 149, 159, 189, 190, 194, 195, 202, 205, 227, 286, 293, 337], "them": [12, 15, 17, 18, 21, 23, 29, 30, 33, 37, 39, 45, 52, 56, 58, 60, 63, 74, 76, 77, 79, 81, 83, 87, 88, 89, 90, 92, 112, 117, 119, 122, 135, 167, 202, 247, 271, 272, 277, 283, 284, 294, 300, 319, 326, 328, 333], "restrict": [12, 30, 34, 35, 63, 90, 92, 271], "updat": [12, 18, 20, 25, 34, 36, 46, 54, 55, 58, 60, 61, 62, 63, 69, 71, 78, 79, 80, 82, 87, 92, 96, 100, 102, 104, 105, 108, 112, 117, 123, 125, 135, 138, 142, 144, 147, 148, 151, 154, 159, 160, 161, 163, 164, 174, 181, 183, 186, 218, 222, 250, 256, 277, 309, 310, 311, 315, 318, 319, 326, 333, 334], "real": [12, 15, 18, 19, 30, 43, 53, 54, 82, 84, 90, 92, 149, 158, 326], "sensori": 12, "commonli": [12, 23, 46, 56, 63, 88, 90, 92, 160, 284, 320], "aid": [12, 20, 29, 51, 90, 92, 113], "unawar": [12, 21, 92], "elect": 12, "particular": [12, 17, 19, 22, 25, 34, 35, 39, 40, 41, 51, 54, 55, 57, 64, 74, 77, 78, 79, 81, 90, 92, 118, 122, 135, 160, 196, 283, 299], "guess": [12, 15, 21, 25, 92, 135, 149, 283, 284, 286], "compos": [12, 17, 34, 47, 56, 61, 87, 90, 92, 161, 271, 294, 310], "node": [12, 46, 87, 90, 129, 211, 213, 214, 216, 296], "arrang": [12, 92], "hierarchi": [12, 23, 34, 51, 90, 92, 98], "loop": [12, 15, 23, 28, 35, 61, 64, 67, 82, 84, 85, 86, 90, 92, 119, 149, 284, 315], "iter": [12, 23, 63, 81, 85, 92, 113, 117, 149, 163, 181, 203, 214, 218, 222, 274, 283, 326], "tick": [12, 23, 54, 57, 90, 92, 119, 214], "proce": [12, 17, 35, 42, 69, 92, 117, 142, 227], "branch": [12, 18, 92, 284], "success": [12, 16, 17, 19, 23, 25, 53, 69, 77, 84, 85, 86, 87, 88, 90, 92, 114, 116, 117, 118, 138, 154, 156, 161, 177, 180, 212, 216, 248, 282, 315], "nodest": [12, 90], "enum": [12, 17, 21, 30, 34, 42, 53, 57, 74, 90, 92, 100, 117, 126, 142, 159, 161, 177, 185, 216], "file": [12, 18, 24, 27, 31, 32, 33, 38, 40, 42, 49, 53, 56, 60, 69, 71, 72, 74, 77, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 94, 97, 108, 112, 115, 117, 118, 137, 160, 185, 188, 189, 190, 191, 192, 193, 194, 196, 197, 198, 199, 200, 201, 202, 204, 205, 206, 218, 220, 226, 229, 235, 243, 246, 247, 248, 250, 253, 256, 258, 269, 270, 271, 273, 277, 278, 281, 282, 285, 289, 291, 293, 294, 295, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 315, 316, 317, 318, 319, 320, 321, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 336, 337], "necessarili": [12, 36, 90, 92, 271, 284, 320], "could": [12, 15, 16, 17, 25, 26, 30, 32, 33, 34, 36, 46, 53, 54, 56, 62, 63, 74, 83, 84, 86, 87, 88, 90, 92, 97, 108, 119, 121, 127, 129, 138, 142, 147, 159, 161, 164, 181, 186, 211, 213, 216, 219, 270, 282, 283, 284, 319, 329, 337], "check": [12, 14, 15, 16, 20, 23, 25, 29, 30, 33, 34, 37, 44, 45, 50, 51, 52, 53, 54, 55, 56, 58, 71, 72, 77, 78, 79, 81, 83, 84, 87, 88, 89, 92, 97, 98, 100, 112, 114, 116, 117, 124, 126, 129, 130, 141, 142, 145, 156, 160, 161, 163, 166, 167, 181, 185, 225, 227, 252, 273, 294, 295, 299, 310, 318, 320, 329], "exit": [12, 17, 30, 33, 58, 69, 72, 82, 84, 85, 86, 88, 90, 92, 100, 117, 142, 165, 181, 185, 227, 244, 284, 296, 298, 314, 319, 320, 322, 326, 327, 335, 338], "crosswalk": [12, 90], "flash": [12, 17, 30, 32, 33, 90, 173, 227], "sound": [12, 17, 90, 169, 227], "robustli": [13, 66], "old": [13, 15, 20, 26, 33, 42, 53, 61, 63, 90, 92, 112, 123, 138, 282, 294, 318], "shown": [13, 15, 18, 23, 25, 29, 30, 34, 37, 40, 42, 43, 46, 47, 51, 53, 54, 55, 57, 63, 64, 66, 67, 71, 79, 80, 83, 86, 90, 92, 227, 283, 284, 299, 313, 315, 326, 334], "visit": [13, 17, 23, 54, 55, 318], "now": [13, 15, 17, 18, 21, 23, 31, 33, 40, 44, 46, 50, 51, 54, 55, 57, 61, 69, 72, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 96, 100, 107, 137, 202, 227, 247, 255, 273, 283, 315, 338], "imagin": [13, 17, 57, 90], "someon": 13, "stuck": [13, 16, 19, 90, 92, 135], "tri": [13, 19, 54, 90, 92, 126, 185, 320], "last": [13, 28, 36, 37, 41, 47, 51, 54, 55, 56, 79, 83, 85, 86, 88, 89, 90, 92, 97, 138, 142, 149, 159, 181, 247, 284, 312, 314, 320, 326, 338], "resort": 13, "strategi": [13, 53, 55], "plan": [13, 17, 18, 21, 54, 90, 92, 229, 294], "altern": [13, 16, 29, 41, 51, 54, 90, 92, 114, 160, 249, 250, 251, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 312, 320], "succe": [13, 22, 23, 34, 85, 90, 92, 127, 138, 161, 282, 283, 299, 315], "free": [13, 25, 57, 83, 92, 308, 319], "aren": [13, 18, 82, 85, 92, 277], "uncheck": [13, 30, 90], "box": [13, 30, 34, 39, 52, 56, 57, 81, 82, 83, 84, 85, 86, 88, 90, 92, 186, 273, 274, 297, 298, 317, 326, 337], "mark": [13, 15, 30, 50, 51, 58, 60, 90, 92, 117, 141, 185, 337], "screen": [13, 15, 17, 32, 33, 34, 35, 40, 80, 84, 88, 90, 92, 170, 227, 277, 315, 318, 321, 326, 334], "replan": 13, "navigateto": [13, 18, 19, 90], "navigaterout": [13, 19, 90], "travelparam": [13, 90, 135], "true": [13, 15, 17, 23, 34, 36, 57, 58, 77, 81, 82, 83, 84, 85, 86, 87, 89, 90, 92, 96, 97, 100, 102, 107, 110, 112, 113, 115, 117, 119, 123, 126, 129, 130, 135, 138, 142, 149, 156, 159, 160, 161, 163, 165, 166, 170, 174, 178, 181, 185, 186, 190, 206, 209, 216, 218, 274, 283, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "playset": [13, 90], "playmissionrequest": 13, "pictur": [14, 46, 67, 69, 82, 85, 88, 90, 92, 235, 243, 318], "station": [14, 15, 23, 90, 92, 124], "tag": [14, 39, 46, 63, 79, 87, 92, 159, 169, 174, 253, 271, 274, 282, 283, 287, 294, 298, 310, 312, 320, 324], "kept": [14, 90, 291, 319], "clean": [14, 17, 69, 87, 90, 92, 115, 165, 185, 227], "unobstruct": [14, 92], "index": [14, 26, 77, 84, 90, 92, 119, 121, 151, 188, 189, 193, 194, 196, 197, 200, 201, 203, 204, 206, 255, 320], "cone": 14, "connector": [14, 53, 61, 64, 67], "reveal": 14, "rear": [14, 46, 53, 60, 63, 66, 90, 92, 161, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "tower": 14, "secur": [14, 21, 26, 42, 53, 61, 68, 72, 88, 89, 90, 111, 160, 185, 310, 319], "interlock": [14, 67], "expos": [14, 25, 30, 32, 33, 47, 56, 60, 64, 77, 78, 89, 160, 161, 252, 253], "four": [14, 19, 30, 34, 40, 92, 226, 320], "dockingcommand": [14, 92, 124], "dockingcommandfeedback": [14, 92], "feedback": [14, 19, 58, 74, 85, 86, 89, 114, 116, 124, 125, 135, 148, 161, 180, 273], "getdockingconfig": [14, 92], "getdockingst": [14, 92], "detect": [14, 17, 18, 20, 21, 35, 46, 52, 56, 58, 80, 82, 83, 84, 85, 90, 92, 159, 161, 227, 252, 267, 274, 281, 287, 297, 298, 318, 320, 321, 325], "enough": [14, 15, 21, 22, 51, 66, 74, 84, 90, 92, 142, 150, 235, 236, 243, 245, 252, 273, 282], "poll": [14, 25, 54, 56, 74, 85, 86, 92, 309, 310, 333], "status_in_progress": [14, 92], "status_dock": [14, 90, 92], "unless": [14, 16, 19, 21, 33, 36, 39, 61, 62, 71, 79, 87, 89, 90, 92, 159, 298], "safeti": [14, 16, 17, 47, 51, 56, 66, 89, 92, 156, 227, 261, 291], "prep_pose_behavior": [14, 92, 124], "prep_pose_undock": [14, 90, 92], "docking_station_id": [14, 92], "status_at_prep_pos": [14, 90, 92], "remain": [14, 16, 17, 34, 36, 56, 78, 81, 89, 90, 92, 164, 232, 274], "isn": [14, 15, 22, 25, 33, 34, 83, 84, 86, 92], "manual": [14, 18, 19, 20, 29, 30, 34, 60, 63, 71, 79, 83, 90, 92, 97, 135, 177, 178, 230, 246, 282, 284, 299, 318, 319], "simpli": [14, 15, 18, 30, 49, 51, 54, 61, 63, 76, 79, 81, 88, 90, 92, 102, 185, 227, 248, 284, 311, 319], "wasn": [14, 92], "circumst": [14, 57, 92], "global": [15, 16, 18, 20, 22, 81, 90, 92, 285, 287, 320], "satellit": 15, "gnss": [15, 92], "earth": [15, 92, 282, 286], "constel": 15, "Their": [15, 74], "nation": 15, "marin": 15, "electron": 15, "known": [15, 19, 20, 21, 25, 30, 32, 33, 46, 51, 56, 58, 60, 79, 92, 97, 129, 135, 138, 142, 158, 160, 209, 218, 222, 284, 287, 318], "nmea": [15, 90, 130, 131, 282], "0183": [15, 282], "gga": [15, 282], "latitud": [15, 90, 92, 286, 299], "longitud": [15, 90, 92, 286, 299], "altitud": 15, "gst": [15, 282], "deviat": [15, 19, 35, 92], "accur": [15, 35, 46, 58, 90, 92, 159, 177, 241, 284], "zda": [15, 282], "grade": [15, 92], "improv": [15, 18, 35, 41, 42, 45, 53, 56, 63, 87, 88, 92], "relai": 15, "One": [15, 18, 20, 28, 39, 44, 61, 76, 88, 90, 92, 107, 135, 142, 149, 159, 273, 283, 325], "augment": [15, 20, 92], "sba": [15, 92], "waa": 15, "centimet": 15, "kinemat": [15, 23, 29, 46, 47, 56, 92, 98, 161, 259, 284], "rtk": 15, "maxim": [15, 18, 92], "whole": [15, 20, 26, 30, 42, 63, 89, 92], "usb": [15, 18, 23, 37, 58, 61, 69, 79, 90, 92, 269, 282, 285, 286, 287, 294, 316, 318, 320], "wi": [15, 92, 156], "fi": [15, 92, 156], "bluetooth": [15, 227], "accept": [15, 34, 35, 44, 51, 53, 54, 60, 63, 68, 83, 84, 85, 90, 92, 97, 113, 138, 156, 161, 213, 273, 282, 284, 297, 317, 319, 321, 326], "here": [15, 17, 23, 26, 27, 30, 40, 43, 45, 47, 49, 52, 54, 55, 56, 60, 61, 62, 63, 66, 69, 72, 77, 78, 79, 82, 83, 84, 85, 87, 88, 89, 90, 92, 117, 137, 161, 173, 225, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 248, 253, 282, 284, 289, 290, 291, 294, 297, 312, 314, 316, 318, 320, 321, 326], "figur": [15, 36, 74, 81, 83, 92], "depict": [15, 18, 23, 27, 55], "involv": [15, 17, 18, 44, 60, 67, 92, 135, 315], "trimbl": [15, 90, 282], "sps986": [15, 90, 282], "o": [15, 25, 42, 52, 56, 59, 60, 67, 70, 71, 76, 77, 82, 84, 88, 92, 185, 227, 247, 250, 252, 253, 266, 271, 274, 294, 297, 310, 311, 312, 313, 318, 321, 335], "udp": [15, 60, 63, 133, 250, 282, 310], "listen": [15, 53, 72, 90, 92, 131, 252, 310, 315, 318, 320], "suitabl": [15, 47], "newgpsdatarequest": [15, 90, 282], "aggreg": [15, 40, 56, 90, 131, 133, 252, 282], "geograph": 15, "gc": 15, "ecef": [15, 92], "addition": [15, 18, 26, 29, 36, 37, 51, 54, 58, 90, 92, 113, 144, 160, 269, 274, 277, 282, 284, 318, 323], "timestamp": [15, 25, 26, 28, 29, 34, 39, 40, 42, 46, 47, 53, 54, 56, 74, 77, 89, 90, 92, 97, 114, 115, 116, 119, 130, 135, 138, 151, 157, 160, 181, 183, 186, 194, 195, 202, 205, 209, 252, 255], "calcul": [15, 25, 30, 46, 47, 54, 92, 282, 283, 313], "horizont": [15, 30, 33, 34, 35, 36, 46, 85, 90, 92, 170, 285], "yaw": [15, 16, 28, 34, 36, 37, 46, 60, 86, 89, 90, 92, 150, 159, 161, 208, 284, 338], "se3pos": [15, 18, 22, 34, 46, 47, 86, 90, 129, 135, 150, 159, 161, 186, 283], "relev": [15, 22, 44, 45, 46, 54, 61, 92, 212, 219, 223], "doc": [15, 74, 84, 92, 162, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 288, 289, 290, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 313, 326, 338], "geometr": [15, 22, 46, 89, 90, 92], "inerti": [15, 46, 47, 92], "boot": [15, 23, 34, 46, 61, 92, 97], "antenna": [15, 282], "convent": [15, 86, 90, 92, 188, 191, 283], "llh": 15, "seed": [15, 16, 18, 22, 81, 90, 92, 135, 284, 285], "metric": [15, 18, 56, 69, 83, 90, 92, 98, 112, 149, 163, 209, 279, 294], "repres": [15, 18, 20, 21, 26, 28, 30, 34, 35, 45, 46, 47, 51, 53, 55, 56, 57, 58, 63, 71, 74, 77, 78, 89, 90, 92, 96, 97, 105, 110, 119, 126, 129, 135, 137, 138, 142, 144, 150, 151, 159, 161, 164, 181, 208, 209, 218, 284, 286, 287, 319, 320, 337], "movement": [15, 33, 36, 90, 92, 161, 315], "importantli": 15, "six": [15, 25, 68, 87], "extract": [15, 18, 26, 81, 83, 86, 90, 92, 150, 247, 260, 283, 285, 286, 322], "cartesian": [15, 90, 92, 232], "tangent": [15, 92], "correl": [15, 22, 85, 92, 334], "getloc": [15, 92], "getlocationrespons": [15, 282], "explan": [15, 47, 77, 78, 83, 319], "status_unknown": [15, 53, 74, 92, 113, 282], "No": [15, 26, 28, 31, 34, 36, 53, 57, 63, 77, 82, 85, 88, 89, 90, 92, 135, 160, 182, 211, 244, 267, 315], "status_ok": [15, 53, 92, 144, 166, 227, 282], "invalid": [15, 16, 25, 29, 47, 53, 54, 56, 90, 92, 97, 106, 107, 114, 126, 127, 129, 135, 137, 142, 147, 149, 151, 155, 156, 158, 161, 166, 180, 202, 211, 216, 220, 282], "status_needs_devic": 15, "ok": [15, 53, 55, 74, 82, 88, 92, 97, 100, 126, 142, 144, 181, 273, 317], "status_need_data": [15, 92, 282], "usabl": [15, 26, 56, 90, 273, 282], "status_need_more_data": [15, 92, 282], "status_stal": [15, 90, 92, 282], "whenev": [15, 18, 54, 72, 92, 284], "raw": [15, 26, 38, 46, 56, 58, 77, 78, 84, 89, 90, 92, 137, 138, 220, 286, 287, 326], "inaccur": [15, 20, 92, 283], "miss": [15, 54, 84, 90, 92, 129, 135, 149, 159, 185, 213, 214, 294, 310], "were": [15, 18, 36, 39, 46, 51, 53, 54, 63, 74, 77, 83, 87, 90, 92, 107, 114, 116, 117, 119, 149, 159, 185, 283, 284, 286, 323], "reachabl": [15, 90, 92, 290, 319], "world_object": [15, 90, 186, 283], "hasfield": 15, "gps_properti": [15, 92], "robot_body_loc": [15, 92], "regist": [15, 17, 25, 40, 42, 44, 45, 50, 52, 54, 56, 58, 59, 61, 63, 69, 75, 84, 90, 92, 101, 112, 119, 122, 123, 126, 135, 138, 153, 154, 159, 160, 164, 185, 192, 194, 195, 199, 202, 205, 249, 252, 256, 266, 270, 277, 282, 283, 297, 298, 311, 312, 315, 318, 320, 321, 322, 323, 329], "anchor": [15, 19, 81, 90, 135, 149, 260, 282, 284, 285, 286], "optim": [15, 61, 81, 90, 92, 149, 260, 282, 284, 285, 286], "closur": [15, 90, 92], "blue": [15, 18, 28, 30, 92, 283, 286, 287, 318, 334], "openstreetmap": 15, "nois": [15, 30, 45, 92], "systemat": 15, "ecef_tform_waypoint": [15, 92], "gps_set": [15, 92], "tform": [15, 46, 90, 92, 150, 282], "unsatisfi": 15, "signal": [15, 17, 25, 51, 61, 67, 90, 98, 100, 117, 119, 165, 227, 249, 252, 262, 294], "lost": [15, 16, 18, 21, 29, 45, 51, 90, 92, 135, 282], "realsens": [15, 92], "lidar": [15, 16, 18, 20, 21, 22, 58, 60, 61, 69, 90, 92, 135, 159, 285], "reacquir": [15, 90], "interrupt": [15, 16, 17, 33, 53, 67, 90, 92, 258, 319], "expect": [15, 18, 22, 28, 42, 43, 44, 54, 56, 57, 58, 71, 74, 77, 78, 88, 89, 90, 92, 97, 124, 129, 135, 138, 142, 154, 156, 194, 195, 211, 252, 253, 282, 285, 299, 325, 326, 329, 338], "present": [15, 28, 39, 53, 56, 57, 67, 79, 89, 90, 92, 122, 135, 142, 235, 243], "due": [15, 17, 35, 49, 53, 54, 61, 63, 74, 85, 88, 89, 90, 92, 97, 127, 142, 151, 156, 166, 273, 283, 317, 318, 319, 326, 328], "misconfigur": [15, 92], "broken": [15, 51, 90], "impair": [15, 90, 159], "getlocalizationst": [15, 16, 19, 22, 92], "centric": 15, "gpslocal": 15, "diagnost": [15, 90], "whatev": [15, 36, 86, 89, 92, 119, 135], "happen": [15, 17, 18, 29, 44, 50, 53, 54, 57, 61, 63, 75, 83, 85, 89, 90, 92, 113, 123, 135, 137, 142, 155, 226], "state_ok": [15, 92], "state_bad_fram": [15, 92], "ko": [15, 90, 92], "state_no_gps_object": [15, 92], "state_registration_not_ok": [15, 92], "state_no_gps_st": [15, 92], "state_not_enough_satellit": [15, 92], "state_no_ecef_fram": [15, 92], "state_high_error": [15, 92], "state_stal": [15, 92], "yet": [15, 54, 61, 89, 90, 92, 142, 154, 160, 164, 181, 189, 206, 227], "state_internal_error": [15, 92], "g": [15, 21, 25, 26, 34, 35, 45, 47, 51, 54, 55, 58, 60, 61, 64, 79, 81, 83, 84, 88, 89, 90, 92, 135, 138, 142, 149, 159, 164, 170, 181, 182, 229, 247, 255, 262, 271, 284, 285, 286, 296, 297, 298, 311, 312, 319, 320, 321, 329], "navigatetoanchor": [15, 18, 19, 90, 92], "gpsnavigationparam": [15, 135], "goal": [15, 16, 17, 19, 82, 83, 85, 86, 90, 92, 135, 161, 274, 275], "closest": [15, 92, 150, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "gpsstatu": 15, "gps_status_ok": [15, 92], "gps_status_no_coords_in_map": [15, 92], "gpscoordin": 15, "neither": [15, 25, 32, 90, 92], "nor": [15, 25, 32, 88, 90, 92], "gps_status_too_far_from_map": [15, 92], "pass": [15, 17, 18, 34, 43, 47, 51, 53, 54, 58, 60, 63, 72, 77, 79, 81, 86, 88, 89, 90, 92, 96, 97, 100, 106, 126, 135, 137, 138, 142, 149, 153, 154, 155, 161, 164, 165, 166, 181, 250, 252, 273, 277, 283, 286, 295, 297, 311, 317, 318, 320, 321, 326, 327, 331, 338], "suffici": [15, 22, 85, 86, 88, 89, 92], "precis": [15, 16, 17, 25, 34, 36, 45, 47, 57, 60, 68, 83, 90, 92, 177, 209, 282], "sub": [15, 51, 53, 89, 90, 92, 96, 111, 141, 142, 143, 310], "magnitud": [15, 47, 92], "processanchor": [15, 90, 92], "param": [15, 28, 34, 85, 86, 90, 96, 98, 103, 107, 113, 115, 117, 135, 138, 141, 149, 151, 161, 166, 211, 214, 218, 220, 222, 224, 283], "re": [15, 16, 20, 30, 36, 41, 51, 53, 56, 60, 76, 78, 82, 83, 84, 85, 86, 87, 88, 90, 92, 97, 100, 102, 106, 117, 123, 154, 165, 185, 274, 286, 320], "downloadgraph": [15, 18, 19, 92], "icon": [15, 33, 54, 62, 63, 72, 79, 87, 92, 271, 294, 299, 310, 318, 324], "live": [15, 17, 25, 40, 43, 44, 45, 56, 57, 77, 82, 83, 92, 112, 117, 123, 142, 277, 282, 283, 318, 320, 323, 326, 334], "moment": [15, 33, 35, 92], "question": [15, 23, 30, 88, 90, 211, 260, 310, 316], "ey": 15, "appear": [15, 17, 25, 28, 30, 33, 34, 35, 45, 56, 58, 60, 69, 81, 82, 89, 90, 92, 135, 270, 283, 299, 315, 318, 320], "infer": [15, 21, 28, 87, 90, 92, 321], "rest": [15, 17, 25, 26, 39, 40, 42, 47, 53, 54, 55, 74, 79, 82, 90, 92, 115, 117, 217, 218, 220, 221, 222, 224, 227, 252, 329], "prior": [16, 20, 22, 34, 36, 54, 56, 92, 315], "size": [16, 21, 26, 36, 56, 63, 81, 82, 90, 92, 108, 113, 120, 127, 150, 159, 166, 186, 194, 211, 274, 277, 326], "simplest": [16, 44, 77, 78, 89, 161], "decid": [16, 17, 22, 52, 92], "fewest": 16, "longer": [16, 17, 21, 22, 30, 36, 42, 51, 53, 56, 58, 63, 74, 84, 85, 86, 89, 90, 92, 117, 142, 156, 161, 164, 181, 216, 226, 273], "doubl": [16, 30, 31, 34, 83, 84, 92, 137, 160, 169, 194, 252, 321], "distant": 16, "encourag": [16, 47, 56, 89, 90], "resend": [16, 56, 135], "deadlin": [16, 89, 92, 117, 181], "futur": [16, 25, 34, 36, 42, 47, 54, 55, 56, 57, 69, 82, 84, 89, 90, 92, 97, 106, 113, 117, 135, 138, 141, 161, 162, 163, 185, 273, 311, 319], "quickli": [16, 17, 20, 33, 35, 36, 56, 58, 69, 74, 77, 82, 90, 92, 318, 326], "disconnect": [16, 30, 33, 37, 90, 92, 129, 269, 284, 316], "reli": [16, 18, 19, 20, 22, 54, 56, 90, 117, 271], "period": [16, 22, 25, 35, 36, 51, 52, 53, 54, 55, 56, 58, 78, 89, 90, 96, 105, 111, 123, 124, 126, 154, 156, 161, 174, 180, 218, 222, 269, 273, 295, 298, 312], "navigationfeedback": [16, 19, 92], "navigationfeedbackrespons": [16, 90, 135], "status_following_rout": [16, 92], "status_reached_go": [16, 92], "match": [16, 17, 21, 29, 30, 34, 39, 45, 46, 50, 54, 57, 63, 71, 74, 90, 96, 97, 99, 118, 123, 126, 127, 128, 154, 159, 164, 166, 182, 185, 186, 192, 194, 195, 211, 213, 271, 297, 315, 318, 319, 321, 334], "exactli": [16, 28, 34, 36, 44, 77, 86, 90, 92, 142, 274, 277, 284], "status_no_rout": [16, 92], "status_no_loc": [16, 92], "status_not_localized_to_rout": [16, 92], "status_command_overridden": [16, 92], "overridden": [16, 54, 79, 90, 92, 119, 156, 180, 273], "ask": [16, 17, 23, 34, 61, 69, 82, 84, 92, 106, 211, 230, 250, 271, 295], "status_lost": [16, 22, 92], "confid": [16, 82, 84, 85, 90, 92, 297, 298, 321], "status_stuck": [16, 90, 92], "troubl": [16, 33, 87, 135, 324], "status_robot_frozen": [16, 92], "status_robot_fault": 16, "fell": 16, "hardwar": [16, 25, 33, 45, 56, 58, 63, 64, 67, 77, 89, 90, 92, 112, 161, 163, 252, 279, 296, 317, 322, 326, 329], "status_constraint_fault": [16, 22, 92], "choos": [16, 19, 30, 33, 42, 55, 58, 63, 72, 80, 90, 92, 137, 229, 251, 269, 274, 283, 298, 311, 314, 319], "status_lease_error": [16, 92], "status_command_timed_out": [16, 92], "status_robot_impair": [16, 90, 92], "critic": [16, 25, 42, 53, 90, 92, 135, 167], "percept": [16, 35, 45, 47, 56, 90, 92, 135, 186, 225, 274, 334], "status_area_callback_error": [16, 92], "forklift": [17, 227], "road": [17, 227], "remot": [17, 23, 43, 51, 53, 69, 72, 89, 90, 119, 127, 159, 210, 227, 248, 260, 299], "ml": [17, 61, 63, 82, 84, 85, 86, 87, 227], "approach": [17, 20, 25, 30, 32, 33, 37, 53, 63, 74, 79, 92, 242, 271], "rerout": [17, 43, 92, 135], "across": [17, 18, 20, 25, 33, 53, 54, 56, 58, 61, 63, 64, 84, 92, 97, 154, 288, 318, 319], "elsewher": [17, 83, 213], "regardless": [17, 28, 33, 46, 90, 92, 228], "anytim": [17, 227], "That": [17, 18, 23, 54, 79, 82, 90, 92, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 283, 288, 289, 290, 313, 326, 338], "friction": [17, 35, 90, 92, 159], "coeffici": [17, 35, 90, 92, 159], "slipperi": 17, "deleg": [17, 40, 51, 90, 92, 182], "effect": [17, 22, 30, 35, 36, 37, 47, 54, 60, 74, 90, 92, 273, 317], "indefinit": [17, 33, 92], "transfer": [17, 25, 41, 55, 82, 83, 86, 92, 100, 182, 285, 286, 287], "retain": [17, 25, 33, 34, 51, 89, 90, 92, 142], "past": [17, 18, 50, 54, 56, 76, 85, 90, 92, 100, 117, 227, 273], "throughout": [17, 25, 34, 51, 53, 56, 78, 90, 92], "contrast": [17, 41, 46, 92, 232, 285, 320], "altogeth": 17, "surround": [17, 32, 56, 64, 90, 92, 227], "pseudocod": [17, 58, 227], "slowli": [17, 25, 36], "confirm": [17, 44, 51, 90, 92, 227, 273, 294, 315, 318], "brighter": [17, 325], "verifi": [17, 19, 44, 53, 54, 55, 58, 63, 77, 79, 82, 90, 92, 123, 154, 160, 166, 180, 218, 219, 220, 269, 296, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 316, 320], "durat": [17, 25, 28, 30, 34, 35, 36, 40, 47, 50, 51, 54, 67, 74, 86, 89, 90, 92, 97, 142, 147, 156, 161, 173, 181, 209, 227, 229, 251, 255, 273, 315], "areacallbackservic": [17, 99, 101, 102], "launch": [17, 54, 72, 88, 90, 183, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 275, 289, 290, 291, 297, 314, 318, 320, 321, 331], "directori": [17, 18, 28, 29, 39, 40, 45, 52, 60, 61, 79, 81, 82, 83, 84, 86, 87, 88, 89, 90, 98, 101, 112, 128, 135, 137, 138, 152, 159, 160, 185, 220, 225, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 250, 252, 253, 257, 261, 269, 271, 272, 273, 277, 283, 284, 285, 286, 287, 288, 289, 290, 294, 297, 301, 310, 312, 313, 314, 315, 316, 318, 319, 320, 321, 322, 323, 326, 328, 329, 338], "areacallbackinform": [17, 57, 100, 102, 103], "begincallback": [17, 57, 92, 100, 102], "updatecallback": [17, 92, 102], "regularli": [17, 20, 89, 90, 92, 106, 142, 154], "begincontrol": [17, 92, 102], "leaseuseresult": [17, 51, 90, 142, 144], "usag": [17, 25, 26, 42, 44, 61, 63, 77, 92, 144, 251, 266, 270], "endcallback": [17, 92, 100, 102], "earli": [17, 28, 58, 90, 92, 117, 273], "shut": [17, 50, 90, 92, 99, 100, 102, 142, 165, 181, 185], "unregist": [17, 84, 90, 92, 112, 123, 127, 161], "directoryregistrationkeepal": [17, 43, 45, 77, 78, 101, 123], "helper": [17, 34, 40, 43, 46, 58, 60, 61, 77, 78, 81, 85, 86, 89, 92, 94, 96, 97, 98, 100, 101, 113, 114, 117, 123, 124, 137, 141, 143, 154, 155, 159, 160, 161, 165, 168, 185, 215, 220, 227, 229, 252, 253, 273, 294, 310, 315, 318, 319, 320, 322, 329], "inherit": [17, 43, 58, 90, 113, 138], "class": [17, 26, 43, 45, 53, 57, 58, 75, 77, 78, 82, 83, 88, 89, 92, 96, 97, 99, 100, 102, 103, 104, 105, 106, 107, 108, 111, 112, 113, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 185, 186, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 208, 209, 211, 212, 214, 215, 216, 218, 222, 224, 227, 251, 252, 294, 326], "areacallbackregionhandlerbas": [17, 100, 102], "areacallbackserviceservic": [17, 100, 101, 102], "grpcservicerunn": [17, 43, 77, 78, 90, 101, 165, 185], "newli": [17, 18, 60, 63, 90, 92, 160, 164, 283, 311, 321], "subclass": [17, 89, 90, 102, 113, 119, 135, 138, 160, 161], "area_callback_builder_fn": [17, 102], "function": [17, 20, 29, 30, 34, 37, 40, 43, 46, 52, 53, 54, 57, 59, 60, 61, 62, 63, 67, 77, 78, 81, 82, 84, 85, 86, 92, 96, 97, 100, 101, 113, 117, 119, 124, 133, 137, 138, 142, 144, 149, 155, 156, 160, 161, 163, 165, 166, 173, 180, 185, 194, 207, 209, 218, 220, 222, 224, 227, 229, 244, 246, 248, 251, 252, 270, 296, 310, 314, 317, 318, 319, 320, 327, 329, 335, 338], "fresh": [17, 25, 51, 90, 183], "instanc": [17, 18, 42, 43, 45, 47, 54, 55, 56, 58, 77, 78, 88, 90, 92, 97, 100, 104, 108, 111, 113, 117, 123, 124, 125, 128, 132, 138, 141, 142, 148, 160, 161, 164, 181, 218, 220, 222, 224, 282, 300, 309, 310, 319], "share": [17, 18, 23, 25, 47, 50, 56, 92, 142, 189, 248, 274, 284, 287], "recreat": 17, "variou": [17, 18, 21, 30, 38, 51, 52, 57, 76, 80, 89, 90, 92, 159, 225, 254, 261, 312, 313], "practic": [17, 19, 45, 54, 55, 63, 92], "pre": [17, 18, 28, 30, 31, 36, 44, 45, 55, 59, 61, 63, 69, 82, 83, 86, 87, 88, 89, 90, 92, 124, 218, 222, 326], "emptiv": 17, "had": [17, 18, 86, 87, 90, 92, 117, 135, 161, 273], "chanc": [17, 18, 90, 92], "blockage_skip": [17, 92], "blockage_check": [17, 92], "particularli": [17, 30, 47, 90, 311], "affect": [17, 18, 45, 47, 56, 61, 69, 90, 92, 138, 160, 282], "failur": [17, 23, 34, 42, 45, 51, 58, 85, 88, 90, 92, 117, 127, 138, 142, 165, 180, 212, 216, 318, 329], "impairment_check": [17, 92], "impairment_skip": [17, 92], "incorrect": [17, 44, 77, 78, 84, 88, 90, 92, 97, 100, 114, 116, 126, 192, 258, 319, 320], "spuriou": 17, "entity_wait": [17, 92], "stopconfigur": 17, "face": [17, 22, 54, 86, 90, 92, 230], "major": [17, 53, 89, 92], "done": [17, 19, 30, 36, 46, 51, 54, 61, 77, 80, 82, 83, 85, 86, 92, 113, 135, 161, 227, 280, 311, 318, 319], "event": [17, 18, 20, 34, 40, 50, 67, 78, 90, 100, 112, 117, 119, 121, 141, 151, 160, 171, 173, 174, 218, 220, 222, 224, 255, 306, 309, 310], "react": [17, 32, 45, 51, 90], "block_until_arrived_at_start": [17, 100, 227], "block_until_arrived_at_end": [17, 100, 227], "block_until_control": [17, 100, 227], "safe_sleep": [17, 100, 227], "met": [17, 44, 74, 92], "abort": [17, 33, 90, 92, 135, 270, 271], "rais": [17, 36, 45, 53, 58, 60, 77, 78, 89, 90, 92, 96, 100, 106, 107, 108, 113, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 129, 132, 135, 137, 142, 146, 147, 149, 151, 152, 153, 154, 155, 156, 160, 161, 163, 164, 165, 166, 180, 181, 185, 186, 189, 193, 194, 195, 197, 200, 201, 202, 204, 205, 206, 209, 211, 214, 218, 220, 222, 224, 315, 319], "except": [17, 41, 50, 53, 58, 63, 74, 77, 78, 85, 88, 89, 92, 96, 97, 98, 99, 100, 106, 107, 108, 113, 114, 117, 119, 121, 122, 123, 124, 126, 128, 129, 135, 137, 141, 142, 147, 149, 151, 152, 154, 155, 156, 158, 159, 160, 161, 164, 165, 166, 180, 181, 182, 185, 192, 209, 210, 211, 214, 216, 217, 218, 220, 221, 222, 224, 271, 310, 319], "area_callback_region_handler_bas": [17, 100], "handlererror": [17, 100], "caught": [17, 58, 64, 90, 100, 142], "catch": [17, 25, 78, 90, 100, 117], "cleanup": [17, 62, 78, 87, 90, 117, 165, 185, 227], "sure": [17, 18, 21, 30, 32, 33, 55, 58, 67, 71, 74, 77, 78, 82, 84, 85, 86, 88, 89, 90, 92, 100, 117, 161, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 269, 282, 284, 289, 290, 296, 298, 310, 318], "thread": [17, 25, 63, 77, 84, 89, 90, 92, 100, 102, 113, 117, 119, 123, 126, 138, 141, 142, 154, 160, 164, 165, 173, 181, 185, 227, 294, 318], "sleep": [17, 23, 82, 85, 86, 90, 100, 282, 318, 326], "has_control": [17, 100], "non": [17, 21, 23, 35, 36, 40, 46, 51, 53, 54, 59, 63, 83, 89, 90, 92, 100, 142, 156, 160, 161, 164, 176, 181, 182, 270, 316, 321], "manner": [17, 20, 36, 39, 88, 90, 100, 320], "updatecallbackrequest": [17, 100], "stop_at_start": [17, 100, 227], "control_at_start": [17, 100, 227], "continue_past_start": [17, 100, 227], "stop_at_end": [17, 100, 227], "control_at_end": [17, 100, 227], "continue_past_end": [17, 100, 227], "constructor": [17, 58, 90, 142], "handler": [17, 90, 92, 98, 113, 119, 165, 185], "stop_at_": 17, "control_at_": [17, 227], "continue_past_": [17, 227], "area_callback_crosswalk": [17, 90, 227], "self": [17, 20, 22, 23, 30, 33, 36, 37, 53, 54, 56, 58, 66, 76, 77, 78, 84, 90, 92, 111, 112, 138, 142, 150, 161, 208, 225, 226, 227, 252, 266, 273, 282, 283, 296, 314, 315, 318, 319, 320, 322, 329, 335, 338], "acquir": [17, 25, 40, 42, 50, 51, 56, 58, 78, 89, 90, 92, 106, 112, 114, 115, 116, 123, 142, 145, 154, 161, 218, 222, 244, 246, 282, 284, 294, 296, 314, 329, 335, 338], "wallet": [17, 90, 97, 100, 113, 114, 116, 118, 119, 121, 124, 135, 142, 156, 186, 211, 214], "stage_at_start": [17, 92], "set_localization_at_end": [17, 100], "unrecover": [17, 92, 127], "leaseerror": [17, 97, 124], "pathblock": [17, 90, 100], "restart": [17, 23, 61, 62, 63, 69, 71, 79, 86, 87, 90, 92, 97, 119, 123, 154, 211, 216, 252, 298, 315, 318, 320], "made": [17, 25, 30, 34, 40, 47, 55, 61, 76, 81, 82, 84, 88, 89, 90, 92, 117, 119, 135, 137, 142, 160, 186, 209, 282, 283, 321], "overrid": [17, 57, 58, 90, 97, 135, 138, 148, 161, 175, 177, 189, 211, 213, 227, 259], "route_chang": [17, 100], "Be": [17, 30, 58, 77, 78, 92, 314], "regioninform": 17, "starting_inside_region": [17, 90, 92], "begincallbackrequest": [17, 57, 90, 100], "meaning": 17, "But": [17, 79, 88, 283], "debug": [17, 42, 51, 53, 56, 58, 60, 62, 63, 77, 79, 84, 87, 88, 89, 90, 92, 113, 138, 161, 185, 255, 266, 283, 329, 337], "python3": [17, 58, 63, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87, 88, 89, 90, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "area_callback_test_runn": [17, 227], "py": [17, 18, 25, 28, 29, 34, 44, 46, 58, 60, 63, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 95, 185, 216, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 256, 257, 258, 269, 270, 272, 273, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 288, 289, 290, 291, 292, 293, 294, 296, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 335, 336, 337, 338], "my": [17, 25, 54, 55, 69, 82, 164], "robot_ip": [17, 31, 58, 63, 71, 76, 77, 78, 79, 87, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 250, 252, 254, 255, 256, 257, 258, 269, 270, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 284, 288, 289, 290, 291, 292, 293, 295, 296, 297, 298, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "instruct": [17, 30, 63, 69, 71, 72, 79, 80, 88, 90, 218, 222, 249, 252, 274, 282, 294, 296, 312, 318, 320, 326], "prompt": [17, 22, 23, 25, 61, 83, 88, 90, 185, 211, 284, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 311], "uniqu": [18, 21, 25, 26, 34, 40, 43, 46, 54, 55, 56, 58, 60, 63, 71, 88, 90, 92, 97, 114, 116, 119, 123, 137, 154, 160, 164, 181, 192, 252, 284, 287, 296, 311, 318, 319, 320], "bundl": [18, 63, 92, 112, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "apriltag": [18, 21, 46, 56, 90, 92], "imageri": [18, 287], "terrain": [18, 35, 56, 90, 92, 159, 287, 334], "relationship": [18, 46, 49, 89, 92, 283, 287], "encount": [18, 19, 45, 55, 58, 90, 92, 127, 213], "color": [18, 28, 30, 34, 36, 56, 85, 90, 170, 186, 287, 334], "viewer": [18, 41, 84, 85, 86, 87, 90, 284, 285], "squar": [18, 21, 92, 228, 287, 334], "label": [18, 23, 34, 81, 82, 83, 84, 85, 86, 87, 90, 92, 97, 119, 151, 287, 297, 319, 321], "startrecord": [18, 19, 92, 97], "afterward": [18, 79, 90], "curvatur": 18, "corner": [18, 21, 46, 54, 63, 64, 65, 69, 80, 85, 92, 227, 283], "createwaypoint": [18, 19, 92], "createedg": [18, 19, 92], "kind": [18, 26, 58, 79, 90, 92, 194, 195, 200, 254], "chain": [18, 19, 53, 61, 92, 161, 283, 284], "physic": [18, 30, 53, 55, 56, 60, 74, 77, 78, 87, 90, 92, 294, 329], "opportun": [18, 54], "hundr": [18, 90], "000": [18, 83, 90, 313], "revers": [18, 36, 41, 92], "processtopologyrequest": [18, 149], "smarter": 18, "decis": [18, 56, 315], "encod": [18, 20, 25, 26, 41, 56, 57, 77, 90, 119, 194, 320], "odometri": [18, 22, 46, 90, 92, 161, 282, 283, 284], "total": [18, 34, 47, 55, 61, 66, 67, 90, 92, 193, 283, 326], "less": [18, 23, 30, 34, 35, 36, 41, 44, 47, 63, 66, 86, 90, 92, 117, 137, 156], "100": [18, 21, 34, 47, 48, 57, 61, 74, 76, 77, 81, 83, 84, 90, 92, 111, 137, 273, 277, 299], "believ": [18, 22, 56, 90, 92, 284], "staircas": [18, 20], "larger": [18, 56, 63, 66, 90, 92, 127, 326], "twice": [18, 22, 55, 90, 92], "app": [18, 20, 22, 24, 62, 69, 79, 80, 87, 90, 127, 164, 312, 318], "adher": [18, 166], "guidelin": [18, 59, 60, 66, 92], "multi": [18, 72, 92], "floor": [18, 34, 35, 36, 85, 90, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 285, 289, 290, 291], "least": [18, 22, 26, 28, 30, 32, 33, 35, 36, 56, 58, 60, 67, 84, 92, 227, 228, 235, 236, 243, 296, 319], "pathwai": 18, "print": [18, 21, 30, 55, 58, 60, 61, 76, 82, 83, 84, 85, 86, 90, 92, 112, 113, 119, 142, 161, 180, 216, 220, 247, 277, 296, 315, 329, 338], "def": [18, 22, 53, 58, 77, 78, 81, 82, 84, 85, 86, 117, 227, 248, 283, 286, 318], "print_anchor": 18, "po": [18, 28], "seed_tform_waypoint": [18, 81, 92], "format": [18, 27, 28, 29, 30, 34, 38, 39, 53, 54, 55, 56, 58, 63, 77, 78, 81, 82, 83, 84, 85, 88, 89, 90, 110, 114, 116, 129, 137, 138, 150, 192, 193, 197, 200, 201, 204, 206, 209, 211, 220, 224, 226, 247, 252, 255, 271, 277, 282, 285, 297, 312, 320, 321, 326], "interpol": [18, 29, 77, 92], "extrapol": [18, 47, 92], "processanchoringrequest": [18, 149, 283], "graph_nav_anchoring_optim": [18, 283], "1km": 18, "yellow": [18, 334], "notic": [18, 50, 69, 85, 87], "segment": [18, 82, 92], "disjoint": [18, 129], "layout": [18, 37, 90, 92, 284], "seed_tform_bodi": [18, 22, 81, 92], "blueprint": [18, 283], "bim": [18, 283], "ply": [18, 285], "graph_nav_extract_point_cloud": 18, "3rdparti": 18, "cloudcompar": [18, 285], "replac": [18, 33, 63, 69, 70, 77, 78, 79, 82, 83, 86, 90, 92, 126, 156, 318], "footstep": [18, 90, 92], "hint": [18, 88, 90, 92, 100, 149, 159, 161, 283], "cach": [18, 20, 25, 54, 56, 92, 98, 135, 160, 164], "preserv": [18, 25, 42, 51, 60, 90, 92, 119], "reus": [18, 69, 149, 311, 319], "5gb": [18, 61], "persist": [18, 19, 20, 21, 34, 42, 53, 61, 62, 63, 92, 154, 159, 160, 185, 288, 311, 318, 319], "reboot": [18, 20, 29, 33, 61, 63, 71, 90, 92, 288, 318, 319], "rule": [18, 34, 60, 63, 82, 87, 90, 227, 271, 310], "conclus": 18, "downloadsnapshot": 18, "downloadwaypointsnapshot": [18, 19, 92], "downloadedgesnapshot": [18, 19, 92], "machin": [18, 44, 47, 61, 62, 64, 72, 76, 77, 78, 79, 82, 84, 85, 88, 90, 92, 250, 251, 267, 285, 286, 287, 298, 299, 312], "your_map": [18, 285, 286, 287], "cabl": [18, 269, 285, 286, 287, 316], "waypoint_snapshot": [18, 92, 135, 283, 284, 285, 286, 287], "edge_snapshot": [18, 92, 135, 283, 284, 285, 286, 287], "uploadgraphrequest": 18, "uploadwaypointsnapshot": [18, 19, 90, 92], "uploadedgesnapshot": [18, 19, 90, 92], "graphnavrecord": 19, "togeth": [19, 36, 40, 46, 55, 63, 67, 76, 78, 86, 87, 90, 92, 120, 161, 283, 303, 318], "playback": [19, 23, 28, 33, 81, 90, 92, 218, 222, 226, 315], "adjust": [19, 23, 25, 28, 29, 30, 35, 36, 37, 41, 54, 57, 69, 90, 92, 227, 273, 274, 312, 320, 325], "adapt": [19, 61, 69, 78, 294, 328], "declar": [19, 22, 43, 74, 92], "scheme": [19, 25, 56, 61], "scale": [19, 21, 28, 35, 36, 81, 85, 92, 137, 170, 229, 283], "dictat": [19, 92], "drastic": [19, 28, 92], "phase": [19, 28, 35, 36, 92], "setloc": [19, 21, 90, 92], "cleargraph": [19, 92], "info": [19, 42, 78, 83, 90, 92, 112, 117, 156, 159, 162, 165, 185, 218, 222, 255, 271, 273, 283, 315, 320], "uploadgraph": [19, 90, 92], "validategraph": [19, 90, 92], "setrecordingenviron": [19, 92], "getrecordstatu": [19, 92], "stoprecord": [19, 92, 135], "gather": [20, 60, 92, 112, 147], "industri": [20, 63, 64], "commerci": 20, "todai": 20, "construct": [20, 30, 41, 63, 86, 90, 92, 97, 100, 129, 159, 161, 229, 284], "oil": 20, "ga": [20, 58, 78], "util": [20, 25, 47, 54, 55, 60, 61, 63, 77, 78, 82, 84, 85, 86, 87, 90, 98, 105, 112, 114, 126, 174, 187, 210, 217, 221, 248, 282, 283, 291, 310, 319], "upon": [20, 31, 64, 66, 78, 85, 86, 87, 90, 92, 310, 311, 319], "visual": [20, 21, 22, 46, 47, 56, 76, 82, 83, 86, 90, 92, 135, 137, 138, 267, 275, 282, 283, 284, 285, 287, 313, 326], "textur": 20, "good": [20, 34, 35, 45, 53, 55, 63, 81, 82, 83, 84, 85, 90, 92, 142, 161, 245, 283], "wider": [20, 35, 66, 82], "corridor": [20, 22, 92], "accumul": 20, "lead": [20, 69, 161], "driven": [20, 35, 37, 49], "side": [20, 30, 33, 36, 54, 56, 64, 65, 71, 90, 161, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "subsequ": [20, 34, 36, 45, 47, 51, 56, 90, 92, 142, 164, 211], "fast": [20, 34, 35, 36, 58, 90, 92, 234], "switch": [20, 22, 23, 30, 57, 61, 90, 161, 174, 227, 229, 294, 296, 315, 321], "adjac": [20, 66, 92], "beacon": [20, 92], "assist": [20, 56, 60, 90, 92, 202], "recoveri": [20, 92], "aspect": [20, 30, 81, 92, 225], "overal": [20, 34, 36, 42, 66, 78, 90, 92, 117], "robust": [20, 34, 53, 59, 65, 85, 90, 92], "recov": [20, 90, 92, 176, 258], "significantli": [20, 22, 25, 56, 90, 92], "ones": [20, 43, 90, 92, 225], "latest": [20, 23, 51, 71, 77, 83, 87, 88, 90, 92, 97, 105, 138, 144, 160, 220, 224, 282, 294, 310, 318, 324], "smooth": [20, 92], "primit": [21, 53, 57, 92], "easiest": [21, 33, 61, 77, 321], "fiducialinit": 21, "fiducial_init_nearest": [21, 92], "fiducial_init_nearest_at_target": [21, 92], "fiducial_init_specif": [21, 90, 92, 135], "desert": 21, "qr": [21, 92], "recogn": [21, 58, 77, 82, 90, 92, 127, 209], "tag36h11": 21, "146mm": 21, "glossi": 21, "letter": [21, 63, 69, 90, 92, 284, 318], "sheet": 21, "treat": [21, 25, 74, 90, 92, 142, 161], "sampl": [21, 33, 60, 92, 202, 248, 285], "background": [21, 25, 45, 72, 89, 90, 123, 138, 142, 154, 160, 165, 181, 185, 318], "univers": [21, 54], "michigan": 21, "april": [21, 92, 274, 283, 287], "lab": 21, "websit": [21, 54, 92], "tape": [21, 234], "wall": [21, 56, 74, 90, 92, 156, 274, 283], "60cm": 21, "18": [21, 67, 69, 87, 88, 90, 92, 338], "24": [21, 48, 54, 61, 67, 69, 87, 88, 90, 315], "perman": [21, 34, 90, 92, 248], "span": [21, 26, 35], "3m": [21, 22, 83], "featureless": [21, 92], "inconsist": [21, 92, 97, 283], "shadow": [21, 92], "unevenli": 21, "lit": [21, 318], "unreli": [21, 34, 36, 90, 92], "backlit": 21, "bright": [21, 90, 92, 172, 173, 227, 325], "window": [21, 30, 31, 54, 63, 72, 75, 80, 82, 85, 88, 90, 248, 274, 277, 283, 320, 326, 328, 333, 338], "intersect": [21, 90, 92, 158, 313], "furnitur": 21, "equip": [21, 22, 90, 92, 317], "distinguish": 21, "graph_nav": [21, 25, 81, 89, 90, 98, 99, 102, 135, 149, 159], "initial_guess": [21, 92, 135], "algorithm": [21, 49, 83, 92, 178, 180, 318], "unknown": [21, 25, 32, 45, 74, 82, 90, 92, 97, 114, 119, 127, 135, 142, 150, 156, 159, 160, 185, 211, 213, 216, 282, 317], "brute": [21, 90], "max_dist": [21, 90, 92, 135, 137], "max_yaw": [21, 90, 92, 135], "proprietari": 21, "scan": [21, 58, 60, 78, 90, 92, 159], "techniqu": [21, 74, 85, 161], "suit": [21, 54], "poorli": [21, 129], "bland": 21, "hallwai": [21, 22, 283], "big": [21, 41, 52, 88, 90, 92, 126], "anyth": [21, 45, 54, 58, 61, 81, 85, 86, 92, 100, 117, 142], "rich": 21, "fiducial_init_no_fiduci": [21, 92], "cumul": [22, 92], "vari": [22, 34, 36, 42, 45, 47, 49, 90, 92], "got": [22, 84, 85, 87, 161, 271, 297], "neg": [22, 34, 35, 56, 67, 85, 90, 92, 149, 282], "slip": [22, 92], "unpow": [22, 64], "dramat": [22, 36], "dark": [22, 90, 92], "darker": 22, "lack": [22, 92], "imposs": [22, 92], "snow": 22, "assess": 22, "park": 22, "lot": [22, 56, 57, 82, 83, 84, 86, 89, 92, 161], "car": 22, "roughli": [22, 92], "interven": [22, 34], "ascend": [22, 90, 92], "descend": [22, 90, 92], "stairwel": 22, "carefulli": [22, 45, 92], "narrow": [22, 57], "get_graphnav_origin": 22, "graph_nav_cli": [22, 283], "bosdyn_sdk_robot": [22, 77, 138], "ensure_cli": [22, 43, 45, 60, 77, 78, 82, 84, 85, 89, 90, 141, 160, 273, 283, 317], "graphnavcli": [22, 90, 135, 283], "default_service_nam": [22, 43, 45, 60, 77, 78, 82, 84, 85, 89, 97, 99, 104, 106, 107, 108, 114, 116, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 134, 135, 136, 137, 139, 140, 141, 142, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 161, 162, 163, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 186, 211, 214, 273, 283, 317], "get_localization_st": [22, 135], "gn_origin_tform_bodi": 22, "math_help": [22, 46, 85, 86, 90, 129, 150], "from_proto": [22, 90, 126, 150], "complic": [23, 78, 113], "ai": 23, "player": [23, 30], "charact": [23, 54, 74, 90, 115, 320], "game": 23, "zero": [23, 26, 35, 36, 42, 47, 50, 57, 83, 86, 87, 90, 92, 137], "children": [23, 57, 92, 216], "child": [23, 46, 57, 90, 92, 129, 216], "thought": [23, 60, 92], "distinct": [23, 34, 82, 92], "subtre": [23, 51, 92], "insert": [23, 26, 30, 42, 69, 90, 92, 156, 227, 252, 296, 299], "bosdynrobotst": 23, "motor": [23, 30, 32, 33, 37, 44, 50, 56, 61, 74, 88, 90, 92, 126, 141, 156, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 270, 274, 289, 290, 291, 296, 314, 325, 327, 335, 338], "entri": [23, 39, 57, 62, 74, 77, 84, 90, 92, 112, 122, 123, 151, 154, 195], "variabl": [23, 28, 41, 42, 49, 74, 79, 83, 86, 88, 90, 117, 119, 126, 185, 194, 216, 218, 220, 222, 224, 247, 248, 250, 283, 291, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 315, 321, 326, 329, 338], "scope": [23, 51, 74, 89, 92, 297, 321], "myvari": 23, "nest": [23, 39, 53], "selector": [23, 30, 34], "retri": [23, 88, 90, 124, 127, 152, 258, 282], "fordur": [23, 90], "simpleparallel": [23, 216], "pivot": [23, 36, 90], "binari": [23, 26, 34, 42, 62, 81, 90, 92, 97, 119, 194, 200, 252, 255], "comparison": [23, 92, 142, 144, 162], "bosdynrobotcommand": 23, "freez": [23, 28, 30, 35, 79, 90, 92, 161, 259], "bosdynpowerrequest": 23, "bosdynnavigateto": 23, "properti": [23, 54, 56, 86, 87, 90, 92, 97, 100, 105, 113, 126, 141, 142, 150, 160, 161, 181, 186, 189, 190, 194, 195, 196, 197, 198, 200, 201, 202, 203, 205, 206, 211, 337], "bosdyngraphnavst": [23, 90], "remotegrpc": [23, 90], "supervisor": 23, "street": [23, 90, 286], "ui": [23, 34, 54, 57, 63, 89, 90, 92, 142, 166, 282, 319], "autom": [23, 90, 92, 183, 235, 319], "anywher": 23, "ptz": [23, 39, 90, 168, 176, 298, 324], "aim": [23, 321], "pan": [23, 30, 92, 177, 287, 334], "tilt": [23, 92, 177, 325], "zoom": [23, 30, 57, 92, 177, 287, 298, 334], "offset": [23, 25, 26, 28, 35, 36, 54, 56, 57, 86, 90, 92, 135, 195, 218, 222, 274, 275, 282], "spotcamstoremedia": 23, "instal": [23, 47, 61, 62, 67, 69, 75, 76, 78, 82, 83, 87, 90, 92, 112, 145, 179, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 319, 320, 322, 323, 324, 325, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337], "defineblackboard": [23, 216], "setblackboard": [23, 216], "constantresult": 23, "executechoreographi": [23, 33, 34, 90], "missionuploadchoreographi": [23, 90], "group": [23, 28, 30, 34, 39, 45, 79, 92, 114, 115, 130, 185, 225, 271], "anim": [23, 27, 30, 31, 33, 36, 90, 94, 97, 268], "bosdynquerystoredcaptur": [23, 90], "querystoredcapturesrequest": 23, "queryparamet": [23, 90, 118, 252], "buffer": [23, 34, 38, 41, 54, 58, 88, 89, 92, 97, 98, 107, 112, 114, 121, 160, 165, 247, 264, 274], "represent": [23, 29, 30, 39, 47, 53, 54, 55, 56, 89, 90, 92, 129, 137, 185, 216, 220, 224], "wrap": [23, 43, 87, 89, 90, 92, 113, 117, 126, 161, 166], "titl": [23, 30, 57, 92], "power_on": [23, 89, 156, 160], "nodes_pb2": [23, 90, 216], "service_nam": [23, 77, 85, 92, 103, 119, 122, 138, 152, 160, 164, 191, 198, 199, 297, 329], "localhost": [23, 72, 83, 87, 286, 297, 315, 320], "power_pb2": [23, 317], "powercommandrequest": [23, 56], "request_on": [23, 56, 92], "power_on_miss": 23, "bosdyn_power_request": [23, 92], "copyfrom": [23, 58, 78, 85, 86, 283], "plu": [23, 40, 54, 80, 90, 92, 227, 321], "basic_command_pb2": [23, 85], "standcommand": [23, 90, 161], "mobility_command_pb2": 23, "stand_request": [23, 92], "synchronized_command": 23, "synchronized_command_pb2": 23, "synchronizedcommand": [23, 90, 161], "robot_command": [23, 85, 86, 89, 90, 161, 181, 186], "robot_command_pb2": [23, 161], "stand_miss": 23, "bosdyn_robot_command": [23, 92], "sitcommand": 23, "sit_request": [23, 92], "sit_miss": 23, "demo": [23, 90, 92, 228, 235, 236, 243, 245], "goe": [23, 36, 47, 75, 83, 90, 92, 318], "home": [23, 72, 82, 83, 88], "assum": [23, 25, 28, 42, 57, 64, 72, 79, 81, 85, 86, 88, 89, 90, 92, 123, 183, 227, 269, 283, 316, 318, 319], "inner": [23, 64], "goto": [23, 92], "battery_high_miss": 23, "battery_low_miss": 23, "state_nam": [23, 92], "robot_st": [23, 78, 85, 86, 163], "power_st": [23, 78, 89, 92], "locomotion_charge_percentag": [23, 78, 92], "is_battery_low": 23, "lh": [23, 92], "var": [23, 92, 216], "util_pb2": [23, 216], "variabledeclar": [23, 216], "type_float": [23, 92], "compare_l": [23, 92], "rh": [23, 92], "const": [23, 36, 92], "float_valu": [23, 92], "is_battery_low_miss": 23, "robot_state_miss": 23, "bosdyn_robot_st": [23, 92], "percentag": [23, 30, 32, 33, 84, 90, 92, 161, 169, 277], "selector_miss": 23, "always_restart": [23, 92, 216], "loadmiss": [23, 92], "pausemiss": [23, 92], "restartmiss": [23, 92, 211], "getinfo": [23, 90, 92], "static": [23, 25, 46, 53, 62, 63, 87, 92, 97, 112, 113, 119, 135, 138, 142, 150, 159, 161, 195, 211, 294, 298, 312, 318], "regard": [23, 30, 47, 90, 92, 263, 310], "getmiss": [23, 92], "answerquest": [23, 92], "answer": [23, 90, 92, 175, 211, 260, 283, 316], "establishsess": [23, 92, 315], "cycl": [23, 28, 35, 36, 63, 67, 89, 90, 92, 129, 154, 156, 173, 176, 181, 284, 318, 319], "teardownsess": [23, 92, 315], "forget": [23, 55, 72, 84, 87, 90, 92, 107, 154], "intend": [24, 33, 34, 36, 42, 54, 63, 90, 92, 100, 116, 117, 119, 126, 161, 274, 282, 294, 296, 318], "conclud": [24, 92], "log": [24, 26, 37, 41, 60, 61, 69, 71, 72, 77, 78, 79, 82, 84, 87, 88, 89, 97, 98, 105, 110, 112, 113, 114, 116, 117, 119, 123, 138, 154, 160, 161, 164, 165, 168, 185, 199, 225, 226, 247, 255, 310, 315, 324, 326], "analysi": [24, 42, 46, 92], "knowledg": [25, 46, 56, 90, 275], "materi": [25, 64, 82, 92], "architectur": [25, 58, 61, 62, 63, 89, 90, 271, 282], "glue": 25, "authent": [25, 53, 54, 56, 58, 60, 63, 77, 78, 82, 84, 85, 87, 90, 92, 106, 115, 117, 127, 160, 185, 218, 219, 220, 222, 224, 252, 254, 255, 282, 283, 302, 303, 304, 305, 307, 308, 309, 310, 318, 319, 333], "discoveri": [25, 92], "metadata": [25, 26, 34, 40, 63, 78, 81, 87, 90, 112, 114, 115, 116, 117, 118, 159, 194, 252, 297, 310], "bootstrap": 25, "robotid": [25, 90, 160, 247], "identifi": [25, 33, 34, 39, 40, 45, 51, 52, 54, 55, 56, 58, 77, 78, 85, 89, 90, 92, 96, 116, 117, 118, 119, 124, 132, 135, 159, 160, 164, 181, 186, 192, 195, 284, 319, 337], "serial_numb": [25, 89, 92], "speci": [25, 89, 92], "robotsoftwarereleas": 25, "software_releas": [25, 89, 92], "nicknam": [25, 88, 89, 90, 92, 218, 222], "serial": [25, 26, 29, 53, 61, 88, 90, 92, 97, 113, 120, 151, 199, 205, 254, 282, 284, 293], "unlik": [25, 31, 34, 45, 54, 57, 88, 92, 108, 211, 337], "computer_serial_numb": [25, 89, 92], "usernam": [25, 30, 31, 37, 53, 60, 61, 63, 69, 72, 76, 77, 82, 84, 86, 87, 88, 89, 90, 92, 106, 160, 185, 222, 224, 247, 250, 253, 254, 255, 291, 297, 298, 321, 326, 338], "password": [25, 30, 31, 37, 53, 60, 63, 69, 76, 77, 82, 84, 86, 87, 88, 89, 90, 92, 106, 160, 174, 185, 222, 224, 247, 250, 253, 254, 255, 291, 294, 297, 298, 318, 321, 326, 338], "compat": [25, 47, 53, 57, 65, 69, 83, 88, 89, 90, 92, 138, 294], "nearli": [25, 34, 92], "credenti": [25, 30, 31, 54, 60, 61, 62, 69, 71, 76, 77, 78, 79, 87, 88, 89, 90, 92, 106, 111, 154, 160, 185, 222, 224, 252, 282, 291, 297, 298, 311, 319, 321, 323], "token": [25, 42, 53, 55, 60, 74, 89, 90, 92, 98, 106, 111, 115, 123, 127, 154, 160, 164, 185, 218, 220, 222, 252, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 319], "jwt": [25, 164], "hour": [25, 42, 54, 60, 90, 92, 247, 252, 255, 319], "admin": [25, 54, 55, 60, 69, 72, 76, 88, 90, 92, 249, 253, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 317, 319, 329], "consol": [25, 30, 60, 62, 69, 71, 76, 87, 90, 92, 119, 154, 185, 249, 294, 317, 319, 329], "page": [25, 29, 42, 46, 54, 55, 60, 61, 63, 69, 71, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 90, 92, 154, 160, 254, 255, 282, 283, 286, 294, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 317, 319, 320, 324], "refresh": [25, 53, 92, 111, 141, 164, 178, 183], "rate": [25, 29, 35, 47, 53, 90, 92, 127, 263, 318], "attack": [25, 53, 89, 90], "consecut": [25, 36, 284], "lock": [25, 35, 53, 54, 79, 90, 92, 106, 138], "status_temporarily_locked_out": [25, 53, 92], "ship": [25, 43, 69, 90], "discov": [25, 46, 53, 77, 78, 90, 92], "serviceentri": [25, 60], "listserviceentri": [25, 60, 92], "quick": [25, 63, 69, 85, 88, 90, 92, 301], "ex": [25, 28, 29, 31, 55, 60, 72, 88, 92, 97, 184, 333], "dir": [25, 81, 82, 83, 84, 89, 112, 252, 253, 271, 282, 294, 297, 298, 310, 312, 318, 320, 321, 324], "author": [25, 27, 29, 30, 31, 33, 43, 45, 55, 56, 58, 74, 76, 77, 78, 86, 92, 111, 123, 127, 154, 160, 218, 222, 249, 252, 282, 294, 311, 319, 320, 323, 327, 329], "authservic": [25, 53, 89, 90, 106], "directoryservic": [25, 89, 122], "registr": [25, 43, 45, 54, 56, 61, 63, 69, 77, 78, 84, 89, 90, 98, 101, 112, 119, 128, 131, 185, 225, 252, 266, 282, 315, 318, 320, 329], "directoryregistrationservic": [25, 89, 90, 123], "estop": [25, 30, 44, 85, 88, 89, 90, 98, 112, 156, 160, 218, 222, 227, 284, 331], "estopservic": [25, 89, 90, 126], "friendli": [25, 90, 92, 112], "semant": [25, 51, 56, 89, 92, 297, 321], "although": [25, 42, 53, 54, 90], "imageservic": [25, 40, 58, 77, 89, 90, 137, 166, 329], "url": [25, 42, 54, 55, 90, 115, 218, 220, 222, 224, 299, 310], "http": [25, 42, 55, 61, 65, 66, 69, 71, 72, 76, 77, 78, 83, 87, 88, 89, 90, 92, 115, 194, 217, 218, 221, 222, 274, 286, 294, 297, 299, 310, 318, 321], "column": [25, 30, 39, 58, 88, 92], "sign": [25, 36, 54, 56, 88, 92, 151, 315], "startup": [25, 29, 40, 90, 92], "clock": [25, 35, 50, 53, 54, 58, 60, 61, 74, 89, 92, 97, 110, 112, 119, 135, 138, 142, 160, 181, 209, 252, 255, 330], "basi": [25, 53, 74, 89, 90, 92, 119, 185], "think": [25, 47, 85, 92], "16": [25, 30, 36, 41, 67, 69, 87, 92, 137], "01": [25, 86, 87, 92, 315], "wherea": 25, "behind": [25, 45, 92, 158, 245], "15": [25, 50, 56, 67, 69, 82, 85, 87, 88, 92, 216], "expir": [25, 53, 90, 92, 99, 106, 135, 160, 164], "reject": [25, 34, 51, 90, 92, 97, 127, 142, 160, 161, 273], "timesyncupd": [25, 92], "vice": [25, 90, 92], "versa": [25, 90, 92], "account": [25, 30, 53, 54, 69, 90, 178, 234, 248], "drift": [25, 90, 92, 283], "timesyncthread": [25, 181], "simplifi": [25, 40, 42, 45, 53, 55, 58, 63, 74, 77, 90, 117, 259, 268, 284], "spawn": 25, "time_sync": [25, 82, 85, 89, 160, 181, 282], "pure": [25, 26, 47, 60, 92], "permiss": [25, 27, 31, 47, 60, 62, 71, 72, 88, 90, 127, 151, 182, 185, 271, 319], "ntp": [25, 60, 90], "ownership": [25, 51, 90, 92, 124, 135, 142, 156, 159], "owner": [25, 51, 90, 92, 142], "resourc": [25, 55, 61, 63, 84, 87, 89, 90, 92, 98, 99, 119, 135, 142, 144, 159, 164, 214, 217, 218, 220, 221, 222, 224, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 320], "reliabl": [25, 30, 35, 36, 45, 53, 61, 82, 90, 92], "ultim": [25, 58, 310, 318], "reclaim": 25, "revok": [25, 51, 90, 92, 142, 180], "blob": [26, 90, 92, 119, 255, 293, 297, 321], "pod": [26, 42, 92, 188, 194], "plain": [26, 42, 92], "float": [26, 57, 58, 81, 85, 92, 97, 100, 102, 115, 117, 119, 138, 141, 147, 150, 156, 160, 161, 166, 167, 170, 173, 177, 180, 181, 186, 194, 209, 216], "cheap": 26, "thu": [26, 90, 92], "predict": [26, 83, 84], "disk": [26, 40, 42, 82, 90, 92, 97, 252, 283], "cpu": [26, 67, 83, 84, 174], "recover": [26, 90, 92], "di": 26, "cut": [26, 44, 61, 89, 90, 92, 126, 160, 270, 274, 297, 325, 327], "meant": [26, 58, 92, 97, 126, 141, 250, 252], "arbitrari": [26, 36, 42, 56, 90, 92, 118, 158, 182, 255, 283, 319], "effici": [26, 42, 82, 90, 92], "littl": [26, 35, 41, 42, 69, 84, 92], "streamabl": 26, "seek": [26, 64, 90, 206], "checksum": [26, 92, 189, 192, 206], "content": [26, 57, 58, 61, 72, 79, 81, 83, 88, 96, 97, 194, 255, 271], "int64": [26, 92], "address": [26, 30, 31, 42, 45, 53, 54, 60, 61, 69, 72, 76, 77, 78, 82, 84, 86, 89, 90, 92, 101, 110, 111, 112, 113, 123, 164, 175, 218, 222, 227, 247, 252, 273, 282, 297, 298, 299, 315, 318, 319, 320, 321, 322, 324], "broad": [26, 53], "seriesidentifi": [26, 191, 192, 195], "series_typ": [26, 92, 191, 192, 194, 195, 196, 198, 202, 205], "spec": [26, 90, 103, 117, 138, 166, 181, 189, 194, 195, 209, 211, 214], "impli": [26, 89, 90], "robot_id": [26, 89, 90, 162], "robotidrequest": [26, 89, 247], "operatorcom": [26, 247], "channel": [26, 34, 39, 42, 53, 58, 78, 81, 89, 90, 92, 98, 110, 113, 119, 127, 138, 160, 164, 169, 188, 191, 193, 194, 195, 200, 204, 205, 220, 224], "hash": [26, 28, 54, 92, 97, 195], "64": [26, 31, 48, 54, 72, 92, 195, 206], "bit": [26, 28, 31, 41, 69, 72, 92, 137, 174, 189, 195, 206, 315, 317], "sha1": [26, 92], "k1": [26, 92], "v1": [26, 42, 54, 83, 90, 92], "k2": [26, 92], "v2": [26, 42, 92], "text": [26, 28, 30, 33, 34, 55, 60, 63, 74, 81, 86, 89, 90, 92, 96, 112, 119, 160, 255, 293, 296, 315, 331, 334], "utf": [26, 92], "sort": [26, 30, 53, 90, 92, 135], "greatest": [26, 49, 118], "reserv": [26, 42, 60, 61, 63, 74, 87, 92, 310], "namespac": [26, 74, 92, 185, 218, 220, 222], "s2": [26, 92], "unifi": [26, 50, 90, 92], "descriptorblock": [26, 190, 206], "datadescriptor": [26, 195, 206], "belong": [26, 92], "endian": [26, 41, 92], "magic": 26, "fileformatdescriptor": 26, "fileindex": [26, 189, 194, 195], "header": [26, 41, 42, 53, 54, 55, 58, 74, 84, 89, 90, 113, 127, 136, 157, 165, 180, 190, 194, 220, 273, 317], "endmag": 26, "byte": [26, 41, 58, 77, 78, 90, 92, 117, 118, 119, 120, 138, 165, 185, 193, 197, 204, 206], "unsign": [26, 41, 92, 137], "int": [26, 41, 58, 77, 84, 85, 92, 97, 101, 111, 113, 114, 115, 116, 117, 119, 120, 130, 135, 137, 138, 141, 151, 161, 164, 165, 166, 178, 181, 185, 186, 193, 194, 195, 197, 200, 201, 203, 204, 209, 211, 216, 218, 220, 222], "fddb": 26, "digest": [26, 92], "56": [26, 39, 48, 49, 92], "0x00": [26, 61], "0x01": 26, "r": [26, 61, 63, 69, 71, 72, 79, 81, 83, 85, 87, 88, 92, 138, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "descriptor": [26, 92, 189, 195, 200, 206, 216], "0x02": 26, "submessag": [26, 92], "0xff": 26, "63": [26, 48], "came": [26, 54, 57, 92, 220], "timestamp_nsec": [26, 193, 194, 195, 197, 200, 201, 202, 203, 204, 205], "file_offset": [26, 92, 195], "choreograph": [27, 34, 35, 36, 92, 96, 97, 268, 331], "routin": [27, 30, 32, 33, 34, 37, 90, 92, 161, 180, 331], "licens": [27, 31, 32, 33, 47, 69, 88, 89, 98, 112, 113, 127, 135, 151, 159], "music": [27, 31, 34, 36, 37, 92], "gif": [27, 36, 86, 92], "customgait": [27, 34, 35, 36], "setup": [27, 44, 61, 63, 82, 83, 85, 87, 90, 92, 248, 271, 294, 326, 338], "uploadanim": 28, "readabl": [28, 29, 34, 40, 56, 58, 92, 119, 159, 160, 166, 186, 319], "cha": [28, 29, 33, 34, 95, 96, 97, 226], "separ": [28, 34, 39, 40, 50, 58, 60, 63, 74, 79, 85, 88, 90, 92, 96, 175, 182, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 250, 251, 275, 289, 290, 291, 314, 320, 326, 331], "dance_directori": [28, 29], "bourree_arm": [28, 29], "my_anim": [28, 29], "animation_file_to_proto": [28, 29, 34, 90, 95, 96, 97], "packag": [28, 29, 55, 58, 61, 63, 74, 76, 83, 84, 87, 89, 90, 92, 164, 222, 224, 227, 250, 253, 271, 274, 282, 294, 298, 310, 320, 324, 333, 338], "output": [28, 38, 48, 49, 52, 53, 55, 58, 61, 63, 67, 77, 81, 83, 84, 85, 86, 87, 88, 89, 90, 92, 110, 112, 117, 119, 137, 138, 150, 220, 234, 250, 251, 271, 272, 282, 285, 297, 298, 312, 313, 315, 320, 321, 326], "filenam": [28, 39, 41, 63, 81, 82, 90, 92, 97, 110, 115, 137, 182, 185, 189, 193, 248, 272, 311, 319], "referenc": [28, 29, 39, 41, 58, 61, 67, 89, 90, 92, 135, 149, 213, 232, 274], "underscor": [28, 63, 90, 92], "word": [28, 74, 142], "capit": [28, 69, 318, 319], "blank": [28, 90, 92, 135], "tab": [28, 30, 32, 33, 35, 37, 63, 71, 72, 79, 83, 244, 296, 311, 320, 335], "widget": [28, 52, 58, 92], "frequenc": [28, 30, 32, 33, 47, 67, 92, 156, 160, 161, 173, 227, 272, 282], "slice": [28, 35, 36, 92, 97], "\u00bc": [28, 34], "beat": [28, 29, 34, 36, 92], "bpm": [28, 34, 92], "neutral": [28, 33, 35, 36, 92], "track1": 28, "track_n": 28, "mandatori": 28, "nomin": [28, 36, 56, 61, 90, 92, 161, 291], "stretch": [28, 30, 36, 92], "truncat": [28, 82, 92, 97, 209], "shorten": [28, 92], "display_rgb": 28, "green": [28, 80, 85, 88, 92, 270, 283, 287, 298, 318], "255": [28, 36, 60, 84, 85, 92, 186, 318], "hz": [28, 47, 85, 92, 161, 173], "retime_to_integer_slic": [28, 92], "rescal": [28, 92], "absent": [28, 92], "pad": [28, 30, 35, 37, 90, 92, 338], "neutral_start": [28, 92], "footprint": [28, 36, 46, 89, 90, 92, 161], "precise_step": [28, 92], "expens": [28, 52, 74, 92], "balanc": [28, 35, 36, 90, 92, 161, 178], "timing_adjust": [28, 90, 92], "track_swing_trajectori": [28, 92], "swing": [28, 35, 36, 66, 90, 92], "liftoff": [28, 34, 35, 36, 92], "touchdown": [28, 34, 36, 92], "arm_playback": [28, 92], "jointspac": [28, 92], "workspace_dance_fram": 28, "danc": [28, 29, 32, 33, 34, 36, 37, 89, 90, 92, 97, 331], "arm_requir": [28, 92], "arm_prohibit": [28, 92], "no_loop": [28, 92], "greater": [28, 72, 76, 92, 137, 326], "starts_sit": [28, 92], "custom_gait_cycl": [28, 90, 92], "gait": [28, 36, 90, 92], "style": [28, 35, 36, 42, 73, 74, 92, 93, 299], "panel": [28, 35, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290, 314], "coincid": [28, 92], "animateparam": 28, "minimum": [28, 30, 34, 36, 40, 54, 57, 82, 85, 90, 92, 137, 166, 170, 272], "parameter_nam": 28, "minimum_valu": 28, "default_valu": [28, 57, 92, 166], "maximum_valu": 28, "predefin": [28, 29, 30, 57, 92, 326], "multipli": [28, 46, 86, 92, 169], "offset_slic": [28, 92], "body_entry_slic": [28, 92], "spend": [28, 36, 82], "transit": [28, 30, 34, 54, 66, 90, 92, 93, 117, 161, 270], "smoothli": [28, 36, 90, 92], "body_exit_slic": [28, 92], "translation_multipli": [28, 92], "rotation_multipli": [28, 92], "roll": [28, 36, 46, 54, 60, 61, 89, 90, 92, 150, 161, 208, 258, 338], "pitch": [28, 46, 60, 89, 90, 92, 150, 208, 338], "body_tracking_stiff": [28, 92], "arm_entry_slic": [28, 92], "shoulder_0_offset": [28, 92], "sh0": [28, 36, 49, 92, 161], "shoulder_1_offset": [28, 92], "sh1": [28, 92, 161], "elbow_0_offset": [28, 92], "el0": [28, 92, 161], "elbow_1_offset": [28, 92], "el1": [28, 49, 92, 161], "wrist_0_offset": [28, 92], "wr0": [28, 36, 49, 92, 161], "wrist_1_offset": [28, 92], "wr1": [28, 49, 90, 92, 161], "gripper_offset": [28, 92], "gripper_multipli": [28, 92], "gripper_strength_fract": [28, 92], "fraction": [28, 35, 36, 81, 92, 150, 161, 209], "strength": [28, 49, 87, 90, 92, 249], "arm_dance_frame_id": [28, 92], "actual": [28, 31, 34, 54, 77, 78, 88, 90, 92, 97, 119, 129, 283, 334], "parser": [28, 34, 77, 78, 81, 82, 84, 85, 87, 90, 112, 131, 185], "mutual": [28, 36, 42, 92], "exclus": [28, 36, 42, 92, 218, 222], "arm_joint": 28, "shoulder0": 28, "shoulder1": 28, "elbow0": 28, "elbow1": 28, "wrist0": 28, "wrist1": 28, "hand_po": 28, "hand_quat_wxyz": 28, "quat": [28, 86, 90, 150, 283], "hand_quat_xyzw": 28, "hand_euler_rpi": 28, "body_po": [28, 92], "com_po": [28, 92], "body_quat_wxyz": 28, "body_quat_xyzw": 28, "body_euler_rpi": 28, "dimens": [28, 36, 46, 56, 77, 78, 84, 90, 92, 137, 194, 202, 249], "leg_joint": 28, "fr": [28, 35, 92], "hr": [28, 35, 67, 92, 308], "foot_po": [28, 92], "customiz": [29, 30], "predetermin": [29, 30, 90, 166], "knob": [29, 57, 90, 92], "scenario": [29, 34, 47, 54, 90, 92, 268], "exact": [29, 35, 44, 46, 92], "intro": 29, "autodesk": [29, 90], "maya": [29, 90], "kaleidoscop": 29, "fine": [29, 90, 92, 298], "grain": [29, 90, 92], "keyfram": [29, 90, 92], "dens": [29, 58], "spars": [29, 58, 90, 92, 285], "argument": [29, 31, 37, 39, 53, 55, 58, 63, 71, 72, 77, 78, 79, 81, 82, 84, 85, 86, 87, 88, 89, 90, 92, 96, 97, 106, 112, 113, 117, 119, 121, 126, 127, 138, 142, 153, 154, 155, 161, 166, 170, 185, 218, 222, 227, 229, 235, 248, 250, 251, 252, 255, 273, 274, 275, 277, 279, 282, 283, 284, 286, 297, 300, 309, 312, 315, 318, 320, 321, 322, 323, 326, 327, 331, 334, 338], "dialog": [29, 82], "termin": [29, 58, 72, 83, 84, 85, 88, 89, 90, 92, 102, 112, 127, 147, 165, 220, 222, 224, 227, 244, 284, 292, 294, 296, 315, 329, 335], "button": [29, 30, 32, 33, 35, 37, 40, 54, 57, 63, 67, 71, 80, 88, 90, 92, 126, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 270, 289, 290, 296, 298, 314, 318, 321, 335, 338], "startrecordingst": [29, 34, 92], "sai": [29, 33, 34, 44, 46, 54, 57, 89, 90, 92, 161, 211], "stoprecordingst": [29, 34, 92], "downloadrobotstatelog": [29, 34, 92], "compress": [29, 56, 90, 178, 271, 303, 320], "npz": 29, "dictionari": [29, 46, 92, 96, 112, 161, 164, 167, 218, 220, 222, 224], "choreographystatelog": [29, 34, 97], "txt": [29, 76, 79, 87, 88, 90, 92, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "login": [30, 31, 60, 69, 77, 87, 90, 92, 106, 222], "linux": [30, 31, 61, 63, 69, 77, 79, 88, 89, 248, 250, 252, 253, 270, 274, 294, 320, 333], "caution": [30, 32, 33, 36, 90, 92], "induc": [30, 32, 33], "unpredict": [30, 32, 33], "unstabl": [30, 32, 33, 35, 92], "increas": [30, 32, 33, 35, 53, 54, 66, 79, 85, 88, 89, 90, 92, 142, 326], "collis": [30, 32, 33, 35, 47, 90, 92], "hazard": [30, 32, 33, 90, 92], "precaut": [30, 32, 33], "bystand": [30, 32, 33], "adequ": [30, 32, 33, 67, 319], "experi": [30, 32, 33, 56, 89, 90, 92, 112, 147, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 288, 289, 290, 292, 313, 320, 326, 338], "epilept": [30, 32, 33], "seizur": [30, 32, 33], "blackout": [30, 32, 33, 54, 218, 222], "v": [30, 32, 33, 35, 37, 61, 85, 88, 90, 92, 137, 150, 250, 251, 296, 297, 298, 314, 318, 321, 335], "symptom": [30, 32, 33], "histori": [30, 32, 33, 92], "photosensit": [30, 32, 33], "epilepsi": [30, 32, 33], "exposur": [30, 32, 33, 58, 77, 90, 92, 138, 178], "volum": [30, 61, 62, 79, 87, 169, 185], "prolong": 30, "buzzer": [30, 90], "harm": 30, "product": [30, 42, 54, 61, 86, 90, 92, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 318], "consequ": [30, 57], "smaller": [30, 35, 36, 63, 85, 90, 92], "energet": 30, "checkbox": [30, 33, 57], "welcom": 30, "highli": [30, 55, 88, 282], "comfort": 30, "stock": 30, "categori": [30, 34, 45, 294], "reloc": [30, 90], "shrunk": 30, "test": [30, 35, 53, 69, 74, 76, 81, 82, 83, 84, 85, 86, 87, 90, 92, 111, 142, 144, 216, 227, 229, 234, 254, 261, 262, 277, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 320, 338], "extrem": [30, 56, 90, 92], "song": [30, 36, 92], "tap": [30, 36, 37, 90, 92], "row": [30, 39, 58, 77, 85, 92, 138], "toggl": [30, 33, 61, 90, 92, 251, 265, 274], "statist": [30, 92], "hostnam": [30, 31, 37, 42, 55, 63, 77, 78, 82, 84, 85, 88, 92, 110, 115, 185, 218, 222, 250, 252, 273, 283, 297, 298, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 315, 318, 320, 321, 326, 338], "unselect": 30, "stat": [30, 61], "audio": [30, 34, 90, 168, 273, 324], "simultan": [30, 34, 35, 90, 92, 228], "modular": 30, "divid": [30, 34, 41, 92], "thin": [30, 74], "dash": 30, "conveni": [30, 31, 77, 83, 84, 88, 92, 138, 160, 163, 185, 284, 298, 312], "pace": [30, 90, 92], "bar": [30, 37, 69, 92, 216, 318, 320], "delin": 30, "thick": 30, "4th": 30, "signatur": [30, 54, 58, 90, 92, 117, 138, 219, 220], "16th": [30, 34], "quarter": 30, "thicker": 30, "man": [30, 36, 54, 84, 92], "portrai": 30, "grid": [30, 46, 90, 92, 98, 112, 334], "rectangl": [30, 36, 82, 90, 92, 166], "extent": [30, 66, 81, 92], "arrai": [30, 36, 81, 84, 85, 90, 92, 111, 133, 137, 138, 150, 158, 186, 194, 201, 202, 283, 286], "arrow": [30, 63, 80, 84, 92, 287, 298, 321], "beneath": [30, 81, 92], "append": [30, 42, 51, 60, 77, 79, 81, 84, 85, 87, 90, 92, 97, 115, 129, 135, 137, 142, 218, 222, 320, 337], "hover": 30, "ghost": 30, "hit": [30, 32, 90, 92, 313], "esc": [30, 314], "onto": [30, 35, 36, 56, 63, 64, 71, 81, 84, 88, 90, 92, 108, 154, 161, 211, 227, 258, 319], "resiz": [30, 77, 90, 92, 137], "cursor": [30, 35], "enforc": [30, 34, 92], "numer": [30, 34, 42, 57, 90, 92, 113, 297, 321], "pane": 30, "scroll": [30, 33, 63, 298], "wheel": [30, 31, 79, 87, 90], "deselect": 30, "clone": [30, 88, 90], "backspac": 30, "clip": [30, 92], "bottom": [30, 33, 36, 63, 69, 87, 92, 227, 283, 315, 321], "onlin": [30, 52, 82, 83, 84, 318], "metronom": 30, "bmp": 30, "schedul": [30, 90, 218, 222, 265, 308], "drawn": [30, 56, 85, 92, 166, 186, 234, 283, 284], "cancel": [30, 33, 37, 40, 46, 58, 78, 90, 92, 113, 114, 115, 116, 117, 126, 127, 135, 161, 180], "great": [30, 54, 57, 82, 227], "delai": [30, 34, 53, 54, 90, 92, 141, 218, 222, 277, 326], "delay_in_second": 30, "proper": [30, 43, 51, 54, 67, 88, 90], "sprawl": [30, 34, 36], "synch": 30, "emerg": [30, 37, 88, 126], "ctrl": [30, 69, 82, 315, 320, 322, 327], "easili": [30, 31, 33, 52, 54, 58, 60, 61, 63, 64, 69, 86, 88, 90, 92, 119, 162, 273, 283, 297, 320, 321], "l": [30, 37, 63, 72, 83, 84, 85, 228, 296, 314, 335], "hotkei": [30, 37], "tabl": [30, 37, 41, 49, 61, 69, 83, 98, 210, 225], "p": [30, 47, 61, 62, 63, 67, 72, 82, 83, 84, 85, 86, 87, 92, 244, 249, 296, 297, 298, 312, 314, 335], "shift": [30, 35, 36, 90, 92, 177], "nudg": 30, "expand": [30, 42, 43, 50, 63, 87], "shrink": 30, "k": [30, 37, 47, 81, 92, 184], "sidestep": 30, "d": [30, 35, 37, 57, 61, 63, 67, 69, 72, 82, 84, 85, 87, 88, 92, 247, 252, 255, 296, 297, 298, 311, 313, 315, 321, 338], "q": [30, 37, 47, 150, 244, 284, 296], "h": [30, 42, 72, 209, 244, 247, 252, 255, 284], "iip": 30, "verbos": [30, 77, 78, 85, 86, 88, 89, 133, 180, 185, 295, 329], "ob": [30, 37], "repeatedli": [30, 31, 45], "hn1": 30, "un1": 30, "pw1": 30, "hn2": 30, "un2": 30, "pw2": 30, "hn3": 30, "un3": 30, "pw3": 30, "parameter": [31, 56, 57, 63, 92], "microsoft": 31, "ubuntu": [31, 61, 63, 69, 72, 75, 82, 88, 90, 326, 338], "04": [31, 42, 61, 69, 75, 88, 315, 338], "desktop": [31, 61, 69, 72, 90], "grant": [31, 60, 142, 319], "sudo": [31, 61, 62, 63, 69, 71, 72, 79, 84, 87, 227, 249, 250, 251, 252, 270, 271, 297, 298, 312, 320, 321, 329, 338], "chmod": [31, 62, 71, 87, 319], "flag": [31, 57, 61, 89, 90, 92, 185, 297, 300, 320, 321], "preced": [31, 36, 92], "mind": [32, 45, 54], "procedur": [32, 36, 53, 69, 89, 92, 127], "plenti": [32, 34], "els": [32, 36, 55, 61, 77, 84, 85, 86, 87, 90, 92, 135, 338], "preview": [32, 37, 277, 318], "upper": [33, 81, 92, 150, 283], "dropdown": 33, "viewabl": 33, "swipe": 33, "minu": [33, 90], "symbol": [33, 35, 53], "partwai": 33, "stabl": [33, 46, 61, 294], "seat": [33, 36, 89], "gestur": [33, 36], "intent": [33, 54, 90, 176], "memori": [33, 63, 83, 87, 90, 92, 97, 118, 174, 182], "hamburg": [33, 80, 84, 86, 298, 315, 321], "unsav": 33, "playabl": [33, 34, 92], "trash": [33, 63], "focus": [34, 58], "seen": [34, 36, 53, 61, 71, 83, 85, 89, 90, 92, 142, 144, 269, 277, 283, 296, 316, 319], "youtub": 34, "bruno": 34, "mar": [34, 83], "uptown": 34, "funk": 34, "contour": 34, "love": [34, 92], "me": [34, 211], "alter": [34, 54, 92], "traction": [34, 36], "incompat": [34, 88, 92, 135, 317], "trial": 34, "Not": [34, 53, 72, 83, 85, 89, 90, 92, 161], "400": [34, 82], "slow": [34, 35, 58, 83, 92, 318, 320], "250": [34, 35], "450": 34, "timelin": [34, 35, 42, 92], "jump": [34, 69, 77, 78, 85, 92], "nonsens": 34, "kneel": [34, 92], "clap": [34, 36, 92], "violat": [34, 92], "highlight": [34, 225], "moveparam": [34, 90], "bound": [34, 39, 52, 56, 77, 83, 84, 85, 86, 90, 274, 297, 326, 337], "moveinfo": [34, 90, 96], "listallmov": [34, 92, 97], "uploadchoreographi": [34, 92], "feasibl": [34, 92], "non_strict_pars": [34, 92, 97], "listallsequ": [34, 90, 92], "choreographystatu": [34, 35, 90, 92], "chorographycommand": 34, "command_limit": 34, "choreographycommand": [34, 35, 90, 92], "movecommand": [34, 97], "move_typ": [34, 92], "move_id": [34, 92], "recipi": 34, "savesequ": [34, 90, 92], "categor": 34, "wih": 34, "modifychoreographyinfo": [34, 90, 92], "deletesequ": [34, 90, 92], "delet": [34, 42, 56, 82, 83, 86, 90, 92, 97, 169, 174, 182, 186, 218, 222, 227, 255, 309, 310, 324, 332, 336], "clearallsequencefil": [34, 90, 92], "getchoreographysequ": [34, 90, 92], "Its": [34, 54, 90, 185], "animationkeyfram": 34, "uploadanimatedmov": [34, 92, 97], "overwrit": [34, 82, 92, 135, 159, 218, 222], "choreographytimeadjust": [34, 90, 92], "start_tim": [34, 85, 92, 110], "override_start_tim": [34, 92], "validity_tim": [34, 92, 97], "acceptable_time_differ": [34, 92], "purpos": [34, 51, 56, 60, 61, 63, 78, 82, 90, 92, 111, 117, 216, 218, 222, 251, 283, 285, 301, 320], "rare": [34, 123], "isol": 34, "upload_choreographed_sequ": [34, 331], "listallmovesrespons": 34, "min": [34, 41, 57, 61, 84, 85, 90, 92, 96, 159, 298, 299], "entranc": [34, 90], "short": [34, 36, 44, 53, 56, 58, 63, 67, 89, 90, 92, 227, 255, 284, 298], "arbitrarili": [34, 45, 283], "marker": [34, 92, 274, 296], "grei": 34, "int32": [34, 84, 85, 92, 177], "oneof": [34, 90, 92, 161, 216], "none": [34, 44, 53, 58, 77, 81, 85, 86, 89, 90, 92, 97, 99, 103, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 123, 124, 126, 127, 128, 129, 135, 137, 138, 141, 142, 143, 144, 147, 149, 150, 151, 152, 154, 155, 156, 158, 159, 160, 161, 163, 164, 165, 166, 167, 169, 173, 174, 176, 177, 178, 180, 181, 183, 185, 186, 189, 193, 194, 200, 202, 203, 205, 206, 209, 211, 213, 214, 216, 218, 220, 222, 224, 273, 317, 328], "bool": [34, 92, 97, 100, 102, 103, 107, 119, 121, 123, 128, 129, 130, 137, 138, 140, 141, 142, 151, 154, 160, 163, 165, 166, 180, 181, 185, 209, 216, 218, 220, 222], "thrown": [34, 90, 117, 160, 218, 220, 222, 224, 282], "greatli": 35, "steer": [35, 36, 92], "occupi": [35, 92], "cycle_dur": [35, 92], "denot": [35, 46, 92, 127, 158], "reflect": [35, 51, 90, 92], "cyclic": 35, "xbox": [35, 37, 90, 225, 268], "customgaitcommandlimit": 35, "max_veloc": [35, 92], "max_yaw_r": [35, 92], "hildebrand": 35, "wikipedia": [35, 92], "air": [35, 92], "slider": [35, 36, 57], "pulldown": 35, "reset": [35, 44, 50, 62, 63, 67, 87, 90, 92, 123, 127, 156, 176, 177, 261, 287, 298, 312, 319, 334], "prefix": [35, 46, 55, 74, 92, 119, 137, 159, 164, 165, 319], "impact": [35, 53, 56, 64, 66, 92], "fewer": [35, 90, 92], "faster": [35, 36, 90, 92, 297, 318, 321, 326], "gradual": 35, "cadenc": [35, 92, 142], "prefer": [35, 43, 57, 58, 74, 89, 90, 92, 255, 308, 320], "duti": [35, 251], "factor": [35, 92, 137, 150], "touchdown_phas": [35, 92], "liftoff_phas": [35, 92], "shorter": [35, 90, 92], "150": 35, "300m": 35, "500m": 35, "diagon": [35, 92], "800m": 35, "averag": [35, 67, 83, 92], "stabil": [35, 88, 90, 92], "decreas": [35, 92, 326], "65": [35, 48, 90], "challeng": [35, 44, 90, 92, 126], "acceleration_sc": [35, 92], "two_leg_sw": 35, "rad": [35, 36, 48, 60, 92, 161], "com_height": [35, 36, 92], "body_translation_offset": [35, 92], "postur": [35, 36, 92], "body_rotation_offset": [35, 92], "low_speed_body_fract": [35, 92], "stance_shap": [35, 92], "front_wider_than_hind": [35, 92], "lt": [35, 63, 75, 82, 88, 90, 92], "gt": [35, 63, 82, 92], "left_longer_than_right": [35, 92], "farther": [35, 36, 92, 117], "apart": [35, 36, 51, 54, 57, 89, 92], "left_forward_of_right": [35, 92], "general_swing_param": [35, 92], "use_leg_swing_param": 35, "leg_swing_param": 35, "swingparam": 35, "vertical_spe": [35, 92], "vertical_acceler": [35, 92], "liftoff_spe": [35, 92], "overlay_outsid": [35, 92], "overlay_forward": [35, 92], "low_speed_fract": [35, 92], "mu": [35, 92], "timing_stiff": [35, 92], "flight": [35, 36, 92], "step_position_stiff": [35, 36, 92], "shape": [35, 36, 64, 84, 92], "enable_perception_obstacle_avoid": [35, 92], "signific": [35, 41, 53, 61, 66, 77, 90, 92, 283], "obstacle_avoidance_pad": [35, 92], "enable_perception_terrain_height": [35, 92], "enable_perception_step_plac": [35, 92], "bad": [35, 42, 53, 74, 90, 92, 115, 126, 142, 165, 282], "maximum_stumble_dist": [35, 92], "stumbl": [35, 92], "stand_in_plac": [35, 92], "standard_final_st": [35, 92], "rectangular": [35, 57, 90, 92, 334], "trip_sensit": [35, 92], "trip": [35, 92, 181, 330], "aggress": [35, 90, 92], "costum": [35, 92], "slower": [36, 58, 92], "return_to_start_pos": [36, 92], "sharp": [36, 90, 92], "steadi": [36, 54, 92, 229, 325], "entry_slic": [36, 92], "exit_slic": [36, 92], "forth": [36, 90, 92], "stationari": [36, 63, 90, 274], "profil": 36, "pronounc": [36, 92], "exagger": [36, 92], "closer": [36, 90, 92], "sway_style_standard": [36, 92], "hold_zero_ax": [36, 92], "whichev": [36, 47, 51, 54, 92], "ax": [36, 46, 81, 92, 283, 287], "random": [36, 42, 89, 90, 92, 252, 315, 318, 320], "chaotic": 36, "amplitud": [36, 92, 150], "speed_vari": [36, 92], "ratio": [36, 48, 77, 81, 83, 90, 92, 137, 251], "slowest": 36, "fastest": [36, 69], "variat": [36, 92], "num_speed_ti": [36, 92], "tier": [36, 92], "tier_vari": [36, 92], "fastest_ti": 36, "robutt": [36, 92], "butt": [36, 92], "circl": [36, 89, 90, 228], "radiu": [36, 65, 90, 92, 186], "beats_per_circl": [36, 92], "number_of_circl": [36, 92], "Will": [36, 92, 126, 135, 159, 258], "clockwis": [36, 92, 234], "starting_angl": [36, 92], "spiral": 36, "outward": 36, "obviou": [36, 45, 92], "fidget": 36, "idl": 36, "breath": 36, "stamp": [36, 90, 92, 281], "preset": [36, 84, 90, 92, 311, 315, 319], "convei": [36, 92], "emot": 36, "min_gaze_pitch": [36, 92], "max_gaze_pitch": [36, 92], "gaze_mean_period": [36, 92], "frequent": [36, 63, 69, 90, 92], "gaze_center_cfp": [36, 92], "gaze": [36, 90, 92, 161, 259], "shift_mean_period": [36, 92], "shift_max_transition_tim": [36, 92], "breath_min_z": [36, 92], "breath_max_z": [36, 92], "leg_gesture_mean_period": [36, 92], "gaze_slew_r": [36, 92], "gaze_position_generation_gain": [36, 92], "brownian": 36, "gaze_roll_generation_gain": [36, 92], "second_foot": [36, 92], "leg_no_leg": [36, 92], "midwai": 36, "touch_offset": [36, 92], "mirror_x": [36, 92], "mirror_i": [36, 92], "opposit": [36, 54, 92], "swing_waypoint": [36, 92], "waypoint_dwel": [36, 92], "spent": [36, 92], "swing_height": [36, 92], "liftoff_veloc": [36, 92], "touchdown_veloc": [36, 92], "absolute_posit": [36, 92], "absolut": [36, 57, 90, 92, 151, 211, 284, 331], "absolute_yaw": [36, 92], "relative_posit": [36, 90, 92], "relative_yaw": [36, 90, 92], "duty_cycl": [36, 92], "link_to_next": [36, 92], "yaw_rat": [36, 92], "stand_tim": [36, 92], "2step": 36, "motion_is_absolut": [36, 92], "absolute_mot": [36, 92], "yaw_is_absolut": [36, 92], "swing_veloc": [36, 92], "swing_slic": [36, 92], "ambl": [36, 90, 92, 338], "stance_width": [36, 92], "stance_length": [36, 92], "pre_move_cycl": [36, 92], "spread": [36, 92], "slide": [36, 47, 90, 272], "speed_multipli": [36, 92], "tippi": 36, "ballet": 36, "mirror": [36, 92], "tempo": 36, "translation_is_absolut": [36, 92], "absolute_transl": [36, 92], "flight_slic": [36, 92], "land": [36, 69, 90], "split_fract": [36, 92], "split": [36, 41, 51, 63, 83, 85, 90, 92, 113, 120, 194], "lead_leg_pair": [36, 92], "vector": [36, 46, 85, 86, 89, 90, 150, 158, 161, 194, 202, 274, 283], "prep": [36, 90, 92, 124], "smoother": 36, "primarili": [36, 42, 92], "hip_x": [36, 92], "hip_i": [36, 92], "eas": [36, 45, 57, 319], "move2": 36, "left_hip_x": [36, 92], "left_hip_i": [36, 92], "left_kne": [36, 92], "right_hip_x": [36, 92], "right_hip_i": [36, 92], "right_kne": [36, 92], "flat_bodi": [36, 92, 150], "clap_dist": [36, 92], "xz": [36, 60, 92], "sagitt": 36, "centerlin": 36, "deploi": [36, 47, 53, 54, 60, 61, 62, 63, 71, 76, 77, 85, 87, 88, 90, 92, 320], "shoulder": [36, 92], "exclud": [36, 92, 151], "increment": [36, 50, 51, 92, 142, 151], "figure8": 36, "beats_per_cycl": [36, 92], "frame_id": [36, 92], "don": [36, 57, 72, 77, 82, 83, 84, 85, 86, 87, 88, 92, 115, 159, 181, 211, 271, 284], "fiducial_numb": [36, 92], "accord": [36, 54, 90, 92, 117, 229], "include_each_leg": 36, "compens": [36, 90, 92], "chicken": [36, 92], "oscil": 36, "bob_magnitud": [36, 92], "fade": 36, "left_color": [36, 92], "right_same_as_left": [36, 92], "right_color": [36, 92], "fade_in_slic": [36, 92], "brighten": 36, "fade_out_slic": [36, 92], "darken": 36, "top_color": [36, 92], "topmost": 36, "bottom_color": [36, 92], "bottommost": 36, "dim": 36, "top_left": [36, 92], "upper_mid_left": [36, 92], "lower_mid_left": [36, 92], "bottom_left": [36, 92], "top_right": [36, 92], "upper_mid_right": [36, 92], "lower_mid_right": [36, 92], "ccolor": 36, "bottom_right": [36, 92], "rippl": 36, "secondari": [36, 56, 92], "light_sid": [36, 92], "increment_slic": [36, 92], "front_center_color": [36, 92], "all_same_as_cent": [36, 92], "front_left_color": [36, 92], "front_right_color": [36, 92], "back_left_color": [36, 92], "back_right_color": [36, 92], "status_left_color": [36, 92], "status_right_color": [36, 92], "half": [36, 92], "semiton": 36, "octav": [36, 92], "fallen": [37, 92, 161], "wasd": [37, 88, 90, 244, 259, 268, 284, 296, 314, 335], "countdown": 37, "soon": [37, 92], "dist_in_met": 37, "gamepad": 37, "gui": [37, 60, 83, 88, 90, 92, 314], "bumper": 37, "mimic": 37, "keypress": 37, "strafe": [37, 296, 314, 335], "keystrok": 37, "retriev": [38, 40, 42, 45, 55, 56, 58, 63, 69, 78, 90, 92, 115, 122, 124, 138, 142, 147, 164, 169, 171, 172, 174, 176, 177, 179, 185, 193, 218, 222, 252, 254, 277, 282, 301, 312, 322, 324], "acquisit": [38, 43, 46, 56, 57, 63, 76, 77, 79, 80, 81, 92, 97, 98, 112, 225, 297, 312, 318], "bddf": [38, 90, 98, 187, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 254, 264], "thermal": [38, 54, 57, 90], "downloaded_fil": 39, "teleop_2020": 39, "29t183020z": 39, "spotcam": [39, 41, 92, 98], "pano": [39, 90, 92, 324], "jpg": [39, 77, 82, 83, 84, 89, 137, 271, 324], "ir": [39, 41, 92, 98, 170, 176, 261], "nodata": 39, "2020": [39, 42, 75, 88, 89, 247, 252, 255, 315], "29t185610z_inspect": 39, "group_nam": [39, 40, 92, 114, 115, 214], "teleop_": 39, "teleop": [39, 40, 58, 92, 318], "action_id": [39, 58, 78, 81, 92, 116, 118], "member": [39, 90, 92, 126, 160], "element": [39, 41, 46, 57, 61, 90, 113, 166, 194, 218, 222, 295, 300], "acquiredatarequest": [39, 40, 90, 114], "dataacquisitioncli": [39, 90, 114, 115], "acquire_data": [39, 114], "some_image_channel": 39, "data_id": [39, 58, 78, 81, 92, 117, 118], "another_channel": 39, "my_metadata_channel": 39, "29t18": 39, "27": [39, 48, 87, 89, 297, 315], "786897121z": 39, "action_nam": [39, 40, 81, 92, 114, 115, 220], "panoram": [39, 90], "data_nam": [39, 58, 92], "differenti": [39, 57, 74, 90, 92], "robot_kinemat": [39, 92], "velocity_of_body_in_vis": [39, 92], "0012627621181309223": 39, "29t185610z": 39, "custom_metadata": 39, "laptop1": 39, "flatten": [39, 150], "plugin": [40, 43, 57, 63, 76, 77, 79, 80, 81, 92, 98, 111, 114, 167, 234, 262, 270, 322, 324], "screenshot": [40, 63, 71, 298], "incorrectli": [40, 74, 90, 92, 100, 106, 117, 160], "outcom": [40, 90], "folder": [40, 52, 63, 77, 78, 79, 81, 82, 83, 84, 85, 87, 115, 227, 252, 283, 284, 294, 295, 303, 310, 312, 329, 338], "zip": [40, 42, 63, 79, 83, 88, 90, 218, 252, 297], "json": [40, 55, 58, 62, 63, 78, 81, 87, 90, 92, 114, 116, 220, 224, 248, 252, 271, 297, 310, 324], "architect": 40, "networkcomputebridg": [40, 152], "farm": 40, "databas": [40, 82, 92, 174], "getserviceinfo": [40, 58, 92, 117], "ping": [40, 69, 90, 92, 111], "worker": [40, 52, 84, 90, 92, 100, 152, 252, 297, 298, 321], "listimagesourc": [40, 56, 58, 92, 138], "listavailablemodel": [40, 52, 57, 84, 92], "acquiredata": [40, 92, 114, 115, 116, 117], "break": [40, 51, 82, 83, 84, 85, 86, 89, 92], "getimag": [40, 56, 57, 58, 77, 90, 92, 138, 318], "networkcomput": [40, 52, 84, 90, 92], "acquireplugindata": [40, 58, 92, 117], "getstatu": [40, 58, 90, 92, 115, 117], "cancelacquisit": [40, 92, 117], "getlivedata": [40, 90, 92, 112, 114, 116, 117, 252, 253], "daq": [40, 42, 79, 80, 90, 92, 118, 167, 298, 315], "dataacquisitionpluginservic": [40, 58, 78, 90, 116, 117, 252, 329], "versatil": [41, 59], "jpeg": [41, 56, 58, 77, 84, 90, 92, 137, 138, 272, 277, 324], "analyz": [41, 92, 152], "327": 41, "680": 41, "640x512": 41, "decikelvin": 41, "kelvin": [41, 92, 299], "v3": [41, 88, 89, 90, 272], "throw": [41, 85, 86, 89, 90, 92, 138, 161, 180, 216, 318], "nativ": [41, 90], "grayscal": [41, 56, 84, 85, 90, 138], "lookup": [41, 53, 92, 119, 135], "matplotlib": [41, 81, 90, 283], "promin": 41, "visibl": [41, 87, 90, 92, 296, 299, 318, 324], "hotter": [41, 57], "opencv": [41, 58, 63, 77, 79, 82, 83, 85, 87, 90, 92, 320], "pyplot": [41, 81, 333], "plt": 41, "numpi": [41, 77, 81, 82, 84, 85, 87, 90, 93, 137, 138, 150, 285, 286, 287], "512": [41, 92], "640": [41, 82], "rb": [41, 81, 338], "f": [41, 55, 57, 61, 62, 63, 69, 79, 81, 87, 92, 271, 296, 297, 298, 312, 314, 320, 321, 335], "processed_data": 41, "frombuff": [41, 82, 84], "dtype": [41, 82, 84, 85], "u2": 41, "valueerror": [41, 77, 113, 114, 116, 142, 166, 185, 189], "media": [41, 92, 168, 324], "newlin": 41, "split_buff": 41, "splitlin": 41, "len": [41, 46, 83, 84, 85, 92, 177], "reshap": [41, 84, 85], "imshow": [41, 81, 85], "cm": [41, 56, 92], "inferno": [41, 92], "colormap": [41, 90, 170], "plasma": 41, "viridi": 41, "ocean": 41, "cubehelix": 41, "rainbow": 41, "alloc": [42, 92], "gigabyt": 42, "storag": [42, 61, 76, 90, 92, 117, 142, 182, 248, 255], "exceed": [42, 85, 89, 90, 92, 181], "oldest": [42, 92], "backend": [42, 127, 283, 310], "recordtextmessag": [42, 92], "notabl": [42, 56], "did": [42, 81, 83, 84, 86, 87, 89, 90, 92, 126, 127, 141, 142, 151, 152, 156, 160, 211, 289, 290, 315], "recordoperatorcom": [42, 92], "diari": 42, "enumer": [42, 90, 126, 142, 212, 282], "quasi": [42, 92], "recordev": [42, 50, 90], "schema": [42, 92, 119, 216], "post": [42, 54, 80, 83, 90, 92, 218, 222, 260, 262, 271, 296, 297], "registersignalschema": [42, 92], "recordsignaltick": [42, 92], "type_id": [42, 92, 119], "opaqu": 42, "recorddatablob": [42, 92], "spotcheck": [42, 90, 92, 180], "io": [42, 82, 84, 86, 87, 89, 90, 251, 252, 253, 267, 320], "strip": [42, 53, 92, 119], "from_sec": 42, "from_nsec": 42, "to_sec": 42, "to_nsec": 42, "exce": [42, 67, 92, 151, 159], "3600": 42, "403": 42, "event_level_min": 42, "epoch": [42, 51, 89, 92, 142, 160, 181, 194, 202, 205, 209, 218, 222, 247, 255], "nanosecond": [42, 181, 209, 247, 255], "filter": [42, 46, 56, 85, 90, 119, 137, 185, 186, 252, 281, 285], "schema_nam": [42, 92, 119], "schema_sourc": 42, "grpc_servic": [42, 110], "dataacquisitionobject": 42, "associatedmetadata": [42, 58, 78, 81, 117, 118], "bearer": [42, 55], "auth": [42, 53, 55, 60, 89, 90, 98, 154, 185, 252, 253, 319], "curl": [42, 54], "1601524800": 42, "1601611200": 42, "thursdai": [42, 54], "octob": 42, "00": [42, 61, 87, 92, 252, 315], "am": 42, "gmt": 42, "fridai": [42, 54], "j": [42, 92, 286], "cat": [42, 69, 71], "third": [43, 45, 69, 88, 89, 90, 157], "parti": [43, 45, 57, 88, 157, 273], "outlin": [43, 45, 47, 49, 56, 72, 92], "spun": 43, "add_servicer_to_server_fn": [43, 77, 78, 165, 185], "image_service_pb2_grpc": [43, 77], "add_imageserviceservicer_to_serv": [43, 77], "service_servic": [43, 77, 165, 185], "webcamimageservic": 43, "service_runn": [43, 77, 78], "logger": [43, 77, 78, 97, 105, 113, 114, 116, 117, 118, 119, 121, 123, 124, 126, 130, 133, 135, 138, 141, 154, 156, 161, 165, 173, 185, 186, 211, 214, 216], "sigint": [43, 165, 185, 320, 322], "run_until_interrupt": [43, 77, 78, 165, 185], "aliv": [43, 45, 51, 56, 84, 85, 90, 92, 98, 101, 119, 123, 142, 154, 180, 252, 320, 322], "dir_reg_cli": [43, 45, 77, 78, 123], "directoryregistrationcli": [43, 45, 77, 78, 84, 123], "keep_al": [43, 45, 77, 78, 92, 111], "directory_nam": [43, 45, 77, 78, 123, 329], "service_typ": [43, 45, 77, 78, 97, 99, 102, 104, 106, 107, 108, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 134, 135, 136, 137, 139, 140, 141, 142, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 186, 211, 214], "service_author": 43, "service_ip": 43, "service_port": 43, "myriad": 43, "ricoh": [43, 58, 63, 90, 262, 267, 329], "theta": [43, 58, 63, 90, 92, 150, 262, 267, 283, 329], "heartbeat": [44, 45, 92, 123], "earlier": [44, 72, 78, 79, 89, 90, 92, 149], "talk": [44, 53, 57, 82, 90, 92, 113, 228, 231, 233, 235, 237, 238, 239, 240, 241, 242, 243, 244, 289, 315], "parlanc": 44, "settle_then_cut": [44, 56, 90, 92, 126], "cours": [44, 218, 222], "estop_nogui": [44, 88, 227, 270], "setestopconfigrequest": 44, "role": [44, 89, 92, 126], "pdb_root": [44, 89, 126], "65530": 44, "firmwar": [44, 47], "forgotten": [44, 90, 92, 154], "registerestopendpointrequest": 44, "target_endpoint": [44, 92], "new_endpoint": [44, 92], "estopcheckinrequest": 44, "compliment": 44, "estopcheckinrespons": 44, "incorrect_challenge_respons": 44, "aris": [45, 60, 90], "overh": [45, 56], "clearabl": [45, 56, 92], "opt": [45, 57, 61, 77, 78, 79, 87, 90, 92, 151, 252, 298, 318], "behalf": [45, 90], "principl": [45, 89], "laid": [45, 92, 319], "watch": [45, 83, 88, 112, 314], "crash": [45, 62, 63, 90, 92, 176, 226, 323], "pertain": [45, 90, 92], "unnecessari": 45, "pertin": 45, "spam": 45, "regular": [45, 56, 89, 90, 92, 102, 105, 142], "effort": [45, 47], "host_ip": [45, 77, 78, 92, 101, 123, 312], "forev": [45, 82, 84, 92, 97, 100, 173], "1m": [46, 92, 274, 284, 327], "adopt": [46, 97, 113, 114, 116, 118, 119, 121, 124, 135, 156, 186, 211, 214, 252], "notat": 46, "illustr": [46, 47, 64, 87], "rendit": 46, "hip": [46, 66, 90, 92], "graviti": [46, 86, 89, 90, 92, 129, 149, 150, 161], "gpe": [46, 92], "se": [46, 92, 129, 150], "xxx": [46, 209, 320], "frontleft": [46, 92], "fishey": [46, 89, 90, 92, 230, 318, 328], "five": [46, 90, 326], "localgrid": 46, "frame_name_local_grid_data": [46, 92], "soccer": 46, "ball": [46, 49, 52, 92, 229], "vision_tform_soccer_bal": 46, "vision_tform_left_camera": 46, "left_camera_tform_soccer_bal": 46, "invert": [46, 92], "invers": [46, 54, 92, 98, 150, 259], "vision_tform_bodi": [46, 92], "vision_tform_odom": 46, "body_tform_odom": 46, "mathemat": 46, "4x4": [46, 150, 194], "frame_tree_edg": 46, "parentedg": 46, "parent_tform_child": [46, 92, 129], "vision_tform_special_fram": 46, "vec3": [46, 85, 86, 90, 96, 135, 150], "frame_help": [46, 85, 86, 90, 129], "add_edge_to_tre": [46, 129], "vision_frame_nam": [46, 85, 86, 90], "special_fram": 46, "frametreesnapshot": [46, 90, 129, 160], "child_to_parent_edge_map": [46, 92, 161], "world_obj_special_fram": 46, "worldobject": [46, 186], "21": [46, 67, 87, 92, 315], "specialfram": 46, "transforms_snapshot": [46, 85, 86, 92], "acquisition_tim": [46, 92], "mutat": [46, 56, 58, 90, 96, 138, 142, 144, 157, 165, 186, 267, 337], "world_object_cli": [46, 186], "mutate_world_object": [46, 90, 186, 336], "mutation_req": [46, 186], "make_add_world_object_request": 46, "morphologi": 47, "supplement": [47, 90], "lightweight": [47, 63, 90, 92], "gain": [47, 51, 58, 77, 89, 90, 138, 169, 319], "advic": 47, "jointcommand": 47, "updaterequest": 47, "proport": [47, 92], "deriv": [47, 92, 127, 142, 165, 185], "feed": [47, 90, 92, 178], "pdff": 47, "newton": [47, 92], "bandwidth": [47, 90, 92], "unchang": [47, 90], "qd": 47, "furthermor": [47, 90], "runawai": [47, 92], "sooner": [47, 90, 92], "333": 47, "fidel": 47, "train": [47, 52, 82, 84, 86, 87, 296, 326], "polici": [47, 71, 90, 100, 102, 112, 141, 183, 227], "servo": 47, "satur": [47, 92], "robotstateservic": [47, 49, 89, 163], "urdf": [47, 49, 56, 66, 90, 92, 112], "getrobotstatestream": [47, 90, 92], "pipe": 47, "se3veloc": [47, 129, 150, 161], "primer": 47, "fusion": 47, "echo": [47, 53, 62, 90, 92], "squat": [47, 90, 263], "wiggl": [47, 57, 90, 259, 263, 315], "transmiss": 48, "792900": 48, "776718": 48, "37": [48, 87, 315], "165077": 48, "767442": 48, "26": [48, 87, 88, 89, 248, 299], "290108": 48, "39": [48, 83, 126], "435162": 48, "741984": 48, "793369": 48, "41": [48, 315], "690054": 48, "716526": 48, "29": [48, 315], "285997": 48, "928996": 48, "691068": 48, "767536": 48, "151304": 48, "665610": 48, "237423": 48, "48": 48, "356134": 48, "640152": 48, "695168": 48, "542751": 48, "614694": 48, "35": [48, 67], "140221": 48, "52": [48, 92], "710331": 48, "589236": 48, "36": [48, 88], "572052": 48, "54": 48, "858078": 48, "563778": 48, "990086": 48, "985128": 48, "538320": 48, "393730": 48, "59": [48, 87], "090595": 48, "512862": 48, "40": [48, 56, 57, 61, 92, 185, 229], "782406": 48, "61": 48, "173609": 48, "487404": 48, "155487": 48, "233231": 48, "461946": 48, "512371": 48, "268557": 48, "436488": 48, "852371": 48, "67": 48, "278557": 48, "411030": 48, "174873": 48, "69": 48, "262310": 48, "385572": 48, "47": 48, "479156": 48, "218735": 48, "360114": 48, "764549": 48, "73": 48, "146824": 48, "334656": 48, "030334": 48, "75": [48, 77, 85, 86, 92, 137], "045502": 48, "309198": 48, "51": [48, 49], "275761": 48, "76": [48, 299], "913641": 48, "283740": 48, "500103": 48, "78": 48, "750154": 48, "258282": 48, "53": [48, 87, 88], "702587": 48, "80": [48, 60, 63, 69, 71, 72, 76, 82, 84, 85, 86, 87, 88, 89, 164, 227, 273, 315, 318], "553881": 48, "232824": 48, "882442": 48, "82": 48, "323664": 48, "207366": 48, "038860": 48, "84": 48, "058290": 48, "181908": 48, "57": [48, 88], "171028": 48, "85": 48, "756542": 48, "156450": 48, "278133": 48, "87": 48, "417200": 48, "130992": 48, "359314": 48, "89": [48, 49], "038971": 48, "105534": 48, "413738": 48, "620607": 48, "080076": 48, "440529": 48, "92": 48, "160793": 48, "054618": 48, "62": 48, "438812": 48, "93": 48, "658218": 48, "029160": 48, "407692": 48, "95": [48, 92], "111538": 48, "003702": 48, "346268": 48, "96": 48, "519402": 48, "978244": 48, "253670": 48, "97": 48, "880505": 48, "952786": 48, "66": [48, 87], "128944": 48, "99": [48, 79], "193417": 48, "927328": 48, "971176": 48, "456764": 48, "901870": 48, "779457": 48, "101": [48, 49, 57, 92], "669186": 48, "876412": 48, "68": 48, "552864": 48, "102": [48, 92], "829296": 48, "850954": 48, "290451": 48, "103": 48, "935677": 48, "825496": 48, "991325": 48, "104": 48, "986988": 48, "800038": 48, "70": [48, 61], "654541": 48, "105": 48, "981812": 48, "774580": 48, "279190": 48, "106": 48, "918785": 48, "749122": 48, "864319": 48, "107": 48, "796478": 48, "723664": 48, "72": 48, "409088": 48, "108": 48, "613632": 48, "698206": 48, "912567": 48, "109": [48, 315], "368851": 48, "672748": 48, "373871": 48, "110": [48, 318], "060806": 48, "647290": 48, "792130": 48, "688194": 48, "621832": 48, "74": 48, "166512": 48, "111": 48, "249767": 48, "596374": 48, "496147": 48, "744221": 48, "570916": 48, "780251": 48, "112": 48, "170376": 48, "545458": 48, "017998": 48, "526997": 48, "520000": 48, "208656": 48, "812984": 48, "494542": 48, "351448": 48, "113": 48, "027172": 48, "469084": 48, "445686": 48, "168530": 48, "443626": 48, "490677": 48, "236015": 48, "418168": 48, "485771": 48, "228657": 48, "392710": 48, "430344": 48, "145515": 48, "367252": 48, "323830": 48, "985744": 48, "341794": 48, "165688": 48, "748531": 48, "316336": 48, "955406": 48, "433109": 48, "290878": 48, "692551": 48, "038826": 48, "265420": 48, "376694": 48, "565041": 48, "239962": 48, "007477": 48, "011215": 48, "214504": 48, "584579": 48, "376869": 48, "189046": 48, "107742": 48, "661613": 48, "163588": 48, "576752": 48, "865128": 48, "138130": 48, "991455": 48, "987183": 48, "112672": 48, "351707": 48, "027561": 48, "087214": 48, "657486": 48, "986229": 48, "061756": 48, "908813": 48, "863220": 48, "036298": 48, "105721": 48, "658581": 48, "010840": 48, "248337": 48, "372505": 48, "985382": 48, "336861": 48, "005291": 48, "959924": 48, "371513": 48, "557270": 48, "934466": 48, "352615": 48, "98": [48, 299], "028923": 48, "909008": 48, "280533": 48, "420799": 48, "883550": 48, "155693": 48, "94": 48, "733540": 48, "858092": 48, "978588": 48, "967882": 48, "832634": 48, "749775": 48, "124662": 48, "807176": 48, "469845": 48, "204767": 48, "781718": 48, "139503": 48, "209255": 48, "756260": 48, "759487": 48, "139231": 48, "730802": 48, "330616": 48, "995924": 48, "705344": 48, "853729": 48, "780594": 48, "679886": 48, "329796": 48, "494694": 48, "654428": 48, "759762": 48, "139643": 48, "628970": 48, "49": [48, 283, 299], "144699": 48, "717049": 48, "603512": 48, "485737": 48, "228605": 48, "578054": 48, "784004": 48, "676006": 48, "552596": 48, "040764": 48, "061146": 48, "527138": 48, "257267": 48, "385900": 48, "501680": 48, "434883": 48, "652325": 48, "476222": 48, "38": 48, "574947": 48, "862421": 48, "450764": 48, "678982": 48, "018473": 48, "425306": 48, "34": [48, 88, 89, 315], "748432": 48, "122648": 48, "399848": 48, "784836": 48, "177254": 48, "374390": 48, "789810": 48, "184715": 48, "348932": 48, "28": [48, 84, 88, 92], "764952": 48, "147428": 48, "323474": 48, "711969": 48, "067954": 48, "298016": 48, "632576": 48, "948864": 48, "272558": 48, "528547": 48, "792821": 48, "247100": 48, "401667": 48, "602500": 48, "simul": [49, 90, 92, 234], "linkag": 49, "armless": [49, 92, 161], "88": 49, "23": [49, 67, 315], "f1x": 49, "screw": [49, 68], "rod": 49, "exhibit": [49, 161], "midpoint": 49, "weakest": 49, "flex": 49, "tr": 49, "q_kn": 49, "qd_motor": 49, "qd_kn": 49, "2x2": [49, 92], "jacobian": [49, 92], "qd_sh1": 49, "qd_el0": 49, "qd_motor0": 49, "qd_motor1": 49, "checkinrequest": [50, 90], "modifypolicyrequest": 50, "checkin": [50, 92, 141], "databufferservic": [50, 90, 119], "autoreturnservic": [50, 107], "AND": [50, 57, 92], "stale": [50, 51, 90, 92, 141, 142], "policy_ids_to_remov": [50, 92, 141], "implicitli": 50, "associated_leas": [50, 92], "leasea": [50, 51], "leaseb": [50, 51], "leasestal": 50, "hardcod": [50, 90, 92], "forcefulli": [51, 92, 142], "incom": [51, 84, 90, 92, 97, 100, 117, 142, 144, 161], "older": [51, 90, 92, 117, 142, 324], "workflow": [51, 63], "accident": [51, 58, 90], "acquireleas": [51, 90, 92], "retainleas": [51, 90, 142], "permit": [51, 92], "returnleas": [51, 92], "revoc": 51, "newest": [51, 92, 142], "leaf": [51, 92, 143], "claim": [51, 92, 142], "takeleas": [51, 92, 142], "expressli": 51, "creation": [51, 77, 90, 92, 111, 310, 319], "worri": [51, 82, 85, 181], "highest": [51, 85, 88, 92], "newer": [51, 92, 142, 338], "took": [51, 81, 90, 92, 161, 273], "board": [52, 63, 64, 71, 77, 90, 92, 171], "detector": [52, 61, 83, 87, 90, 92, 267, 326], "tenni": 52, "computation": [52, 74], "room": [52, 90, 92, 202, 283], "output_imag": [52, 90, 92], "other_data": [52, 92], "workercomputerespons": [52, 90], "networkcomputerespons": [52, 84, 90, 152], "spotapp": [52, 58], "android": [52, 58], "divers": [53, 82], "peer": [53, 89, 92], "rj": 53, "db": [53, 92, 138], "gxp": 53, "infrastructur": [53, 74], "join": [53, 82, 84, 92, 138], "attent": [53, 64], "paid": 53, "dead": [53, 84, 92], "zone": [53, 227], "handoff": 53, "consider": [53, 66, 92], "cell": [53, 56, 92], "modem": [53, 61, 90, 252, 262], "radio": [53, 57, 60, 69, 90, 92, 112, 156], "insuffici": [53, 92], "deploy": [53, 54, 71, 76, 90], "chosen": [53, 54, 58, 92, 135, 161, 314, 320], "getauthtoken": [53, 92], "getauthtokenrequest": [53, 90], "getauthtokenrespons": [53, 90], "compact": [53, 89], "wire": [53, 56, 61, 89, 338], "deseri": [53, 90, 92, 197, 203, 204], "bind": [53, 77, 82], "requesthead": [53, 74, 165], "mint": [53, 92, 106, 183], "paradigm": 53, "bidirect": [53, 92], "4mb": [53, 92], "hide": [53, 57, 142], "simpler": [53, 90, 275], "authclient": [53, 106], "app_token": 53, "kwarg": [53, 89, 97, 99, 104, 106, 107, 108, 113, 114, 116, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 135, 136, 137, 138, 139, 140, 141, 142, 145, 146, 147, 148, 149, 151, 152, 155, 156, 158, 159, 161, 162, 163, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 185, 186, 211, 214, 215, 218, 222], "combo": [53, 57, 106, 154], "arg": [53, 81, 84, 85, 97, 112, 113, 135, 161, 185, 199, 205, 215, 220, 222], "deprec": [53, 82, 87, 92, 93, 113, 124, 135, 137, 150, 156, 161, 162, 164, 174, 185, 187, 200, 215, 222, 224], "invalidloginerror": [53, 88, 106, 160], "req": [53, 77, 113, 165, 220], "_build_auth_request": 53, "_stub": 53, "_token_from_respons": 53, "_error_from_respons": 53, "caller": [53, 92, 113, 138, 161, 320, 322], "occasion": [53, 58, 66, 90, 92, 117], "robotst": [53, 90, 163], "comment": [53, 86, 90, 92, 112, 119, 121, 160, 255, 293], "inabl": 53, "workaround": [53, 90], "buggi": 53, "bug": [53, 160], "gracefulli": [53, 57, 90], "responsehead": [53, 74, 165], "succeed": [53, 55, 85, 90, 92, 127, 156, 160, 273], "status_invalid_login": [53, 92], "status_invalid_token": [53, 92], "improperli": [53, 92], "temporarili": [53, 63, 90, 92, 106, 273], "unsuccess": [53, 77, 135], "status_invalid_application_token": [53, 90], "status_expired_application_token": [53, 90], "undefin": [53, 63], "request_head": [53, 89, 92], "googl": [53, 69, 74, 78, 84, 85, 90, 92, 93, 100, 114, 117, 119, 167, 181, 209, 248], "request_received_timestamp": [53, 89, 92], "response_timestamp": [53, 89, 92], "commonerror": [53, 84, 165], "implic": 53, "multiplex": 53, "prioriti": [53, 88, 92], "encrypt": [53, 90, 92, 174], "tls1": 53, "certif": [53, 54, 92, 127, 164, 218, 222, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "mitm": 53, "verif": [53, 164, 218, 222, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "transport": [53, 74, 89, 90, 92, 111], "problemat": [53, 90], "strong": 53, "rj45": 53, "spotti": 53, "mitig": 53, "socket": [53, 67], "pool": [53, 117], "round": [53, 92, 180, 181, 330], "robin": 53, "quic": 53, "battl": 53, "withstand": [53, 66], "adversari": 53, "intermedi": [53, 62, 87, 90, 92, 144], "firewal": [53, 63, 77, 78, 79, 84, 227, 252, 297, 310, 315, 318, 319, 320, 321, 329], "dn": [53, 92], "mdn": 53, "sd": [53, 61], "broadcast": [53, 128, 318], "packet": [53, 60], "announc": [53, 60, 92, 320], "handshak": 53, "provis": 53, "central": 54, "premis": 54, "serv": [54, 55, 61, 92, 123, 182, 218, 222, 319], "emb": 54, "unverifi": 54, "tl": [54, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "privaci": 54, "browser": [54, 55, 63, 82, 83, 90, 286], "cooki": [54, 55], "21000": [54, 60, 63, 72, 310], "22000": [54, 60, 63, 310], "orbit_ip": [54, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309], "demand": 54, "job": [54, 87, 92], "subscrib": [54, 90], "v0": [54, 55, 218, 222], "uuid": [54, 55, 60, 76, 90, 119, 160, 218, 222, 300, 324, 329], "iso": [54, 220], "date": [54, 71, 88, 92, 252], "invok": [54, 112, 142], "action_complet": 54, "run_ev": [54, 55, 220, 224], "anomal": 54, "action_completed_with_alert": 54, "secret": [54, 58, 60, 63, 71, 76, 78, 87, 90, 92, 154, 160, 185, 220, 252, 310, 311, 312, 318, 319, 320, 323, 329], "hex": 54, "1701098596652": 54, "unix": [54, 72, 160, 181, 194, 202, 205, 209], "hmac": 54, "payload_json_as_str": 54, "sha256": 54, "hexadecim": 54, "modul": [54, 61, 74, 75, 88, 90, 92, 117, 142, 161, 251, 283, 320], "validate_webhook_payload": [54, 220], "strongli": [54, 63, 113], "discourag": [54, 88, 252, 315, 318, 320], "validatetlscert": 54, "unrecogn": [54, 92, 135], "cert": [54, 89, 111, 164, 175, 218], "mayb": [54, 88, 97, 282], "enterpris": [54, 90], "eam": [54, 90], "anomali": [54, 90, 92, 218, 265], "kick": [54, 62, 117, 123, 154, 160, 218, 222], "prescrib": 54, "gaug": [54, 81, 92, 298], "dai": [54, 90, 247, 252, 255], "00pm": 54, "mondai": 54, "ideal": [54, 74, 113], "ran": [54, 55, 86, 90, 92, 250, 273, 310], "gap": 54, "kickoff": [54, 218, 222], "millisecond": [54, 111, 218, 222, 277], "late": [54, 92], "tuesdai": 54, "creep": 54, "eventu": [54, 86, 90, 92, 100, 282], "wednesdai": 54, "discuss": [54, 89, 283], "week": [54, 218, 222], "sundai": [54, 218, 222], "00am": 54, "priorit": 54, "55am": 54, "disrupt": 54, "elig": 54, "dispatch": [54, 218, 222, 307], "stalest": 54, "furthest": [54, 92], "fifteen": 54, "ago": [54, 84, 89, 92, 247, 255], "staler": 54, "tie": 54, "ti": [54, 64, 92], "alphabet": [54, 92], "worth": [54, 90], "shed": 54, "strang": 54, "earliest": [54, 92], "saturdai": 54, "overdu": 54, "59pm": 54, "undesir": 54, "noon": 54, "implicit": [54, 92], "race": [54, 92], "recal": [54, 86], "determinist": [54, 57, 79], "utc": [54, 130, 252], "slate": [54, 90, 92], "copi": [55, 61, 62, 63, 72, 76, 77, 78, 79, 81, 82, 83, 84, 86, 87, 90, 92, 97, 104, 108, 117, 125, 148, 161, 167, 249, 250, 251, 269, 273, 274, 297, 310, 312, 316, 319, 321, 322], "api_token": [55, 90, 218, 220, 222], "authenticate_respons": 55, "fetch": [55, 58, 75, 90, 271, 308], "robots_respons": 55, "robots_json": 55, "unauthor": [55, 319], "401": 55, "forbidden": 55, "count": [55, 79, 92], "progress": [55, 56, 74, 90, 92, 117, 225, 226], "transpir": 55, "singular": 55, "runeventuuid": [55, 218, 222], "duplic": [55, 63, 90, 92, 161, 185, 194, 269], "missionnam": 55, "sequenti": [55, 92], "accordingli": [55, 64, 90, 92], "traffic": [55, 60, 69, 90, 297, 321], "orbitcli": 55, "instanti": [55, 57, 160, 166, 216], "hello": [55, 90, 225, 261, 265, 310, 315], "rebrand": 55, "streamlin": [56, 90, 123], "deni": [56, 88, 127, 271, 319], "abruptli": 56, "stop_level": [56, 89, 92, 126], "safepoweroffcommand": [56, 90], "ins": [56, 89, 126, 142], "gentli": [56, 86, 89], "request_off": [56, 92], "commandrespons": 56, "commandfeedbackrequest": 56, "skeleton": [56, 163], "getrobothardwareconfigur": [56, 92], "getrobotst": [56, 90, 92], "batteryst": 56, "powerst": [56, 89, 90], "commsstat": 56, "estopst": [56, 156], "footstat": 56, "systemfaultst": 56, "histor": [56, 90, 92], "diagnos": [56, 90, 92], "behaviorfaultst": 56, "kinematicst": [56, 90], "systemst": [56, 90], "hot": [56, 90, 273], "getrobotmetr": [56, 92], "retro": [56, 90, 92, 112, 147, 292], "logstatu": 56, "bd": [56, 61, 88, 89, 92], "team": [56, 69], "metricsloggingcli": [56, 151], "greyscal": [56, 92], "intens": [56, 92, 328, 334], "depth_in_visual_fram": [56, 90, 276], "reproject": [56, 92], "transmit": [56, 92], "lossi": [56, 92], "tunabl": 56, "rle": [56, 90, 92, 137], "uncompress": [56, 92], "getlocalgridtyp": [56, 92], "getlocalgrid": [56, 92], "fake": [56, 227], "barrier": 56, "virtual": [56, 58, 88, 90, 92, 227, 249, 326, 333, 338], "truth": [56, 92], "listworldobject": [56, 90, 92, 186], "mutateworldobject": [56, 92], "influenc": [56, 92], "enhanc": [56, 69], "gpu": [56, 82, 83, 87, 92, 174, 297, 298, 321], "3rd": [57, 273], "advertis": [57, 92, 152], "hierarch": [57, 92], "doubleparam": [57, 166], "textbox": 57, "int64param": [57, 166], "render": [57, 90, 92, 334], "pressur": [57, 92, 299], "temperature_celsiu": [57, 92], "212": [57, 92, 180], "celsiu": [57, 92], "mostli": [57, 84, 92, 321, 322], "stringparam": [57, 166], "boolparam": [57, 166], "roi": [57, 92, 166], "regionofinterestparam": [57, 166], "realli": [57, 86, 89, 90], "dictparam": [57, 90, 103, 138, 166, 211], "ephemer": [57, 90, 165, 185], "userinterfaceinfo": [57, 166], "told": 57, "collaps": [57, 89, 92, 166], "won": [57, 86, 92, 97], "oneofparam": [57, 90, 166], "listparam": [57, 90, 166], "homogen": 57, "customparam": [57, 90, 166], "param_b": 57, "double_spec": [57, 92], "min_valu": [57, 92, 166], "max_valu": [57, 92, 166], "ui_info": [57, 92, 166], "display_nam": [57, 92, 166], "tupl": [57, 84, 90, 97, 113, 130, 137, 138, 142, 150, 162, 170, 171, 185, 186, 216, 286], "list_of_tupl": 57, "list_spec": [57, 92, 166], "element_spec": [57, 92, 166], "dict_spec": [57, 92, 166], "param_a": 57, "string_spec": [57, 92], "display_ord": [57, 92, 166], "int_spec": [57, 92], "appl": [57, 297, 321], "min_number_of_valu": [57, 92, 166], "max_number_of_valu": [57, 92, 166], "ncb": [57, 85, 92, 321], "alarm": 57, "listimagesourcesrespons": 57, "imagesourc": [57, 90, 137, 138, 166], "imagerequest": [57, 77, 90, 137, 138], "custom_parameter_image_serv": [57, 320], "modeldata": [57, 84], "workercomput": [57, 90, 92], "computeparamet": 57, "custom_parameter_ncb_work": 57, "getremotemissionserviceinfo": [57, 90, 92], "getremotemissionserviceinforespons": [57, 214], "tickrequest": 57, "hello_world_mission_servic": [57, 90, 315], "coerc": [57, 166, 315], "stringspec": 57, "service_customization_help": [57, 166], "string_param_coerce_to": [57, 166], "make_string_param_spec": [57, 166], "service_customization_pb2": [57, 138, 166], "imageacquisitioncap": 58, "image_service_help": [58, 77, 90, 138], "visualimagesourc": [58, 77, 90, 138], "decod": [58, 77, 90, 92, 138, 164, 185, 218, 222, 277], "camerabaseimageservic": [58, 77, 138], "blocking_captur": [58, 77, 138], "image_decod": [58, 77, 90, 138], "image_data": [58, 77, 138], "acquisition_time_second": 58, "image_proto": [58, 77, 90, 137, 138], "image_pb2": [58, 77, 84, 85, 90, 137, 138, 165], "image_format": [58, 77, 90, 92, 137, 138], "quality_perc": [58, 77, 90, 92, 137], "format_raw": [58, 77, 84, 85, 92], "lastli": [58, 77, 78, 84, 92, 252, 318, 320, 329], "format_jpeg": [58, 77, 84, 92], "use_background_capture_thread": [58, 138], "pixelformat": [58, 90, 137, 138], "imageformat": 58, "create_capture_thread": [58, 138], "visual_source1": 58, "source1": [58, 277], "camera_interface_object": 58, "visual_source2_not_thread": 58, "visualimagesource2": 58, "source2": [58, 277], "unexpectedli": [58, 62, 90, 92], "tester": [58, 79, 90, 252, 262, 318, 320], "tester_program": [58, 79, 90], "image_service_test": [58, 77, 79, 329], "data_acquisition_plugin_servic": [58, 78, 90, 98, 117, 252], "dataidentifi": [58, 78, 90, 116, 117, 118], "channel_nam": [58, 78, 92, 200, 203, 205], "laser": [58, 78, 90, 92], "kcapabl": 58, "laser_scan_spars": 58, "laser_scan_dens": 58, "data_collect_fn": [58, 117], "acquireplugindatarequest": [58, 78, 117], "store_help": [58, 78, 117], "dataacquisitionstorehelp": [58, 78, 90, 117], "acquisition_request": [58, 92, 114, 115, 116], "datacaptur": 58, "data_acquisition_pb2": [58, 78, 115, 117], "cancel_check": [58, 78, 117], "cleanli": [58, 92, 100, 117, 165, 185], "store_data": [58, 117, 118], "serializetostr": 58, "bytes_data": 58, "store_metadata": [58, 78, 92, 117, 118], "reference_id": [58, 78, 92], "special_data": 58, "coupl": [58, 69, 90, 92, 239, 318, 320], "piksi": [58, 92, 252], "pointcloud": [58, 155, 252], "dataerror": [58, 117, 192], "add_error": [58, 117], "make_error": [58, 117], "unrel": [58, 284], "status_internal_error": [58, 92], "pluginerror": 58, "status_sav": [58, 78, 92, 117], "set_statu": [58, 78, 117], "getstatusrespons": [58, 78, 117], "plugin_test": [58, 78, 79, 329], "status_timedout": [58, 92], "acquire_response_fn": [58, 117], "acquireplugindatarespons": [58, 117], "timeout_deadlin": [58, 92], "async": [58, 90, 97, 98, 104, 107, 113, 114, 116, 117, 118, 119, 121, 124, 125, 126, 128, 132, 135, 136, 137, 139, 140, 141, 142, 146, 148, 151, 152, 155, 156, 158, 159, 161, 163, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 186, 211, 214, 261], "associated_metadata_proto": 58, "get_imag": [58, 137, 218, 222, 277], "rail": [59, 251, 284], "inert": 59, "openvpn": 59, "docker": [59, 61, 70, 87, 90, 227, 271, 282, 294, 298, 310, 311, 319], "resolut": [60, 77, 90, 92, 285, 318, 320], "getserviceentri": [60, 92], "registerservic": [60, 92], "unregisterservic": [60, 92], "deregist": [60, 92, 126], "updateservic": [60, 92], "listpayload": [60, 92], "registerpayload": [60, 92], "getpayloadauthtoken": [60, 92], "config": [60, 61, 83, 84, 92, 100, 102, 103, 112, 124, 126, 153, 154, 279, 312], "conf": [60, 85], "192": [60, 61, 63, 69, 71, 72, 76, 79, 82, 84, 85, 86, 87, 88, 89, 90, 164, 227, 250, 273, 282, 298, 315, 318], "168": [60, 61, 63, 69, 71, 72, 76, 79, 82, 84, 85, 86, 87, 88, 89, 90, 164, 227, 250, 273, 282, 298, 315, 318], "iburst": 60, "minpol": 60, "maxpol": 60, "akin": 60, "digit": [60, 283, 285], "autogener": [60, 90, 319], "thereaft": 60, "payload_registration_cli": [60, 160], "payloadregistrationcli": [60, 154], "payload_proto": 60, "payload_secret": [60, 63, 71, 92, 311], "read_or_create_payload_credenti": [60, 90, 185, 319], "payload_credentials_file_1": 60, "register_payload": [60, 154, 282], "label_prefix": [60, 92], "test_payload": 60, "is_author": [60, 92], "is_en": [60, 92], "is_noncompute_payload": [60, 92], "payload_cli": 60, "payloadcli": [60, 153], "list_payload": [60, 153], "remoteservic": 60, "malici": 60, "ap": [60, 92], "eap": [60, 69, 90], "fluke": 60, "sv600": 60, "rajant": 60, "es1": [60, 90], "netmask": [60, 92], "gatewai": [60, 69, 92], "20000": [60, 83], "443": [60, 89, 90, 160], "tcp": [60, 63, 133, 282, 310], "30000": 60, "31000": 60, "32000": 60, "23000": 60, "23100": 60, "23199": 60, "24000": 60, "24100": 60, "24199": 60, "25000": 60, "25100": 60, "25199": 60, "20022": [60, 61, 62, 63, 72], "20080": 60, "20443": 60, "30022": 60, "30080": 60, "30443": 60, "23022": 60, "23080": 60, "23443": 60, "24022": 60, "24080": 60, "24443": 60, "25022": 60, "25080": 60, "25443": 60, "masquerad": 60, "sender": 60, "lan": 60, "259": 60, "nbsp": [60, 98], "156": 60, "071": 60, "xx": [60, 92, 209], "0125249699": 60, "00340958": 60, "yy": [60, 92], "0186853204": 60, "yz": [60, 92], "zz": [60, 92], "0156701095": 60, "045": 60, "183": 60, "117": 60, "095": 60, "088": 60, "067": 60, "filesystem": [61, 92, 174, 182], "partit": [61, 83], "temporari": [61, 85, 90, 92, 97], "overlai": [61, 90, 92, 269, 316], "eras": [61, 92, 135], "enable_overlayroot": 61, "rm": [61, 62, 63, 87, 298, 312], "cred": [61, 62, 79, 111, 282], "100mb": [61, 92], "4gb": 61, "400gb": 61, "compart": [61, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "skipauth": 61, "identitiesonli": 61, "ye": [61, 62, 63, 72, 87, 92, 298, 312], "systemctl": [61, 69, 72], "benchtop": 61, "subnet": [61, 92], "hdmi": 61, "displayport": 61, "48v": 61, "graphic": [61, 72, 83, 88, 247, 328], "networkmanag": [61, 69, 72, 294], "ipv4": [61, 69, 89, 92], "nmcli": [61, 69, 294], "gnome": [61, 72, 294], "org": [61, 69, 72, 88, 92, 294, 299], "html": [61, 86, 90, 92, 294], "ifconfig": 61, "dongl": [61, 90, 294], "ssid": [61, 90, 92, 273, 318], "sshd": 61, "sshd_config": 61, "velodyn": [61, 69, 90, 92, 252, 266], "lib": [61, 84, 89, 274], "systemd": [61, 72, 84], "velodyne_servic": [61, 69], "administr": [61, 72, 88, 90, 92, 271], "passwd": 61, "useradd": [61, 63], "usermod": [61, 271], "apt": [61, 62, 63, 72, 79, 87, 250, 270, 298, 312, 338], "pip": [61, 77, 79, 82, 83, 87, 90, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "dedic": [61, 63, 67, 90], "arm64v8": [61, 62], "slim": [61, 79], "dev_env": 61, "entrypoint": [61, 62, 79, 87, 90, 251], "bin": [61, 62, 63, 72, 76, 77, 78, 79, 82, 83, 84, 87, 88, 295], "bash": [61, 62, 63, 79, 87], "detach": [61, 90, 92, 154], "exec": [61, 72], "playground": 61, "spx": [61, 62, 63, 79, 87, 90, 253, 271, 282, 294, 298, 310, 312, 320, 324], "playground_extens": 61, "coreio_playground": 61, "tegra": 61, "l4t": [61, 63, 87, 90, 250, 298, 320, 324], "pin": [61, 68, 90], "3v": [61, 251], "resistor": [61, 67], "puls": [61, 251], "5v": [61, 251], "12v": [61, 251], "24v": [61, 251], "sda": 61, "scl": 61, "schemat": [61, 67], "cn": 61, "cn2": 61, "cn3": 61, "cn4": 61, "unreg": 61, "gnd": [61, 67], "jumper": [61, 67], "advers": [61, 90], "inhibit": 61, "ohm": 61, "imped": [61, 92, 259], "oh": 61, "2v": 61, "cco": 61, "0v": 61, "24ma": 61, "ab": 61, "ol": [61, 318], "50ma": 61, "vcc": 61, "100ma": 61, "usr": [61, 72, 87, 88, 274], "gpiopowerutil": 61, "sh": [61, 72, 79, 87, 298, 319], "gpiopwmutil": 61, "gpio_contain": 61, "sy": [61, 81, 82, 84, 85, 251], "gpiochip0": 61, "gpiochip1": 61, "gpiochip2": 61, "card": [61, 294], "daisi": 61, "bu": [61, 67, 87, 92], "chip": 61, "dozen": [61, 92], "shell": [61, 67, 247], "i2cdetect": 61, "6d": 61, "0x6d": 61, "i2cget": 61, "nvidia": [61, 63, 83, 87, 90, 297, 321], "xavier": [61, 87], "nx": 61, "volta": 61, "384": [61, 83, 182], "cuda": [61, 63, 82, 83, 86, 87, 297, 321], "benchmark": 61, "jetson": 61, "fire": [61, 90, 252, 267, 297], "extinguish": [61, 90, 252, 267, 297], "fire_ext_detector": [61, 298], "network_mod": [61, 62, 79, 87], "payload_credenti": [61, 77, 78, 79, 87, 90, 92, 252, 298, 318], "payload_guid_and_secret": [61, 77, 78, 79, 87, 90, 252, 298, 318], "driver": [61, 63, 69, 83, 87, 90, 92, 218, 222, 297, 307, 318, 321, 338], "alpin": 62, "apk": 62, "mkdir": [62, 63, 77, 78, 82, 83, 84, 87], "mknod": 62, "tun": 62, "200": [62, 83, 89, 220, 325], "600": 62, "workdir": [62, 79, 87], "openvpn_cli": 62, "cap_add": 62, "net_admin": 62, "ovpn": 62, "ve": [62, 82, 84, 85, 86, 87, 88, 89, 92, 135, 154, 234], "scp": [62, 63], "manifest": [62, 87, 90, 271], "png": [62, 271, 283, 294, 310], "tar": [62, 63, 69, 71, 79, 83, 87, 252, 253, 271, 294, 298, 301, 310, 312, 320], "gz": [62, 83, 87, 253, 271, 294, 298, 310, 312, 320], "arm64": [62, 63, 87, 90, 250, 253, 271, 294, 312], "qemu": [62, 63, 87, 298, 312], "binfmt": [62, 87, 298, 312], "privileg": [62, 63, 69, 87, 251, 298, 312], "multiarch": [62, 63, 87, 298, 312], "x86": [62, 63, 79, 282], "bash_sourc": [62, 79, 87], "script_path": [62, 87], "dirnam": [62, 79, 84, 87], "cd": [62, 76, 77, 78, 79, 82, 83, 86, 87, 88, 298, 312], "export": [62, 76, 77, 78, 79, 84, 85, 86, 87, 88, 90, 218, 222, 248, 252, 265, 284, 312, 324, 329], "pigz": [62, 63, 79, 87, 250, 271, 298, 312], "cvzf": [62, 87], "portal": [62, 79, 87], "your_cred_fil": 62, "spots_ip": 62, "ssh": [62, 63, 69, 71, 72, 294, 318], "cp": [62, 72, 83, 84, 86, 87, 312], "suggest": [63, 79, 92, 159, 311, 318, 319, 320], "container": 63, "stone": 63, "buildx": 63, "dockerfil": [63, 79, 87, 90, 227, 252, 253, 271, 282, 294, 297, 298, 310, 312, 320, 321, 324], "amd": [63, 282], "jetpack": [63, 90], "r35": 63, "r32": [63, 87, 90], "fairli": 63, "base_imag": 63, "opencv_vers": 63, "impos": 63, "unintent": 63, "leak": [63, 90], "image_nam": [63, 71, 138, 252], "multiarchbuild": 63, "prebuilt": [63, 87], "rerun": [63, 318], "tgz": [63, 79, 250, 282, 324], "payload_guid": [63, 71, 92, 320], "local_ip": 63, "massless": [63, 77, 78], "21443": [63, 69, 72, 87, 310], "aw": [63, 80, 90, 271, 312], "bucket": [63, 87, 90, 248, 312], "decoupl": 63, "v4": [63, 90, 291], "generate_extension_data": 63, "yml": [63, 87, 90, 271], "build_extens": [63, 90, 253, 282, 294, 298, 310, 312, 320, 324], "udev": [63, 87, 90, 271], "extension_nam": [63, 90], "subject": [63, 92], "hyphen": 63, "coreio": [63, 90, 262, 324], "mission_control": 63, "public": [63, 91, 92, 127, 294], "dockerhub": [63, 271], "inclus": [63, 151, 218, 222], "journald": [63, 90], "udev_rul": [63, 79, 271], "creator": 63, "ing": [63, 71], "zcfv": [63, 79], "hidden": [63, 92], "hidden_file1": 63, "hidden_file2": 63, "subpanel": 63, "uninstal": [63, 83, 88], "plug": [63, 69, 79, 92, 294, 318, 320], "untar": 63, "xzfm": 63, "path_to_spx_fil": 63, "reload": [63, 72], "udevadm": 63, "status": [63, 74, 90, 92, 117, 138, 161, 273, 317], "application_fil": 63, "TO": [63, 92], "sustain": 64, "dual": 64, "outer": [64, 74], "polycarbon": 64, "blend": [64, 150], "plastic": 64, "foam": [64, 65], "durabl": 64, "diffus": 64, "rigid": 64, "absorb": 64, "sculpt": 64, "polyethylen": 64, "experienc": [64, 92, 127, 135, 142], "henc": [64, 89], "pai": 64, "interconnect": [64, 87], "solder": 64, "pcba": 64, "indoor": 64, "outdoor": 64, "seal": 64, "splash": 64, "surviv": 64, "pinch": 64, "guidanc": 64, "cad": [65, 66, 92], "articl": [65, 66, 77, 78, 92, 294], "defeatur": [65, 66], "shield": 65, "mold": 65, "environment": [65, 248], "overmold": 65, "ridg": 65, "3mm": [65, 68], "tall": [65, 92, 289], "21mm": 65, "63mm": 65, "5mm": 65, "gasket": 65, "conjunct": [66, 90, 166], "cap": [66, 67, 96, 319], "190mm": 66, "scallop": 66, "elev": [66, 92, 299], "pink": 66, "studi": 66, "overhang": 66, "maneuver": 66, "distribut": [66, 74, 89, 92, 164], "agil": 66, "climb": [66, 92, 226], "weigh": 66, "db25": 67, "mate": 67, "male": 67, "59vabsolut": 67, "72vmax": 67, "3a": 67, "pinmax": 67, "portbulk": 67, "capacit": 67, "150uf": 67, "17": [67, 83, 89, 92], "tpp": 67, "5ppmpp": 67, "1hz": [67, 227, 282], "interlockmotor": 67, "interlockextra": 67, "eth0_d_n": 67, "eth0_d_p": 67, "eth0_b_n": 67, "eth0_b_p": 67, "pl_safety_o": 67, "mp_safety_o": 67, "extra_safety_a": 67, "p_gnd": 67, "extra_safety_b": 67, "pwr": 67, "unregul": 67, "eth0_c_n": 67, "eth0_c_p": 67, "eth0_a_n": 67, "eth0_a_p": 67, "pl_safety_in": 67, "mp_safety_in": 67, "mh1": 67, "mh2": 67, "600w": 67, "lithium": 67, "ion": 67, "circuit": [67, 89], "35v": 67, "discharg": [67, 92], "regen": 67, "energi": 67, "72v": 67, "80v": 67, "pl": 67, "IN": [67, 92], "soft": [67, 90, 92], "monoton": [67, 92, 142], "inrush": 67, "bulk": [67, 77, 90, 218, 300], "300uf": 67, "unintend": 67, "spike": 67, "resett": 67, "13a": 67, "overcurr": 67, "mp": 67, "circuitri": 67, "loos": [67, 92, 294], "5ppm": 67, "accommod": 67, "collector": 67, "10ma": 67, "aluminum": 68, "slot": 68, "nut": 68, "misumi": 68, "hntr5": 68, "4mm": 68, "diamet": [68, 92, 234], "bolt": 68, "chassi": 68, "25mm": 68, "8mm": 68, "gnu": [69, 274], "lgpl": 69, "readili": [69, 92], "pc": [69, 72, 79, 252, 269, 316], "handi": 69, "vlp": 69, "spotcor": [69, 70, 71, 77, 78, 79], "kernel": 69, "wireless": [69, 294, 318], "vnc": [69, 70, 270], "keyboard": [69, 88, 90, 319], "mous": [69, 287, 334], "condens": 69, "my_wifi": 69, "my_password": 69, "unreach": [69, 85, 88, 127, 252, 315, 318, 320], "enp2s0": 69, "lowest": [69, 90, 92], "interf": 69, "outbound": 69, "portain": [69, 320], "unfortun": [69, 79, 90], "And": [69, 88, 92, 248, 259, 283], "journalctl": 69, "cockpit": [70, 72], "preload": 71, "troubleshoot": [71, 83, 84, 85, 319], "upgrad": [71, 83, 88, 90, 92, 324], "21900": 71, "host_computer_ip": [71, 312, 318, 320], "perspect": [71, 89, 90], "statement": [71, 90, 92, 161, 165, 227], "preconfigur": [72, 310], "vncpasswd": 72, "15100": 72, "5900": 72, "vncviewer64": 72, "tunnel": 72, "fn": 72, "127": [72, 92], "standalon": [72, 298], "xorg": 72, "xstartup": 72, "xresourc": 72, "xrdb": 72, "vncconfig": 72, "dbu": 72, "polkit": 72, "localauthor": 72, "pkla": 72, "freedesktop": 72, "resultani": 72, "auth_admin_keep": 72, "resultinact": 72, "resultact": 72, "controlcent": 72, "5901": 72, "kill": [72, 78, 89, 319], "remainafterexit": 72, "successexitstatu": 72, "pidfil": 72, "pid": [72, 84, 92, 126, 319], "execstartpr": 72, "su": 72, "null": [72, 79], "execstart": [72, 84], "execstop": [72, 84], "wantedbi": 72, "daemon": 72, "tutori": [72, 74, 75, 77, 78, 79, 80, 81, 83, 84, 87, 89, 90, 252, 297, 306, 321], "proto3": 74, "widest": 74, "shall": 74, "indent": 74, "suffix": [74, 137], "disambigu": [74, 92], "almost": [74, 83, 92, 127], "precondit": 74, "internal_server_error": 74, "invalid_request": 74, "timesync": [74, 90, 92, 97, 115, 124, 135, 161, 181, 186, 211], "mk": 74, "java": [74, 92], "classnam": 74, "fooouterclass": 74, "foo": [74, 216], "java_outer_classnam": 74, "fooproto": 74, "rational": 74, "rapid": 74, "stall": [74, 89, 142, 161], "powerservic": [74, 90, 156, 176], "powercommand": [74, 92, 112], "powercommandfeedback": [74, 92], "lowercas": 74, "subdirectori": [74, 311, 319], "agre": [74, 103], "obei": [74, 90, 92], "flatter": 74, "doesn": [74, 83, 85, 92, 97, 135, 160, 161], "deeper": [75, 92], "maco": [75, 88, 89, 90, 326, 338], "mojav": [75, 88], "catalina": 75, "Of": 75, "life": [75, 90], "webcam": [76, 77, 90], "md": [76, 77, 82, 83, 84, 86, 297, 321], "virtualenv": [76, 82, 83, 84, 274, 326, 333, 338], "bosdyn_client_usernam": [76, 86, 88, 90, 250, 252, 297, 298, 321, 326, 338], "bosdyn_client_password": [76, 86, 88, 90, 250, 252, 297, 298, 321, 326, 338], "hello_spot": [76, 82, 88, 89, 90, 289], "my_spot_env": [76, 77, 78, 82, 83, 84, 88], "wherev": [76, 82, 88], "de": [76, 90], "self_ip": [76, 77, 78, 79, 329], "cred_fil": [76, 77, 78, 79], "spot_dev_cr": 76, "uuid4": [76, 329], "printf": 76, "ahead": [77, 78, 92, 310], "camerainterfac": [77, 90, 138], "data_captur": [77, 78, 81, 92], "web_cam_image_servic": 77, "cv2": [77, 82, 84, 85], "np": [77, 81, 82, 84, 85, 86, 283, 286], "directory_registr": [77, 78, 84, 123], "setup_log": [77, 78, 185], "server_util": [77, 78, 90, 165, 185, 215], "convert_rgb_to_grayscal": [77, 90, 138], "_logger": [77, 78], "getlogg": [77, 78], "__name__": [77, 78, 81, 82, 84, 85], "videocaptur": 77, "__init__": [77, 78, 84, 318], "device_nam": [77, 320], "video0": [77, 79, 80, 81, 320], "simplic": [77, 89], "err": 77, "image_source_nam": [77, 92, 137, 138], "device_name_to_source_nam": 77, "isopen": 77, "camera_exposur": 77, "camera_gain": 77, "cap_prop_gain": 77, "cap_prop_exposur": 77, "cap_prop_frame_height": 77, "col": [77, 85, 92, 138], "cap_prop_frame_width": 77, "default_jpeg_qu": 77, "capture_tim": [77, 138], "percent": [77, 90, 92, 137, 273, 277], "image_req": [77, 138], "pixel_format": [77, 84, 90, 92, 137, 138], "converted_image_data": 77, "pixel_format_greyscale_u8": [77, 84, 92], "cvtcolor": [77, 84, 85], "color_bgr2rgb": 77, "pixel_format_unknown": [77, 92], "pixel_format_rgb_u8": [77, 84, 92, 277], "resize_ratio": [77, 90, 92, 137], "inter_area": 77, "ndarrai": 77, "tobyt": 77, "elif": [77, 82, 84], "format_unknown": [77, 92], "encode_param": 77, "imwrite_jpeg_qu": 77, "imencod": 77, "unsupport": [77, 84, 90, 92], "nice": 77, "str": [77, 84, 92, 101, 103, 130, 141, 152, 165, 166, 167, 214, 216, 218, 220, 222, 224, 283, 286], "basenam": [77, 84], "make_webcam_image_servic": 77, "image_sourc": [77, 82, 85, 90, 92, 137, 138], "web_cam": 77, "img_src": 77, "run_servic": [77, 78, 101], "add_web_cam_argu": 77, "add_argu": [77, 81, 82, 84, 85, 87], "narg": [77, 84, 87], "__main__": [77, 78, 81, 82, 84, 85, 88, 89], "argpars": [77, 78, 81, 82, 84, 85, 87, 218, 222], "argumentpars": [77, 78, 81, 82, 84, 85, 87, 185], "allow_abbrev": 77, "add_base_argu": [77, 78, 82, 84, 85, 87, 90, 185], "add_payload_credentials_argu": [77, 78, 87, 90, 185], "add_service_endpoint_argu": [77, 78, 185], "parse_arg": [77, 78, 81, 82, 84, 85, 185], "include_dedup_filt": [77, 185], "create_standard_sdk": [77, 78, 82, 84, 85, 89, 164, 283], "imageservicesdk": 77, "create_robot": [77, 78, 82, 84, 85, 89, 164, 282, 283], "authenticate_from_payload_credenti": [77, 78, 87, 160], "get_guid_and_secret": [77, 87, 90, 185, 282], "runner": [77, 98, 165, 185, 227], "runnabl": 77, "master": [77, 78, 88, 92, 297, 321], "invoc": [77, 78, 153, 154, 155], "webcam_port": [77, 79], "5000": [77, 79, 310], "unsur": [77, 78, 82], "haven": [78, 92, 202], "battery_servic": 78, "json_format": 78, "data_acquisition_plugin_service_pb2_grpc": 78, "data_acquisition_stor": [78, 90, 118], "dataacquisitionstorecli": [78, 90, 115, 117, 118, 252], "robotstatecli": [78, 85, 89, 156, 163], "battery_plugin": 78, "batteryadapt": 78, "sdk_robot": 78, "get_battery_data": 78, "actionidentifi": 78, "requestcancellederror": [78, 117], "battery_percentag": [78, 81], "battery_runtim": 78, "messagetojson": 78, "locomotion_estimated_runtim": [78, 92], "status_complet": [78, 92], "make_servic": 78, "add_dataacquisitionpluginserviceservicer_to_serv": 78, "batteryplugin": 78, "battery_port": [78, 79], "5050": [78, 79], "libsm6": 79, "libglib2": 79, "libxrender1": 79, "libxext6": 79, "cmd": [79, 89], "docker_requir": 79, "tgx": 79, "device_path": 79, "orig_video_dev": 79, "video99": 79, "regener": 79, "solv": [79, 90, 92, 283], "symlink": 79, "setup_device_nam": 79, "subsystem": 79, "video4linux": 79, "attr": 79, "lm1e": 79, "probabl": [79, 82, 83, 92], "daq_tutori": 79, "script_dir": 79, "pwd": [79, 250], "orig_devic": 79, "readlink": 79, "sed": 79, "env": [79, 159, 250, 297, 298, 310, 321], "tpl": 79, "templat": [79, 80, 90, 273, 298, 315], "tp": 79, "typo": [79, 90], "wrote": [80, 82, 84], "pop": [80, 82, 84, 90], "till": [80, 92], "web_cam_batteri": 80, "daq_tutorial_miss": 80, "process_data": 81, "plot": [81, 326], "pil": [81, 84, 89, 289], "map_pb2": [81, 283], "extract_data": 81, "json_data": 81, "out_data": 81, "service_video0": 81, "image_act": 81, "image_fil": [81, 249], "odom_loc": 81, "tweak": [81, 89], "plot_data": 81, "action_data": 81, "image_s": 81, "anchor_posit": 81, "wp_seed": 81, "from_wp": 81, "from_waypoint": [81, 92, 159], "to_wp": 81, "to_waypoint": [81, 92, 159], "battery_perc": 81, "data_dir": 81, "sx": 81, "asarrai": 81, "zorder": 81, "va": 81, "draw_batteri": 81, "dict": [81, 90, 92, 114, 115, 116, 129, 160, 166, 167, 189, 194, 195, 216, 218, 220, 222, 224, 286], "box_x": 81, "box_i": 81, "load_graph": 81, "parsefromstr": 81, "unzip": [81, 83, 88], "overlaid": 81, "densiti": 81, "dog": [82, 83, 84, 85, 86, 92], "toi": [82, 83, 84, 85, 86, 87], "shelf": [82, 86], "towel": 82, "offici": [82, 83, 90, 338], "5x5": 82, "evalu": [82, 83, 92], "viewpoint": [82, 84], "capture_imag": 82, "imagecli": [82, 89, 90, 137], "argv": [82, 84, 85], "frontleft_fisheye_imag": [82, 85, 89, 277, 297], "image_captur": [82, 92, 117], "sync_with_directori": [82, 90, 160], "wait_for_sync": [82, 85, 89, 181], "image_cli": [82, 89], "stuff": 82, "counter": [82, 92], "image_respons": [82, 85, 89, 90, 92, 137], "get_image_from_sourc": [82, 89, 137], "uint8": [82, 84, 85], "img": [82, 85], "shot": [82, 85, 89, 92, 298], "imdecod": [82, 84, 85], "rotate_90_clockwis": 82, "rotate_180": 82, "image_saved_path": 82, "4d": 82, "imwrit": [82, 84], "unpack": [82, 84, 85, 92, 227], "upright": [82, 92, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 277, 283, 289, 290], "dogtoi": [82, 83, 84, 85, 86, 87], "right_fisheye_imag": [82, 85, 89], "right_fisheye_image_0000": 82, "right_fisheye_image_0001": 82, "right_fisheye_image_0004": 82, "right_fisheye_image_0076": 82, "right_fisheye_image_0077": 82, "frontright_fisheye_imag": [82, 85, 89], "left_fisheye_imag": [82, 85, 89], "back_fisheye_imag": [82, 85, 89, 277], "labelimg": [82, 83], "pyqt5": [82, 90, 247, 270, 283, 333], "sip": 82, "del": 82, "xml": [82, 83, 299], "left_fisheye_image_0000": [82, 83], "480": 82, "bndbox": 82, "xmin": 82, "312": 82, "ymin": 82, "357": 82, "xmax": 82, "441": 82, "ymax": 82, "427": 82, "rearrang": 82, "thumb": 82, "threw": [82, 88, 92, 152], "fly": 82, "didn": [82, 83, 85, 88, 92], "tensorflow": [83, 84, 86, 87, 90, 225, 267, 297, 298, 321], "pretti": 83, "slight": [83, 87], "cudnn": 83, "excel": [83, 88], "418": 83, "tensorboard": 83, "tf": [83, 84], "pycocotool": 83, "lvi": 83, "headless": 83, "num": 83, "list_physical_devic": 83, "revis": [83, 88, 89, 92], "precompil": 83, "research": [83, 84, 86, 87, 297, 321], "xbb": 83, "9815ea67e2122dfd3eb2003716add29987e7daa1": 83, "protoc": [83, 319], "object_detect": [83, 84, 86, 297, 321], "python_out": [83, 319], "tf2": [83, 87, 90], "grossli": 83, "left_fisheye_image_0001": 83, "right_fisheye_image_0027": 83, "right_fisheye_image_0009": 83, "split_dataset": 83, "randomli": [83, 92], "painstakingli": 83, "pbtxt": [83, 84, 85, 86, 87], "generate_tfrecord": 83, "xml_dir": 83, "image_dir": 83, "labels_path": 83, "label_map": [83, 84, 85, 86, 87], "output_path": 83, "scratch": 83, "huge": 83, "ssd": 83, "resnet50": 83, "fpn": 83, "640x640": 83, "zoo": 83, "zxvf": 83, "ssd_resnet50_v1_fpn_640x640_coco17_tpu": [83, 86, 87], "my_ssd_resnet50_v1_fpn": [83, 84], "pipelin": [83, 84, 262, 297], "num_class": 83, "batch_siz": 83, "fine_tune_checkpoint": 83, "checkpoint": [83, 84], "ckpt": 83, "fine_tune_checkpoint_typ": 83, "train_input_read": 83, "label_map_path": 83, "input_path": 83, "eval_input_read": 83, "checklist": [83, 84], "model_main_tf2": 83, "model_dir": [83, 84, 87, 297, 321], "pipeline_config_path": [83, 84], "num_train_step": 83, "340": [83, 315], "323": 83, "352": 83, "028": 83, "854": 83, "smi": 83, "logdir": 83, "bind_al": 83, "6006": 83, "cuda_visible_devic": 83, "checkpoint_dir": 83, "okai": [83, 220, 283], "chart": 83, "trustworthi": 83, "overlap": [83, 242], "feel": [83, 92, 308], "convolut": 83, "cudnn_status_internal_error": 83, "tf_force_gpu_allow_growth": 83, "kera": [83, 297, 298], "load_weight": 83, "cast": [83, 90, 92, 98, 137, 267], "lah": 83, "rw": 83, "exporter_main_v2": 84, "input_typ": 84, "image_tensor": 84, "trained_checkpoint_dir": 84, "output_directori": [84, 272], "eval": 84, "saved_model": [84, 85, 86, 87], "went": [84, 88, 92, 122, 123, 128, 154, 156], "bunch": [84, 86, 87], "saw": 84, "network_compute_bridg": [84, 298], "network_compute_serv": [84, 85, 86, 87], "network_compute_bridge_service_pb2_grpc": 84, "network_compute_bridge_pb2": [84, 85], "header_pb2": [84, 165], "concurr": [84, 92, 147], "queue": [84, 90, 92, 326], "wrappers_pb2": [84, 85], "label_map_util": 84, "kserviceauthor": 84, "tensorflowobjectdetectionmodel": 84, "model_path": 84, "label_path": 84, "detect_fn": 84, "category_index": 84, "create_category_index_from_labelmap": 84, "use_display_nam": 84, "input_tensor": 84, "convert_to_tensor": 84, "newaxi": 84, "process_thread": 84, "request_queu": 84, "response_queu": 84, "this_model": 84, "model_nam": [84, 85, 92, 297], "isinst": 84, "listavailablemodelsrequest": [84, 152], "out_proto": 84, "listavailablemodelsrespons": [84, 152], "repli": [84, 92], "input_data": [84, 85, 90, 92], "err_str": 84, "code_invalid_request": [84, 90, 92], "pil_imag": 84, "bytesio": [84, 89], "color_gray2rgb": 84, "image_width": 84, "image_height": 84, "num_object": 84, "batch": 84, "tensor": [84, 92], "num_detect": 84, "detection_box": 84, "detection_class": 84, "score": [84, 92], "detection_scor": 84, "wonki": 84, "min_confid": [84, 85, 90, 92], "tolist": 84, "point1": 84, "point2": 84, "point3": 84, "point4": 84, "out_obj": 84, "object_in_imag": [84, 85, 90, 92], "obj": [84, 85, 92, 163, 283], "_label_": [84, 85], "vertex1": 84, "image_properti": [84, 85, 92, 297], "vertex": [84, 85, 92, 297], "vertex2": 84, "vertex3": 84, "vertex4": 84, "floatvalu": [84, 85, 92], "additional_properti": [84, 85, 92], "no_debug": 84, "polygon": [84, 85], "polylin": [84, 85], "caption": [84, 85], "3f": [84, 85], "left_x": 84, "top_i": 84, "puttext": [84, 85], "font_hershey_simplex": [84, 85], "debug_image_filenam": 84, "network_compute_server_output": 84, "networkcomputebridgeworkerservic": [84, 152], "thread_input_queu": 84, "thread_output_queu": 84, "super": [84, 92, 141, 142, 144], "register_with_robot": 84, "get_self_ip": [84, 90, 113], "tensorflow_serv": [84, 297, 298, 321], "directory_cli": [84, 103], "directorycli": [84, 122], "directory_registration_cli": [84, 123], "networkcomputebridgework": [84, 252], "ourselv": 84, "default_port": [84, 87], "50051": [84, 86, 297, 320, 321], "labels_fil": [84, 87], "store_tru": [84, 87], "isdir": 84, "threadpoolexecutor": [84, 117], "max_work": [84, 165], "add_networkcomputebridgeworkerservicer_to_serv": 84, "add_insecure_port": 84, "basicconfig": 84, "reenter": 84, "ufw": [84, 227, 252, 329], "uncompl": 84, "vendor": 84, "enab": 84, "fri": 84, "2021": [84, 88, 92, 315], "02": [84, 88, 89, 92, 299], "07": [84, 247, 255], "est": 84, "14875": 84, "init": 84, "26704": 84, "quiet": 84, "inact": [84, 92, 318], "renam": [85, 88, 207, 222, 224, 315], "math": [85, 86, 89, 90, 98], "robotcommandcli": [85, 89, 156, 161, 241], "robotcommandbuild": [85, 86, 89, 90, 161], "block_until_arm_arr": [85, 86, 90, 161], "geometry_pb2": [85, 86, 150, 161, 186], "leasecli": [85, 89, 142, 283], "leasekeepal": [85, 89, 90, 142, 273, 283, 317], "network_compute_bridge_cli": [85, 152], "networkcomputebridgecli": [85, 152], "manipulation_api_cli": [85, 148], "manipulationapicli": [85, 148, 235, 243], "manipulation_api_pb2": [85, 148], "kimagesourc": [85, 86], "get_obj_and_img": [85, 86], "network_compute_cli": [85, 86], "image_source_and_servic": [85, 92], "imagesourceandservic": [85, 90], "networkcomputeinputdata": 85, "rotate_imag": [85, 92], "rotate_image_align_horizont": [85, 92], "server_data": 85, "networkcomputeserverconfigur": 85, "process_img_req": 85, "networkcomputerequest": [85, 90, 152], "server_config": [85, 92], "resp": [85, 113, 165], "network_compute_bridge_command": [85, 152], "externalservererror": [85, 152], "intermitt": [85, 92], "best_obj": 85, "highest_conf": 85, "best_vision_tform_obj": 85, "get_bounding_box_imag": 85, "image_ful": 85, "waitkei": 85, "obj_label": 85, "conf_msg": 85, "vision_tform_obj": 85, "get_a_tform_b": [85, 86, 90, 129], "frame_name_image_coordin": [85, 92], "validateframetreeerror": [85, 129], "fromstr": 85, "bgr": 85, "color_gray2bgr": 85, "min_x": 85, "inf": 85, "min_i": 85, "grai": [85, 313], "find_center_px": 85, "max_x": [85, 92], "max_i": [85, 92], "vert": 85, "fab": 85, "imperfect": 85, "block_for_trajectory_cmd": [85, 86, 90, 161], "command_cli": [85, 86, 89, 156, 161], "cmd_id": [85, 86, 161], "timeout_sec": [85, 86, 89, 138, 156, 160, 161, 165, 180, 181, 185], "status_at_go": [85, 92], "matter": [85, 86, 92, 161], "end_tim": [85, 86, 92, 100, 110, 124], "feedback_resp": 85, "robot_command_feedback": [85, 161], "current_st": [85, 92], "mobility_feedback": 85, "se2_trajectory_feedback": [85, 92], "current_state_str": 85, "se2trajectorycommand": [85, 161], "current_tim": 85, "1f": 85, "sec": [85, 90, 92, 209, 273], "namedwindow": 85, "spotfetchcli": 85, "register_service_cli": [85, 164], "robot_state_cli": [85, 86, 103], "lease_cli": [85, 89, 90, 142], "rope": 85, "vision_tform_hand_at_drop": [85, 86], "holding_toi": 85, "vision_tform_dogtoi": 85, "ml_servic": [85, 86], "confidence_dogtoi": 85, "pose_dist": [85, 86], "hasn": 85, "stow_cmd": [85, 86], "arm_stow_command": [85, 86, 161], "walk_rt_vis": 85, "heading_rt_vis": [85, 86], "compute_stand_location_and_yaw": [85, 86], "distance_margin": [85, 86], "se2_pos": [85, 86], "se2pos": [85, 86, 129, 135, 150, 161], "vec2": [85, 86, 90, 150, 161], "move_cmd": [85, 86], "synchro_se2_trajectory_command": [85, 86, 161], "frame_nam": [85, 86, 92, 129, 158, 161, 186], "get_walking_param": [85, 86], "end_time_sec": [85, 86, 115, 161], "center_px_x": 85, "center_px_i": 85, "pick_vec": 85, "pickobjectinimag": 85, "pixel_xi": [85, 92], "transforms_snapshot_for_camera": [85, 92], "frame_name_image_sensor": [85, 92], "camera_model": [85, 92], "pinhol": [85, 92], "halfwai": 85, "bigger": [85, 92], "shoe": 85, "grasp_param": [85, 92], "grasp_palm_to_fingertip": [85, 92], "fingertip": [85, 92], "axis_on_gripper_ewrt_gripp": [85, 92], "axis_to_align_with_ewrt_vis": 85, "allowable_orient": [85, 92], "vector_alignment_with_toler": [85, 92], "axis_to_align_with_ewrt_fram": [85, 92], "threshold_radian": [85, 92], "grasp_params_frame_nam": [85, 92], "promis": 85, "toler": [85, 92, 135, 283], "grasp_request": 85, "manipulationapirequest": [85, 148], "pick_object_in_imag": [85, 92], "cmd_respons": 85, "manipulation_api_command": [85, 148], "manipulation_api_request": [85, 148], "grasp_don": 85, "time_start": 85, "feedback_request": 85, "manipulationapifeedbackrequest": [85, 148], "manipulation_cmd_id": [85, 92], "manipulation_api_feedback_command": [85, 148], "manipulation_api_feedback_request": [85, 148], "manipulationfeedbackst": [85, 90], "stdout": 85, "flush": [85, 119], "failed_st": 85, "manip_state_grasp_fail": [85, 92], "manip_state_grasp_planning_no_solut": [85, 92], "manip_state_grasp_failed_to_raycast_into_map": [85, 92], "manip_state_grasp_planning_waiting_data_at_edg": [85, 92], "manip_state_grasp_succeed": [85, 92], "carry_cmd": 85, "arm_carry_command": [85, 161], "arm_grasp": [85, 235], "ty": [85, 92], "graspabl": 85, "happi": 85, "congratul": [86, 87, 88], "teach": 86, "yield": [86, 92, 120], "bonu": 86, "mscoco_label_map": [86, 87], "yike": 86, "fetch_serv": 86, "lover": 86, "deliv": [86, 159], "vision_tform_person": 86, "person_model": 86, "confidence_person": 86, "geometry_and_fram": [86, 92], "drop_position_rt_vis": 86, "wait_position_rt_vis": 86, "wait_heading_rt_vis": 86, "hand_ewrt_flat_bodi": 86, "qw": [86, 161, 282, 284], "707": 86, "qx": [86, 161, 282, 284], "qy": [86, 161, 282, 284], "qz": [86, 161, 282, 284], "flat_body_q_hand": 86, "flat_body_tform_hand": 86, "vision_tform_flat_bodi": 86, "kinematic_st": [86, 90, 92], "grav_aligned_body_frame_nam": 86, "from_obj": [86, 90, 150], "oppos": 86, "arm_pose_command": [86, 161], "rot": [86, 150, 283], "claw_gripper_open_fraction_command": [86, 161], "build_synchro_command": [86, 161], "arm_concept": 86, "vision_tform_target": 86, "vision_tform_robot": 86, "robot_rt_person_ewrt_vis": 86, "subtract": [86, 92], "linalg": 86, "norm": 86, "robot_rt_person_ewrt_vision_hat": 86, "transform_point": [86, 150], "guard": 86, "divis": 86, "xhat": 86, "zhat": 86, "yhat": 86, "mat": [86, 150], "transpos": 86, "from_matrix": [86, 150, 283], "to_yaw": [86, 150], "algebra": 86, "orthogon": 86, "negat": [86, 90], "euler": [86, 92, 150, 208], "8212": 86, "obvious": [86, 90], "strictli": [86, 90, 92], "worst": [86, 92], "mistak": 86, "pose1": 86, "pose2": 86, "diff_vec": 86, "max_linear_vel": [86, 161], "max_rotation_vel": 86, "max_vel_linear": 86, "max_vel_se2": 86, "se2veloc": [86, 129, 150], "vel_limit": [86, 90, 92, 159, 216], "se2velocitylimit": [86, 90, 135, 159], "max_vel": [86, 92, 161], "mobility_param": [86, 90, 92, 161], "pickup": [86, 87, 92], "uncom": [86, 312], "offboard": 87, "payload_credentials_fil": [87, 185, 319], "coreio_extens": 87, "nvcr": [87, 90], "py3": [87, 90], "setuptool": 87, "certifi": 87, "2022": [87, 247, 299], "charset": 87, "grpcio": [87, 319], "conflict": [87, 92], "idna": 87, "pyjwt": [87, 90, 93, 164], "urllib3": [87, 218, 222, 271], "wrapt": 87, "pillow": [87, 138, 289], "emul": 87, "aarch64": 87, "fetch_detector": 87, "fetch_detector_imag": 87, "rebuild": 87, "couldn": [87, 186], "pythonpath": 87, "create_extens": 87, "fetch_dir": 87, "rf": [87, 244], "coco": [87, 326], "tare": 87, "webpag": [87, 88, 92, 160, 282, 310, 319], "08": 87, "01t19": 87, "150841720z": 87, "150396": 87, "stream_executor": 87, "dso_load": 87, "cc": [87, 89], "libcudart": 87, "746030301z": 87, "745487": 87, "libcuda": 87, "750924622z": 87, "750486": 87, "cuda_gpu_executor": 87, "1001": 87, "numa": 87, "751010254z": 87, "750671": 87, "common_runtim": 87, "gpu_devic": 87, "1734": 87, "751046894z": 87, "pcibusid": 87, "0000": 87, "computecap": 87, "751058702z": 87, "coreclock": 87, "109ghz": 87, "corecount": 87, "devicememorys": 87, "45gib": 87, "devicememorybandwidth": 87, "10gib": 87, "751089006z": 87, "750804": 87, "754844443z": 87, "754675": 87, "libcubla": 87, "754998332z": 87, "754847": 87, "libcublaslt": 87, "758325927z": 87, "758082": 87, "libcufft": 87, "759084714z": 87, "758951": 87, "libcurand": 87, "763559097z": 87, "763253": 87, "libcusolv": 87, "766903301z": 87, "766619": 87, "libcuspars": 87, "767628199z": 87, "767451": 87, "libcudnn": 87, "767854600z": 87, "767739": 87, "768139817z": 87, "767993": 87, "768297418z": 87, "768127": 87, "1872": 87, "770893107z": 87, "770684": 87, "771066195z": 87, "770846": 87, "771105523z": 87, "771119155z": 87, "771229364z": 87, "771027": 87, "771577461z": 87, "771366": 87, "771636085z": 87, "771441": 87, "771737142z": 87, "771559": 87, "463620133z": 87, "463273": 87, "1258": 87, "streamexecutor": 87, "463732677z": 87, "463369": 87, "1264": 87, "463750150z": 87, "463402": 87, "1277": 87, "463926950z": 87, "463786": 87, "464228135z": 87, "464103": 87, "464412680z": 87, "464303": 87, "464568200z": 87, "464460": 87, "1418": 87, "replica": 87, "5377": 87, "mb": [87, 90, 111], "pci": 87, "ssd_resnet": 87, "foundat": 87, "hope": 87, "fun": [87, 88], "excit": 87, "glove": 87, "laundri": 87, "wsl": [88, 89], "www": [88, 294], "launcher": 88, "former": 88, "pathnam": 88, "latter": [88, 90], "path_on_your_comput": 88, "preinstal": 88, "anaconda": 88, "deactiv": [88, 326, 338], "yourcomput": 88, "oct": 88, "gcc": [88, 89], "copyright": [88, 89], "credit": [88, 89], "bat": 88, "pypi": 88, "orbit": [88, 92, 93, 117, 218, 219, 220, 222, 224, 225], "version_str": 88, "reinstal": [88, 270], "grep": 88, "findstr": 88, "jan": [88, 89], "2019": [88, 89], "20180414": [88, 89], "experiment": [88, 89, 90, 92, 216], "trunk": [88, 89], "259383": [88, 89], "traceback": [88, 89, 90, 113, 165], "stdin": [88, 185], "modulenotfounderror": 88, "sale": 88, "unbox": 88, "sticker": 88, "caviti": 88, "fan": [88, 92, 156, 268], "90490007": [88, 89], "19904": [88, 89], "9903": [88, 89], "beta29": [88, 89], "b11205d698e": [88, 89], "06": [88, 299], "retryableunavailableerror": [88, 90, 127], "_inactiverpcerror": [88, 89], "unavail": [88, 90, 92, 127, 160], "transient": [88, 89, 90, 92, 127], "git": [88, 90, 274], "zipfil": 88, "03": [88, 89], "283": 88, "189": 88, "spell": 88, "nogui": 88, "estop_gui": [88, 270, 284], "stood": 88, "sat": 88, "glide": 88, "friend": 88, "fledg": 88, "programm": [88, 90], "unintention": 88, "diff": 88, "571": 89, "glob": [89, 92, 164], "610": 89, "615": 89, "facil": 89, "microservic": 89, "underli": [89, 90, 92, 126, 135, 197, 200], "616": 89, "robotidservic": [89, 162], "getrobotid": [89, 92], "request_timestamp": [89, 92], "1585258227": 89, "nano": 89, "616570624": 89, "client_nam": [89, 92, 142], "bosdynclientbblank02": 89, "28906": 89, "650": 89, "1585258226": 89, "224952738": 89, "224990830": 89, "code_ok": [89, 92], "type_url": 89, "googleapi": 89, "n6": 89, "014": [89, 313], "010": 89, "363": 89, "275": 89, "364": 89, "005": 89, "020": 89, "276": 89, "246": 89, "002": 89, "022": 89, "major_vers": [89, 92], "changeset_d": [89, 92], "1583941992": 89, "changeset": [89, 92], "install_d": [89, 92], "1583953617": 89, "leaseservic": [89, 142], "robotidcli": [89, 162], "id_client": 89, "get_id": [89, 160, 162], "0001": 89, "mnt": 89, "spot_v2_0": 89, "bblank_spot_v2_0_env": 89, "290": 89, "rpc_method": [89, 113, 119], "_channel": 89, "826": 89, "__call__": 89, "_end_unary_response_block": 89, "729": 89, "statuscod": 89, "deadline_exceed": 89, "debug_error_str": 89, "1585323526": 89, "280242100": 89, "src": [89, 90, 294, 320], "file_lin": 89, "1056": 89, "grpc_messag": 89, "grpc_statu": 89, "underpin": 89, "get_robot_state_async": [89, 90, 163, 280], "fut": 89, "get_id_async": [89, 162], "intercept": 89, "state_cli": [89, 156, 163], "1585324337": 89, "644209920": 89, "list_image_sourc": [89, 137], "back_depth": 89, "back_depth_in_visual_fram": 89, "frontleft_depth": [89, 277], "frontleft_depth_in_visual_fram": 89, "frontright_depth": 89, "frontright_depth_in_visual_fram": 89, "left_depth": 89, "left_depth_in_visual_fram": 89, "right_depth": 89, "right_depth_in_visual_fram": 89, "shorthand": 89, "estop_cli": [89, 126], "get_statu": [89, 114, 116, 126, 141, 174], "estop_level_cut": [89, 92, 126, 270], "stop_level_detail": [89, 92], "estop_endpoint": 89, "estopendpoint": [89, 126], "my_estop": 89, "estop_timeout": [89, 126], "force_simple_setup": [89, 126], "assur": 89, "sole": 89, "unique_id": [89, 92, 126, 160], "cut_power_timeout": [89, 92], "time_since_valid_respons": [89, 92], "estopkeepal": [89, 90, 126], "estop_keep_al": 89, "estop_level_non": [89, 92, 126], "996009984": 89, "keep_running_cb": [89, 126, 142], "frozen": [89, 90, 92, 321], "holder": [89, 92, 142], "commenc": 89, "list_leas": [89, 142], "zbewqfkjbtznjrxu": 89, "lease_own": [89, 92, 142], "lease_keep_al": 89, "hellospotclientlaptop": 89, "kbrandes01": 89, "32049": 89, "shore": [89, 92], "is_powered_on": [89, 156, 160], "skew": [89, 92, 150, 181, 209, 330], "robotcommandservic": [89, 156, 161], "selfright": [89, 92, 161], "safe_power_off": [89, 90, 92, 156], "blocking_stand": [89, 161], "quit": [89, 284], "trivial": 89, "eulerzxi": [89, 161, 208], "footprint_r_bodi": [89, 161], "synchro_stand_command": [89, 90, 161], "body_height": [89, 161], "power_off": [89, 156, 160], "cut_immedi": [89, 160], "recorded_data": [90, 92], "custom_param": [90, 92, 138, 211], "asynchron": [90, 92, 105, 106, 117, 147, 326], "get_choreography_status_async": [90, 97], "getchoreographystatu": 90, "get_choreography_statu": [90, 97], "flat_ground": [90, 92], "ground_clutter_mod": [90, 92, 216], "hri": 90, "hri_behavior": [90, 92], "globalparamet": 90, "play_alert_behavior": [90, 92], "play_undock_behavior": [90, 92], "undock": [90, 92, 124, 258], "createmissiontext": 90, "among": [90, 92, 150, 282], "active_mission_text": [90, 92], "querystoredcapturesrespons": 90, "blackboard": [90, 92, 216], "conting": 90, "aforement": 90, "hood": 90, "storedatastream": [90, 92], "querystoredcaptur": [90, 92], "store_file_async": [90, 118], "store_data_as_chunks_async": [90, 118], "query_stored_captures_async": [90, 118], "test_base_cli": 90, "excess": 90, "scanner": 90, "gb": 90, "offload": [90, 297, 321], "include_larg": [90, 92], "uploadgraphstream": [90, 92], "downloadgraphstream": [90, 92], "classifi": [90, 92], "hazard_detection_mod": [90, 92], "mobilityparam": [90, 161], "strict": [90, 92], "stairs_mode_prohibit": [90, 92], "stairsmod": [90, 161], "nogoregionproperti": 90, "gotoparam": 90, "av": 90, "setaudiovisualcolorparam": 90, "buzzernoteparam": 90, "setallcolorparam": 90, "set_audio_visual_color_param": [90, 92], "buzzer_note_param": [90, 92], "set_all_color_param": [90, 92], "custom_gait": 90, "enable_body_offset": [90, 92], "enable_body_mot": [90, 92], "enable_swings_xi": [90, 92], "animatedcycleparam": 90, "animated_cycle_param": [90, 92], "animate_move_params_fil": [90, 96], "convert_animation_file_to_proto": [90, 96], "responsecontext": [90, 165, 215], "oneof_param_to_dict": [90, 166], "command_lin": [90, 112, 324], "survei": 90, "millimet": 90, "focu": [90, 92, 177, 288], "setlocalizationrequest": 90, "status_no_map_load": [90, 92], "setlocalizationrespons": 90, "granular": 90, "box_region": [90, 92], "2d": [90, 92, 138, 150, 161], "orientedbox2": 90, "max_corridor_dist": [90, 92], "lostdetectorstrict": 90, "regionwithfram": 90, "therebi": 90, "vicin": 90, "unprotect": 90, "lost_detector_strict": [90, 92], "lost_detector_strictness_permiss": [90, 92], "data_filt": [90, 92], "data_filter_ignor": [90, 92], "lost_detector_st": [90, 92], "getlocalizationstaterespons": 90, "featurematchingparam": 90, "feature_matching_param": [90, 92], "licenseerror": [90, 127, 135], "upload_graph": [90, 135], "start_record": [90, 159], "create_waypoint": [90, 159], "unsetstatuserror": [90, 127, 137, 155], "bosdynnavigaterout": 90, "graph_nav_pb2": 90, "navigaterouterequest": 90, "bosdyngraphnavloc": 90, "optionslist": 90, "uint32": [90, 92], "behavior_st": [90, 92], "unreadi": 90, "heurist": [90, 92], "areacallbackdata": 90, "param_collect": [90, 92], "migrat": 90, "playbackmod": 90, "skip_docking_after_complet": [90, 92], "area_callback_look_both_wai": 90, "get_depth_plus_visual_imag": [90, 276], "gps_listen": [90, 133, 282], "bynav": 90, "c2": 90, "m2x": 90, "blox": 90, "zed": 90, "f9r": 90, "quotat": 90, "endors": 90, "wherebi": 90, "remote_mission_cli": [90, 315], "fight": [90, 283], "replay_miss": [90, 295, 316], "simple_alert_serv": [90, 297], "network_compute_status_success": [90, 92], "view_gp": [90, 286], "workload": 90, "arm_gcod": 90, "cfg": [90, 234], "patch": [90, 218, 300], "patch_resourc": [90, 218], "patch_anomaly_by_id": [90, 218], "patch_bulk_close_anomali": [90, 218], "get_site_walk_archive_by_id": [90, 218], "post_backup_task": [90, 218], "delete_backup": [90, 218], "sitewalk": [90, 218, 265], "archiv": [90, 218, 222, 265, 271, 282, 294, 310, 324], "backup": [90, 218, 265], "get_backup": [90, 301], "get_anomali": [90, 300], "patch_anomali": [90, 300], "export_site_walk_arch": [90, 303], "siteel": [90, 218, 303], "sitedock": [90, 218, 303], "webhook": [90, 218, 219, 220, 222, 265], "webhook_integr": [90, 310], "maniupl": 90, "said": 90, "send_robot_back_to_dock": [90, 307], "post_export_as_walk": [90, 218, 222], "post_dispatch_mission_to_robot": [90, 218, 222], "skip_initi": [90, 218, 222], "return_animation_names_onli": [90, 92, 97], "getchoreographysequencerequest": 90, "correspondingli": 90, "getanim": [90, 92, 97], "contact_st": [90, 92], "robotstatestreamrespons": 90, "publish": [90, 92, 119], "nmeapars": 90, "baud": 90, "power_off_robot": [90, 156], "safe_power_off_robot": [90, 156], "energ": 90, "shutdown": [90, 100, 102, 123, 126, 141, 142, 154, 160, 165, 185, 315], "force_sigint_captur": [90, 165, 185], "area_callback_service_util": [90, 103], "traversal_y_offset": [90, 92], "flip": [90, 92, 161], "logitech": 90, "inc": 90, "hd": 90, "pro": 90, "c920": 90, "site_el": 90, "logannotationservic": 90, "application_token": 90, "ground_mu_hint": [90, 92, 159], "grated_floor": [90, 159], "foot_height_result": 90, "leg_pair_result": 90, "gpio": [90, 266], "133": 90, "148": 90, "440": 90, "320": 90, "453": 90, "focus_st": [90, 92], "spotcamalign": 90, "target_stow_behavior": [90, 92], "disable_post_action_clos": [90, 92], "completedrout": 90, "post_webhook": [90, 218, 222], "calendar": [90, 218, 222, 306], "post_calendar_ev": [90, 218, 222], "get_calendar": [90, 218, 222], "gsof": 90, "ubx": 90, "oem7": 90, "swing_height_auto": [90, 92], "swingheight": 90, "descentprefer": 90, "stairdata": 90, "descent_preference_prefer_revers": [90, 92], "descent_preference_non": [90, 92], "descent": 90, "catwalk": 90, "signal_help": 90, "unit_help": 90, "test_signals_help": 90, "querymaxcaptureid": [90, 92], "largest": [90, 92, 166], "disable_velocity_limit": [90, 92], "disable_safety_check": [90, 92], "armimpedancecommand": [90, 161], "unsaf": [90, 92], "status_trajectory_cancel": [90, 92], "instabl": [90, 92], "network_compute_status_analysis_fail": [90, 92], "networkcomputestatu": 90, "blurri": 90, "retry_count": [90, 92], "failurebehavior": 90, "make_list_param_spec": [90, 166], "dict_params_to_dict": [90, 166], "double_spec_to_default": [90, 166], "coercion": [90, 166], "int_param_coerce_to": [90, 166], "dict_param_coerce_to": [90, 166], "resetsafetystop": [90, 92], "srsf": [90, 92, 156, 317], "blockag": 90, "entiti": [90, 92], "reconnect": 90, "compositorcli": [90, 170], "coord": [90, 92, 170, 299], "set_ir_meter_overlai": [90, 170], "set_ir_meter_overlay_async": [90, 170], "ptzclient": [90, 176, 177], "focus_mod": [90, 177], "set_ptz_focus_st": [90, 177], "set_ptz_focus_state_async": [90, 177], "to_numpi": [90, 150], "from_numpi": [90, 150], "get_info": [90, 211], "getinfoaschunk": [90, 92], "unimpl": [90, 315], "add_payload_credentials_file_argu": [90, 185], "hr0": 90, "number_of_step": [90, 92], "pixel_to_camera_spac": [90, 137], "imagecaptureandsourc": [90, 137], "imagerespons": [90, 137, 138, 165, 328], "outputimag": 90, "root_id": [90, 92], "elementidentifi": 90, "navigation_id": [90, 92], "options_list": [90, 92], "impl": [90, 92, 100, 213], "create_strict_vers": [90, 162], "distutil": [90, 162], "version_tupl": [90, 162], "arm0": [90, 92], "spotarm": [90, 92], "subcommand": [90, 92, 112], "authenticate_with_api_token": [90, 218, 222], "authenticate_with_password": [90, 222], "favor": [90, 92, 161], "site_walk": 90, "get_site_walk": [90, 218, 222], "circular": [90, 92, 159], "versu": [90, 227, 232], "weather": [90, 299], "redund": [90, 92], "lte": 90, "leica": [90, 282], "ga03": [90, 282], "hypothet": 90, "mileag": 90, "pptx": [90, 272], "slideshow": [90, 272], "fanoffservic": 90, "harmless": 90, "_clear_graph_and_cach": 90, "_navigate_to_gps_coord": 90, "_parse_gps_goal_from_arg": 90, "_navigate_to_parsed_gps_coord": 90, "bubbl": 90, "networkrequestcallbackservic": 90, "poweroffservic": 90, "trajectory_command": 90, "pgm": [90, 137], "localgridrespons": 90, "min_timeout": [90, 92, 114], "propag": 90, "path_following_mod": [90, 92, 216], "most_restrictive_travel_param": [90, 216], "get_run_archives_by_id": [90, 218, 222], "crank": [90, 92, 229], "status_not_detect": [90, 92], "doorcommand": 90, "object_lifetim": [90, 92], "status_invalid_graph": [90, 92], "validationstatu": 90, "forgiv": 90, "exit_st": [90, 92], "sequenceinfo": 90, "execution_id": [90, 92], "executechoreographyrespons": [90, 97], "choreographystatusrespons": 90, "activemov": 90, "custom_gait_param": [90, 92], "leg_joint_param": [90, 92], "is_loop": [90, 92], "entrance_st": [90, 92], "choreographysequ": [90, 97], "explicit": [90, 92], "icmp": 90, "liveness_timeout_sec": [90, 92, 123], "unping": 90, "ipv4_address": [90, 92], "link_spe": [90, 92], "negoti": 90, "irmeteroverlai": 90, "streamparam": 90, "availablemodel": 90, "dataacquisitionstor": [90, 92, 252], "clearbehaviorfault": 90, "unclear": [90, 92, 161], "startrequest": 90, "impairedstatu": 90, "set_localization_full_respons": [90, 135], "recordingcli": 90, "start_recording_ful": [90, 159], "get_cached_hardware_hardware_configur": [90, 160], "send_add_mutation_request": [90, 186], "send_delete_mutation_request": [90, 186], "loadmissionaschunks2": [90, 92], "getmissionaschunk": [90, 92], "assembl": [90, 120], "straightforward": 90, "input_data_bridg": [90, 92], "image_rotation_angl": [90, 92], "alert_data": [90, 92, 297], "roi_output_data": [90, 92], "grippercameraparam": [90, 136], "cameramod": 90, "straightstaircas": 90, "staircasewithland": 90, "precise_tim": [90, 92], "is_stal": [90, 92], "leaseresourc": [90, 142], "basecli": [90, 97, 99, 104, 106, 107, 108, 113, 114, 116, 118, 119, 121, 122, 123, 124, 125, 126, 128, 132, 134, 135, 136, 137, 139, 140, 141, 142, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 186, 211, 214], "chunk_messag": [90, 113, 120], "data_chunk": [90, 113, 120], "request_trim_for_log": [90, 113], "response_trim_for_log": [90, 113], "prematur": [90, 92], "status_keep_alive_motor_off": 90, "status_estop": [90, 92], "keepalivemotorsofferror": [90, 156], "estoppederror": [90, 156], "unknowndnsnameerror": [90, 127], "rpcerror": [90, 107, 108, 111, 114, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 132, 135, 137, 146, 149, 151, 152, 153, 154, 155, 156, 160, 161, 163, 181, 186, 211, 214], "unabletoconnecttoroboterror": [90, 127, 319], "dataacquisitioncap": [90, 117], "unregisteredservicenameerror": [90, 160], "unlimit": [90, 92], "1e6": 90, "venv": [90, 274], "synchro": [90, 161], "localnav": 90, "mess": 90, "introductori": [90, 239, 289, 302, 303, 304, 305, 307, 308, 309, 310], "nogo": 90, "arm_constrained_manipul": 90, "impedance_control": 90, "compositor": [90, 168, 324], "reticl": [90, 170], "exposure_mod": 90, "exposure_dur": [90, 92], "streamqualitycommand": 90, "prohibit": 90, "reprocess": 90, "unus": [90, 92, 117], "pyqt": [90, 333], "spring": [90, 92], "peg": [90, 92], "hole": [90, 92], "stiff": [90, 92], "armsurfacecontact": [90, 104, 234], "overrod": [90, 273], "30cm": 90, "willing": [90, 92], "perceiv": [90, 92, 274], "cord": 90, "known_sequ": [90, 92], "updatedockingparam": 90, "dockingcommandfeedbackrequest": 90, "status_error_stuck": [90, 92], "dockingcommandfeedbackrespons": [90, 124], "matrixf": 90, "matrixint64": 90, "matrixint32": 90, "refin": [90, 92, 135], "icp": [90, 92, 135], "status_visual_alignment_fail": [90, 92], "blocked_path_wait_tim": [90, 92], "route_following_statu": [90, 92], "blockage_statu": [90, 92], "clientmetadata": 90, "recording_started_on": [90, 92], "waypointsnapshot": [90, 135], "disable_directed_explor": [90, 92, 216], "startrecordingrespons": 90, "impaired_st": [90, 92], "getrecordstatusrespons": 90, "respect_child_failur": [90, 92], "bosdynrecordev": 90, "succeed_earli": [90, 92], "additional_paramet": [90, 92], "bosdyngrippercameraparamsst": 90, "setgrippercameraparam": 90, "cleared_cause_fall_blackboard_nam": [90, 92], "cleared_cause_hardware_blackboard_nam": [90, 92], "cleared_cause_lease_timeout_blackboard_nam": [90, 92], "formatblackboard": 90, "stair_mod": 90, "state_arm_joint_check": [90, 92], "spotcheckfeedbackrespons": [90, 180], "endstop": [90, 92, 180], "underwai": [90, 92], "error_arm_check_collis": [90, 92], "error_arm_check_timeout": [90, 92], "error_encoder_shift": [90, 92], "error_collis": [90, 92], "jointkinematiccheckresult": 90, "kin": [90, 92], "cal": [90, 92, 180], "status_calibration_verification_fail": [90, 92], "cameracalibrationfeedbackrespons": 90, "autowalkcli": [90, 108], "logginghandl": [90, 119], "data_buff": [90, 119, 254], "invalidgravityalignmenterror": [90, 149], "map_process": [90, 149], "disagre": [90, 149], "payloadregistrationkeepal": [90, 154], "toomanyrequestserror": [90, 127], "powercli": [90, 156, 176, 273, 317], "fancontroltemperatureerror": [90, 156], "robotimpairederror": [90, 135, 159], "graphnavrecordingservicecli": [90, 159], "sync_with_services_list": [90, 160], "update_secure_channel_port": [90, 160], "payload_estimation_command": [90, 161], "exc_callback": [90, 165], "cameraspotchecktimedouterror": [90, 180], "cameraspotcheckfeedbackerror": [90, 180], "cameracalibrationresponseerror": [90, 180], "spot_check": [90, 180], "remotecli": [90, 210, 214, 315], "processor": [90, 92, 97, 98, 113, 114, 116, 118, 119, 121, 124, 135, 142, 156, 160, 186, 211, 214, 318, 326], "_build_establish_session_request": 90, "_build_tick_request": 90, "remote_cli": [90, 214], "lease_resource_hierarchi": [90, 143], "lease_valid": [90, 144], "spot_cam": [90, 98, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 324], "lights_help": [90, 173], "stair_hint": [90, 92, 161], "stairs_mod": [90, 92, 161], "logannotationhandl": 90, "ambigu": [90, 92, 156], "safe_power_off_motor": [90, 156], "_should_send_app_token_on_each_request": 90, "crlf": 90, "blink": [90, 173, 251, 318], "webrtc": [90, 324], "relianc": 90, "cli": [90, 185, 248, 318, 328], "stitch": [90, 92, 267, 318, 324], "rebuilt": 90, "occlud": 90, "safepoweroff": 90, "poweroff": 90, "unsafe_force_command": [90, 92], "disable_stair_error_auto_desc": [90, 92], "terrainst": 90, "is_unsafe_to_sit": [90, 92], "prove": 90, "frustrat": 90, "stale_tim": [90, 92], "disappear": 90, "dataacquisitionrequest": 90, "networkcomputecaptur": 90, "status_unsupported_pixel_format_request": [90, 92], "status_unsupported_resize_ratio_request": [90, 92], "alertdata": [90, 118], "storealertdata": [90, 92], "liststoredalertdata": [90, 92], "grippercameraparamservic": [90, 136], "raycastservic": [90, 158], "rai": [90, 98, 267], "selfrightcommand": 90, "standingst": 90, "enable_robot_locomot": [90, 92], "constrainedmanipulationcommand": 90, "bodyassistformanipul": 90, "bodycontrolparam": [90, 161], "base_offset_rt_footprint": [90, 92], "depth_image_to_pointcloud": [90, 137], "arm_joint_move_help": [90, 161], "blocking_sit": [90, 161], "blocking_selfright": [90, 161], "read_payload_credenti": [90, 185], "draw_spher": [90, 186], "draw_oriented_bounding_box": [90, 186], "must_acquir": [90, 142], "return_at_exit": [90, 142, 283], "dockproperti": 90, "from_prior": [90, 92], "status_error_unrefined_prior": [90, 92], "status_incompatible_sensor": [90, 92], "sensorcompatibilitystatu": 90, "status_record": [90, 92], "state_gripper_c": [90, 92], "state_sit_down_after_run": [90, 92], "error_gripper_cal_timeout": [90, 92], "error_invalid_range_of_mot": [90, 92], "followarmcommand": 90, "disable_walk": [90, 92], "reproduc": [90, 92], "enable_body_yaw_assist_for_manipul": [90, 92], "enable_hip_height_assist_for_manipul": 90, "enable_": [90, 92], "_for_manipul": [90, 92], "finer": [90, 92], "swing_direction_insw": [90, 92], "swing_direction_outsw": [90, 92], "swing_direction_pul": [90, 92], "swing_direction_push": [90, 92], "concern": 90, "add_common_argu": [90, 185], "bddf_download": [90, 110, 247], "unrecongizedcommanderror": [90, 135], "unrecognizedcommanderror": [90, 135], "message_read": [90, 200], "channel_name_to_series_decriptor": [90, 200], "channel_name_to_series_descriptor": [90, 200], "absenc": 90, "listleas": [90, 92], "status_resource_already_claim": [90, 92], "level_settle_then_cut": 90, "safer": 90, "queryabl": [90, 160, 174, 320], "illumin": 90, "notreadyyeterror": [90, 159], "cleaner": 90, "getsystemlog": [90, 92], "factori": [90, 92], "diagnosi": [90, 92], "se2trajectori": 90, "colormap_inferno": [90, 92], "colormap_turbo": [90, 92], "base_tform_sensor": [90, 92], "base_tfrom_sensor": [90, 92], "decode_token": [90, 164], "log_token_time_remain": [90, 164], "shortest": [90, 92, 141], "regain": 90, "handwritten": 90, "lever": [90, 92], "cabinet": [90, 92, 229], "setptzfocu": 90, "getptzfocu": 90, "mountframenam": 90, "updatepayloadattach": [90, 92], "status_stop": [90, 92, 161], "stopmiss": [90, 92], "spotcaml": 90, "spotcamresetautofocu": 90, "autofocu": [90, 92, 176, 177], "storemetadata": 90, "dataacquisit": [90, 115], "restartwhenpaus": 90, "irenabledis": [90, 92], "emiss": [90, 92], "systemfault": 90, "hinder": 90, "robotimpairedst": 90, "natur": [90, 92, 328], "navigationfeedbackstatu": 90, "routefollowingparam": 90, "navigate_to_ful": [90, 135], "navigate_route_ful": [90, 135], "navigaterouterespons": [90, 135], "status_no_path": [90, 92], "status_not_localized_to_map": [90, 92], "downloadwaypointsnapshotrequest": 90, "status_too_far_from_existing_map": [90, 92], "chunk": [90, 92, 98, 113, 271], "loadmissionrequest": 90, "failednod": 90, "planner": [90, 92], "carriabl": [90, 92], "apigraspoverrid": 90, "not_carri": 90, "carriable_and_stow": 90, "dock_status_undock": [90, 92], "link_status_detect": [90, 92], "ongo": 90, "dockingcommandrespons": [90, 124], "status_error_gripper_holding_item": [90, 92], "status_error_not_avail": [90, 92], "status_error_system": [90, 92], "docking_command_ful": [90, 124], "docking_command_feedback_ful": [90, 124], "acquire_data_from_request": [90, 114], "dataservic": [90, 121], "status_overridden": [90, 92], "manipulationapi": [90, 92, 148], "safe_power_cycle_robot": [90, 156], "obstacleparam": 90, "logpreservehint": [90, 119], "persistentrpcerror": [90, 127], "retryablerpcerror": [90, 127], "ensure_secure_channel": [90, 160], "status_invalid_request": [90, 92], "robotcommandrespons": 90, "invalidrequesterror": [90, 127, 135, 158, 160, 161], "status_motors_on": [90, 92], "payloadregistr": [90, 154], "429": 90, "placement": [90, 92], "test_active_leas": [90, 142, 144], "make_subleas": 90, "sublease_nam": [90, 142], "subleas": [90, 100, 142], "enable_grated_floor": [90, 92], "supersed": 90, "grated_surfaces_mod": [90, 92], "grate": [90, 92, 159], "docking_command_feedback": [90, 124], "dockingcli": [90, 124], "anymor": 90, "payloadcredenti": 90, "set_response_head": 90, "irenabledisableservic": [90, 140], "qt": [90, 270], "cost": [90, 92, 283], "thank": 90, "aaron": 90, "gokasian": 90, "congest": [90, 92, 178], "escap": 90, "initializelen": [90, 92], "recorddatablobsrequest": [90, 165], "commit": [90, 92], "write_sync": [90, 119], "add_blob": [90, 119, 254], "add_protobuf": [90, 119], "databuffercli": [90, 119, 165], "setpowerstatu": [90, 92], "cyclepow": [90, 92], "status_queu": 90, "grow": 90, "max_status_queue_s": [90, 126], "hardwareconfigur": [90, 160, 163], "codec": [90, 320], "substr": [90, 299], "confus": [90, 92], "david": 90, "levata": 90, "silent": 90, "ON": [90, 92], "variant": 90, "setircolormap": [90, 92], "getircolormap": [90, 92], "radiometr": [90, 92], "setirmeteroverlai": [90, 92], "builder": [90, 324], "build_on_command": [90, 161], "merg": [90, 92, 159], "manipulator_st": [90, 92], "has_arm": [90, 97, 160, 163], "armsurfacecontactservic": [90, 104], "payloadestimationcommand": 90, "pixel_format_greyscale_u16": [90, 92], "logpoint": [90, 174, 324], "queu": [90, 92], "queue_statu": [90, 92], "status_error_not_dock": [90, 92], "restrict_fiducial_detections_to_target_waypoint": [90, 92], "destination_waypoint_tform_body_go": [90, 92, 135], "command_id": [90, 92, 124, 135, 156, 273], "status_unrecognized_command": [90, 92], "transform_vec3": [90, 150], "default_rpc_timeout": 90, "starter": 90, "realist": 90, "clearer": [90, 298], "popup": [90, 277], "boiler": [90, 92], "status_near_go": [90, 92], "bodymovementstatu": [90, 161], "handlestal": 90, "is_estop": [90, 126, 160], "status_unsupported_image_format_request": [90, 92], "status_image_data_error": [90, 92], "ricoh_client_mod": [90, 318], "textmsg": [90, 112], "databuff": [90, 92, 115], "aka": [90, 92], "servicefaultst": 90, "dataset": [90, 326], "microphon": [90, 92, 169], "createwaypointrespons": 90, "jitter": 90, "covari": [90, 92], "spotcheckcommandrespons": 90, "commandtimedouterror": [90, 156, 160, 161], "getfeatureen": [90, 92], "licenseservic": [90, 145], "cause_lease_timeout": [90, 92], "status_run": [90, 92], "se3covari": 90, "sit_command": 90, "synchro_sit_command": [90, 161], "stand_command": 90, "velocity_command": 90, "synchro_velocity_command": [90, 161], "synchro_se2_trajectory_point_command": [90, 161], "reposit": [90, 92, 161, 327], "opengl": [90, 328], "shader": [90, 328], "rightsid": 90, "gone": [90, 92], "logannotationcli": 90, "licensecli": [90, 145], "status_behavior_fault": [90, 92], "behaviorfaulterror": [90, 161], "responseerror": [90, 97, 99, 106, 107, 108, 113, 114, 122, 123, 124, 126, 127, 128, 135, 137, 141, 142, 147, 149, 151, 152, 154, 155, 156, 158, 159, 160, 161, 180, 211, 214], "status_missing_fiduci": [90, 92], "medialogservic": [90, 174], "unstitch": 90, "obsolet": 90, "renew": 90, "gcp": [90, 312], "amazon": [90, 248], "s3": [90, 248, 271], "graph_nav_view_map": 90, "mission_record": [90, 296], "compositorservic": [90, 170], "streamqualityservic": [90, 178], "ptzservic": [90, 177], "lightingservic": [90, 172], "audioservic": [90, 169], "speaker": [90, 92], "networkservic": [90, 175], "healthservic": [90, 171], "versionservic": [90, 179], "proxi": [90, 92, 127], "directory_modif": [90, 256], "payloadregistrationservic": [90, 154], "await": 90, "worldobjectservic": [90, 186], "fiducial_follow": [90, 274], "add_image_coordin": 90, "localgridservic": [90, 146], "classif": 90, "basic_streaming_visu": [90, 334], "extrins": [90, 92], "intrins": [90, 92, 137], "revamp": 90, "overhead": 90, "outlier": 90, "outag": 90, "cliff": [90, 92], "frametyp": 90, "frame_trajectory_command": [90, 275], "frame_ko": 90, "odom_frame_nam": 90, "frame_vo": 90, "frame_bodi": 90, "body_frame_nam": 90, "permissiondeniederror": [90, 127], "responsetoolargeerror": [90, 127], "notfounderror": [90, 127], "transientfailureerror": [90, 127], "timesyncrequir": [90, 127], "nosuchleas": [90, 142], "leasenotownedbywallet": [90, 142], "roboterror": [90, 160], "nonexistentauthorityerror": [90, 127], "unregisteredserviceerror": [90, 160], "unregisteredservicetypeerror": [90, 160], "unknownframeerror": [90, 158, 161], "vel": [90, 150], "se3trajectorypoint": 90, "labelprefix": 90, "addlogannotationrespons": 90, "vo": 90, "rt": [90, 92], "samplecommon": 90, "get_payload": 90, "self_registr": 90, "estopnogui": 90, "get_mission_st": [90, 278], "get_world_object": [90, 281], "world_object_mut": 90, "xbox_control": [90, 338], "tow": 90, "imagetyp": [90, 138], "payloadservic": [90, 153], "spotcheckservic": [90, 180], "terrainparam": 90, "metal": [90, 92, 159], "flashlight": 90, "ellipt": 90, "curv": 90, "ecdsa": 90, "cryptographi": 90, "unicod": [90, 92], "se2velocitycommand": 90, "slew": 90, "locomotionhint": 90, "jog": [90, 338], "trot": [90, 92], "oauth": 92, "additional_data": 92, "struct": [92, 138], "severity_level_unknown": 92, "ishighest": 92, "severity_level_info": 92, "severity_level_warn": 92, "actionpres": 92, "severity_level_error": 92, "fatal": 92, "severity_level_crit": 92, "immediateattent": 92, "measured_pos_tracking_error": 92, "measured_rot_tracking_error": 92, "measured_pos_distance_to_go": 92, "measured_rot_distance_to_go": 92, "arespecifi": 92, "un": 92, "defaultsto": 92, "withwrist": 92, "theroot_frame_nam": 92, "pose_trajectory_in_task": 92, "task_t_tool": 92, "maximum_acceler": 92, "doublevalu": [92, 96], "max_linear_veloc": 92, "max_angular_veloc": 92, "max_pos_tracking_error": 92, "trajectorybefor": 92, "isexceed": 92, "beignor": 92, "max_rot_tracking_error": 92, "force_remain_near_current_joint_configur": 92, "preferred_joint_configur": 92, "x_axi": 92, "y_axi": 92, "z_axi": 92, "rx_axi": 92, "ry_axi": 92, "rz_axi": 92, "wrench_trajectory_in_task": 92, "boolvalu": [92, 283], "arecommand": 92, "thisprotect": 92, "arm_cartesian_feedback": 92, "arm_joint_move_feedback": 92, "named_arm_position_feedback": 92, "arm_velocity_feedback": 92, "arm_gaze_feedback": 92, "arm_stop_feedback": 92, "arm_drag_feedback": 92, "arm_impedance_feedback": 92, "arm_cartesian_command": [92, 161], "arm_joint_move_command": [92, 161], "named_arm_position_command": 92, "arm_velocity_command": 92, "arm_gaze_command": [92, 161], "arm_stop_command": 92, "arm_drag_command": 92, "arm_impedance_command": 92, "damp": 92, "thefollow": 92, "desired_tool": 92, "desired_tool_at_end": 92, "measured_tool_at_start": 92, "desired_tool_tform_tool": 92, "diagonal_stiffness_matrix": 92, "commanded_wrench_from_stiffness_at_tool_in_desired_tool": 92, "desired_tool_at_end_tform_tool": 92, "measured_tool_at_start_tform_tool_in_task": 92, "thedesired_tool": 92, "nm": [92, 161, 244], "commanded_wrench_from_damping_at_tool_in_desired_tool": 92, "commanded_wrench_from_feed_forward_at_tool_in_desired_tool": 92, "total_commanded_wrench_at_tool_in_desired_tool": 92, "desired_toolfram": 92, "max_force_mag": 92, "max_torque_mag": 92, "total_measured_wrench_at_tool_in_desired_tool": 92, "theunderli": 92, "todetermin": 92, "inhol": 92, "thehol": 92, "couldmov": 92, "link_wr1": 92, "frameat": 92, "whichw": 92, "ofth": 92, "task_tform_desired_tool": 92, "thisdesired_tool": 92, "ourtool": 92, "byour": 92, "matric": [92, 150], "feed_forward_wrench_at_tool_in_desired_tool": 92, "of6": 92, "6x6": [92, 150], "tx": 92, "tz": 92, "alongth": 92, "diagonal_damping_matrix": 92, "6doubl": 92, "valuesalong": 92, "exert": 92, "thatth": 92, "requestedforc": 92, "60n": 92, "deviatessuch": 92, "therequest": 92, "15nm": 92, "ifdisable_safety_check": 92, "planner_statu": 92, "planned_point": 92, "knot": [92, 161, 242], "andveloc": 92, "fromjoint": 92, "appenda": 92, "theplann": 92, "ofplanned_point": 92, "amov": 92, "plannedpoint": 92, "time_to_go": 92, "formultipl": 92, "thisi": 92, "coast": 92, "deceler": 92, "wise": 92, "cubic": 92, "reference_tim": 92, "referencetim": 92, "beth": 92, "maximum_veloc": 92, "toachiev": 92, "time_since_refer": [92, 161], "disable_body_force_limit": 92, "velocity_in_frame_nam": 92, "linear_veloc": 92, "unitless": 92, "cylindrical_veloc": 92, "cartesian_veloc": 92, "angular_velocity_of_hand_rt_odom_in_hand": 92, "expressedin": 92, "thefin": 92, "twist": 92, "handto": 92, "gazing_at_target": 92, "targetrot": 92, "gaze_to_target_rotation_measur": 92, "hand_position_at_go": 92, "hand_distance_to_goal_measur": 92, "hand_roll_at_go": 92, "hand_roll_to_target_roll_measur": 92, "target_trajectory_in_frame1": 92, "frame1": 92, "frame1_nam": 92, "tool_trajectory_in_frame2": 92, "frame2": 92, "frame2_nam": [92, 161], "wrist_tform_hand": 92, "wrist_tform_hand_camera": 92, "target_trajectory_initial_veloc": 92, "startingposit": 92, "status_trajectory_complet": 92, "status_trajectory_stal": 92, "thetrajectori": 92, "baserobot": 92, "thegoal": 92, "axis_mode_posit": 92, "axis_mode_forc": 92, "desired_toolin": 92, "farfrom": 92, "loweringstiff": 92, "planner_status_unknown": 92, "planner_status_success": 92, "planner_status_modifi": 92, "forexampl": 92, "reallyshort": 92, "butwon": 92, "aminimum": 92, "planner_status_fail": 92, "possiblethat": 92, "optimalsolut": 92, "isavoid": 92, "status_tool_trajectory_stal": 92, "toofar": 92, "continuealong": 92, "status_stalled_holding_item": 92, "notstow": 92, "positions_stow": 92, "carry_st": 92, "carry_state_carri": 92, "thesesitu": 92, "blockingcondit": 92, "andth": 92, "positions_unknown": 92, "positions_carri": 92, "handslightli": 92, "positions_readi": 92, "infront": 92, "xdirect": 92, "insteadof": 92, "carry_state_carriable_and_stow": 92, "allowth": 92, "press_force_percentag": 92, "alsob": 92, "xy_admitt": 92, "admitt": 92, "z_admitt": 92, "xy_to_z_cross_term_admitt": 92, "forcein": 92, "bias_force_ewrt_bodi": 92, "leaninto": 92, "is_robot_following_hand": 92, "reaction": 92, "stiffer": 92, "admittance_setting_unknown": 92, "admittance_setting_off": 92, "admittance_setting_norm": 92, "admittance_setting_loos": 92, "admittance_setting_stiff": 92, "admittance_setting_very_stiff": 92, "willb": 92, "invalidusernam": 92, "bebecaus": 92, "theuser": 92, "clientsshould": 92, "sinceauthent": 92, "unsuccessfulattempt": 92, "afterth": 92, "http2": 92, "automaticallytrigg": 92, "clear_buff": [92, 107], "invalid_param": 92, "status_invalid_param": 92, "max_displac": 92, "whereautoreturn": 92, "max_dur": [92, 161], "acode_invalid_request": 92, "getconfigur": 92, "treat_warnings_as_error": 92, "thatar": 92, "issueswith": 92, "walkbecaus": 92, "missioncompil": 92, "element_identifi": 92, "inputwalk": 92, "docking_nod": 92, "loop_nod": 92, "mission_id": [92, 218, 222], "status_compile_error": 92, "status_validate_error": 92, "stateless": 92, "remote_grpc": 92, "execute_choreographi": [92, 97], "hadtwo": 92, "actioni": 92, "bothcallback": 92, "parallel": [92, 273, 274, 325], "parametersdirectli": 92, "acquire_data_request": 92, "theelement": 92, "completion_behavior": 92, "last_known_cap": 92, "record_time_imag": 92, "thespec": 92, "servicesevolv": 92, "andprovid": 92, "canva": 92, "fact": [92, 166], "isnot": 92, "sequence_nam": [92, 97], "rpc_timeout": [92, 119], "lease_resourc": [92, 214], "happenif": 92, "specificcamera": 92, "inclin": 92, "robot_body_sit": 92, "robot_body_pos": 92, "spot_cam_l": 92, "spot_cam_ptz": 92, "arm_sensor_point": 92, "spot_cam_align": 92, "joint_trajectori": 92, "commandth": 92, "rough": 92, "platealign": 92, "pose_trajectory_rt_target": 92, "target_tform_measured_offset": 92, "waypointthi": 92, "footprintsin": 92, "body_assist_param": 92, "force_stow_overrid": 92, "runth": 92, "settingthi": 92, "target_tform_bodi": 92, "relativeto": 92, "genericpos": 92, "target_tform_sensor": 92, "final_zoom": 92, "target_sensor_id": 92, "sensor_id": 92, "scene_object_id": 92, "is_skip": 92, "ledmai": 92, "fullbright": 92, "ptz_posit": 92, "battery_start_threshold": 92, "batterylevel": 92, "intim": 92, "battery_stop_threshold": 92, "therobot": 92, "startthreshold": 92, "animated_mov": [92, 97], "dock_id": [92, 124, 258], "thefiduci": 92, "beus": 92, "docked_waypoint_id": 92, "robotwhil": 92, "isdock": 92, "target_prep_pos": 92, "targetbefor": 92, "OR": [92, 150, 194, 195, 323], "thenavigateto": 92, "awaypoint": 92, "fornavig": 92, "thedock": 92, "prompt_dur": 92, "successfullydock": 92, "operatordo": 92, "controlshow": 92, "ona": 92, "tryagain": 92, "choosesometh": 92, "target_failure_behavior": 92, "action_wrapp": 92, "action_failure_behavior": 92, "battery_monitor": 92, "returnto": 92, "robotshould": 92, "action_dur": 92, "atimeout": 92, "acquisitioncaptur": 92, "orperform": 92, "ofsuccessfulli": 92, "takean": 92, "amountof": 92, "toautomat": 92, "retrynavig": 92, "thedesir": 92, "theaction": 92, "setto": 92, "optionsin": 92, "missionwil": 92, "defaultbehavior": 92, "default_behavior": 92, "one_of": 92, "minimumdur": 92, "proceed_if_": 92, "return_to_start_and_try_again_lat": 92, "return_to_start_and_termin": 92, "try_again_delai": 92, "safest": 92, "additionalqualifi": 92, "should_autofocus_ptz": 92, "themiss": 92, "therebyimprov": 92, "self_right_attempt": 92, "rightscan": 92, "userdo": 92, "amaximum": 92, "destroi": [92, 138], "byrepeatedli": 92, "post_mission_callback": 92, "thati": 92, "orsend": 92, "email": 92, "skip_act": 92, "thetarget": 92, "associatedact": 92, "tocommun": 92, "discovereddur": 92, "govern": 92, "disable_endto": 92, "elaps": 92, "missionfinish": 92, "atwhich": 92, "theinterv": 92, "missiontak": 92, "at15": 92, "repetit": 92, "backonc": 92, "oftim": 92, "navigate_to": [92, 135], "navigate_rout": [92, 135], "belief": 92, "travel_param": [92, 135, 216], "waypointth": 92, "destination_waypoint_id": [92, 135], "set_localization_request": 92, "youplan": 92, "global_paramet": 92, "playback_mod": 92, "map_nam": 92, "mission_nam": 92, "capturesand": 92, "choreography_item": 92, "thiswalk": 92, "target_stow_behavior_unknown": 92, "target_stow_behavior_auto": 92, "stowhead": 92, "target_stow_behavior_nev": 92, "target_stow_behavior_alwai": 92, "direction_hint": 92, "desired_wrench_odom_fram": 92, "estimation_activ": 92, "seenenough": 92, "wrenchi": 92, "init_wrench_direction_in_frame_nam": [92, 161], "applieddepend": 92, "thetorqu": 92, "requiredvector": 92, "benorm": 92, "vectorif": 92, "task_type_se3_rotational_torqu": 92, "perpendicular": 92, "theconstraint": 92, "init_wrench_direct": 92, "frame_namewil": 92, "tangential_spe": [92, 161], "rotational_spe": [92, 161], "force_limit": [92, 161], "directionvalu": 92, "positiveif": 92, "torque_limit": [92, 161], "task_typ": [92, 161], "manip": 92, "inth": 92, "control_mod": [92, 161], "target_linear_posit": [92, 161], "typetask_type_r3_linear_forc": 92, "target_angl": [92, 161], "thantask_type_r3_linear_forcethi": 92, "accel_limit": 92, "dependingon": 92, "reset_estim": [92, 161], "previousconstrain": 92, "body_offset_from_hand": 92, "andenable_hip_height_assist_for_manipul": 92, "combinationof": 92, "contact_advic": 92, "haveth": 92, "incorrectlys": 92, "num_messages_receiv": 92, "uint64": [92, 118], "arequir": 92, "extrapolation_tim": 92, "detailedexplan": 92, "extrapolation_dur": 92, "extrapolatedesir": 92, "mostextrapolation_dur": 92, "optionallyupd": 92, "notsupport": 92, "user_command_kei": 92, "effecton": 92, "velocity_safety_limit": 92, "orgain": 92, "willtrigg": 92, "orclear": 92, "0will": 92, "k_q_p": 92, "k_qd_p": 92, "body_movement_statu": 92, "final_goal_statu": 92, "se2_frame_nam": [92, 161], "trajectorymust": 92, "rejectedand": 92, "frameidentifi": 92, "planar": [92, 274], "slew_rate_limit": 92, "providedse2_frame_nam": 92, "unsafe_act": 92, "foot_posit": [92, 161], "metersadvis": 92, "05": [92, 138, 161, 186], "5cm": 92, "2cm": 92, "10cm": [92, 285], "converg": [92, 149], "standing_st": 92, "status_drag": 92, "status_grasp_fail": 92, "agood": 92, "regrasp": 92, "thensend": 92, "overcom": 92, "orabov": 92, "status_other_failur": 92, "anapigraspoverrid": 92, "robotknow": 92, "override_hold": 92, "status_fail": 92, "hint_unknown": 92, "hint_right": 92, "hint_left": 92, "status_arm_is_stuck": 92, "directionwher": 92, "afford": 92, "status_grasp_is_lost": 92, "manipulationwil": 92, "control_mode_unknown": 92, "control_mode_posit": 92, "specifiedand": 92, "trapezoidaltrajectori": 92, "task_spe": 92, "control_mode_veloc": 92, "tomaintain": 92, "se3": [92, 150, 161, 186], "task_type_unknown": 92, "task_type_se3_circle_force_torqu": 92, "whereboth": 92, "valv": [92, 229], "solid": [92, 186, 318], "graspthi": 92, "specifiedin": 92, "specifieda": 92, "task_type_r3_circle_extradof_forc": 92, "circlebut": 92, "circleand": 92, "theend": 92, "task_type_r3_circle_forc": 92, "whereth": 92, "rigidor": 92, "task_type_r3_linear_forc": 92, "linebut": 92, "manipulatinga": 92, "freeto": 92, "task_type_hold_pos": 92, "tohold": 92, "manipulationtask": 92, "toconstrain": 92, "onlyb": 92, "controlmov": 92, "receipt": 92, "advice_unknown": 92, "advice_non": 92, "samebehavior": 92, "advice_in_contact": 92, "advis": 92, "advice_not_in_contact": 92, "status_act": 92, "status_error": 92, "status_process": [92, 161], "status_incompatible_hardwar": 92, "arm_command_feedback": 92, "body_status_unknown": 92, "body_status_mov": 92, "settl": 92, "body_status_settl": 92, "final_goal_status_unknown": 92, "hashappen": 92, "final_goal_status_in_progress": 92, "final_goal_status_achiev": 92, "final_goal_status_block": 92, "itbeliev": 92, "ifa": 92, "nearing": 92, "finalposit": 92, "robotcannot": 92, "status_going_to_go": 92, "status_powered_off": 92, "unsafe_unknown": 92, "unsafe_move_to_safe_posit": 92, "sittingand": 92, "additionalstep": 92, "status_is_sit": 92, "status_stanc": 92, "status_going_to_st": 92, "status_too_far_awai": 92, "standing_unknown": 92, "standing_control": 92, "makesmal": 92, "standing_frozen": 92, "unlesscommand": 92, "thisstat": 92, "status_is_stand": 92, "series_index": [92, 193, 194, 195, 196, 197, 198, 200, 204, 206], "shutter": 92, "additional_index": [92, 194, 195, 205], "additional_index_nam": [92, 194, 195, 205], "file_descriptor": [92, 189], "series_descriptor": [92, 193, 195, 196, 198, 201, 203, 206], "series_block_index": [92, 193, 195, 206], "file_index": [92, 189, 194, 195], "checksum_typ": 92, "checksum_num_byt": 92, "checksum_non": 92, "minor_vers": 92, "patch_level": 92, "summar": 92, "series_identifi": [92, 195], "series_block_index_offset": 92, "series_identifier_hash": 92, "content_typ": [92, 194], "csv": [92, 250, 297, 321], "type_nam": [92, 194, 198, 216], "is_metadata": [92, 194, 205], "datatyp": 92, "pod_typ": [92, 194, 195, 201, 202], "innermost": 92, "outermost": 92, "descriptor_file_offset": 92, "block_entri": 92, "total_byt": [92, 193], "identifier_hash": 92, "uint64_t": 92, "lexicograph": 92, "message_typ": [92, 110, 191, 194, 195, 200], "struct_typ": 92, "logtick": 92, "varnam": 92, "rssi": 92, "composit": 92, "whose": [92, 127, 151], "datablock": 92, "acycl": 92, "dag": [92, 129], "key_to_series_identifier_hash": 92, "checksum_type_unknown": 92, "checksum_type_non": 92, "writer": [92, 188, 195], "checksum_type_sha1": 92, "uncorrupt": 92, "type_unspecifi": 92, "type_int8": 92, "type_int16": 92, "type_int32": 92, "type_int64": 92, "type_uint8": 92, "type_uint16": 92, "type_uint32": 92, "type_uint64": 92, "type_float32": 92, "type_float64": 92, "thedatabuff": 92, "requestsmad": 92, "theacquisit": 92, "request_id": [92, 114, 115, 116, 117], "acquiredmetadata": 92, "whenstor": 92, "storedin": 92, "custom_param_error": [92, 113, 127], "status_custom_params_error": 92, "data_sourc": 92, "network_compute_sourc": 92, "network_compute_captur": 92, "captureact": 92, "cancellationrequest": 92, "actionswith": 92, "capturesess": 92, "notspecifi": 92, "populateth": 92, "identif": [92, 126, 297], "purposeswhen": 92, "througheach": 92, "has_live_data": 92, "livedata": 92, "fromth": 92, "error_messag": [92, 97, 99, 106, 107, 108, 113, 114, 122, 123, 126, 127, 128, 135, 137, 138, 141, 142, 147, 149, 151, 152, 154, 155, 156, 158, 159, 161, 180, 211, 214], "error_data": [92, 117], "acrossact": 92, "theaction_id": 92, "crop": 92, "detected_gaug": 92, "individuallyidentifi": 92, "pieceof": 92, "guaranteeuniqu": 92, "necessarilystart": 92, "cancollect": 92, "data_sav": 92, "data_error": [92, 117], "respondswith": 92, "service_error": 92, "network_compute_error": 92, "image_request": [92, 137], "theimageacquisitioncap": 92, "live_data": 92, "available_model": 92, "envelop": 92, "network_compute_statu": 92, "status_unknown_capture_typ": 92, "status_failed_to_cancel": 92, "status_request_id_does_not_exist": 92, "status_acquir": 92, "status_cancel_in_progress": 92, "status_acquisition_cancel": 92, "status_data_error": 92, "status_cancel_acquisition_fail": 92, "status_request_error": 92, "status_network_error": 92, "status_getstatus_error": 92, "thetablet": 92, "listdata": 92, "max_capture_id": [92, 118], "relationbetween": 92, "insideeach": 92, "action1": 92, "group1": 92, "action2": 92, "group2": 92, "andgroup_nam": 92, "orrel": 92, "captures_from_id": 92, "thedata": 92, "newcaptur": 92, "only_include_identifi": 92, "theactual": 92, "include_imag": 92, "include_data": 92, "include_metadata": 92, "include_alert": 92, "areset": 92, "order_descend": 92, "orderedfirst": 92, "areord": 92, "large_data": 92, "capture_id": 92, "file_extens": [92, 117, 118], "from_timestamp": 92, "to_timestamp": 92, "listcaptureact": 92, "liststoreddata": 92, "froman": 92, "storedata": 92, "liststoredimag": 92, "imagesfrom": 92, "thequeri": 92, "storeimag": 92, "liststoredmetadata": 92, "singlequerystoredcapturesrespons": 92, "theservic": 92, "matchingth": 92, "canfit": 92, "emptyquerystoredcapturesrespons": 92, "instantan": 92, "start_timestamp": 92, "end_timestamp": 92, "onset": 92, "log_preserve_hint": [92, 119, 160], "blob_data": 92, "untilth": 92, "operator_com": [92, 160], "tick_data": 92, "text_messag": [92, 119], "schema_id": [92, 119], "is_tim": 92, "sequence_id": [92, 119], "somehow": 92, "segreg": 92, "line_numb": 92, "consequenti": 92, "occurr": 92, "level_unset": 92, "level_low": 92, "level_medium": 92, "level_high": 92, "level_mission_crit": 92, "level_system_crit": 92, "log_preserve_hint_unset": 92, "log_preserve_hint_norm": 92, "thisev": 92, "log_preserve_hint_preserv": 92, "bepreserv": 92, "client_error": 92, "server_error": 92, "invalid_schema_id": 92, "type_unknown": 92, "encoding_unknown": 92, "encoding_raw": 92, "concaten": [92, 120], "level_unknown": 92, "level_debug": 92, "level_info": 92, "level_warn": 92, "level_error": 92, "datagram": 92, "total_s": 92, "msgtype": 92, "channel_glob": 92, "num_data_buffer_pag": 92, "data_buffer_total_byt": 92, "num_com": 92, "num_ev": 92, "blob_spec": 92, "timespan": [92, 110, 181, 209, 247, 255], "page_id": [92, 121], "bytes_delet": 92, "int32valu": 92, "events_limit": 92, "operator_comments_limit": 92, "max_ev": 92, "1024": 92, "max_com": 92, "get_blob_spec": [92, 121], "data_buffer_statu": 92, "data_queri": 92, "event_comment_request": 92, "events_com": 92, "num_tick": 92, "is_open": 92, "is_download": 92, "deleted_timestamp": 92, "download_started_timestamp": 92, "request_preserv": 92, "status_delet": 92, "status_deletion_fail": 92, "status_not_found": 92, "compression_unknown": 92, "compression_non": 92, "compression_gzip": 92, "gzip": 92, "compression_zstd": 92, "zstd": 92, "format_bddf_fil": 92, "getdataindex": 92, "geteventscom": 92, "getdatabufferstatu": 92, "getdatapag": 92, "pf": 92, "deletedatapag": 92, "65535": 92, "service_entri": 92, "discover": 92, "aservic": 92, "anaddress": 92, "last_upd": [92, 123], "timebas": 92, "user_token_requir": [92, 123], "containa": 92, "a401": 92, "user_token": [92, 160, 182], "auth_servicedo": 92, "permission_requir": 92, "musthav": 92, "liveif": 92, "host_payload_guid": 92, "updatedvia": 92, "unknowni": 92, "getservic": 92, "status_nonexistent_servic": 92, "happenedif": 92, "status_already_exist": 92, "privat": [92, 126, 252, 318, 320], "therecord": 92, "servicerecord": 92, "directorymanag": 92, "id_start": 92, "id_end": 92, "dock_typ": 92, "power_statu": 92, "docking_command_id": 92, "update_docking_param": 92, "clock_identifi": [92, 124, 181], "rpcsthi": 92, "require_fiduci": [92, 124, 159], "dock_config": 92, "dock_stat": 92, "dock_status_unknown": 92, "dock_status_dock": 92, "link_status_unknown": 92, "link_status_connect": 92, "link_status_error": 92, "dock_type_unknown": 92, "dock_type_contact_prototyp": 92, "prototyp": 92, "spotdock": 92, "dock_type_spot_dock": 92, "dock_type_spot_doghous": 92, "hous": 92, "prep_pose_only_pos": 92, "status_misalign": 92, "misalign": 92, "pleasetri": 92, "status_old_docking_command": 92, "status_error_dock_lost": 92, "status_error_leas": 92, "status_error_command_timed_out": 92, "status_error_no_timesync": 92, "status_error_too_dist": 92, "executionthi": 92, "dockingcommandcheck": 92, "status_error_dock_not_found": 92, "prep_pose_unknown": 92, "prep_pose_use_pos": 92, "prep_pose_skip_pos": 92, "target_config_id": [92, 126], "deregistr": 92, "assert": [92, 126, 135, 141], "ocu": 92, "patrol": 92, "ocu01": 92, "offhandl": 92, "priorto": 92, "estop_level_settle_then_cutwhich": 92, "disablingmotor": 92, "disconnectedimmedi": 92, "defaultto": 92, "levelassert": 92, "estopconfigrequest": 92, "active_config": 92, "status_success": [92, 315], "status_endpoint_mismatch": 92, "status_config_mismatch": 92, "status_endpoint_unknown": 92, "status_incorrect_challenge_respons": 92, "estop_level_unknown": [92, 126], "estop_level_settle_then_cut": [92, 126], "status_invalid_endpoint": 92, "status_invalid_id": 92, "ato": 92, "denial": 92, "registerestopendpoint": 92, "deregisterestopendpoint": 92, "estopcheckin": 92, "requesta": 92, "getestopconfig": 92, "setestopconfig": 92, "getestopsystemstatu": 92, "triggerservicefault": 92, "clearservicefault": 92, "stop_feedback": 92, "freeze_feedback": 92, "selfright_feedback": 92, "safe_power_off_feedback": 92, "battery_change_pose_feedback": 92, "payload_estimation_feedback": 92, "constrained_manipulation_feedback": 92, "joint_feedback": 92, "stop_request": 92, "freeze_request": 92, "selfright_request": 92, "safe_power_off_request": 92, "battery_change_pose_request": 92, "payload_estimation_request": 92, "constrained_manipulation_request": 92, "joint_request": 92, "dimension": [92, 150, 229], "isfix": 92, "sax": 92, "frame_name_tform_box": 92, "theful": 92, "coordinatefram": 92, "center_pt": 92, "frame_name_tform_circl": 92, "polar": 92, "mathworld": 92, "wolfram": 92, "azimuth": [92, 244], "reckon": 92, "syntax": [92, 129, 247, 251], "forest": 92, "parent_frame_nam": [92, 129], "1d": 92, "concav": 92, "counterclockwis": [92, 234, 277], "min_vel": 92, "rx": 92, "ry": 92, "rz": 92, "rxrx": 92, "rxry": 92, "rxrz": 92, "rxx": 92, "rxy": 92, "rxz": 92, "ryrx": 92, "ryri": 92, "ryrz": 92, "ryx": 92, "ryi": 92, "ryz": 92, "rzrx": 92, "rzry": 92, "rzrz": 92, "rzx": 92, "rzy": 92, "rzz": 92, "xrx": 92, "xry": 92, "xrz": 92, "yrx": 92, "yry": 92, "yrz": 92, "yx": 92, "zrx": 92, "zry": 92, "zrz": 92, "zx": 92, "zy": [92, 283], "symmetr": [92, 150], "yaw_vari": 92, "varianc": 92, "cov_rzrz": 92, "removedin": 92, "fixm": 92, "sberard": 92, "atlassian": 92, "brows": 92, "12523": 92, "cov_xx": 92, "cov_xi": 92, "cov_xz": 92, "cov_yx": 92, "cov_yi": 92, "cov_yz": 92, "cov_zx": 92, "cov_zi": 92, "cov_zz": 92, "data_point": [92, 132], "ratecan": 92, "gps_devic": [92, 132], "dump": [92, 270], "peripher": 92, "newgpsdata": 92, "magnetomet": 92, "north": 92, "sbodi": 92, "timestamp_gp": 92, "timestamp_cli": 92, "connectedto": 92, "timestamp_robot": 92, "body_tform_gp": [92, 133, 282], "prn": 92, "snr": 92, "duro": 92, "microstrain": 92, "iscalcul": 92, "filter_unknown": 92, "filter_non": 92, "filter_duro_in": 92, "spp": 92, "dgnss": 92, "fixed_rtk": 92, "float_rtk": 92, "dead_reckon": 92, "fixed_posit": 92, "gps_l1ca": 92, "gps_l2cm": 92, "sbas_l1ca": 92, "glonass_l1ca": 92, "glonass_l2ca": 92, "gps_l1p": 92, "gps_l2p": 92, "bds2_b1": 92, "beidou": 92, "bds2_b2": 92, "galileo_e1b": 92, "galileo_e7i": 92, "latest_data": 92, "ecef_p_bodi": 92, "thismust": 92, "historical_data": 92, "wiki": 92, "gps_state": 92, "reportingwon": 92, "isfilt": 92, "status_need_devic": [92, 282], "resetregistr": 92, "begin_callback": [92, 99], "begin_control": [92, 99], "update_callback": [92, 99], "end_callback": [92, 99], "areacallback": [92, 99, 100, 101], "required_lease_resourc": [92, 103], "default_stop": 92, "map_config": 92, "region_info": 92, "config_data": 92, "ifempti": 92, "matchareacallbackinform": 92, "region_id": 92, "insom": 92, "navigationcommand": 92, "unfinished_rout": 92, "face_direct": 92, "face_stairs_if_pres": 92, "face_yaw_offset": 92, "andhow": 92, "callbackinstruct": 92, "callendcallback": 92, "error_leas": 92, "at_start": 92, "at_end": 92, "end_config": 92, "option_continu": 92, "error_unknown": 92, "error_transport": 92, "error_respons": 92, "error_servic": 92, "blockage_unknown": 92, "ableto": 92, "passabl": 92, "unlessit": 92, "cantreat": 92, "impass": 92, "entity_waiting_unknown": 92, "entity_waiting_dis": 92, "entity_waiting_en": 92, "impairment_unknown": 92, "navdetect": 92, "began": 92, "status_invalid_configur": 92, "suppliedconfiguration_data": 92, "status_expired_end_tim": 92, "status_invalid_command_id": 92, "status_missing_lease_resourc": 92, "status_shutdown_callback_fail": 92, "shutdownsign": 92, "acknowledg": 92, "face_direction_unknown": 92, "face_direction_along_rout": 92, "face_direction_waypoint_exact": 92, "face_direction_waypoint_auto": 92, "theopposit": 92, "face_direction_region_end": 92, "stage_unknown": 92, "stage_to_start": 92, "stage_to_end": 92, "stage_at_end": 92, "error_block": 92, "error_callback_fail": 92, "error_timed_out": 92, "option_unknown": 92, "option_stop": 92, "option_control": 92, "reportedvia": 92, "localization_unknown": 92, "localization_at_end": 92, "theparamet": 92, "intocustom_param": 92, "arerequir": 92, "calliniti": 92, "controli": 92, "callbackimplement": 92, "isrun": 92, "routechang": [92, 102], "isblock": 92, "thismight": 92, "callbackreport": 92, "live_gps_st": 92, "map_gps_stat": 92, "ecef_tform_bodi": 92, "thetim": 92, "latitude_longitude_height": 92, "state_unknown": 92, "missing_servic": 92, "registeredbut": 92, "faulted_servic": 92, "edge_snapshot_id": [92, 135], "overwhelm": [92, 318], "theminto": 92, "anedgesnapshot": 92, "adownloadgraphrespons": 92, "waypoint_snapshot_id": [92, 135], "download_imag": [92, 135], "fromeach": 92, "compress_point_cloud": 92, "smallestavail": 92, "do_not_download_point_cloud": [92, 135], "awaypointsnapshot": 92, "goal_llh": 92, "goal_yaw": 92, "achieveat": 92, "bear": 92, "east": 92, "andwest": 92, "pi": 92, "max_distance_from_map": 92, "inmet": 92, "waypoint_id": [92, 135], "request_live_point_cloud": [92, 135], "usedto": 92, "request_live_imag": [92, 135], "ofloc": 92, "request_live_terrain_map": [92, 135], "request_live_world_object": [92, 135], "request_live_robot_st": [92, 135], "compress_live_point_cloud": 92, "smallest": [92, 166], "clouddata": 92, "request_gps_st": [92, 135], "thisloc": 92, "remote_cloud_statu": 92, "outif": 92, "eventuallyit": 92, "truststhat": 92, "isavail": 92, "showgraph": 92, "is_lost": 92, "rejectnavigateto": 92, "total_num_accepted_loc": 92, "criteria": 92, "lastsetloc": 92, "total_num_rejected_loc": 92, "num_rejected_localizations_since_accept": 92, "sinceeith": 92, "distance_traveled_with_rejected_loc": 92, "believesth": 92, "last_accepted_loc": 92, "last_rejected_loc": 92, "num_consecutive_bad_edg": 92, "lostdetector": 92, "anaccept": 92, "agreement": 92, "max_time_with_bad_loc": 92, "startcount": 92, "max_distance_with_bad_loc": 92, "max_num_edges_with_bad_loc": 92, "declareth": 92, "toset": 92, "route_follow_param": [92, 135], "waypointin": 92, "thedestin": 92, "theoffset": 92, "acontinu": 92, "robot_impair": 92, "error_waypoint_id": 92, "theerror": 92, "error_edge_id": 92, "status_invalid_edg": 92, "sthat": 92, "area_callback_error": 92, "seed_tform_go": [92, 135], "gps_navigation_param": [92, 135], "tonavig": 92, "insteadth": 92, "worksident": 92, "goal_waypoint_rt_seed_ewrt_seed_toler": [92, 135], "route_param": [92, 135], "allparamet": 92, "gps_statu": 92, "route_blocked_behavior": [92, 135], "remaining_rout": 92, "completed_rout": 92, "visualizationof": 92, "conditionsedg": 92, "forstatus_reached_go": 92, "remaining_route_length": 92, "last_ko_tform_go": 92, "active_region_inform": 92, "beblock": 92, "stuck_reason": 92, "region_statu": 92, "exists_in_directori": 92, "withth": 92, "has_data": 92, "new_cmd_behavior": 92, "existing_cmd_behavior": 92, "map_has_lidar_data": 92, "robot_configured_for_lidar": 92, "andwaypoint_tform_bodi": 92, "notprovid": 92, "waypointwa": 92, "thesetlocalizationrequest": 92, "ko_tform_bodi": [92, 135], "initialloc": 92, "positionsuppli": 92, "itsearch": 92, "neighborhood": 92, "suppliedyaw": 92, "fiducial_init": [92, 135], "use_fiducial_id": [92, 135], "status_no_matching_fiduci": 92, "status_fiducial_too_far_awai": 92, "fiducial_too_old": 92, "orfiducial_pose_uncertain": 92, "do_ambiguity_check": [92, 135], "considerfiduci": 92, "waypointsmai": 92, "refine_fiducial_result_with_icp": [92, 135], "refine_with_visual_featur": [92, 135], "error_report": 92, "suspected_ambigu": 92, "sensor_statu": 92, "themap": 92, "status_impairedwil": 92, "quality_check_result": 92, "statusher": 92, "qualitycheck": 92, "alternate_robot_tform_waypoint": 92, "theresult": 92, "wehav": 92, "whenw": 92, "reachedth": 92, "ignore_final_yaw": 92, "velocity_limit": [92, 135], "achieveth": 92, "avoidingobstacl": 92, "maywalk": 92, "feature_quality_toler": 92, "disable_alternate_route_find": [92, 216], "clutter": 92, "teleoperatedbi": 92, "roboti": 92, "tocontinu": 92, "lost_detector_strictness_unknownresult": 92, "planner_mod": 92, "asdatachunk": 92, "map_stat": 92, "withoutunderli": 92, "generate_new_anchor": [92, 135], "treat_validation_warnings_as_error": 92, "bereturn": 92, "loaded_waypoint_snapshot_id": 92, "unknown_waypoint_snapshot_id": 92, "loaded_edge_snapshot_id": 92, "unknown_edge_snapshot_id": 92, "license_statu": 92, "validation_statu": 92, "aboutwhi": 92, "robotwil": 92, "missing_waypoint_ids_in_edg": 92, "idsreferenc": 92, "missing_waypoint_ids_in_anchor": 92, "thesear": 92, "edge_ids_invalid_transform": 92, "from_tform_to": [92, 159, 283], "uploadedthat": 92, "arenorm": 92, "waypoint_anchors_invalid_transform": 92, "thewaypoint": 92, "rotationsthat": 92, "onupload": 92, "object_anchors_invalid_transform": 92, "areth": 92, "duplicate_waypoint_id": 92, "notethat": 92, "duplicate_waypoint_anchor_id": 92, "aredupl": 92, "duplicate_object_anchor_id": 92, "idsar": 92, "duplicate_edge_id": 92, "thatid": 92, "band": [92, 294], "invalid_waypoint_ids_self_edg": 92, "waypointid": 92, "andr": 92, "has_empty_waypoint_id": 92, "has_empty_edge_id": 92, "has_empty_waypoint_anchor_id": 92, "emptyanchor": 92, "has_empty_object_anchor_id": 92, "malformed_staircase_edge_id": 92, "rerecord": 92, "insiz": 92, "inord": 92, "anddeseri": 92, "verify_refinement_qu": 92, "callstoprecord": 92, "status_snapshot_does_not_exist": 92, "status_no_timesync": 92, "status_expir": 92, "status_too_dist": 92, "status_unknown_route_el": 92, "status_feature_desert": 92, "uniniti": [92, 135], "status_could_not_update_rout": 92, "wrestl": 92, "trysai": 92, "orhad": 92, "nolong": 92, "gps_status_unknown": 92, "mapus": 92, "status_no_anchor": 92, "status_invalid_pos": 92, "unachiev": [92, 135], "upsid": 92, "status_invalid_gps_command": 92, "moredetail": 92, "status_unknown_waypoint": 92, "weren": 92, "status_navig": 92, "status_wait": 92, "status_callback_in_control": 92, "blockage_status_unknown": 92, "blockage_status_route_clear": 92, "blockage_status_route_blocked_temporarili": 92, "itselfstuck": 92, "blockage_status_stuck": 92, "hasdeclar": 92, "route_following_status_unknown": 92, "route_following_status_following_rout": 92, "orfrom": 92, "route_following_status_returning_to_rout": 92, "becauseit": 92, "route_following_status_following_alternate_rout": 92, "waypointsto": 92, "partof": 92, "route_following_status_explor": 92, "arounda": 92, "duringnavig": 92, "otherdestin": 92, "tobecom": 92, "impaired_statu": 92, "mid": 92, "recoverfrom": 92, "stuck_reason_unknown": 92, "stuck_reason_obstacl": 92, "stuck_reason_area_callback_block": 92, "stuck_reason_area_callback_fail": 92, "toother": 92, "stuck_reason_goal_block": 92, "toreach": 92, "resume_unknown": 92, "resume_return_to_unfinished_rout": 92, "thefurthest": 92, "resume_fail_when_not_on_rout": 92, "route_blocked_unknown": 92, "route_blocked_rerout": 92, "destinationthat": 92, "pointaft": 92, "followth": 92, "aresimilarli": 92, "route_blocked_fail": 92, "start_unknown": 92, "start_goto_start": 92, "usingedg": 92, "therout": 92, "start_goto_rout": 92, "pointthat": 92, "fromthat": 92, "willpref": 92, "start_fail_when_not_on_rout": 92, "fiducial_init_unknown": 92, "quality_check_unknown": 92, "statusenum": 92, "quality_check_success": 92, "quality_check_poor_point_cloud_match": 92, "locationof": 92, "quality_check_poor_gravity_align": 92, "fiducialb": 92, "wrongli": 92, "simu": 92, "miscalibr": 92, "thesetloc": 92, "quality_check_skip": 92, "quality_check_bad_height": 92, "theclient": 92, "status_abort": 92, "awayfrom": 92, "status_fiducial_too_old": 92, "detectiontim": 92, "status_fiducial_pose_uncertain": 92, "unreliablepos": 92, "thatwer": 92, "detectionsat": 92, "uncertain": 92, "sensorsetup": 92, "sensorstatu": 92, "tolerance_unknown": 92, "tolerance_default": 92, "tolerance_ignore_poor_feature_qu": 92, "planner_mode_unknown": 92, "planner_mode_default": 92, "planner_mode_short_rang": 92, "planner_mode_long_rang": 92, "navigatearound": 92, "status_map_too_large_licens": 92, "acommon": 92, "arobot": 92, "thecurr": 92, "formor": 92, "ram": [92, 135], "uploadswil": 92, "lateruploadgraph": 92, "fulluploadgraph": 92, "regularuploadgraph": 92, "semanticsa": 92, "forincrement": 92, "mere": 92, "streamingwrapp": 92, "beload": 92, "longerrun": 92, "lost_detector_strictness_unknown": 92, "strictness_default": 92, "lost_detector_strictness_dis": 92, "lost_detector_strictness_default": 92, "lost_detector_strictness_strict": 92, "seed_tform_object": [92, 283], "notnecessarili": 92, "session_nam": [92, 159], "usermai": 92, "regionthat": 92, "client_usernam": [92, 159], "client_software_vers": [92, 159], "client_id": [92, 159], "client_typ": [92, 159], "mutabl": 92, "snapshot_id": 92, "understood": 92, "direction_constraint": [92, 159], "facewhen": 92, "require_align": [92, 159], "shouldn": [92, 285], "overobstacl": 92, "override_mobility_param": 92, "fieldmask": 92, "isstor": 92, "terrain_param": 92, "beannot": 92, "meansal": 92, "conserv": 92, "limitstor": 92, "usedfor": 92, "edge_sourc": 92, "robotmai": 92, "corridorwidth": 92, "sharedacross": 92, "straight_staircas": 92, "staircase_with_land": 92, "descent_prefer": 92, "thisstaircas": 92, "withrespect": 92, "straightlin": 92, "immut": 92, "foot_stat": 92, "planar_ground": 92, "alternate_waypoint": 92, "alternate_edg": 92, "waypoint_anchor": 92, "object_anchor": [92, 283], "total_path_length": 92, "loadedmap": 92, "num_byt": 92, "raminsid": 92, "deduplicateregion": 92, "isdefin": 92, "severalwaypoint": 92, "notguarante": 92, "waypointonli": 92, "multiplewaypoint": 92, "bounding_box": 92, "basefram": 92, "base_frame_nam": 92, "timeof": 92, "base_frame_tform_region": 92, "waypoint_tform_ko": 92, "kitchen": 92, "fridg": 92, "creation_tim": 92, "icp_vari": 92, "recordtim": 92, "scan_match_region": 92, "waypoint_sourc": 92, "client_metadata": [92, 159], "loop_closure_set": 92, "ata": 92, "otherparamet": 92, "thedefault": 92, "theywil": 92, "agp": 92, "andrun": 92, "disable_gps_loc": 92, "willus": 92, "default_region": [92, 159], "nospeci": 92, "trait": 92, "dist_2d": [92, 159], "disable_loop_closur": 92, "disable_collision_check": 92, "closuresfrom": 92, "max_edge_length": 92, "nonzero": 92, "loopclosur": 92, "max_odometry_path_length": 92, "shortcut": 92, "robot_local_grid": 92, "is_point_cloud_process": 92, "version_id": 92, "itha": 92, "has_remote_point_cloud_sensor": 92, "body_tform_remote_point_cloud_sensor": 92, "srefer": 92, "annotation_state_unknown": 92, "annotation_state_set": 92, "deliber": 92, "annotation_state_non": 92, "subfield": 92, "direction_constraint_unknown": 92, "direction_constraint_no_turn": 92, "direction_constraint_forward": 92, "direction_constraint_revers": 92, "direction_constraint_non": 92, "ground_clutter_unknown": 92, "ground_clutter_off": 92, "ground_clutter_from_footfal": 92, "footfal": 92, "path_mode_unknown": 92, "path_mode_default": 92, "path_mode_strict": 92, "descent_preference_unknown": 92, "descent_preference_always_revers": 92, "routecould": 92, "constraintscr": 92, "causesnavig": 92, "byth": 92, "adjacentconstraint": 92, "forwarddirect": 92, "edge_source_unknown": 92, "edge_source_odometri": 92, "edge_source_small_loop_closur": 92, "edge_source_fiducial_loop_closur": 92, "edge_source_alternate_route_find": 92, "edge_source_user_request": 92, "edge_source_loc": 92, "edgeof": 92, "union": 92, "data_filter_unknown": 92, "data_filter_non": 92, "data_filter_include_onli": 92, "waypoint_source_unknown": 92, "waypoint_source_robot_path": 92, "waypoint_source_user_request": 92, "waypoint_source_alternate_route_find": 92, "se3_covari": 92, "gaussian": 92, "uncertainti": 92, "confidence_bound": 92, "thiswil": 92, "diagonalmatrix": 92, "unconstrain": 92, "x_bound": 92, "y_bound": 92, "z_bound": 92, "yaw_bound": 92, "initial_hint": [92, 149, 283], "modify_anchoring_on_serv": [92, 149, 283], "stream_intermediate_result": [92, 149, 283], "apply_gps_result_to_waypoints_on_serv": 92, "theoptim": 92, "ecef_tform_waypointappli": 92, "gps_result": 92, "ecef_tform_se": 92, "thisoper": 92, "usinggp": 92, "optimizer_param": 92, "measurement_param": 92, "optimize_existing_anchor": [92, 283], "initialguess": 92, "waypointwhich": 92, "onth": 92, "gravity_ewrt_se": 92, "use_kinematic_odometri": 92, "odometryfram": 92, "use_visual_odometri": 92, "framewil": 92, "use_gyroscope_measur": 92, "appar": [92, 283], "use_loop_closur": 92, "use_world_object": 92, "anotherwhen": 92, "co": [92, 283], "use_gp": 92, "tohelp": 92, "max_it": 92, "max_time_second": 92, "kinematic_odometry_weight": 92, "visual_odometry_weight": 92, "world_object_weight": 92, "hint_weight": 92, "gyroscope_weight": 92, "loop_closure_weight": 92, "gps_weight": 92, "waypoint_result": [92, 283], "world_object_result": [92, 283], "anchoring_on_server_was_modifi": 92, "erroroccur": 92, "nonlinear": 92, "final_iter": 92, "violated_waypoint_constraint": 92, "violated_object_constraint": 92, "missing_snapshot_id": 92, "missing_waypoint_id": 92, "themto": 92, "invalid_hint": 92, "unorgan": 92, "inconsistent_edg": 92, "incorrectloop": 92, "werepass": 92, "num_measurements_us": 92, "subgraph": [92, 149], "modify_map_on_serv": [92, 149], "presenc": 92, "check_edges_for_collis": 92, "collision_check_robot_radiu": 92, "sphere": [92, 186, 313, 334], "aloop": 92, "spheric": 92, "linefrom": 92, "collision_check_height_vari": 92, "ramp": [92, 231], "alongit": 92, "do_feature_match": 92, "matchingwil": 92, "coars": 92, "min_loop_closure_path_length": 92, "fromon": 92, "max_loop_closure_edge_length": 92, "candid": [92, 175], "thecandid": 92, "max_fiducial_dist": 92, "tous": 92, "max_loop_closure_height_chang": 92, "arewil": 92, "prune_edg": 92, "areawil": 92, "icp_it": 92, "max_point_match_dist": 92, "toaccept": 92, "max_loop_closure_path_length": 92, "onewaypoint": 92, "beyondthi": 92, "unwil": 92, "trust": 92, "num_extra_loop_closure_iter": 92, "isus": 92, "nearbyloop": 92, "processtopologyrpc": 92, "do_odometry_loop_closur": 92, "odometry_loop_closure_param": 92, "icp_param": 92, "do_fiducial_loop_closur": 92, "fiducial_loop_closure_param": 92, "collision_check_param": 92, "whichcollid": 92, "timeout_second": 92, "45second": 92, "partialresult": 92, "timed_out": 92, "processingcan": 92, "processtopologi": 92, "new_subgraph": 92, "viastream": 92, "map_on_server_was_modifi": 92, "serverwa": 92, "occurreddur": 92, "whenmap_on_server_was_modifi": 92, "backto": 92, "topologyprocess": 92, "representingth": 92, "seed_tform_waypoint_uncertainti": 92, "seed_tform_waypoint_constraint": 92, "minimizeth": 92, "canensur": 92, "emptywil": 92, "perfectli": 92, "seed_tform_object_uncertainti": 92, "seed_tform_object_constraint": 92, "theoveral": 92, "gps_status_not_enough_measur": 92, "status_missing_waypoint_snapshot": 92, "status_optimization_failur": 92, "minima": 92, "ill": [92, 127], "status_constraint_viol": 92, "status_max_iter": 92, "status_max_tim": 92, "status_invalid_hint": 92, "status_map_modified_during_process": 92, "status_invalid_gravity_align": 92, "mapwith": 92, "edge_id": [92, 135], "not_in_map": 92, "existin": 92, "waypoint_tform_bodi": 92, "startingfiduci": 92, "aleas": 92, "error_existing_edg": 92, "status_exist": 92, "waypoint_nam": [92, 159], "recording_environ": [92, 159], "waypointand": 92, "verifyingthat": 92, "created_waypoint": 92, "created_edg": 92, "missing_fiduci": 92, "fiducialswer": 92, "bad_pose_fiduci": 92, "status_fiducial_pose_not_ok": 92, "beloc": 92, "recordingwil": 92, "createwaypointresponsei": 92, "licensestatu": 92, "is_record": 92, "recordinga": 92, "session_start_tim": 92, "shouldb": 92, "name_prefix": 92, "prepend": [92, 271], "waypoint_environ": 92, "edge_environ": [92, 159], "alledg": 92, "waypointsand": 92, "started_recording_on": 92, "generatedaft": 92, "currentlyvis": 92, "startrecordingi": 92, "recordingrequest": 92, "sessionstart": 92, "error_waypoint_localized_id": 92, "thestartrecordingrequest": 92, "status_not_record": 92, "status_missing_transform": 92, "status_could_not_create_waypoint": 92, "status_remote_cloud_failure_not_in_directori": 92, "status_remote_cloud_failure_no_data": 92, "map_state_unknown": 92, "map_state_ok": 92, "map_state_too_large_for_licens": 92, "forsom": 92, "status_not_localized_to_existing_map": 92, "startingto": 92, "status_not_localized_to_end": 92, "beforew": 92, "status_not_ready_yet": 92, "moveth": 92, "getmapstatu": 92, "downloadwaypoint": 92, "aresuffici": 92, "thatha": 92, "landmark": 92, "bundle_id": 92, "thislandmark": 92, "keyframe_id": 92, "keypoint_id": 92, "3x3": [92, 150], "orb": 92, "brief": 92, "image_capture_and_sourc": 92, "informationabout": 92, "alreadyextract": 92, "bundle_tform_imag": 92, "key_fram": 92, "bundle_frame_nam": 92, "frame_tree_snapshot": [92, 129, 161], "visual_descriptor": 92, "size_pixel": 92, "depth_measur": 92, "position_covari": 92, "depth_vari": 92, "agraph": 92, "position_with_covari": 92, "anorient": 92, "thelandmark": 92, "whichfram": 92, "positionwith": 92, "direction_with_covari": 92, "thisrepres": 92, "canon": 92, "fromdiffer": 92, "setwhenev": 92, "landmark_observ": 92, "landmark_fram": 92, "grippercameragetparam": 92, "camera_mod": 92, "exposure_auto": 92, "exposure_absolut": 92, "exposure_roi": 92, "acertain": 92, "focus_auto": 92, "focus_absolut": 92, "infin": 92, "focal": 92, "focus_roi": 92, "draw_focus_roi_rectangl": 92, "hdr": 92, "exposurein": 92, "framer": 92, "led_mod": 92, "led_torch_bright": 92, "torch": 92, "led_mode_off": 92, "white_balance_temperature_auto": 92, "balanceunset": 92, "white_balance_temperatur": 92, "ifwhite_balance_temperature_auto": 92, "1correspond": 92, "roi_percentage_in_imag": 92, "lefthand": 92, "righthand": 92, "window_s": 92, "mode_unknown": 92, "mode_640_480": 92, "640x480": 92, "mode_640_480_120fps_uyvi": 92, "mode_1280_720": 92, "1280x720": 92, "mode_1280_720_60fps_uyvi": 92, "mode_1920_1080": 92, "1920x1080": 92, "mode_1920_1080_60fps_mjpg": 92, "mode_3840_2160": 92, "3840x2160": 92, "mode_3840_2160_30fps_mjpg": 92, "mode_4096_2160": 92, "4096x2160": 92, "mode_4096_2160_30fps_mjpg": 92, "mode_4208_3120": 92, "4208x3120": 92, "mode_4208_3120_20fps_mjpg": 92, "led_mode_unknown": 92, "led_mode_torch": 92, "constantli": [92, 295, 326], "hdr_unknown": 92, "hdr_off": 92, "hdr_auto": 92, "hdr_manual_1": 92, "hdr_manual_2": 92, "hdr_manual_3": 92, "hdr_manual_4": 92, "roi_window_size_unknown": 92, "roi_window_size_1": 92, "roi_window_size_2": 92, "roi_window_size_3": 92, "roi_window_size_4": 92, "roi_window_size_5": 92, "roi_window_size_6": 92, "roi_window_size_7": 92, "roi_window_size_8": 92, "setparam": 92, "getparam": 92, "specifiedwith": 92, "observesveloc": 92, "piecewisecub": 92, "polynomi": 92, "eachtrajectori": 92, "trajectorypoint": 92, "accelerationconstraint": 92, "stillobei": 92, "5708": [92, 161], "openveloc": 92, "maximum_open_close_veloc": 92, "maximum_open_close_acceler": 92, "maximum_torqu": 92, "disable_force_on_contact": [92, 161], "detectionand": 92, "claw_gripper_feedback": 92, "claw": 92, "claw_gripper_command": [92, 161], "status_applying_forc": 92, "facilit": 92, "trend": 92, "asymbol": 92, "identifyth": 92, "disable_rpc_log": 92, "recordedin": 92, "theresponsehead": 92, "strippeddown": 92, "code_unspecifi": 92, "code_internal_server_error": 92, "microsecond": 92, "impliesth": 92, "eachimag": 92, "transformsnapshot": 92, "capture_param": 92, "androbot": 92, "collectedfrom": 92, "size1280x720": 92, "forbackward": 92, "greyscale_u8": 92, "rgb_u8": 92, "fallback_format": [92, 137], "isinvalid": 92, "bepref": 92, "depth_scal": [92, 137], "rectilinear": 92, "pinhole_brown_conradi": 92, "brown": 92, "conradi": 92, "distort": 92, "kannala_brandt": 92, "kannala": 92, "brandt": 92, "lens": 92, "image_typ": [92, 138], "d58": 92, "__": 92, "calib3d": 92, "equidist": 92, "ethz": 92, "asl": 92, "kalibr": 92, "equat": 92, "arxiv": 92, "pdf": 92, "1807": 92, "08957": 92, "kb4": 92, "pinhole_intrins": 92, "k3": 92, "k4": 92, "radtan": 92, "tangenti": 92, "paper": 92, "decent": 92, "1966": 92, "444": 92, "462": 92, "p1": 92, "p2": 92, "princip": 92, "focal_length": 92, "principal_point": 92, "optic": 92, "format_rl": 92, "pixel_format_rgba_u8": 92, "pixel_format_depth_u16": 92, "uint16": 92, "status_unknown_camera": 92, "status_source_data_error": 92, "willnot": 92, "shouldchoos": 92, "serviceshould": 92, "image_type_unknown": 92, "image_type_visu": 92, "image_type_depth": 92, "sourcesth": 92, "request_unknown": 92, "record_ev": 92, "controlled_motors_off": 92, "immediate_robot_off": 92, "lease_stal": 92, "policy_id": [92, 141], "controllingth": 92, "haltrobot": 92, "timer": [92, 141], "last_checkin": 92, "active_control_act": 92, "actionsmai": 92, "to_add": [92, 141], "mismatch": [92, 135, 213], "added_polici": 92, "removed_polici": 92, "user_id": 92, "status_invalid_policy_id": 92, "policy_control_action_unknown": 92, "policy_control_action_auto_return": 92, "policy_control_action_motors_off": 92, "policy_control_action_robot_off": 92, "status_invalid_leas": 92, "theactiv": 92, "undergo": [92, 141, 161, 163], "modifypolici": [92, 141], "thepolici": 92, "resource_already_claim": 92, "epochat": 92, "user_nam": 92, "beacquir": 92, "leasethat": 92, "wantto": 92, "retent": 92, "thegetstatusrespons": 92, "leaseretain": 92, "attempted_leas": 92, "previous_leas": 92, "latest_known_leas": [92, 144], "latest_resourc": 92, "include_full_lease_info": [92, 142], "resource_tre": 92, "sub_resourc": 92, "retainownership": 92, "newleas": 92, "methodimmedi": 92, "status_invalid_resourc": 92, "listleaseresourc": 92, "knownresourc": 92, "status_not_authoritative_servic": 92, "authorit": [92, 142], "status_old": 92, "status_revok": [92, 142], "status_unmanag": 92, "unmanag": 92, "status_wrong_epoch": 92, "isset": 92, "leasei": 92, "status_not_active_leas": 92, "thenew": 92, "retainleasemethod": 92, "possess": 92, "feature_cod": 92, "currentlyload": 92, "feature_en": 92, "indicatingif": 92, "robot_seri": 92, "not_valid_befor": 92, "not_valid_aft": 92, "licensed_featur": 92, "status_valid": 92, "status_not_yet_valid": 92, "status_malform": 92, "status_serial_mismatch": 92, "status_no_licens": 92, "getlicenseinfo": 92, "licensecurr": 92, "local_grid_typ": 92, "local_grid_request": 92, "local_grid_respons": 92, "num_local_grid_error": 92, "local_grid_type_nam": [92, 146], "suchthat": 92, "quadrant": 92, "thecel": 92, "xi": 92, "num_cells_x": 92, "yj": 92, "cell_siz": 92, "cell_format": 92, "locatedat": 92, "rle_count": 92, "thebyt": 92, "cell_value_scal": 92, "cell_value_offset": 92, "unknown_cel": 92, "isunknown": 92, "uint8_t": 92, "num_cells_i": 92, "gridcel": 92, "cell_format_unknown": 92, "cell_format_float32": 92, "cell_format_float64": 92, "cell_format_int8": 92, "cell_format_uint8": 92, "cell_format_int16": 92, "cell_format_uint16": 92, "encoding_rl": 92, "status_no_such_grid": 92, "status_data_unavail": 92, "status_data_invalid": 92, "log_status": 92, "past_dur": 92, "status_id_not_found": 92, "bundler": 92, "status_receiv": 92, "status_sync": 92, "status_don": 92, "status_termin": 92, "type_experi": 92, "type_retro": 92, "retroact": 92, "status_experiment_log_run": 92, "status_concurrency_limit_reach": 92, "status_log_termin": 92, "getlogstatu": [92, 147], "getactivelogstatus": [92, 147], "startretrolog": [92, 147], "logstarttim": 92, "t_rpc": 92, "t_buffer": 92, "recept": 92, "andt_buff": 92, "startexperimentlog": [92, 147], "todisk": 92, "watchdog": 92, "callingupdateexperimentlog": 92, "updateexperimentlog": [92, 147], "durationof": 92, "terminatelog": [92, 147], "sky": 92, "cup": 92, "wouldn": 92, "ewrt": 92, "tolerance_z": 92, "horizon": [92, 297], "rotation_with_toler": 92, "squeeze_grasp": 92, "override_request": 92, "api_grasp_overrid": 92, "carry_state_overrid": 92, "not_hold": 92, "carry_state_overridemessag": 92, "thingslik": 92, "gripperupsid": 92, "goodgrasp": 92, "position_constraint": 92, "userrequest": 92, "grasp_position_constraint_fixed_at_user_posit": 92, "graspthat": 92, "selectionhelp": 92, "manipulation_camera_sourc": 92, "willattempt": 92, "transforms_snapshot_manipulation_data": 92, "walkto_raycast_intersect": 92, "walktoobject": 92, "raycast": [92, 158, 313], "grasp_planning_solut": 92, "gripper_nearest_object": 92, "ballpark": 92, "walk_to_object_ray_in_world": 92, "walk_to_object_in_imag": 92, "pick_object": 92, "pick_object_ray_in_world": 92, "mostconfigur": 92, "pick_object_execute_plan": 92, "object_rt_fram": 92, "walk_gaze_mod": 92, "ray_start_rt_fram": 92, "thismessag": 92, "ray_end_rt_fram": 92, "beforeperform": 92, "pick_auto_walk_and_gaz": 92, "pick_auto_gaz": 92, "pick_no_auto_walk_or_gaz": 92, "soconsid": 92, "rotation_ewrt_fram": 92, "disallow": 92, "NO": 92, "squeeze_grasp_disallow": 92, "gripperto": 92, "offset_dist": 92, "willwalk": 92, "override_unknown": 92, "override_not_hold": 92, "grasp_position_constraint_unknown": 92, "grasp_position_constraint_norm": 92, "manipulation_camera_source_unknown": 92, "manipulation_camera_source_stereo": 92, "manipulation_camera_source_hand": 92, "manip_state_unknown": 92, "manip_state_don": 92, "manip_state_searching_for_grasp": 92, "manip_state_moving_to_grasp": 92, "manip_state_grasping_object": 92, "manip_state_placing_object": 92, "manip_state_grasp_planning_succeed": 92, "differentgrasp": 92, "thecamera": 92, "retarget": 92, "thegrasp": 92, "gazeto": 92, "manip_state_walking_to_object": 92, "manip_state_attempting_raycast": 92, "manip_state_moving_to_plac": 92, "manip_state_place_failed_to_raycast_into_map": 92, "manip_state_place_succeed": 92, "manip_state_place_fail": 92, "pick_walk_gaze_unknown": 92, "locationmust": 92, "pick_plan_onli": 92, "manipulationapifeedback": 92, "overridegrasp": 92, "absolutemetr": 92, "timestamp_start": 92, "metricsof": 92, "changein": 92, "firsttim": 92, "timestamp_end": 92, "sequence_numb": [92, 151], "itwil": 92, "trackwhat": 92, "robot_serial_numb": 92, "robot_speci": 92, "thesesequence_numb": 92, "parameterswhich": 92, "include_ev": [92, 151], "missing_kei": 92, "first_sequence_numb": 92, "last_sequence_numb": 92, "getstoresequencerang": 92, "getabsolutemetricsnapshot": 92, "getmetr": 92, "fingerprint": 92, "delimin": 92, "outstand": 92, "question_id": [92, 211], "answer_cod": 92, "thequest": 92, "impl_typenam": 92, "mission_info": 92, "history_upper_tick_bound": 92, "int64valu": 92, "history_lower_tick_bound": 92, "history_past_tick": 92, "user_data": 92, "pause_tim": 92, "oftenthei": 92, "for_autonomous_process": 92, "ahuman": 92, "betterunderstand": 92, "answered_quest": 92, "tick_count": 92, "accepted_answer_cod": 92, "tick_start_timestamp": 92, "node_st": 92, "result_failur": 92, "result_error": 92, "whyth": 92, "status_invalid_question_id": 92, "status_invalid_cod": 92, "status_already_answ": 92, "status_incompatible_answ": 92, "status_no_mission_plai": 92, "status_no_miss": 92, "status_failur": 92, "status_paus": 92, "outsideof": 92, "status_non": 92, "completedsuccessfulli": 92, "notstatus_stop": 92, "loadmissionaschunk": 92, "failfor": 92, "useloadmissionaschunks2": 92, "astream": 92, "maximummessag": 92, "responsear": 92, "messages": 92, "isa": 92, "streamedmessag": 92, "THe": 92, "breakth": 92, "bedeseri": 92, "reiniti": 92, "localization_request": 92, "usedar": 92, "recalcul": 92, "allow_bad_qu": 92, "andif": 92, "response_bb_kei": 92, "thegraph": 92, "localization_request_bb_kei": 92, "thelocalization_request": 92, "abosdyn": 92, "theblackboard": 92, "gripper_param": 92, "navigation_feedback_response_blackboard_kei": 92, "messageto": 92, "navigate_route_response_blackboard_kei": 92, "toa": 92, "navigate_route_request_blackboard_kei": 92, "route_gen_param": 92, "navigate_to_response_blackboard_kei": 92, "query_param": [92, 115], "capture_action_ids_format": 92, "action_name_format": 92, "group_name_format": 92, "apiev": 92, "start_timeand": 92, "starttim": 92, "beevalu": 92, "motor_power_st": 92, "robot_state_blackboard_nam": 92, "ofclear": 92, "cause_fal": 92, "cause_hardwar": 92, "handle_stal": 92, "mission_text": 92, "rescu": 92, "textth": 92, "generatea": 92, "valuespecifi": 92, "willreplac": 92, "brace": [92, 284], "loop_count": 92, "arepeat": 92, "request_name_in_blackboard": 92, "acquiredatarequestaft": 92, "metadata_name_in_blackboard": 92, "generatean": 92, "action_namevalu": 92, "blackboardwil": 92, "variablefrom": 92, "disable_cancel_on_pause_or_stop": 92, "outgo": 92, "nodei": 92, "ispaus": 92, "outgoingacquiredatarequest": 92, "format_metadata": 92, "stringformat": 92, "thechild": 92, "willalwai": 92, "request_when_interrupt": 92, "andformat_metadata": 92, "pause_mission_metadata": 92, "restart_mission_metadata": 92, "load_mission_metadata": 92, "stop_mission_metadata": 92, "lease_use_error_metadata": 92, "play_mission_timeout_metadata": 92, "child_node_error_metadata": 92, "child_node_exception_metadata": 92, "default_metadata": 92, "keys_for_lease_use_error_messag": 92, "datetim": [92, 209, 220, 224], "iso8601": 92, "blackboard_vari": 92, "recommendsus": 92, "thischild": 92, "itreturn": 92, "docking_station_id_blackboard_kei": 92, "docking_command_response_blackboard_kei": 92, "anddocking_command_feedback_response_blackboard_kei": 92, "command_status_nam": 92, "tobosdyn": 92, "thisnam": 92, "feedback_status_nam": 92, "whiledock": 92, "statusvalu": 92, "namei": 92, "docking_command_feedback_response_blackboard_kei": 92, "duration_name_in_blackboard": 92, "oftyp": 92, "time_remaining_nam": 92, "blackboardvari": 92, "asa": 92, "timeout_child": 92, "nodewil": 92, "generatestr": 92, "blackboard_variable_nam": 92, "decim": 92, "float_vari": 92, "2f": 92, "tbdselect": 92, "13_loop_3": 92, "2148320923085": 92, "2158320923085": 92, "0f": 92, "71828": 92, "iff": 92, "node_refer": 92, "thenth": 92, "retain_leas": [92, 142], "for_dur": 92, "bosdyn_dock_st": 92, "set_blackboard": [92, 216], "date_to_blackboard": 92, "define_blackboard": [92, 216], "format_blackboard": 92, "constant_result": 92, "bosdyn_navigate_rout": 92, "bosdyn_navigate_to": 92, "bosdyn_graph_nav_st": 92, "bosdyn_graph_nav_loc": 92, "bosdyn_record_ev": 92, "simple_parallel": [92, 216], "spot_cam_store_media": 92, "spot_cam_focus_st": 92, "spot_cam_reset_autofocu": 92, "data_acquisition_on_interrupt": 92, "restart_when_paus": 92, "clear_behavior_fault": [92, 161], "bosdyn_gripper_camera_params_st": 92, "set_gripper_camera_param": [92, 288], "parallel_and": 92, "set_grasp_overrid": 92, "mission_upload_choreographi": 92, "create_mission_text": 92, "bosdyn_query_stored_captur": 92, "parameter_valu": [92, 288], "childrenrequir": 92, "finish_every_nod": 92, "wholeparalleland": 92, "allth": 92, "always_reprompt": 92, "unansw": 92, "adoor": 92, "options_list_in_blackboard": 92, "whenth": 92, "alertingthi": 92, "todownload": 92, "question_name_in_blackboard": 92, "remotemiss": [92, 214], "servicetreat": 92, "max_start": 92, "op": [92, 142, 182], "start_counter_state_nam": 92, "whetheror": 92, "childsucce": 92, "max_attempt": 92, "attempt_counter_state_nam": 92, "dereferenc": 92, "runtimeinsid": 92, "runtimevari": 92, "intoth": 92, "registeredwith": 92, "grasp_override_request": [92, 148], "params_in_blackboard_kei": 92, "new_param": 92, "run_secondary_node_onc": 92, "beforeth": 92, "restart_after_stop": 92, "thatmessag": 92, "adjust_paramet": 92, "adjustfeatur": 92, "localization_varnam": 92, "messagefor": 92, "acquire_data_request_nam": 92, "therefer": 92, "metadata_nam": 92, "metadata_json": 92, "metadata_channel": 92, "subtl": [92, 283], "astut": 92, "reader": [92, 188], "IF": 92, "pivot_valu": 92, "executeth": 92, "changewhich": 92, "int_children": 92, "default_child": 92, "compare_unknown": 92, "compare_eq": 92, "compare_n": 92, "compare_lt": 92, "compare_gt": 92, "compare_g": 92, "handle_stale_unknown": 92, "read_anywai": 92, "handle_stale_read_anywai": 92, "handle_stale_run_until_fresh": 92, "handle_stale_fail": 92, "complete_unknown": 92, "complete_after_sav": 92, "complete_after_acquir": 92, "butit": 92, "session_id": [92, 214], "missing_lease_resourc": 92, "missing_input": 92, "params_error": 92, "coher": 92, "missioncan": 92, "generatedbi": 92, "strive": 92, "status_missing_input": 92, "status_missing_leas": 92, "status_invalid_session_id": 92, "torn": 92, "unload": 92, "tickedin": 92, "missionrecord": 92, "string_valu": 92, "int_valu": 92, "bool_valu": 92, "msg_valu": 92, "nodeinfodownload": 92, "bytestr": 92, "bloat": 92, "source_represent": 92, "analogi": 92, "runtime_var": 92, "result_unknown": [92, 216], "result_run": 92, "result_success": 92, "type_str": 92, "type_int": 92, "type_bool": 92, "type_messag": 92, "se2_velocity_feedback": 92, "sit_feedback": 92, "stand_feedback": 92, "stance_feedback": 92, "follow_arm_feedback": 92, "se2_velocity_request": 92, "stance_request": 92, "follow_arm_request": 92, "throughto": 92, "reference_imag": 92, "theinput": 92, "month": [92, 252], "rightnow": 92, "valuesfor": 92, "modeldeprec": 92, "available_label": 92, "output_image_spec": 92, "firstat": 92, "thisconfid": 92, "suppress": [92, 123], "frametreesnapshotdefin": 92, "image_sources_and_servic": 92, "imageresponseswil": 92, "workeri": 92, "rotatedfor": 92, "network_compute_status_custom_params_error": 92, "list_available_models_status_unknown": 92, "list_available_models_status_success": 92, "list_available_models_status_external_service_not_found": 92, "list_available_models_status_external_server_error": 92, "rotate_image_unknown": 92, "rotate_image_no_rot": 92, "rotate_image_align_with_bodi": 92, "imageso": 92, "ifth": 92, "network_compute_status_unknown": 92, "network_compute_status_external_service_not_found": 92, "network_compute_status_external_server_error": 92, "network_compute_status_rotation_error": 92, "aretri": 92, "diverg": 92, "mac_address": 92, "mac": [92, 274, 328], "connected_tim": 92, "rx_signal_dbm": 92, "rx_signal_avg_dbm": 92, "rx_beacon_signal_avg_dbm": 92, "expected_bits_per_second": 92, "throughput": 92, "rx_byte": 92, "rx_packet": 92, "rx_bits_per_second": 92, "unicast": 92, "tx_byte": 92, "tx_packet": 92, "tx_bits_per_second": 92, "tx_retri": 92, "tx_fail": 92, "beacons_receiv": 92, "beacon_loss_count": 92, "tx_power_dbm": 92, "countabl": 92, "uint_valu": 92, "limb": 92, "occurbetween": 92, "margin": [92, 135, 274], "providedin": 92, "inertia": 92, "moi": 92, "thepayload": 92, "thefunct": 92, "recordsar": 92, "body_tform_payload": 92, "mount_tform_payload": 92, "mount_frame_nam": 92, "mountfram": 92, "pingif": 92, "mbp": 92, "mass_volume_properti": 92, "preset_configur": 92, "total_mass": 92, "com_pos_rt_payload": 92, "moi_tensor": 92, "payloadcent": 92, "specifyingmust": 92, "joint_limit": 92, "developmentpurpos": 92, "preset_nam": 92, "isdisplai": 92, "mount_frame_unknown": 92, "mount_frame_body_payload": 92, "mount_frame_gripper_payload": 92, "mount_frame_wr1": 92, "estimated_payload": 92, "payloadestim": 92, "1min": 92, "error_non": 92, "error_failed_stand": 92, "error_no_result": 92, "status_small_mass": 92, "tonot": 92, "validaft": 92, "updated_vers": [92, 154], "updatepayloadvers": 92, "status_invalid_credenti": 92, "registeredpayload": 92, "status_payload_not_author": 92, "request_attach": 92, "request_detach": 92, "status_does_not_exist": 92, "anyregist": 92, "webserv": [92, 311], "updatepayload": 92, "getpointcloud": 92, "point_cloud_request": [92, 155], "point_cloud_respons": 92, "point_cloud_sourc": [92, 155], "onstartup": 92, "num_point": 92, "encoding_paramet": 92, "scale_factor": 92, "remap": 92, "xyz_4sc": 92, "xyz_5sc": 92, "boxcent": 92, "max_z": 92, "dimensionsof": 92, "thesedimens": 92, "remapping_const": 92, "xyz_5c": 92, "bytes_per_point": 92, "point_cloud_source_nam": [92, 155], "cloudsourc": 92, "frame_name_sensor": 92, "vision_tform_sensor": 92, "computedbi": 92, "transformationsto": 92, "encoding_xyz_32f": 92, "float32": 92, "thisallow": 92, "byfloat": 92, "otherencod": 92, "encoding_xyz_4sc": 92, "int8": 92, "p1_x": 92, "p1_y": 92, "p1_z": 92, "mod": 92, "cpoint": 92, "xyz_32f": 92, "resolutionand": 92, "isapproxim": 92, "encoding_xyz_5sc": 92, "upan": 92, "status_point_cloud_data_error": 92, "status_unknown_sourc": 92, "listpointcloudsourc": 92, "ofsourc": 92, "desired_end_tim": 92, "ifstop": 92, "early_stop_tim": 92, "commandstop": 92, "itwa": 92, "percent_pow": [92, 156, 273], "fansmai": 92, "power_command_id": [92, 156], "blocking_fault": 92, "safety_stop_typ": [92, 156, 317], "status_temperature_stop": 92, "status_overridden_by_command": 92, "wasup": 92, "status_temperature_too_high": 92, "request_off_motor": 92, "request_on_motor": 92, "request_off_robot": 92, "request_cycle_robot": 92, "request_off_payload_port": 92, "request_on_payload_port": 92, "request_off_wifi_radio": 92, "request_on_wifi_radio": 92, "status_shore_power_connect": 92, "status_battery_miss": 92, "status_command_in_progress": 92, "cant": 92, "status_fault": 92, "faultstat": [92, 156], "status_license_error": 92, "incompatible_hardware_error": 92, "caseof": 92, "status_keepalive_motors_off": 92, "safety_stop_unknown": 92, "safety_stop_primari": [92, 317], "safety_stop_redund": [92, 317], "status_incompatible_hardware_error": 92, "status_unknown_stop_typ": 92, "beforeanoth": 92, "fanpowercommand": 92, "fanpowercommandfeedback": 92, "hit_position_in_hit_fram": 92, "hit_fram": 92, "distance_met": 92, "ray_frame_nam": 92, "min_intersection_dist": 92, "intersection_typ": 92, "untilal": 92, "hit_frame_nam": 92, "clientiniti": 92, "thetransform": 92, "totransform": 92, "alltransform": 92, "propertiessubmessag": 92, "type_ground_plan": [92, 313], "type_terrain_map": [92, 313], "type_voxel_map": [92, 313], "voxel": [92, 334], "type_hand_depth": 92, "status_invalid_intersection_typ": 92, "status_unknown_fram": 92, "thesurround": 92, "behavior_fault_id": [92, 161], "behavior_fault": 92, "blocking_system_fault": 92, "joint_command": [92, 161], "full_body_feedback": 92, "synchronized_feedback": 92, "robot_command_id": [92, 161], "compris": 92, "status_clear": [92, 161], "status_not_clear": 92, "steam": 92, "status_inact": 92, "status_unsupport": 92, "status_not_powered_on": 92, "uid": 92, "hassucceed": 92, "jointcontrolstream": 92, "20190601": 92, "api_vers": 92, "build_inform": 92, "robotwhich": 92, "withoutrequir": 92, "charge_percentag": 92, "estimated_runtim": 92, "inamp": 92, "volt": 92, "onset_timestamp": 92, "acquisition_timestamp": 92, "thebosdyn": 92, "wifi_st": 92, "state_descript": 92, "foot_position_rt_bodi": 92, "ground_mu_est": 92, "foot_slip_distance_rt_fram": 92, "foot_slip_velocity_rt_fram": 92, "ground_contact_normal_rt_fram": 92, "visual_surface_ground_penetration_mean": 92, "penetr": 92, "visualsurfac": 92, "gravel": 92, "sand": 92, "grass": 92, "areposit": 92, "visual_surface_ground_penetration_std": 92, "can_power_command_request_off_robot": 92, "can_power_command_request_cycle_robot": 92, "can_power_command_request_payload_port": 92, "can_power_command_request_wifi_radio": 92, "has_audio_visual_system": 92, "redundant_safety_stop_en": 92, "packet_r": 92, "mounting_link_nam": 92, "position_imu_rt_link": 92, "acceleration_rt_odom_in_link_fram": 92, "mountinglink": 92, "angular_velocity_rt_odom_in_link_fram": 92, "sframe": 92, "odom_rot_link": 92, "sothi": 92, "revolut": 92, "fortransl": 92, "seehttp": 92, "conceptualdocument": 92, "sodometri": 92, "isat": 92, "themiddl": 92, "yplane": 92, "framex": 92, "beconvert": 92, "feet_cent": 92, "atth": 92, "thecent": 92, "followingfram": 92, "theapi": 92, "isalign": 92, "distal": 92, "velocity_of_body_in_odom": 92, "gripper_open_percentag": 92, "is_gripper_holding_item": 92, "estimated_end_effector_force_in_hand": 92, "stow_stat": 92, "velocity_of_hand_in_vis": 92, "velocity_of_hand_in_odom": 92, "shore_power_st": 92, "robot_power_st": 92, "payload_ports_power_st": 92, "wifi_radio_power_st": 92, "orbas": 92, "robothardwareconfigur": 92, "hardware_configur": 92, "system_fault": 92, "status_system_fault": 92, "tostop": 92, "status_service_fault": 92, "causedth": 92, "robotlinkmodel": 92, "link_nam": [92, 163], "link_model": 92, "robot_metr": 92, "battery_st": 92, "comms_stat": 92, "system_fault_st": 92, "estop_st": 92, "behavior_fault_st": 92, "service_fault_st": 92, "terrain_st": 92, "system_st": 92, "robotstatestream": 92, "inertial_st": 92, "last_command": 92, "received_timestamp": 92, "odom_tform_bodi": 92, "fordetail": 92, "seekinematicst": 92, "historical_fault": 92, "ring": [92, 178], "attribut": [92, 150, 216, 218, 222], "levelof": 92, "obj_model": 92, "file_nam": [92, 97], "file_cont": 92, "codei": 92, "forboston": 92, "staff": 92, "onrobot": 92, "remedi": 92, "attributeseach": 92, "mayhav": 92, "attributesmai": 92, "letu": 92, "gyro": 92, "robotrespons": 92, "severity_warn": 92, "levelseverity_crit": 92, "shutdownimmedi": 92, "motor_temperatur": 92, "offth": 92, "current_mod": 92, "essid": 92, "status_miss": 92, "status_charg": 92, "status_discharg": 92, "status_boot": 92, "cause_unknown": 92, "malfunct": 92, "status_unclear": 92, "state_not_readi": 92, "state_transit": 92, "state_stand": 92, "state_step": 92, "state_estop": 92, "state_not_estop": 92, "type_hardwar": 92, "type_softwar": 92, "contact_unknown": 92, "contact_mad": 92, "contact_lost": 92, "stowabl": 92, "carry_state_unknown": 92, "carry_state_not_carri": 92, "stowstate_unknown": 92, "stowstate_stow": 92, "stowstate_deploi": 92, "motor_power_state_unknown": 92, "state_off": 92, "motor_power_state_off": 92, "state_on": 92, "motor_power_state_on": 92, "state_powering_on": 92, "motor_power_state_powering_on": 92, "state_powering_off": 92, "motor_power_state_powering_off": 92, "state_error": 92, "motor_power_state_error": 92, "payload_ports_power_state_unknown": 92, "payload_ports_power_state_on": 92, "payload_ports_power_state_off": 92, "robot_power_state_unknown": 92, "robot_power_state_on": 92, "robot_power_state_off": 92, "state_unknown_shore_pow": 92, "shore_power_state_unknown": 92, "state_on_shore_pow": 92, "toshor": 92, "shore_power_state_on": 92, "state_off_shore_pow": 92, "shore_power_state_off": 92, "router": 92, "wifi_radio_power_state_unknown": 92, "wifi_radio_power_state_on": 92, "wifi_radio_power_state_off": 92, "impaired_status_unknown": 92, "impaired_status_ok": 92, "impaired_status_no_robot_data": 92, "impaired_status_system_fault": 92, "impaired_status_no_motor_pow": 92, "impaired_status_remote_clouds_not_work": 92, "impaired_status_service_fault": 92, "impaired_status_behavior_fault": 92, "impaired_status_entity_detector_not_work": 92, "detectorexist": 92, "severity_unknown": 92, "severity_info": 92, "severity_crit": 92, "mode_access_point": 92, "mode_cli": 92, "getrobotlinkmodel": 92, "aftergetrobothardwareconfigur": 92, "aselect": 92, "dict_valu": [92, 216], "list_valu": 92, "double_valu": 92, "roi_valu": 92, "one_of_valu": 92, "roi_spec": 92, "bool_spec": 92, "one_of_spec": 92, "is_hidden_by_default": [92, 166], "infrequ": 92, "min_max": 92, "followthat": 92, "valuesshould": 92, "that_specs_kei": 92, "default_kei": [92, 166], "service_and_sourc": [92, 166], "image_col": 92, "sames": 92, "image_row": 92, "imageoth": 92, "thosecas": 92, "default_area": [92, 166], "allows_rectangl": [92, 166], "constrainwhich": 92, "typeswon": 92, "freeform": 92, "thedictparam": 92, "bemachin": 92, "behuman": 92, "incombin": 92, "anddictionari": 92, "status_invalid_combin": 92, "status_unsupported_paramet": 92, "status_invalid_valu": 92, "status_invalid_typ": 92, "fault_id": 92, "clear_all_service_fault": [92, 128], "clear_all_payload_fault": [92, 128], "bedisplai": 92, "theseattribut": 92, "withparticular": 92, "moreattribut": 92, "breakageresult": 92, "payloadx": 92, "anunexpect": 92, "fault_nam": 92, "levelfault": 92, "theservice_nam": 92, "minor": 92, "status_fault_not_act": 92, "status_fault_already_act": 92, "psia": 92, "sample_r": 92, "signal_spec": 92, "signal_data": [92, 167], "acronym": 92, "abbrevi": 92, "pt1": 92, "transduc": 92, "binary_descriptor": 92, "reference_keypoint": 92, "live_keypoint": 92, "reference_index": 92, "live_index": 92, "match_unknown": 92, "match_orb": 92, "rotatedbrief": 92, "match_lightglu": 92, "lightglu": 92, "keypoint_unknown": 92, "keypoint_simpl": 92, "havedescriptor": 92, "keypoint_orb": 92, "keypoint_disk": 92, "discret": [92, 255], "animation_nam": [92, 97], "finalanim": 92, "specificax": 92, "alongspecif": 92, "parameteroverrid": 92, "theexpens": 92, "stringvalu": 92, "enable_animation_dur": 92, "enable_leg_tim": 92, "enable_stance_shap": 92, "body_x_multipli": 92, "body_y_multipli": 92, "body_z_multipli": 92, "body_roll_multipli": 92, "body_pitch_multipli": 92, "body_yaw_multipli": 92, "armmov": 92, "shoulder_0": 92, "shoulder_1": 92, "elbow_0": 92, "elbow_1": 92, "wrist_0": 92, "wrist_1": 92, "bodyhold": 92, "originalpos": 92, "bourre": 92, "buttcircl": 92, "dancemov": 92, "overbeats_per_circl": 92, "bob": 92, "theloc": 92, "crawl": [92, 338], "drive_velocity_bodi": 92, "body_orientation_offset": 92, "maximum_drive_velocity_bodi": 92, "maximum_body_translation_offset": 92, "maximum_body_orientation_offset": 92, "fl_swing": 92, "two_fl_sw": 92, "second_fl_sw": 92, "fr_swing": 92, "two_fr_sw": 92, "second_fr_sw": 92, "hl_swing": 92, "two_hl_sw": 92, "second_hl_sw": 92, "hr_swing": 92, "two_hr_sw": 92, "second_hr_sw": 92, "show_stance_shap": 92, "parameterset": 92, "use_fl_swing_param": 92, "fl_swing_param": 92, "use_fr_swing_param": 92, "fr_swing_param": 92, "use_hl_swing_param": 92, "hl_swing_param": 92, "use_hr_swing_param": 92, "hr_swing_param": 92, "show_stability_param": 92, "with0": 92, "show_animated_cycle_param": 92, "breath_max_period": 92, "include_front_left_leg": 92, "include_front_right_leg": 92, "include_hind_left_leg": 92, "include_hind_right_leg": 92, "frontup": 92, "tocomplet": 92, "hop": [92, 338], "lo": 92, "td": 92, "offlight": 92, "theyaw_is_absolut": 92, "deprecatedand": 92, "kneellegmove2": 92, "kneellegmov": 92, "fl_hx": 92, "fl_hy": 92, "fl_kn": 92, "fr_hx": 92, "fr_hy": 92, "fr_kn": 92, "hl_hx": 92, "hl_hy": 92, "hl_kn": 92, "hr_hx": 92, "hr_hy": 92, "hr_kn": 92, "azero": 92, "randomrot": 92, "betweenth": 92, "witha": 92, "thischoreographi": 92, "iti": 92, "runningman": 92, "contralater": 92, "movewith": 92, "bodyfram": 92, "swingpath": 92, "ornearli": 92, "swai": 92, "thehead": 92, "thevalu": 92, "twerk": 92, "dance_frame_id": 92, "arm_move_frame_unknown": 92, "arm_move_frame_center_of_footprint": 92, "arm_move_frame_hand": 92, "arm_move_frame_bodi": 92, "arm_move_frame_should": 92, "arm_move_frame_shadow": 92, "arm_move_frame_d": 92, "note_unknown": 92, "note_c": 92, "note_d": 92, "note_": 92, "note_f": 92, "note_g": 92, "note_a": 92, "note_b": 92, "easing_unknown": 92, "easing_linear": 92, "easing_quadratic_input": 92, "easing_quadratic_output": 92, "easing_quadratic_in_out": 92, "easing_cubic_input": 92, "easing_cubic_output": 92, "easing_cubic_in_out": 92, "easing_exponential_input": 92, "easing_exponential_output": 92, "easing_exponential_in_out": 92, "preset_unknown": 92, "preset_custom": 92, "preset_interest": 92, "preset_play": 92, "preset_fear": 92, "preset_nerv": 92, "preset_exhaust": 92, "inclusion_unknown": 92, "inclusion_if_st": 92, "inclusion_includ": 92, "inclusion_exclud": 92, "lead_unknown": 92, "lead_auto": 92, "lead_front": 92, "lead_hind": 92, "lead_left": 92, "lead_right": 92, "led_light_unknown": 92, "led_light_left1": 92, "led_light_left2": 92, "led_light_left3": 92, "led_light_left4": 92, "led_light_right1": 92, "led_light_right2": 92, "led_light_right3": 92, "led_light_right4": 92, "leg_unknown": 92, "leg_front_left": 92, "leg_front_right": 92, "leg_hind_left": 92, "leg_hind_right": 92, "pivot_unknown": 92, "pivot_front": 92, "pivot_hind": 92, "pivot_cent": 92, "light_side_unknown": 92, "light_side_left": 92, "light_side_right": 92, "light_side_both_in_sequ": 92, "light_side_both_match": 92, "pattern_unknown": 92, "pattern_flash": 92, "pattern_snak": 92, "pattern_alternate_color": 92, "pattern_fine_grained_alternate_color": 92, "side_unknown": 92, "side_left": 92, "side_right": 92, "sway_style_unknown": 92, "sway_style_fast_out": 92, "sway_style_fast_return": 92, "sway_style_squar": 92, "sway_style_spik": 92, "sway_style_plateau": 92, "legal": 92, "custom_gait_command_limit": 92, "joint_angl": 92, "hand_pos": [92, 161], "euler_angl": 92, "gripper_angl": 92, "thefoot": 92, "anglesor": 92, "animation_keyfram": 92, "ofeach": 92, "controls_arm": 92, "controls_leg": 92, "controls_bodi": 92, "controls_gripp": 92, "liftoffand": 92, "assume_zero_roll_and_pitch": 92, "footheight": 92, "needn": 92, "aninteg": 92, "slightlyto": 92, "minimum_paramet": 92, "willalso": 92, "validatethat": 92, "default_paramet": 92, "maximum_paramet": 92, "forleg": 92, "controlof": 92, "afutur": 92, "gaitto": 92, "themark": 92, "themov": 92, "textual": 92, "alpha": 92, "music_fil": 92, "music_start_slic": 92, "fortim": 92, "choreography_start_slic": 92, "commandmultipl": 92, "command_end_tim": 92, "slices_per_minut": 92, "correspondto": 92, "choreography_info": 92, "moveaccept": 92, "anexecut": 92, "thestartrecordingst": 92, "specifiedbi": 92, "fromexecutechoreographyrespons": 92, "current_slic": 92, "active_mov": 92, "sequence_slic": 92, "sequence_slices_per_minut": 92, "timedefin": 92, "theacceptable_time_differ": 92, "override_validity_tim": 92, "sclock": 92, "theoverrid": 92, "executechoreographystart": 92, "executechoreographyrequesttim": 92, "timeb": 92, "overridevalid": 92, "canb": 92, "be60": 92, "thoseissu": 92, "withparamet": 92, "responsestatu": 92, "log_typ": [92, 97], "anchoreographystatelog": 92, "choreography_sequence_nam": 92, "cansynchron": 92, "choreography_starting_slic": [92, 97], "therequir": 92, "move_param_config": 92, "moveparamsconfig": 92, "beendeprec": 92, "sequence_info": 92, "fr_contact": 92, "fl_contact": 92, "hr_contact": 92, "hl_contact": 92, "foot_contact_st": 92, "animation_tform_bodi": 92, "definedbas": 92, "add_label": [92, 97], "remove_label": [92, 97], "custom_gait_command": 92, "move_length_slic": 92, "move_length_tim": 92, "is_extend": 92, "ormove_length_tim": 92, "min_move_length_slic": 92, "max_move_length_slic": 92, "min_tim": 92, "max_tim": 92, "admiss": 92, "controls_light": 92, "controls_annot": 92, "controls_audio_visual_light": 92, "controls_audio_visual_buzz": 92, "animated_move_generated_id": 92, "useto": 92, "start_slic": 92, "requested_slic": 92, "movewa": 92, "thesequ": 92, "activemovesin": 92, "isintend": 92, "jump_param": 92, "rotate_body_param": 92, "step_param": 92, "butt_circle_param": 92, "turn_param": 92, "pace_2step_param": 92, "twerk_param": 92, "chicken_head_param": 92, "clap_param": 92, "front_up_param": 92, "sway_param": 92, "body_hold_param": 92, "arm_move_param": 92, "kneel_leg_move_param": 92, "running_man_param": 92, "kneel_circle_param": 92, "hop_param": 92, "random_rotate_param": 92, "crawl_param": 92, "side_param": 92, "bourree_param": 92, "workspace_arm_move_param": 92, "figure8_param": 92, "kneel_leg_move2_param": 92, "fidget_stand_param": 92, "goto_param": 92, "frame_snapshot_param": 92, "set_color_param": 92, "ripple_color_param": 92, "fade_color_param": 92, "independent_color_param": 92, "animate_param": 92, "saved_st": 92, "toretain": 92, "otherinterfac": 92, "continue_recording_dur": 92, "beextend": 92, "recording_session_id": 92, "willstop": 92, "clearth": 92, "continueto": 92, "clientand": 92, "animationprotobuf": 92, "protobufmessag": 92, "reuploadanim": 92, "animatedmov": 92, "status_animation_validation_fail": 92, "whichpart": 92, "ananim": 92, "hasoth": 92, "invalidrequest": 92, "thencertain": 92, "orparamet": 92, "arm_playback_default": 92, "jointspaceand": 92, "arm_playback_jointspac": 92, "arm_playback_workspac": 92, "arm_playback_workspace_dance_fram": 92, "bemost": 92, "category_unknown": 92, "category_bodi": 92, "category_step": 92, "category_dynam": 92, "category_transit": 92, "category_kneel": 92, "category_arm": 92, "category_anim": 92, "category_mpc": 92, "category_light": 92, "category_annot": 92, "category_audio_visual_light": 92, "category_audio_visual_buzz": 92, "status_accepted_with_modif": 92, "status_no_matching_mov": 92, "status_invalid_command": 92, "status_already_expir": 92, "status_danc": 92, "status_completed_sequ": 92, "status_prep": 92, "status_waiting_for_start_tim": 92, "status_interrupt": 92, "status_fallen": 92, "status_oth": 92, "status_before_current_tim": 92, "status_exceeds_validity_tim": 92, "status_override_time_unset": 92, "status_failed_to_delet": 92, "status_unknown_sequ": 92, "status_already_temporari": 92, "status_permanent_sequ": 92, "log_type_unknown": 92, "log_type_manu": 92, "fillingup": 92, "log_type_last_choreographi": 92, "downloadthi": 92, "status_no_recorded_inform": 92, "status_incomplete_data": 92, "recordingbuff": 92, "wasrecord": 92, "bufferwa": 92, "status_invalid_uploaded_choreographi": 92, "status_robot_command_issu": 92, "status_unknown_anim": 92, "status_failed_to_upd": 92, "andchang": 92, "revert": 92, "transition_state_unknown": 92, "transition_state_stand": 92, "transition_state_kneel": 92, "transition_state_sit": 92, "transition_state_sprawl": 92, "status_failed_to_sav": 92, "saved_state_unknown": 92, "saved_state_temporari": 92, "saved_state_retain": 92, "loadedto": 92, "saved_state_perman": 92, "extendeddur": 92, "status_unknown_recording_session_id": 92, "recordinglog": 92, "status_recording_buffer_ful": 92, "5minut": 92, "status_ping_respons": 92, "uploadedchoreographi": 92, "ofretain": 92, "search_ray_start_in_fram": 92, "search_ray_end_in_fram": 92, "hinge_sid": 92, "swing_direct": 92, "push_point_in_fram": 92, "distance_past_threshold": 92, "doorfram": 92, "finishingsid": 92, "auto_grasp_command": 92, "warmstart_command": 92, "auto_push_command": 92, "handle_typ": 92, "door_command": 92, "door_command_id": 92, "opendoorrespons": 92, "willkeep": 92, "stateindefinit": 92, "handle_type_unknown": 92, "handle_type_lev": 92, "handle_type_knob": 92, "handle_type_fixed_grasp": 92, "hinge_side_unknown": 92, "hinge_side_left": 92, "hinge_side_right": 92, "swing_direction_unknown": 92, "status_robot_command_error": 92, "status_door_plane_not_detect": 92, "forward_command": 92, "reverse_command": 92, "opendoor": 92, "opendoorfeedback": 92, "beeither": 92, "root_tform_scen": 92, "optionalscen": 92, "aretherefor": 92, "inversekinemat": 92, "framedefin": 92, "scene_tform_task": 92, "scenefram": 92, "nominal_arm_configur": 92, "solver": 92, "arm_config_curr": 92, "nominal_arm_configuration_overrid": 92, "jointswil": 92, "scene_tform_body_nomin": 92, "fixed_st": 92, "on_ground_plane_st": 92, "wrist_mounted_tool": 92, "body_mounted_tool": 92, "tool_pose_task": 92, "tool_gaze_task": 92, "body_tform_tool": 92, "toolfram": 92, "fl_rt_scene": 92, "ifunspecifi": 92, "fr_rt_scene": 92, "hl_rt_scene": 92, "hr_rt_scene": 92, "scene_tform_ground": 92, "unspecifiedth": 92, "target_in_task": 92, "beconstrain": 92, "thewrist": 92, "robot_configur": 92, "joint_statessubfield": 92, "arm_config_unknown": 92, "arm_config_readi": 92, "definedwith": 92, "facingforward": 92, "status_no_solution_found": 92, "thegeometr": 92, "wrt": 92, "footloc": 92, "body_assist_for_manipul": 92, "onlyavail": 92, "aninerti": 92, "root_frame_nameset": 92, "aarmcartesiancommand": 92, "anarmjointmovecommand": 92, "heightand": 92, "body_pos": [92, 161], "besatur": 92, "effectwhen": 92, "todefault": 92, "rotation_set": 92, "orbody_pos": 92, "enable_body_yaw_assist": 92, "enable_hip_height_assist": 92, "base_offset_rt_root": 92, "odd": 92, "external_force_ind": [92, 161], "external_force_overrid": 92, "knownto": 92, "lean": 92, "causeth": 92, "wouldb": 92, "theforc": 92, "body_control": 92, "locomotion_hint": [92, 161], "stairs_mode_off": 92, "stairs_mode_auto": 92, "allow_degraded_percept": 92, "obstacle_param": 92, "disallow_stair_track": 92, "stairtrack": 92, "external_force_param": [92, 161], "disallow_non_stairs_pitch_limit": 92, "rearward": 92, "disable_nearmap_cliff_avoid": 92, "nearmap": 92, "disable_vision_foot_obstacle_avoid": 92, "disable_vision_foot_constraint_avoid": 92, "disable_vision_body_obstacle_avoid": 92, "disable_vision_foot_obstacle_body_assist": 92, "disable_vision_negative_obstacl": 92, "ifnecessari": 92, "grated_surfaces_modeth": 92, "rotation_setting_unknown": 92, "rotation_setting_offset": 92, "rotation_setting_absolut": 92, "external_force_non": [92, 161], "external_force_use_estim": [92, 161], "external_force_use_overrid": [92, 161], "hint_auto": 92, "hint_trot": 92, "hint_speed_select_trot": 92, "hint_crawl": 92, "hint_speed_select_crawl": 92, "hint_ambl": 92, "hint_speed_select_ambl": 92, "hint_jog": 92, "aerial": 92, "hint_hop": 92, "hint_auto_trot": 92, "hint_auto_ambl": 92, "hazard_detection_mode_unknown": 92, "hazard_detection_mode_off": 92, "hazard_detection_mode_on": 92, "hazard_detection_mode_cost": 92, "stairs_mode_unknown": 92, "stairs_mode_on": 92, "swing_height_unknown": 92, "swing_height_low": 92, "swing_height_medium": 92, "swing_height_high": 92, "grated_surfaces_mode_unknown": 92, "grated_surfaces_mode_off": 92, "grated_surfaces_mode_on": 92, "grated_surfaces_mode_auto": 92, "cameracalibrationcommand": 92, "cameracalibrationfeedback": 92, "severity_scor": 92, "foot_height_error_from_mean": 92, "obstruct": 92, "old_offset": 92, "health_scor": 92, "unhealthi": 92, "calibration1": 92, "perfect": 92, "calibrationtyp": 92, "leg_pair_distance_chang": 92, "loadcel": [92, 180], "old_zero": 92, "extra_payload": 92, "hasposit": 92, "spotcheckcommand": 92, "spotcheckfeedback": 92, "waiting_for_command": 92, "camera_result": 92, "frontright": 92, "load_cell_result": 92, "hxa": 92, "hya": 92, "kna": 92, "kinematic_cal_result": 92, "payload_result": 92, "hip_range_of_motion_result": 92, "checkth": 92, "last_cal_timestamp": 92, "command_unknown": 92, "command_start": 92, "command_cancel": 92, "andi": 92, "status_user_cancel": 92, "status_power_error": 92, "movearound": 92, "possiblyencount": 92, "status_calibration_error": 92, "ifcalibr": 92, "calibrationprocedur": 92, "extraordinari": 92, "status_camera_focus_error": 92, "status_target_not_cent": 92, "status_target_not_in_view": 92, "status_target_not_gravity_align": 92, "status_target_upside_down": 92, "status_never_run": 92, "status_camera_not_detect": 92, "status_intrinsic_write_fail": 92, "status_extrinsic_write_fail": 92, "status_warn": 92, "error_obstruct": 92, "error_clutch_slip": 92, "clutch": 92, "error_zero_out_of_rang": 92, "error_mass_discrep": 92, "discrep": 92, "command_abort": 92, "command_revert_c": 92, "error_unexpected_power_chang": 92, "error_init_imu_check": 92, "error_init_not_sit": 92, "error_loadcell_timeout": 92, "error_power_on_failur": 92, "error_endstop_timeout": 92, "error_camera_timeout": 92, "error_ground_check": 92, "error_power_off_failur": 92, "error_revert_failur": 92, "error_fgkc_failur": 92, "eg": 92, "state_user_abort": 92, "state_start": 92, "state_loadcell_c": 92, "state_endstop_c": 92, "state_camera_check": 92, "state_body_pos": 92, "state_finish": 92, "state_reverting_c": 92, "state_waiting_for_command": 92, "state_hip_range_of_motion_check": 92, "recalibr": 92, "bothrecalibr": 92, "backresult": 92, "joint_index_fl_hx": 92, "joint_index_fl_hi": 92, "joint_index_fl_kn": 92, "joint_index_fr_hx": 92, "joint_index_fr_hi": 92, "joint_index_fr_kn": 92, "joint_index_hl_hx": 92, "joint_index_hl_hi": 92, "joint_index_hl_kn": 92, "joint_index_hr_hx": 92, "joint_index_hr_hi": 92, "joint_index_hr_kn": 92, "joint_index_a0_sh0": 92, "joint_index_a0_sh1": 92, "joint_index_a0_el0": 92, "joint_index_a0_el1": 92, "joint_index_a0_wr0": 92, "joint_index_a0_wr1": 92, "joint_index_a0_f1x": 92, "leg_index_fl": 92, "leg_index_fr": 92, "leg_index_hl": 92, "leg_index_hr": 92, "overwrittenwith": 92, "wav": [92, 169, 324], "ismultipli": 92, "stare": 92, "theidentifi": 92, "audio_channel_unknown": 92, "audio_channel_internal_m": 92, "audio_channel_external_m": 92, "theframetreesnapshot": 92, "namingconvent": 92, "frametre": [92, 129], "direction": 92, "ingeometri": 92, "synthet": 92, "panorama": 92, "center_point": 92, "en": 92, "distortion_": 92, "software_correctionif": 92, "ie": 92, "min_angl": 92, "max_angl": 92, "thewindow": 92, "xoffset": 92, "yoffset": 92, "thisresolut": 92, "describedin": 92, "takesplac": 92, "auto_scal": [92, 170], "theset": 92, "delta": 92, "colormap_unknown": 92, "colormap_greyscal": 92, "maximumvalu": 92, "colormap_jet": 92, "jet": [92, 324], "valuesclos": 92, "lightyellow": 92, "252": 92, "164": 92, "blind": 92, "turbo": 92, "asfals": 92, "tempunit_unknown": 92, "tempunit_celsiu": 92, "tempunit_fahrenheit": 92, "tempunit_kelvin": 92, "millidegre": 92, "enable_temperatur": 92, "enable_humid": 92, "humid": [92, 174, 299], "enable_bit": 92, "volatil": 92, "memoryand": 92, "enable_shock": 92, "shock": [92, 174], "enable_system_stat": 92, "statscpu": 92, "utilizationnowow": 92, "enable_led_stat": 92, "image_param": 92, "basefrom": 92, "intendednam": 92, "definedin": 92, "tile": 92, "c0": 92, "c4": 92, "rgb24": 92, "passphras": [92, 174], "toremount": 92, "remount": 92, "laterit": 92, "th": 92, "queued_unknown": 92, "queued_rend": 92, "queued_disk": 92, "stillimag": 92, "ic": [92, 175, 324], "ssl": [92, 164, 175], "ascii": 92, "armor": 92, "stun": 92, "mackei": 92, "accesstoken": 92, "uint32valu": 92, "mask": 92, "mtu": [92, 294], "mtuif": 92, "1500": 92, "transport_unknown": 92, "transport_udp": 92, "transport_tcp": 92, "effectpow": 92, "thiscal": 92, "aux1": [92, 176], "aux2": [92, 176], "external_m": [92, 176], "pan_limit": 92, "validlimit": 92, "tilt_limit": 92, "zoom_limit": 92, "mech": [92, 324], "eo": 92, "focus_posit": [92, 177], "settabl": [92, 177], "ptz_focus_manu": [92, 177], "modethi": 92, "approx_dist": 92, "modeapprox_dist": 92, "20mapprox_dist": 92, "differand": 92, "1x": 92, "30x": 92, "ptz_focus_undefin": 92, "ptz_focus_auto": 92, "playsound": 92, "soundrequest": 92, "effectst": 92, "loadsound": 92, "wavfil": 92, "riff": 92, "theentir": 92, "soundfield": 92, "deletesound": 92, "listsound": 92, "setvolum": 92, "getvolum": 92, "setaudiocapturechannel": 92, "getaudiocapturechannel": 92, "setaudiocapturegain": 92, "getaudiocapturegain": 92, "setscreen": 92, "getscreen": 92, "listscreen": 92, "getvisiblecamera": 92, "getirmeteroverlai": 92, "gettemperatur": 92, "thermomet": [92, 171], "theymeasur": 92, "getbitstatu": 92, "systemi": 92, "usbstorag": 92, "clearbitev": 92, "bitstatu": [92, 171], "possibleissu": 92, "themanufactur": 92, "setledbright": 92, "getledbright": 92, "mainli": [92, 242], "enabledebug": 92, "diskutil": 92, "mortem": 92, "listcamera": 92, "retrieverawdata": 92, "listlogpoint": 92, "setpassphras": 92, "ecryptf": 92, "symmetri": 92, "onlythi": 92, "ext4": 92, "ntf": [92, 174], "unimplementederror": [92, 127], "seticeconfigur": 92, "turnservic": 92, "geticeconfigur": 92, "stunand": 92, "componentturn": 92, "getpowerstatu": 92, "setptzposit": 92, "setposit": 92, "getptzposit": 92, "getposit": 92, "setptzveloc": 92, "getptzveloc": 92, "listptz": 92, "setptzfocusst": 92, "getptzfocusst": 92, "postprocess": [92, 178], "setstreamparam": 92, "getstreamparam": 92, "enablecongestioncontrol": 92, "getsoftwarevers": 92, "enable_congestion_control": [92, 178], "targetbitr": 92, "bp": [92, 178], "refreshinterv": [92, 178], "macroblock": 92, "idrinterv": [92, 178], "idr": [92, 178], "awb": 92, "auto_exposur": [92, 178], "sync_exposur": 92, "intoaccount": 92, "manual_exposur": [92, 178], "brightness_target": 92, "whichcontrol": 92, "setpoint": 92, "algorithmif": 92, "sensibl": 92, "incandesc": 92, "fluoresc": 92, "warm_fluoresc": 92, "daylight": 92, "cloudi": 92, "twilight": 92, "shade": 92, "frame_tform_stair": 92, "knowledge_typ": 92, "stair_tform": 92, "riser": 92, "average_ris": 92, "average_run": 92, "average_width": 92, "bounded_width": 92, "stairs_tform_landing_cent": 92, "landing_extent_x": 92, "landing_extent_i": 92, "bottom_land": 92, "top_land": 92, "from_ko_tform_stair": 92, "lowermost": 92, "toalign": 92, "uppermost": 92, "knowledge_type_unknown": 92, "knowledge_type_map": 92, "knowledge_type_tracked_ongo": 92, "knowledge_type_tracked_complet": 92, "knowledge_type_oth": 92, "west": [92, 299], "bounded_width_unknown": 92, "bounded_width_neith": 92, "bounded_width_west": 92, "bounded_width_east": 92, "bounded_width_both": 92, "mobility_command_feedback": 92, "gripper_command_feedback": 92, "round_trip_tim": [92, 181], "server_rx": 92, "server_tx": 92, "unpopul": 92, "clock_skew": [92, 181], "client_tx": 92, "client_rx": 92, "best_estim": 92, "measurement_tim": 92, "previous_round_trip": [92, 181], "assignon": 92, "previous_estim": 92, "andecho": 92, "status_more_samples_need": 92, "status_service_not_readi": 92, "lag": 92, "alon": 92, "exchang": [92, 175], "serverround": 92, "bein": 92, "thecommand": 92, "pos_interpol": 92, "ang_interpol": 92, "automaticallyselect": 92, "starting_veloc": 92, "ending_veloc": 92, "linear_spe": 92, "chosenserv": 92, "ang_interp_unknown": 92, "ang_interp_linear": 92, "ang_interp_cubic_eul": 92, "pos_interp_unknown": 92, "pos_interp_linear": 92, "pos_interp_cub": 92, "is_rel": 92, "showup": 92, "fahrenheit": 92, "noteth": 92, "temper": 92, "degreeshott": 92, "anyfahrenheit": 92, "pressure_unknown": 92, "pressure_psi": 92, "pound": 92, "inch": [92, 234], "pressure_kpa": 92, "kilopasc": 92, "pressure_bar": 92, "temperature_unknown": 92, "temperature_kelvin": [92, 184], "temperature_fahrenheit": 92, "tag_id": 92, "thetag": 92, "famili": 92, "36h11": 92, "theheight": 92, "frame_name_fiduci": 92, "fiducial_pose_statu": 92, "unfilt": 92, "frame_name_fiducial_filt": 92, "fiducial_filtered_pose_statu": 92, "frame_name_camera": 92, "detection_covari": 92, "tzwhich": 92, "thegiven": 92, "detection_covariance_reference_fram": 92, "size_ewrt_fram": 92, "frame_name_dock": 92, "unconfirm": 92, "oval": 92, "capsul": 92, "cylind": 92, "arrow_length": 92, "arrow_radiu": 92, "wirefram": [92, 186], "drawabl": [92, 186], "linestrip": 92, "frame_name_draw": 92, "beinclud": 92, "rgba": [92, 186], "transpar": 92, "camera_sourc": 92, "eitherclockwis": 92, "object_typ": [92, 97, 186], "requestspecif": 92, "timestamp_filt": 92, "timeal": 92, "mutated_object_id": 92, "disable_foot_obstacle_gener": 92, "disable_body_obstacle_gener": 92, "disable_foot_obstacle_infl": 92, "exacts": 92, "inflat": 92, "approx": 92, "lifeth": 92, "sassoci": 92, "eachof": 92, "objectwil": 92, "isrel": 92, "isad": 92, "drawable_properti": 92, "apriltag_properti": 92, "nogo_region_properti": 92, "dock_properti": 92, "ray_properti": 92, "isknown": 92, "bounding_box_properti": 92, "staircase_properti": 92, "astaircas": 92, "status_ambigu": 92, "status_high_error": 92, "action_unknown": 92, "action_add": 92, "action_chang": 92, "isonli": 92, "notobject": 92, "action_delet": 92, "getobjectlistrespons": 92, "status_invalid_mutation_id": 92, "thisobject": 92, "theobject": 92, "status_no_permiss": 92, "anobject": 92, "status_invalid_world_object": 92, "unallow": 92, "world_object_unknown": 92, "world_object_draw": 92, "world_object_apriltag": 92, "world_object_image_coordin": 92, "world_object_dock": 92, "world_object_user_nogo": 92, "world_object_staircas": 92, "php": 92, "rubi": 92, "float64": 92, "ineffici": 92, "sint32": 92, "bignum": 92, "fixnum": 92, "sint64": 92, "uint": [92, 137], "ulong": 92, "fixed32": 92, "fixed64": 92, "eight": 92, "sfixed32": 92, "sfixed64": 92, "trueclass": 92, "falseclass": 92, "8bit": 92, "choreography_sequence_pb2": [95, 97], "animation_file_conversion_help": 95, "start_time_handl": 95, "val": [95, 181, 209, 247, 255], "animation_fram": 95, "fl_angles_handl": 95, "fr_angles_handl": 95, "hl_angles_handl": 95, "hr_angles_handl": 95, "fl_pos_handl": 95, "fr_pos_handl": 95, "hl_pos_handl": 95, "hr_pos_handl": 95, "gripper_handl": 95, "fl_contact_handl": 95, "fr_contact_handl": 95, "hl_contact_handl": 95, "hr_contact_handl": 95, "sh0_handler": 95, "sh1_handler": 95, "el0_handl": 95, "el1_handl": 95, "wr0_handler": 95, "wr1_handler": 95, "fl_hx_handler": 95, "fl_hy_handl": 95, "fl_kn_handler": 95, "fr_hx_handler": 95, "fr_hy_handl": 95, "fr_kn_handler": 95, "hl_hx_handler": 95, "hl_hy_handl": 95, "hl_kn_handler": 95, "hr_hx_handler": 95, "hr_hy_handl": 95, "hr_kn_handler": 95, "fl_x_handler": 95, "fl_y_handl": 95, "fl_z_handler": 95, "fr_x_handler": 95, "fr_y_handl": 95, "fr_z_handler": 95, "hl_x_handler": 95, "hl_y_handl": 95, "hl_z_handler": 95, "hr_x_handler": 95, "hr_y_handl": 95, "hr_z_handler": 95, "body_x_handl": 95, "body_y_handl": 95, "body_z_handl": 95, "com_x_handl": 95, "com_y_handl": 95, "com_z_handl": 95, "body_quat_x_handl": 95, "body_quat_y_handl": 95, "body_quat_z_handl": 95, "body_quat_w_handl": 95, "body_roll_handl": 95, "body_pitch_handl": 95, "body_yaw_handl": 95, "body_pos_handl": 95, "com_pos_handl": 95, "body_euler_rpy_angles_handl": 95, "body_quaternion_xyzw_handl": 95, "body_quaternion_wxyz_handl": 95, "leg_angles_handl": 95, "foot_pos_handl": 95, "contact_handl": 95, "arm_joints_handl": 95, "hand_x_handl": 95, "hand_y_handl": 95, "hand_z_handl": 95, "hand_quat_x_handl": 95, "hand_quat_y_handl": 95, "hand_quat_z_handl": 95, "hand_quat_w_handl": 95, "hand_roll_handl": 95, "hand_pitch_handl": 95, "hand_yaw_handl": 95, "hand_pos_handl": 95, "hand_euler_rpy_angles_handl": 95, "hand_quaternion_xyzw_handl": 95, "hand_quaternion_wxyz_handl": 95, "controls_opt": 95, "file_line_split": 95, "bpm_option": 95, "extendable_opt": 95, "truncatable_opt": 95, "neutral_start_opt": 95, "precise_steps_opt": 95, "precise_timing_opt": 95, "timing_adjustability_opt": 95, "no_looping_opt": 95, "arm_required_opt": 95, "arm_prohibited_opt": 95, "starts_sitting_opt": 95, "track_swing_trajectories_opt": 95, "assume_zero_roll_and_pitch_opt": 95, "track_hand_rt_body_opt": 95, "track_hand_rt_feet_opt": 95, "arm_playback_opt": 95, "display_rgb_opt": 95, "frequency_opt": 95, "retime_to_integer_slices_opt": 95, "description_opt": 95, "custom_gait_cycle_opt": 95, "animationfileformaterror": 96, "create_move_info_proto": 96, "choreography_sequ": 96, "set_proto": 96, "proto_object": 96, "attribute_nam": 96, "attribute_valu": 96, "handle_nested_double_value_param": 96, "read_animation_param": 96, "read_and_find_animation_param": 96, "filepath_input": 96, "filepath": [96, 137, 220, 226, 284, 303, 312, 320, 331], "animated_fil": 96, "write_animation_to_dest": 96, "choreographycli": 97, "license_nam": 97, "choreographyservic": 97, "update_from": [97, 104, 108, 113, 114, 116, 118, 119, 121, 124, 125, 135, 148, 156, 160, 161, 186, 211, 214], "timesync_endpoint": [97, 135, 161, 181, 186, 211], "accessor": [97, 160, 161, 186, 198, 211], "list_all_mov": 97, "list_all_moves_async": 97, "time_start_point": [97, 186], "list_all_sequ": 97, "list_all_sequences_async": 97, "upload_choreographi": 97, "choreography_seq": 97, "uploadchoreographyrespons": 97, "upload_choreography_async": 97, "upload_animated_mov": 97, "generated_id": 97, "animationuploadhelp": 97, "uploadanimatedmoverespons": 97, "upload_animated_move_async": 97, "choreography_log_to_animation_fil": 97, "fpath": 97, "choreography_time_adjust": 97, "override_client_start_tim": 97, "time_differ": 97, "timefram": 97, "executechoreographyrequest": 97, "choreography_time_adjust_async": 97, "choreography_nam": 97, "client_start_tim": 97, "lease_pb2": [97, 141, 142, 144], "execute_choreography_async": 97, "choreography_command": 97, "command_list": 97, "client_end_tim": 97, "choreographycommandrespons": 97, "choreography_command_async": 97, "start_recording_st": 97, "duration_sec": 97, "continue_session_id": 97, "startrecordingstaterespons": 97, "start_recording_state_async": 97, "stop_recording_st": 97, "stoprecordingstaterespons": 97, "stop_recording_state_async": 97, "get_choreography_sequ": 97, "seq_nam": 97, "getchoreographysequencerespons": 97, "get_choreography_sequence_async": 97, "get_anim": 97, "get_animation_async": 97, "save_sequ": 97, "savesequencerespons": 97, "save_sequence_async": 97, "delete_sequ": 97, "deletesequencerespons": 97, "delete_sequence_async": 97, "modify_choreography_info": 97, "choreographyinfo": 97, "modifychoreographyinforespons": 97, "modify_choreography_info_async": 97, "clear_all_sequence_fil": 97, "clearallsequencefilesrespons": 97, "clear_all_sequence_files_async": 97, "build_start_recording_state_request": 97, "duration_second": 97, "startrecordingstaterequest": 97, "download_robot_state_log": 97, "logtyp": 97, "downloadrobotstatelogrespons": 97, "build_choreography_time_adjust_request": 97, "choreographytimeadjustrequest": 97, "build_execute_choreography_request": 97, "build_choreography_command_request": 97, "build_save_sequence_request": 97, "build_modify_choreography_info_request": 97, "animation_move_prefix": 97, "uploadanimatemoverespons": 97, "generate_animation_id": 97, "animation_proto": 97, "invaliduploadedchoreographyerror": 97, "robotcommandissueserror": 97, "animationvalidationfailederror": 97, "norecordedinform": 97, "unknownrecordingsessionid": 97, "recordingbufferful": 97, "incompletedata": 97, "load_choreography_sequence_from_binary_fil": 97, "file_path": [97, 117, 118], "load_choreography_sequence_from_txt_fil": 97, "save_choreography_sequence_to_fil": 97, "area_callback_servic": 98, "arm_surface_contact_servic": 98, "auth_servic": 98, "auto_return_servic": 98, "data_servic": [98, 121], "data_acquisition_servic": 98, "data_acquisition_store_servic": 98, "data_buffer_servic": 98, "directory_registration_servic": 98, "directory_servic": 98, "docking_servic": 98, "door_servic": 98, "estop_servic": 98, "fault_servic": 98, "graph_nav_servic": 98, "gripper_camera_param_servic": 98, "image_servic": [98, 138], "inverse_kinematics_servic": 98, "ir_enable_disable_servic": 98, "lease_servic": 98, "license_servic": 98, "local_grid_servic": 98, "log_status_servic": 98, "manipulation_api_servic": 98, "map_processing_servic": 98, "network_compute_bridge_servic": 98, "payload_registration_servic": 98, "payload_servic": 98, "point_cloud_servic": 98, "power_servic": 98, "ras_cast_servic": 98, "recording_servic": 98, "robot_command_servic": 98, "robot_id_servic": 98, "robot_state_servic": 98, "spot_check_servic": 98, "time_sync_servic": 98, "world_object_servic": 98, "areacallbackcli": 99, "area_callback_inform": [99, 100, 103], "areacallbackresponseerror": 99, "invalidcommandiderror": 99, "invalidconfigerror": 99, "expiredendtimeerror": 99, "missingleaseresourceserror": 99, "shutdowncallbackfailederror": 99, "incorrectusag": 100, "shutdown_ev": 100, "updatecallbackrespons": 100, "callbackend": 100, "callbacktimedouterror": 100, "routechangedresult": 100, "areacallbackserviceconfig": [100, 102, 103], "areacallbackregionhandl": 100, "update_respons": 100, "discard": 100, "enum_type_wrapp": [100, 167], "enumtypewrapp": [100, 167], "0x7f7777d187f0": 100, "area_callback_pb2": [100, 227], "configuration_data": 100, "begincallbackrespons": 100, "routechangerequest": 100, "set_complet": 100, "cede": 100, "sleep_time_sec": 100, "hang": 100, "will_get_control": 100, "internal_begin_complet": 100, "internal_set_stag": 100, "0x7f7777d1abc0": 100, "internal_set_end_tim": 100, "internal_give_control": 100, "internal_run_wrapp": 100, "area_callback_service_runn": 101, "area_callback_service_servic": 102, "callabl": [102, 142, 164, 166, 209], "log_begin_callback_data": 103, "parse_param": 103, "handle_service_fault": 103, "fault_client": [103, 138, 282], "prereq_servic": 103, "arm_surface_contact": [104, 241], "armsurfacecontactcli": [104, 241], "arm_surface_contact_command": 104, "arm_surface_contact_pb2": 104, "armsurfacecontactrequest": 104, "arm_surface_contact_command_async": 104, "async_task": 105, "asynctask": 105, "add_task": 105, "asyncgrpctask": 105, "futurewrapp": [105, 113], "asyncperiodicgrpctask": 105, "period_sec": 105, "periodic_sec": 105, "asyncperiodicqueri": 105, "query_nam": 105, "stub": [106, 162], "invalidtokenerror": [106, 160], "authresponseerror": 106, "temporarilylockedouterror": 106, "auth_async": 106, "auth_with_token": 106, "auth_with_token_async": 106, "auto_return": [107, 141], "autoreturnresponseerror": 107, "invalidparametererror": 107, "autoreturncli": 107, "auto_return_pb2": 107, "configurerespons": 107, "configure_async": 107, "get_configur": 107, "getconfigurationrespons": 107, "get_configuration_async": 107, "startrespons": 107, "start_async": 107, "configure_error": 107, "start_error": 107, "autowalkresponseerror": 108, "compilationerror": [108, 211], "validationerror": [108, 211, 213], "autowalkservic": 108, "compile_autowalk": 108, "data_chunk_byte_s": [108, 113, 120, 211], "1000000": [108, 211], "walks_pb2": [108, 218, 222], "load_autowalk": 108, "download_data": 110, "start_nsec": [110, 181], "end_nsec": [110, 181], "timespan_spec": [110, 181, 209], "output_filenam": 110, "robot_tim": [110, 181], "show_progress": 110, "robot_clock": [110, 209], "refreshingaccesstokenauthmetadataplugin": 111, "token_cb": 111, "authmetadataplugin": 111, "create_secure_channel_cr": 111, "create_secure_channel": 111, "channelcredenti": 111, "create_insecure_channel": 111, "insecur": 111, "translate_except": 111, "rpc_error": 111, "generate_channel_opt": 111, "max_send_message_length": [111, 165, 185], "max_receive_message_length": [111, 165, 185], "keep_alive_ping_time_m": 111, "subpars": 112, "command_dict": 112, "need_authent": 112, "directorycommand": 112, "directorylistcommand": 112, "directorygetcommand": 112, "directoryregistercommand": 112, "directoryunregistercommand": 112, "payloadcommand": 112, "payloadlistcommand": 112, "payloadregistercommand": 112, "faultcommand": 112, "faultshowcommand": 112, "faultwatchcommand": 112, "logstatuscommand": 112, "getlogcommand": 112, "getactivelogstatusescommand": 112, "experimentlogcommand": 112, "starttimedexperimentlogcommand": 112, "startcontinuousexperimentlogcommand": 112, "handle_keyboard_interrupt": 112, "log_id": [112, 292], "startretrologcommand": 112, "terminatelogcommand": 112, "robotidcommand": 112, "databuffercommand": 112, "textmsgcommand": 112, "operatorcommentcommand": 112, "dataservicecommand": 112, "getdatabuffereventscommentscommand": 112, "pretty_print": 112, "getdatabuffercommentscommand": 112, "getdatabuffereventscommand": 112, "getdatabufferstatuscommand": 112, "robotstatecommand": 112, "fullstatecommand": 112, "hardwareconfigurationcommand": 112, "robotmodel": 112, "mesh": 112, "metricscommand": 112, "timesynccommand": 112, "licensecommand": 112, "leasecommand": 112, "leaselistcommand": 112, "estopcommand": 112, "getestopconfigcommand": 112, "getestopstatuscommand": 112, "becomeestopcommand": 112, "ctl": 112, "oldbecomeestopcommand": 112, "imagecommand": 112, "listimagesourcescommand": 112, "getimagecommand": 112, "localgridcommand": 112, "local_grid": [112, 146], "listlocalgridtypescommand": 112, "getlocalgridscommand": 112, "dataacquisitioncommand": 112, "dataacquisitionrequestcommand": 112, "dataacquisitionservicecommand": 112, "dataacquisitionstatuscommand": 112, "dataacquisitiongetlivedatacommand": 112, "hostcomputeripcommand": 112, "keepalivecommand": 112, "lease_detail": 112, "resource_nam": 112, "keepalivegetstatuscommand": 112, "keepaliveremovepoliciescommand": 112, "powerrobotcommand": 112, "powerpayloadscommand": 112, "powerwifiradiocommand": 112, "common_header_error": 113, "streaming_common_header_error": 113, "response_iter": 113, "common_lease_error": 113, "streaming_common_lease_error": 113, "custom_params_error": 113, "status_valu": 113, "status_field_nam": 113, "error_field_nam": 113, "total_respons": 113, "error_pair": 113, "docstr": 113, "error_factori": 113, "status_to_str": 113, "status_to_error": 113, "seriou": 113, "defaultdict": 113, "examin": [113, 294], "error_constructor": 113, "handle_unset_status_error": 113, "statustyp": 113, "decor": 113, "handle_common_header_error": 113, "func": 113, "handle_lease_use_result_error": 113, "handle_custom_params_error": 113, "handle_license_error": 113, "handle_license_errors_if_pres": 113, "common_license_error": 113, "allow_unset": 113, "maybe_rais": 113, "exc": 113, "print_respons": 113, "process_kwarg": 113, "stub_creation_func": 113, "update_request_iter": 113, "request_iter": 113, "is_block": 113, "copy_request": 113, "update_response_iter": 113, "value_from_respons": 113, "error_from_respons": 113, "assemble_typ": 113, "handle_respons": 113, "handle_response_stream": 113, "call_async": 113, "call_async_stream": 113, "is_stream": 113, "add_done_callback": 113, "cb": 113, "robot_hostnam": [113, 218, 222, 282], "data_acquisit": [114, 116], "dataacquisitionresponseerror": 114, "requestiddoesnotexisterror": [114, 116, 147], "unknowncapturetypeerror": 114, "cancellationfailederror": [114, 116], "dataacquisitionservic": [114, 116], "make_acquire_data_request": 114, "data_timestamp": [114, 115], "acquisitionrequestlist": [114, 115, 116], "acquire_data_async": 114, "acquiredatarespons": 114, "acquire_data_from_request_async": 114, "get_status_async": [114, 116, 126, 141, 174], "get_service_info": [114, 116, 214], "getserviceinforespons": [114, 116, 117], "get_service_info_async": [114, 116, 214], "cancel_acquisit": [114, 116], "cancel_acquisition_async": [114, 116], "get_live_data": [114, 116], "get_live_data_async": [114, 116], "metadata_to_proto": 114, "acquire_data_error": 114, "get_request_id": 114, "data_acquisition_help": 115, "issue_acquire_data_request": 115, "data_acq_cli": 115, "captureactionid": [115, 116, 118], "acquire_and_process_request": 115, "data_acquisition_cli": 115, "block_until_complet": 115, "cancel_acquisition_request": 115, "clean_filenam": 115, "make_time_query_param": 115, "start_time_sec": 115, "data_acquisition_store_pb2": [115, 165], "dataqueryparam": [115, 118], "make_time_query_params_from_group_nam": 115, "data_store_cli": 115, "download_data_rest": 115, "destination_fold": 115, "additional_param": 115, "datastor": 115, "data_acquisition_plugin": 116, "dataacquisitionplugincli": 116, "acquire_plugin_data": 116, "data_identifi": 116, "acquire_plugin_data_async": 116, "wait_for_stores_complet": 117, "error_msg": [117, 165], "requestst": 117, "knonerror": 117, "set_complete_if_no_error": 117, "add_sav": 117, "dataid": 117, "has_data_error": 117, "is_cancel": 117, "store_cli": 117, "cancel_interv": 117, "data_id_future_pair": 117, "store_imag": [117, 118], "imagecaptur": [117, 118, 137], "store_data_as_chunk": [117, 118], "store_fil": [117, 118], "executor": 117, "live_response_fn": 117, "dataacquisitionpluginserviceservic": 117, "heart": 117, "livedatarequest": 117, "request_manag": 117, "requestmanag": 117, "validate_param": 117, "clientcontext": [117, 138], "getstatusrequest": 117, "getserviceinforequest": 117, "cancelacquisitionrequest": 117, "cancelacquisitionrespons": 117, "livedatarespons": [117, 167], "lifecycl": 117, "tempt": 117, "fiddl": 117, "lint": 117, "add_request": 117, "get_request_st": 117, "get_status_proto": 117, "mark_request_cancel": 117, "mark_request_finish": 117, "cleanup_request": 117, "older_than_tim": 117, "dataacquisitionstoreservic": 118, "list_capture_act": 118, "list_capture_actions_async": 118, "list_stored_imag": 118, "list_stored_images_async": 118, "list_stored_images_act": 118, "list_stored_metadata": 118, "list_stored_metadata_async": 118, "list_stored_alertdata": 118, "list_stored_alertdata_async": 118, "list_stored_data": 118, "list_stored_data_async": 118, "storeimagerespons": 118, "store_image_async": 118, "associated_metadata": 118, "storemetadatarespons": 118, "store_metadata_async": 118, "store_alertdata": 118, "associated_alert_data": 118, "associatedalertdata": 118, "storealertdatarespons": 118, "store_alertdata_async": 118, "storedatarespons": 118, "store_data_async": 118, "query_stored_captur": [118, 252], "query_max_capture_id": 118, "querymaxcaptureidresult": 118, "skipe": 118, "query_max_capture_id_async": 118, "invalidargu": [119, 121], "log_ev": [119, 160], "event_typ": [119, 160], "start_timestamp_sec": [119, 160], "end_timestamp_sec": [119, 160], "id_str": [119, 160], "make_paramet": 119, "add_text_messag": 119, "textmessag": 119, "add_text_messages_async": 119, "add_operator_com": 119, "msg": [119, 213, 216], "robot_timestamp": [119, 209], "add_operator_comment_async": 119, "add_blob_async": 119, "serializ": 119, "add_protobuf_async": 119, "add_ev": 119, "add_events_async": 119, "register_signal_schema": 119, "signalschema": 119, "register_signal_schema_async": 119, "add_signal_tick": 119, "hunk": 119, "signaltick": 119, "lookuperror": 119, "add_signal_tick_async": 119, "now_in_robot_basi": 119, "msg_type": 119, "data_buffer_cli": 119, "time_sync_endpoint": [119, 181], "msg_num_limit": 119, "msg_age_limit": 119, "skip_rpc": 119, "logannotationtextmessag": 119, "notset": 119, "timesyncendpoint": [119, 181, 330], "log_annot": 119, "emit": 119, "notimplementederror": 119, "tidi": 119, "_handler": 119, "is_thread_al": 119, "assertionerror": 119, "fallback_log": 119, "record_to_msg": 119, "logrecord": 119, "record_level_to_proto_level": 119, "record_level": 119, "is_not_text_log": 119, "recordmessag": 119, "is_not_rpc": 119, "sdk_name": 119, "robot_nam": 119, "split_seri": 120, "chunk_seri": 120, "datachunk": 120, "parse_from_chunk": 120, "iterable_chunk": 120, "out_msg": 120, "serialized_from_messag": 120, "iterable_messag": 120, "serialized_from_chunk": 120, "serialized_from_str": 120, "iterable_str": 120, "dataservicecli": 121, "get_data_index": 121, "dataqueri": 121, "get_data_index_async": 121, "get_data_pag": 121, "time_rang": 121, "get_data_pages_async": 121, "delete_data_pag": 121, "delete_data_pages_async": 121, "get_events_com": 121, "eventscommentsspec": 121, "get_events_comments_async": 121, "get_data_buffer_statu": 121, "get_data_buffer_status_async": 121, "directoryresponseerror": 122, "nonexistentserviceerror": 122, "list_async": 122, "get_entri": 122, "get_entry_async": 122, "directoryregistrationresponseerror": 123, "servicealreadyexistserror": 123, "servicedoesnotexisterror": 123, "reset_service_registr": 123, "rpc_timeout_second": [123, 126, 141], "rpc_interval_second": [123, 126, 141, 142], "reset_servic": 123, "5x": 123, "is_al": [123, 142, 154, 183], "dockingservic": 124, "docking_command": 124, "station_id": 124, "dockingcommandrequest": 124, "expiri": 124, "leasewallet": [124, 142], "docking_command_async": 124, "docking_command_full_async": 124, "docking_command_feedback_full_async": 124, "docking_command_feedback_async": 124, "get_docking_config": 124, "configrang": 124, "get_docking_config_async": 124, "get_docking_st": 124, "dockstat": 124, "get_docking_state_async": 124, "blocking_dock_robot": 124, "num_retri": 124, "commandfailederror": [124, 161], "blocking_go_to_prep_pos": 124, "blocking_undock": 124, "get_dock_id": 124, "doorclient": 125, "open_door": 125, "door_pb2": 125, "opendoorcommandrequest": 125, "opendoorcommandrespons": 125, "leaseuseerror": [125, 127, 135, 142], "open_door_async": 125, "open_door_feedback": 125, "opendoorfeedbackrequest": 125, "opendoorfeedbackrespons": 125, "open_door_feedback_async": 125, "estopresponseerror": 126, "endpointunknownerror": 126, "incorrectchallengeresponseerror": 126, "endpointmismatcherror": 126, "configmismatcherror": 126, "invalidendpointerror": 126, "invalididerror": 126, "estopconfig": 126, "motorsonerror": 126, "stoplevel": 126, "intenum": [126, 212], "estopcli": 126, "estop_pb2": 126, "register_async": 126, "deregister_async": 126, "get_config": 126, "get_config_async": 126, "set_config": 126, "set_config_async": 126, "estopsystemstatu": 126, "check_in": [126, 141], "suppress_incorrect": 126, "status_invalid": 126, "check_in_async": [126, 141], "first_checkin": 126, "estop_cut_power_timeout": 126, "required_rol": 126, "last_set_level": 126, "set_challeng": 126, "get_challeng": 126, "check_in_at_level": 126, "stop_async": [126, 214], "settle_then_cut_async": 126, "allow_async": 126, "check_in_at_level_async": 126, "to_proto": [126, 150], "_unique_id": 126, "_endpoint": 126, "keepalivestatu": 126, "response_from_challeng": 126, "servererror": 127, "internalservererror": [127, 142], "original_error": 127, "certainli": 127, "clientcancelledoperationerror": 127, "invalidclientcertificateerror": 127, "nonexist": 127, "proxyconnectionerror": 127, "serviceunavailableerror": 127, "servicefailedduringexecutionerror": 127, "timedouterror": [127, 181, 319], "allot": 127, "offlin": 127, "unauthenticatederror": 127, "domain": 127, "transient_failur": 127, "seem": 127, "customparamerror": [127, 166], "faultresponseerror": 128, "servicefaultalreadyexistserror": 128, "servicefaultdoesnotexisterror": 128, "faultclient": [128, 138], "faultservic": 128, "trigger_service_fault": 128, "service_fault": [128, 323], "servicefault": [128, 138], "triggerservicefaultrespons": 128, "trigger_service_fault_async": 128, "clear_service_fault": 128, "service_fault_id": 128, "servicefaultid": 128, "clearservicefaultrespons": 128, "clear_service_fault_async": 128, "validateframetreeunknownframeerror": 129, "validateframetreecycleerror": 129, "validateframetreedisjointerror": 129, "validate_frame_tree_snapshot": 129, "misus": 129, "frame_a": 129, "frame_b": 129, "get_se2_a_tform_b": 129, "express_se2_velocity_in_new_fram": 129, "frame_c": 129, "vel_of_a_in_b": 129, "velocity_of_a_in_c": 129, "express_se3_velocity_in_new_fram": 129, "get_odom_tform_bodi": 129, "get_vision_tform_bodi": 129, "generatetreeerror": 129, "childframeintre": 129, "child_frame_nam": 129, "get_frame_nam": 129, "is_gravity_aligned_frame_nam": 129, "log_throttle_tim": [130, 133], "nmea_message_group_to_gps_data_point": 130, "nmea_messag": 130, "time_convert": [130, 133, 282], "robottimeconvert": [130, 133, 181, 209], "gpsdatapoint": [130, 132, 133], "new_data": 130, "aggregator_cli": 132, "aggregatorcli": 132, "aggregatorservic": 132, "new_gps_data": 132, "gpsdevic": 132, "newgpsdatarespons": 132, "new_gps_data_async": 132, "nmeastreamread": 133, "read_data": 133, "gpslisten": 133, "registration_cli": 134, "registrationcli": 134, "registrationservic": 134, "get_loc": [134, 282], "get_location_async": 134, "reset_registr": 134, "reset_registration_async": 134, "initial_guess_loc": 135, "verify_visual_features_qu": 135, "set_loc": 135, "set_localization_async_full_respons": 135, "nav_pb2": 135, "robotfaultederror": 135, "unknownmapinformationerror": 135, "graphnavserviceresponseerror": 135, "set_localization_async": 135, "get_localization_state_async": 135, "cmd_durat": 135, "notimesyncerror": [135, 161, 181, 186], "commandexpirederror": 135, "toodistanterror": [135, 161], "isrecordingerror": 135, "unknownrouteelementserror": 135, "invalidedgeerror": 135, "nopatherror": 135, "robotnotlocalizedtorouteerror": 135, "constraintfaulterror": 135, "routenavigationerror": 135, "navigate_route_async": 135, "navigate_route_full_async": 135, "routegenparam": 135, "unknownwaypointerror": [135, 159], "navigate_to_async": 135, "navigatetorespons": 135, "navigate_to_full_async": 135, "navigate_to_anchor": 135, "noanchoringerror": 135, "invalidposeerror": 135, "navigate_to_anchor_async": 135, "navigation_feedback": 135, "navigation_feedback_async": 135, "clear_graph": 135, "clear_graph_async": 135, "uploadgrapherror": 135, "incompatiblesensorserror": 135, "areacallbackerror": 135, "upload_graph_async": 135, "upload_waypoint_snapshot": 135, "upload_edge_snapshot": 135, "edgesnapshot": 135, "download_graph": 135, "download_graph_async": 135, "download_waypoint_snapshot": 135, "download_edge_snapshot": 135, "write_graph_and_snapshot": 135, "generate_travel_param": 135, "build_rout": 135, "waypoint_id_list": 135, "edge_id_list": 135, "uploadwaypointsnapshoterror": 135, "maptoolargelicenseerror": [135, 159], "invalidgrapherror": [135, 149], "areacallbackmaperror": 135, "requestabortederror": 135, "requestfailederror": 135, "timeerror": 135, "robotstateerror": 135, "cannotmodifymapduringrecordingerror": 135, "routeerror": 135, "unkownrouteelementserror": 135, "featuredeserterror": 135, "routenotupdatingerror": 135, "robotlosterror": 135, "invalidgpserror": 135, "robotstuckerror": 135, "gripper_camera_param": 136, "grippercameraparamcli": 136, "set_camera_param": 136, "gripper_camera_param_request": 136, "gripper_camera_param_pb2": 136, "grippercameraparamrequest": 136, "grippercameraparamrespons": 136, "set_camera_params_async": 136, "gripper_camera_param_service_command": 136, "get_camera_param": 136, "gripper_camera_get_param_request": 136, "grippercameragetparamrequest": 136, "grippercameragetparamrespons": 136, "get_camera_params_async": 136, "gripper_camera_get_param_service_command": 136, "imageresponseerror": 137, "unknownimagesourceerror": 137, "sourcedataerror": [137, 155], "imagedataerror": 137, "unsupportedimageformatrequestederror": 137, "unsupportedpixelformatrequestederror": 137, "unsupportedresizeratiorequestederror": 137, "list_image_sources_async": 137, "get_image_from_sources_async": 137, "get_image_async": 137, "build_image_request": 137, "write_pgm_or_ppm": 137, "include_pixel_format": 137, "sourcenam": 137, "write_image_data": 137, "save_images_as_fil": 137, "pixel_x": 137, "pixel_i": 137, "min_dist": [137, 158], "image_data_rgb_np": 138, "formula": 138, "image_data_np": 138, "abc": 138, "threadsaf": 138, "capture_lock": 138, "keyword": [138, 218, 222, 271], "camera_interfac": 138, "param_spec": [138, 166], "rapidli": [138, 326, 329], "set_logg": 138, "initialize_fault": 138, "trigger_fault": 138, "service_fault_pb2": 138, "clear_fault": 138, "get_image_and_timestamp": 138, "capture_func_kwarg": 138, "capture_funct": 138, "image_decode_with_error_check": 138, "stop_captur": 138, "make_image_sourc": 138, "source_nam": 138, "make_capture_paramet": 138, "request_custom_param": 138, "captureparamet": 138, "accomod": 138, "threadcaptureoutput": 138, "is_valid": [138, 216], "imagecapturethread": 138, "get_latest_captured_imag": 138, "capture_func": 138, "capture_period_sec": 138, "start_captur": 138, "maybe_update_thread": 138, "set_last_captured_imag": 138, "image_fram": 138, "background_capture_param": 138, "imageserviceservic": 138, "blocking_capture_funct": 138, "listimagesourcesrequest": 138, "getimagerequest": 138, "inverse_kinemat": 139, "inversekinematicscli": 139, "inversekinematicsservic": 139, "inversekinematicsrequest": 139, "inversekinematicsrespons": 139, "inverse_kinematics_async": 139, "ir_enable_dis": 140, "irenabledisableservicecli": [140, 257], "emitt": [140, 257], "set_ir_en": 140, "set_ir_enabled_async": 140, "keepaliveresponseerror": 141, "invalidleaseerror": [141, 142], "invalidpolicyerror": 141, "add_associated_leas": 141, "add_controlled_motors_off_act": 141, "add_immediate_robot_off_act": 141, "add_record_event_act": 141, "add_auto_return_act": 141, "add_lease_stale_act": 141, "shortest_action_delai": 141, "pol": 141, "keepalivecli": 141, "keepaliveservic": 141, "modify_polici": 141, "modify_policy_async": 141, "modify_policy_error": 141, "check_in_error": 141, "policykeepal": 141, "remove_policy_on_exit": 141, "policy_keepal": 141, "run_my_cod": 141, "remove_polici": 141, "remove_all_polici": 141, "keepalive_cli": 141, "leaseresponseerror": 142, "displacedleaseerror": 142, "invalidresourceerror": 142, "notauthoritativeserviceerror": 142, "resourcealreadyclaimederror": 142, "revokedleaseerror": 142, "unmanagedresourceerror": 142, "wrongepocherror": 142, "notactiveleaseerror": 142, "lease_st": 142, "lease_proto": 142, "ignore_is_valid_check": 142, "accompani": 142, "recenc": 142, "lamport": 142, "compareresult": 142, "super_leas": 142, "sub_leas": 142, "different_resourc": 142, "different_epoch": 142, "other_leas": 142, "ignore_resourc": 142, "create_new": 142, "returned_leas": 142, "create_subleas": 142, "is_valid_leas": 142, "is_valid_proto": 142, "compare_result_to_lease_use_result_statu": 142, "compare_result": 142, "allow_super_leas": [142, 144], "leasest": 142, "lease_statu": 142, "lease_curr": 142, "leaseown": 142, "unown": 142, "self_own": 142, "other_own": 142, "not_manag": 142, "status_unown": 142, "status_self_own": 142, "status_other_own": 142, "status_not_manag": 142, "update_from_lease_use_result": 142, "get_leas": 142, "get_lease_st": 142, "on_lease_use_result": 142, "set_client_nam": 142, "lease_wallet": [142, 283], "acquire_async": 142, "take_async": 142, "return_leas": 142, "return_lease_async": 142, "retain_lease_async": 142, "list_leases_async": 142, "list_leases_ful": 142, "listleasesrespons": 142, "list_leases_full_async": 142, "leasewalletrequestprocessor": 142, "resource_list": 142, "leasewalletresponseprocessor": 142, "add_lease_wallet_processor": 142, "host_nam": 142, "on_failure_callback": 142, "wedg": 142, "_periodic_check_in": 142, "wait_until_don": 142, "incoming_lease_proto": 142, "active_leas": 142, "nonetyp": 142, "resourcehierarchi": 143, "resource_tree_proto": 143, "has_resourc": 143, "has_sub_resourc": 143, "get_resourc": [143, 218, 222], "get_resource_tre": 143, "leaf_resourc": 143, "get_hierarchi": 143, "leasevalid": 144, "get_active_leas": 144, "incoming_leas": 144, "allow_different_epoch": 144, "test_and_set_active_leas": 144, "leasevalidatorresponseprocessor": 144, "get_license_info": 145, "get_feature_en": 145, "feature_list": 145, "localgridcli": 146, "get_local_grid_typ": 146, "get_local_grid_types_async": 146, "get_local_grid": 146, "localgridresponseproto": 146, "get_local_grids_async": 146, "log_statu": [147, 292], "logstatusresponseerror": 147, "experimentalreadyrunningerror": 147, "inactivelogerror": 147, "concurrencylimitreachederror": 147, "logstatuscli": 147, "logstatusservic": 147, "get_log_statu": 147, "get_log_status_async": 147, "get_active_log_status": 147, "get_active_log_statuses_async": 147, "start_experiment_log": 147, "start_experiment_log_async": 147, "start_retro_log": 147, "start_retro_log_async": 147, "update_experi": 147, "update_experiment_async": 147, "terminate_log": 147, "terminate_log_async": 147, "get_log_status_error": 147, "get_active_log_statuses_error": 147, "start_experiment_log_error": 147, "start_retro_log_error": 147, "update_experiment_log_error": 147, "terminate_log_error": 147, "manipulationapirespons": 148, "manipulation_api_command_async": 148, "manipulationapifeedbackrespons": 148, "manipulation_api_feedback_command_async": 148, "grasp_override_command": 148, "apigraspoverriderequest": 148, "apigraspoverriderespons": 148, "grasp_override_command_async": 148, "mapprocessingserviceresponseerror": 149, "missingsnapshotserror": 149, "optimizationfailureerror": 149, "invalidparamserror": 149, "maxiterationserror": 149, "maxtimeerror": 149, "invalidhintserror": 149, "constraintviolationerror": 149, "mapmodifiederror": 149, "mapprocessingservicecli": [149, 283], "mapprocessingservic": 149, "process_topologi": 149, "processtopologyrespons": 149, "process_anchor": [149, 283], "apply_gps_result": 149, "anchoringhint": [149, 283], "processanchoringrespons": [149, 283], "recenter_value_mod": 150, "recenter_angle_mod": 150, "angle_diff": 150, "a1": 150, "a2": 150, "angle_diff_degre": 150, "to_obj": 150, "a_tform_b": 150, "b_tform_a": 150, "mult": 150, "b_tform_c": 150, "a_tform_c": 150, "to_rot_matrix": 150, "to_matrix": 150, "to_adjoint_matrix": 150, "adjoint": 150, "velocity_in_frame_b": 150, "velocity_in_frame_a": 150, "a_adjoint_b": 150, "get_closest_se3_transform": 150, "height_z": 150, "to_vector": 150, "3x1": 150, "from_vector": 150, "se2_vel_vector": 150, "lin_x": 150, "lin_i": 150, "lin_z": 150, "ang_x": 150, "ang_i": 150, "ang_z": 150, "6x1": 150, "se3_vel_vector": 150, "from_se2": 150, "transform_cloud": 150, "nx3": 150, "transform_cloud_from_matrix": 150, "from_ident": 150, "get_transl": 150, "get_closest_se2_transform": 150, "interp": 150, "from_rol": 150, "from_pitch": 150, "from_yaw": 150, "to_rol": 150, "to_pitch": 150, "to_axis_angl": 150, "other_quat": 150, "closest_yaw_only_quaternion": 150, "slerp": 150, "from_two_vector": 150, "u_in": 150, "v_in": 150, "conj": 150, "pose_to_xyz_yaw": 150, "is_within_threshold": 150, "pose_3d": 150, "max_translation_met": 150, "max_yaw_degre": 150, "recenter_angl": 150, "lower_limit": 150, "upper_limit": 150, "skew_matrix_3d": 150, "vec3_proto": 150, "skew_matrix_2d": 150, "vec2_proto": 150, "2x1": 150, "transform_se2veloc": 150, "a_adjoint_b_matrix": 150, "se2_velocity_in_b": 150, "transform_se3veloc": 150, "se3_velocity_in_b": 150, "quat_to_eulerzyx": 150, "metrics_log": 151, "missingkeyserror": 151, "unabletooptouterror": 151, "metricsloggingrobotservic": 151, "get_metr": 151, "getmetricsrespons": 151, "get_metrics_async": 151, "get_store_sequence_rang": 151, "get_store_sequence_range_async": 151, "get_absolute_metric_snapshot": 151, "signed_proto_pb2": 151, "signedproto": 151, "absolute_metric_pb2": 151, "absolutemetricssnapshot": 151, "get_absolute_metric_snapshot_async": 151, "make_parameter_upd": 151, "is_increment": 151, "externalservicenotfounderror": 152, "networkcomputerotationerror": 152, "networkcomputeanalysisfailederror": 152, "networkcomputebridgeservic": 152, "list_available_model": 152, "list_available_models_async": 152, "list_available_models_command": 152, "list_request": 152, "list_available_models_command_async": 152, "network_compute_request": 152, "network_compute_bridge_command_async": 152, "registri": [153, 154], "kw_arg": [153, 154, 155], "list_payloads_async": 153, "payload_registr": 154, "payloadregistrationresponseerror": 154, "invalidpayloadcredentialserror": [154, 160], "payloadnotauthorizederror": 154, "payloadalreadyexistserror": 154, "payloaddoesnotexisterror": 154, "register_payload_async": 154, "update_payload_vers": 154, "update_payload_version_async": 154, "get_payload_auth_token": 154, "attach_payload": 154, "attach_payload_async": 154, "detach_payload": 154, "detach_payload_async": 154, "pay_reg_cli": 154, "registration_interval_sec": 154, "rpc_timeout_sec": 154, "reconfigur": [154, 297, 321], "runtimeerror": 154, "point_cloud": 155, "pointcloudresponseerror": 155, "unknownpointcloudsourceerror": 155, "pointcloudsourc": 155, "pointclouddataerror": 155, "pointcloudcli": [155, 333], "pointcloudservic": 155, "list_point_cloud_sourc": 155, "list_point_cloud_sources_async": 155, "get_point_cloud_from_sourc": 155, "get_point_cloud_from_sources_async": 155, "get_point_cloud": 155, "pointcloudrequest": 155, "get_point_cloud_async": 155, "build_pc_request": 155, "powerresponseerror": [156, 160], "shorepowerconnectederror": 156, "batterymissingerror": 156, "commandinprogresserror": 156, "overriddenerror": 156, "faultederror": 156, "powererror": 156, "safetystopincompatiblehardwareerror": 156, "safetystop": 156, "safetystopfailederror": 156, "safetystopunknownstoptypeerror": 156, "power_command": 156, "power_command_async": 156, "power_command_feedback": 156, "power_command_feedback_async": 156, "fan_power_command": [156, 273], "fan_power_command_async": 156, "fan_power_command_feedback": [156, 273], "fan_power_command_feedback_async": 156, "reset_safety_stop": [156, 317], "reset_safety_stop_async": 156, "update_frequ": [156, 160, 161, 180], "robotcommandresponseerror": [156, 160, 161], "power_cli": [156, 160, 273, 317], "power_on_motor": 156, "power_off_motor": 156, "power_cycle_robot": 156, "power_off_payload_port": 156, "power_on_payload_port": 156, "power_off_wifi_radio": 156, "power_on_wifi_radio": 156, "addrequesthead": 157, "client_name_func": 157, "ray_cast": 158, "raycastresponseerror": 158, "invalidintersectiontypeerror": 158, "raycastcli": 158, "default_author": 158, "ray_origin": 158, "ray_direct": 158, "raycast_typ": 158, "raycastrespons": 158, "raycast_async": 158, "waypointregion": 159, "empty_region": 159, "circle_region": 159, "recordingenviron": 159, "start_recording_async": 159, "start_recording_full_async": 159, "stop_record": 159, "stop_recording_async": 159, "get_record_statu": 159, "get_record_status_async": 159, "set_recording_environ": 159, "set_recording_environment_async": 159, "create_waypoint_async": 159, "create_edg": 159, "from_t_to": 159, "create_edge_async": 159, "make_recording_environ": 159, "waypoint_env": 159, "edge_env": 159, "make_waypoint_environ": 159, "make_client_metadata": 159, "make_edge_environ": 159, "make_edg": 159, "from_waypoint_id": 159, "to_waypoint_id": 159, "recordingserviceresponseerror": 159, "couldnotcreatewaypointerror": 159, "notrecordingerror": 159, "edgeexistserror": 159, "edgemissingtransformerror": 159, "notlocalizedtoenderror": 159, "followingrouteerror": 159, "notlocalizedtoexistingmaperror": 159, "toofarfromexistingmaperror": 159, "remotecloudfailurenotindirectoryerror": 159, "remotecloudfailurenodataerror": 159, "missingfiducialserror": 159, "fiducialposeerror": 159, "setup_token_cach": 160, "token_cach": [160, 182], "service_endpoint": 160, "get_cached_robot_id": 160, "ensure_channel": 160, "writefailederror": [160, 182], "authenticate_with_token": 160, "authenticate_from_cach": 160, "notincacheerror": [160, 182], "update_user_token": 160, "get_cached_usernam": 160, "id_service_nam": 160, "list_servic": 160, "services_list": 160, "register_payload_and_authent": 160, "start_time_sync": 160, "time_sync_interval_sec": [160, 181], "stop_time_sync": 160, "time_sec": 160, "timestamp_sec": 160, "notestablishederror": [160, 181], "get_frame_tree_snapshot": [160, 161], "secure_channel_port": 160, "expirederror": 161, "notpoweredonerror": 161, "dockederror": 161, "notclearederror": 161, "unsupportederror": 161, "commandfailederrorwithfeedback": 161, "robot_command_async": 161, "robot_command_feedback_async": 161, "clear_behavior_fault_async": 161, "robotcommandstreamingcli": 161, "robotcommandstreamingservic": 161, "send_joint_control_command": 161, "command_iter": 161, "stop_command": 161, "freeze_command": 161, "selfright_command": 161, "battery_change_pose_command": 161, "dir_hint": 161, "safe_power_off_command": 161, "constrained_manipulation_command": 161, "goal_x": 161, "goal_i": 161, "goal_head": 161, "full_body_command": 161, "goal_se2": 161, "synchro_trajectory_command_in_body_fram": 161, "goal_x_rt_bodi": 161, "goal_y_rt_bodi": 161, "goal_heading_rt_bodi": 161, "v_x": 161, "v_y": 161, "v_rot": 161, "stance_command": 161, "pos_fl_rt_fram": 161, "pos_fr_rt_fram": 161, "pos_hl_rt_fram": 161, "pos_hr_rt_fram": 161, "follow_arm_command": 161, "arm_ready_command": 161, "frame2_tform_desired_hand": 161, "max_angular_vel": 161, "max_accel": 161, "vec3trajectori": 161, "arm_pose_command_from_pos": 161, "arm_wrench_command": 161, "force_x": 161, "force_i": 161, "force_z": 161, "torque_x": 161, "torque_i": 161, "torque_z": 161, "claw_gripper_open_command": 161, "max_acc": 161, "claw_gripper_close_command": 161, "max_torqu": 161, "open_fract": 161, "claw_gripper_open_angle_command": 161, "gripper_q": 161, "create_arm_joint_trajectory_point": 161, "time_since_reference_sec": 161, "arm_joint_command": 161, "joint_posit": 161, "joint_veloc": 161, "ref_tim": 161, "armjointmoverequest": 161, "arm_cartesian_move_help": 161, "se3_pos": 161, "se3_veloc": 161, "frame_tre": 161, "gotten": 161, "claw_gripper_command_help": 161, "gripper_posit": 161, "gripper_veloc": 161, "clawgrippercommandrequest": 161, "arm_joint_freeze_command": 161, "armcommand": 161, "bodyexternalforceparam": 161, "bodypos": 161, "build_body_external_forc": 161, "override_external_force_vec": 161, "spot_command_pb2": 161, "intellig": 161, "blocking_command": 161, "check_status_fn": 161, "full_bodi": 161, "robotcommandfeedbackstatu": 161, "robotcommandfeedbackrespons": 161, "namedarmpositionscommand": 161, "trajectory_end_status": 161, "body_movement_status": 161, "feedback_interval_sec": 161, "printout": 161, "strictvers": 162, "get_robot_metr": 163, "get_robot_metrics_async": 163, "get_robot_hardware_configur": 163, "get_robot_hardware_configuration_async": 163, "get_robot_link_model": 163, "objmodel": 163, "get_robot_link_model_async": 163, "get_robot_joint_model_async": 163, "get_hardware_config_with_link_info": 163, "robot_state_pb2": 163, "robotstatestreamingcli": 163, "robotstatestreamingservic": 163, "get_robot_state_stream": 163, "sdkerror": 164, "unsetapptokenerror": 164, "unabletoloadapptokenerror": 164, "generate_client_nam": 164, "client_name_prefix": 164, "service_cli": 164, "cert_resource_glob": 164, "ioerror": 164, "set_max_message_length": 164, "max_message_length": 164, "creation_func": 164, "load_robot_cert": 164, "resource_path_glob": 164, "clear_robot": 164, "rpc_logger": 165, "channel_prefix": 165, "serviceservic": [165, 185], "spin": [165, 185], "sigterm": 165, "sigquit": 165, "populate_response_head": 165, "error_cod": 165, "strip_large_bytes_field": 165, "proto_messag": 165, "get_bytes_field_allowlist": 165, "strip_image_respons": 165, "strip_get_image_respons": 165, "getimagerespons": 165, "strip_local_grid_respons": 165, "local_grid_pb2": 165, "getlocalgridsrespons": 165, "strip_store_image_request": 165, "storeimagerequest": 165, "strip_store_data_request": 165, "storedatarequest": 165, "strip_record_signal_tick": 165, "data_buffer_pb2": 165, "recordsignalticksrequest": 165, "strip_record_data_blob": 165, "invalidcustomparamspecerror": 166, "invalidcustomparamvalueerror": 166, "proto_error": 166, "validate_dict_spec": 166, "create_value_valid": 166, "validate_valu": 166, "besid": 166, "dict_param": 166, "list_params_to_list": 166, "list_param": 166, "oneof_param": 166, "oneof_spec": 166, "check_types_match": 166, "proto_typ": [166, 196, 198], "custom_spec_to_default": 166, "dict_spec_to_default": 166, "list_spec_to_default": 166, "int_spec_to_default": 166, "intparam": 166, "string_spec_to_default": 166, "roi_spec_to_default": 166, "bool_spec_to_default": 166, "one_of_spec_to_default": 166, "list_param_coerce_to": 166, "double_param_coerce_to": 166, "roi_param_coerce_to": 166, "tricki": 166, "one_of_param_coerce_to": 166, "custom_param_coerce_to": 166, "make_custom_param_spec": 166, "make_dict_child_spec": 166, "childspec": 166, "make_dict_param_spec": 166, "make_one_of_child_spec": 166, "dict_param_spec": 166, "make_one_of_param_spec": 166, "make_int64_param_spec": 166, "make_double_param_spec": 166, "make_bool_param_spec": 166, "make_region_of_interest_param_spec": 166, "serviceandsourc": 166, "areai": 166, "make_user_interface_info": 166, "make_roi_service_and_sourc": 166, "signals_help": 167, "build_max_alert_spec": 167, "0x7f777ba84e20": 167, "alertconditionspec": 167, "build_simple_sign": 167, "max_warn": 167, "max_crit": 167, "build_capability_live_data": 167, "capability_nam": 167, "capabilitylivedata": 167, "build_live_data_respons": 167, "live_data_cap": 167, "get_data": 167, "signaldata": 167, "audiocli": 169, "list_sound": 169, "list_sounds_async": 169, "set_volum": [169, 324], "set_volume_async": 169, "get_volum": [169, 324], "get_volume_async": 169, "play_sound": 169, "play_sound_async": 169, "delete_sound": 169, "delete_sound_async": 169, "load_sound": 169, "max_chunk_s": 169, "1048576": 169, "set_audio_capture_channel": 169, "audio_pb2": 169, "audiocapturechannel": 169, "set_audio_capture_channel_async": 169, "get_audio_capture_channel": 169, "get_audio_capture_channel_async": 169, "set_audio_capture_gain": 169, "set_audio_capture_gain_async": 169, "get_audio_capture_gain": 169, "get_audio_capture_gain_async": 169, "set_screen": 170, "set_screen_async": 170, "get_screen": 170, "get_screen_async": 170, "list_screen": 170, "list_screens_async": 170, "get_visible_camera": 170, "get_visible_cameras_async": 170, "set_ir_colormap": 170, "min_temp": 170, "max_temp": 170, "compositor_pb2": 170, "ircolormap": 170, "set_ir_colormap_async": 170, "get_ir_colormap": 170, "get_ir_colormap_async": 170, "tempunit": 170, "set_multi_ir_meter_overlai": 170, "set_multi_ir_meter_overlay_async": 170, "get_ir_meter_overlai": 170, "get_ir_meter_overlay_async": 170, "healthclient": 171, "clear_bit_ev": 171, "clear_bit_events_async": 171, "get_bit_statu": 171, "degrad": 171, "get_bit_status_async": 171, "get_temperatur": 171, "mc": 171, "get_temperature_async": 171, "get_system_log": 171, "get_system_log_async": 171, "lightingcli": [172, 173], "get_led_bright": 172, "get_led_brightness_async": 172, "set_led_bright": 172, "set_led_brightness_async": 172, "lightshelp": [173, 227], "set_lights_with_freq_and_bright": 173, "stop_ev": 173, "lighting_cli": 173, "medialog": 174, "media_log": [174, 324], "medialogcli": 174, "delete_async": 174, "enable_debug": 174, "system_stat": 174, "enable_debug_async": 174, "list_camera": [174, 324], "list_cameras_async": 174, "list_logpoint": [174, 324], "retrieve_raw_data": 174, "set_passphras": 174, "set_passphrase_async": 174, "record_typ": 174, "recordtyp": 174, "store_async": 174, "tag_async": 174, "networkcli": 175, "intermediari": 175, "nat": 175, "get_ice_configur": 175, "get_ice_configuration_async": 175, "set_ice_configur": 175, "ice_serv": 175, "set_ice_configuration_async": 175, "get_power_statu": 176, "get_power_status_async": 176, "set_power_statu": 176, "initialize_len": [176, 177], "set_power_status_async": 176, "cycle_pow": 176, "cycle_power_async": 176, "list_ptz": 177, "list_ptz_async": 177, "get_ptz_posit": 177, "ptz_desc": 177, "get_ptz_position_async": 177, "get_ptz_veloc": 177, "get_ptz_velocity_async": 177, "set_ptz_posit": 177, "set_ptz_position_async": 177, "set_ptz_veloc": 177, "set_ptz_velocity_async": 177, "initialize_lens_async": 177, "get_ptz_focus_st": 177, "ptzfocusmod": 177, "20m": [177, 247], "ptzfocusst": 177, "get_ptz_focus_state_async": 177, "setptzfocusstaterespons": 177, "shift_pan_angl": 177, "streamqualitycli": 178, "set_stream_param": 178, "target_bitr": 178, "refresh_interv": 178, "idr_interv": 178, "awb_mod": 178, "sync_auto_exposur": 178, "awbmodeenum": 178, "autoexposur": 178, "syncautoexposur": 178, "manualexposur": 178, "set_stream_params_async": 178, "get_stream_param": 178, "get_stream_params_async": 178, "enable_congestion_control_async": 178, "versioncli": 179, "get_software_vers": 179, "softwarevers": 179, "get_software_version_async": 179, "get_software_version_ful": 179, "getsoftwareversionrespons": 179, "get_software_version_full_async": 179, "spotcheckerror": 180, "spotcheckresponseerror": 180, "spotcheckunexpectedpowerchangeerror": 180, "spotcheckimucheckerror": 180, "spotchecknotsittingerror": 180, "spotcheckloadcelltimeouterror": 180, "spotcheckpoweronfailur": 180, "spotcheckendstoptimeouterror": 180, "spotcheckstandfailureerror": 180, "spotcheckcameratimeouterror": 180, "spotcheckgroundcheckerror": 180, "spotchecktimedouterror": 180, "cameracalibrationusercancelederror": 180, "cameracalibrationpowererror": 180, "cameracalibrationtargetnotcenterederror": 180, "cameracalibrationrobotcommanderror": 180, "cameracalibrationcalibrationerror": 180, "cameracalibrationinternalerror": 180, "cameracalibrationtimedouterror": 180, "spotcheckcli": 180, "spot_check_command": 180, "spot_check_command_async": 180, "spot_check_feedback": 180, "spot_check_feedback_async": 180, "camera_calibration_command": 180, "camera_calibration_command_async": 180, "camera_calibration_feedback": 180, "camera_calibration_feedback_async": 180, "run_spot_check": 180, "spot_check_cli": 180, "run_camera_calibr": 180, "1200": 180, "timesyncerror": 181, "inactivethreaderror": 181, "timesynccli": 181, "timesyncservic": 181, "get_time_sync_upd": 181, "timesyncroundtrip": 181, "get_time_sync_update_async": 181, "robot_time_range_from_nanosecond": 181, "timerang": 181, "time_spec": 181, "robot_time_range_from_datetim": 181, "start_datetim": 181, "end_datetim": 181, "timespec_to_robot_timespan": 181, "update_time_filt": 181, "update_timestamp_filt": 181, "time_sync_cli": [181, 330], "timesyncrespons": 181, "has_established_time_sync": 181, "get_new_estim": 181, "establish_timesync": 181, "max_sampl": 181, "break_on_success": 181, "get_robot_time_convert": [181, 282], "robottimeconvertor": 181, "robot_timestamp_from_local_sec": [181, 209], "local_time_sec": [181, 209], "default_time_sync_interval_sec": 181, "time_sync_service_not_ready_interval_sec": 181, "should_exit": 181, "thread_except": 181, "get_robot_clock_skew": 181, "timesync_timeout_sec": 181, "tokencach": 182, "tokencacheerror": 182, "clearfailederror": 182, "atomic_file_writ": 182, "tokencachefilesystem": 182, "cache_directori": 182, "tokenmanag": 183, "token_manag": 183, "units_help": 184, "units_to_str": 184, "cli_login_prompt": 185, "cli_auth": 185, "askpass": 185, "tty": 185, "deduploggingmessag": 185, "always_print_logger_level": 185, "deem": 185, "does_dedup_filter_exist": 185, "get_logg": 185, "add_credentials_argu": 185, "credentials_no_warn": 185, "oserror": 185, "get_guid_or_secret": 185, "parsed_opt": 185, "add_service_hosting_argu": 185, "safe_pb_enum_to_str": 185, "pb_enum_obj": 185, "worldobjectcli": 186, "list_world_object": 186, "worldobjecttyp": 186, "list_world_objects_async": 186, "world_object_pb2": 186, "mutateworldobjectrequest": 186, "mutate_world_objects_async": 186, "x_rt_frame_nam": 186, "y_rt_frame_nam": 186, "z_rt_frame_nam": 186, "list_objects_now": 186, "mutateworldobjectrespons": 186, "drawable_box_frame_nam": 186, "frame_name_tform_drawable_box": 186, "size_ewrt_box_vec3": 186, "make_add_world_object_req": 186, "world_obj": 186, "make_delete_world_object_req": 186, "make_change_world_object_req": 186, "world_object_arrai": 186, "delete_object_id_arrai": 186, "basedataread": [189, 193, 206], "dataread": [189, 192, 193, 197, 198, 200], "streameddataread": 189, "base_data_read": 189, "infil": [189, 193], "fileformatvers": 189, "read_checksum": [189, 206], "series_spec_to_index": 189, "series_spec": [189, 192, 194, 195, 201, 202, 205], "blockwrit": [190, 195], "block_writ": [190, 195], "outfil": [190, 194, 206], "write_descriptor_block": 190, "write_data_block": 190, "desc_block": 190, "write_head": 190, "write_file_end": 190, "index_offset": 190, "messagechannel": 191, "typedmessagechannel": 191, "grpcrequest": 191, "grpcrespons": 191, "datawrit": [192, 194, 195, 202], "addserieserror": 192, "seriesnotuniqueerror": [192, 194, 195], "checksumerror": 192, "dataformaterror": [192, 194, 202, 205], "parseerror": [192, 193, 197, 200, 201, 204, 206], "seekabl": 193, "data_read": [193, 197, 198, 200, 201, 204], "seriesdescriptor": [193, 195, 200, 201, 203, 206], "num_data_block": [193, 201], "index_in_seri": [193, 196, 197, 200, 201, 203, 204], "datatypedescriptor": [193, 200, 204], "seriesblockindex": [193, 195, 206], "data_writ": [194, 199, 202, 205], "add_message_seri": 194, "add_pod_seri": 194, "type_enum": 194, "podtypeenum": 194, "add_seri": [194, 195], "messagetypedescriptor": [194, 195], "podtypedescriptor": [194, 195, 201], "write_data": 194, "nsec": [194, 202, 205], "run_on_clos": 194, "thunk": 194, "descriptor_index": 195, "series_identifier_to_hash": 195, "add_series_descriptor": 195, "series_block_file_offset": 195, "index_data_block": 195, "nbyte": 195, "make_data_descriptor": 195, "write_index": 195, "grpc_proto_read": 196, "grpcprotoread": [196, 197, 198], "service_read": 196, "num_messag": [196, 203], "get_messag": [196, 197, 203, 204], "datafil": [197, 200, 201, 203, 204], "grpc_reader": [197, 198], "grpcreader": 197, "protobuf_class": 197, "get_proto_read": [197, 198], "proto_nam": 197, "grpc_service_read": 198, "grpcserviceread": 198, "add_proto_read": 198, "grpcserieswrit": 199, "grpc_service_writ": 199, "grpcservicewrit": 199, "log_request": 199, "log_respons": 199, "messageread": [200, 204], "require_protobuf": 200, "series_index_to_descriptor": 200, "get_blob": 200, "pod_series_read": 201, "podseriesread": 201, "read_sampl": 201, "pod_series_writ": 202, "podserieswrit": 202, "data_block_s": 202, "2048": 202, "finish_block": 202, "protobuf_channel_read": 203, "protobufchannelread": 203, "protobuf_read": [203, 204], "protobuf_typ": [203, 204, 205], "channel_read": 203, "protobufread": 204, "protobuf_series_writ": 205, "protobufserieswrit": 205, "stream_data_read": 206, "streamdataread": 206, "stream_file_index": 206, "keyerror": 206, "read_data_block": 206, "eoferror": 206, "read_next_block": 206, "eof": 206, "moved_to": 207, "new_func": 207, "deprecation_kwarg": 207, "renamed_to": 207, "to_quaternion": 208, "to_euler_zxi": 208, "set_clock_sourc": 209, "clock_fn": 209, "duration_str": 209, "duration_to_second": 209, "totimedelta": 209, "seconds_to_dur": 209, "seconds_to_timestamp": 209, "timestamp_str": 209, "sec_to_nsec": 209, "_clock_source_fn": 209, "nsec_to_sec": 209, "now_nsec": 209, "dawn": 209, "now_sec": 209, "set_timestamp_from_now": 209, "timestamp_proto": 209, "now_timestamp": 209, "set_timestamp_from_nsec": 209, "time_nsec": 209, "set_timestamp_from_datetim": 209, "date_tim": 209, "nsec_to_timestamp": 209, "timestamp_to_sec": 209, "timestamp_to_nsec": 209, "timestamp_to_datetim": 209, "use_nano": 209, "secs_to_hm": 209, "ss": [209, 252], "distance_str": 209, "km": 209, "format_metr": 209, "datetimeparseerror": 209, "parse_datetim": 209, "time_format_desc": 209, "parse_timespan": 209, "robot_clock_skew_nsec": 209, "robot_timestamp_from_local_nsec": 209, "local_time_nsec": 209, "robot_timestamp_from_loc": 209, "local_timestamp_proto": 209, "convert_timestamp_from_local_to_robot": 209, "robot_seconds_from_local_second": 209, "local_seconds_from_robot_timestamp": 209, "missioncli": [210, 211], "mission_servic": 210, "remote_servic": 210, "missionresponseerror": 211, "invalidquestionid": 211, "invalidanswercod": 211, "questionalreadyansw": 211, "customparamserror": 211, "incompatibleansw": 211, "nomissionerror": 211, "nomissionplayingerror": 211, "get_stat": 211, "upper_tick_bound": 211, "lower_tick_bound": 211, "past_tick": 211, "get_state_async": 211, "answer_quest": 211, "answer_question_async": 211, "load_miss": 211, "load_mission_async": 211, "load_mission_as_chunk": 211, "load_mission_as_chunks2": 211, "play_miss": 211, "pause_time_sec": 211, "play_mission_async": 211, "restart_miss": 211, "restart_mission_async": 211, "pause_miss": 211, "pause_mission_async": 211, "stop_miss": 211, "stop_mission_async": 211, "get_info_async": 211, "get_miss": 211, "get_mission_async": 211, "compileerror": 213, "node_proto": 213, "node_nam": 213, "node_impl": 213, "get_node_detail": 213, "unknowntyp": 213, "validationerrorreport": 213, "missingparametererror": 213, "target_nam": 213, "target_pb_typ": 213, "stored_pb_typ": 213, "inaccessibleparametererror": 213, "messageoverrideerror": 213, "overriding_messag": 213, "field_nam": 213, "field_typ": 213, "nodeunreferenceableerror": 213, "invalidsessionid": 214, "missinginput": 214, "missingleas": 214, "tree_status_from_tick_statu": 214, "tick_statu": 214, "establish_sess": 214, "keyvalu": 214, "establish_session_async": 214, "tick_async": 214, "teardown_sess": 214, "teardown_session_async": 214, "invalidconvers": 216, "original_valu": 216, "destination_typenam": 216, "tree_to_str": 216, "start_level": 216, "include_statu": 216, "type_to_field_nam": 216, "reconstruct": 216, "proto_from_tupl": 216, "tup": 216, "pack_nod": 216, "test_util": 216, "python_var_to_valu": 216, "constantvalu": 216, "python_type_to_pb_typ": 216, "is_string_identifi": 216, "field_desc_to_pb_typ": 216, "field_desc": 216, "safe_pb_type_to_str": 216, "pb_type": 216, "stringifi": 216, "one_line_str": 216, "node_spec_to_short_str": 216, "node_spec": 216, "maxlen": 216, "resultfromproto": 216, "results_from_proto": 216, "proto_from_result": 216, "proto_enum_to_result_const": 216, "proto_msg": 216, "result_constant_to_proto_enum": 216, "get_value_from_constant_value_messag": 216, "const_proto": 216, "get_value_from_value_messag": 216, "value_msg": 216, "create_valu": 216, "subfield_valu": 216, "severity_to_log_level": 216, "text_level": 216, "requestexcept": [218, 220, 222, 224], "unauthenticatedclienterror": [218, 219, 220, 222], "post_resourc": [218, 222], "delete_resourc": [218, 222], "get_vers": 218, "get_system_tim": 218, "get_robot": [218, 222], "get_robot_by_hostnam": [218, 222], "get_site_walk_by_id": [218, 222], "get_site_el": [218, 222], "get_site_element_by_id": [218, 222], "get_site_dock": [218, 222], "get_site_dock_by_id": [218, 222], "get_run_ev": [218, 222], "get_run_event_by_id": [218, 222], "get_run_captur": [218, 222], "get_run_capture_by_id": [218, 222], "runcaptureuuid": [218, 222], "get_run": [218, 222], "get_run_by_id": [218, 222], "runuuid": [218, 222], "httprespons": [218, 222], "runcaptur": [218, 222], "dataurl": [218, 222], "get_image_respons": [218, 222], "get_webhook": [218, 222], "get_webhook_by_id": [218, 222], "get_robot_info": [218, 222], "robot_nicknam": [218, 222, 307], "site_walk_uuid": [218, 222], "post_import_from_walk": [218, 222], "post_site_el": [218, 222], "post_site_walk": [218, 222], "post_site_dock": [218, 222], "post_robot": [218, 222], "time_m": [218, 222], "repeat_m": [218, 222], "force_acquire_estop": [218, 222], "require_dock": [218, 222], "schedule_nam": [218, 222], "blackout_tim": [218, 222], "disable_reason": [218, 222], "event_id": [218, 222], "startm": [218, 222], "endm": [218, 222], "post_calendar_events_disable_al": [218, 222], "post_calendar_event_disable_by_id": [218, 222], "eventid": [218, 222], "post_calendar_events_enable_al": [218, 222], "post_calendar_event_enable_by_id": [218, 222], "post_webhook_by_id": [218, 222], "post_return_to_dock_miss": [218, 222], "site_dock_uuid": [218, 222, 307], "driver_id": [218, 222], "mission_uuid": [218, 222], "delete_miss": [218, 222], "include_miss": 218, "include_captur": 218, "element_id": 218, "anomaly_uuid": 218, "patched_field": 218, "delete_site_walk": [218, 222], "delete_robot": [218, 222], "delete_calendar_ev": [218, 222], "delete_webhook": [218, 222], "task_id": 218, "create_cli": 218, "webhooksignatureverificationerror": [219, 220], "get_api_token": [220, 224], "get_latest_created_at_for_run_ev": [220, 224], "get_latest_run_capture_resourc": [220, 224], "get_latest_created_at_for_run_captur": [220, 224], "get_latest_run_resourc": [220, 224], "get_latest_run_in_progress": [220, 224], "get_latest_end_time_for_run": [220, 224], "write_imag": 220, "img_raw": 220, "image_fp": 220, "data_capture_urls_from_run_ev": [220, 224], "list_of_channel_nam": [220, 224], "data_url": [220, 224], "data_capture_url_from_run_capture_resourc": [220, 224], "run_capture_resourc": [220, 224], "get_action_names_from_run_ev": 220, "datetime_from_isostr": 220, "datetime_isostr": 220, "signature_head": 220, "max_age_m": 220, "300000": 220, "ag": 220, "print_json_respons": 220, "scoutclient": [222, 224], "unauthenticatedscoutclienterror": [222, 224], "get_scout_vers": 222, "get_scout_system_tim": 222, "create_scout_cli": 222, "scout_client": [222, 224], "get_credenti": 224, "readm": [225, 271, 274, 320], "acquaint": 225, "fundament": [225, 294], "depress": [226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "characterist": 226, "animation_record": 226, "foldernam": 226, "3hz": 227, "tbd": 227, "beginassistrequest": 227, "beginassistrespons": 227, "placehold": [227, 274, 282], "clear_of_forklift": 227, "sdk_dir": 227, "look_both_wai": 227, "crosswalk_light": 227, "unmodifi": 228, "arm_and_mobility_command": 228, "drawer": 229, "run_constrained_manipul": 229, "arm_door": 230, "force_trajectori": 231, "force_wrench_control": 231, "freezer": 232, "arm_freeze_hand": 232, "arm_gaz": 233, "g00": 234, "g01": 234, "g02": 234, "arc": 234, "g03": 234, "m0": 234, "inkscap": 234, "gaffer": 234, "knock": 234, "arm_grasp_carry_overrid": 236, "arm_impedance_control": 237, "arm_joint_mov": 238, "arm_joint_long_trajectori": 238, "arm_simpl": 239, "arm_stow_unstow": 240, "contionu": 242, "arm_trajectori": 242, "arm_long_cartesian_trajectori": 242, "arm_walk_to_object": 243, "arm_wasd": 244, "uo": 244, "jl": 244, "arm_with_body_follow": 245, "force_start_auto_return": 246, "bddf_read": 247, "bourn": 247, "download_bddf": 247, "yyyymmdd_hhmmss": 247, "20200120_120000": [247, 255], "yyyymmdd": [247, 255], "20200120": [247, 255], "nnnnnnnnnn": [247, 255], "nn": [247, 255], "1581869515": [247, 255], "256": [247, 255], "nnnnnnnnnnnnnnnnnnnn": [247, 255], "20201107": [247, 255], "20201108": [247, 255], "1h": [247, 299], "10m": 247, "robotidrespons": 247, "bddf_download_gui": 247, "gui_requir": 247, "upload_to_gcp": 248, "bucket_nam": 248, "source_fil": 248, "destination_fil": 248, "upload_to_aw": 248, "boto3": 248, "google_application_credenti": 248, "bashrc": 248, "aws_bucket_nam": 248, "imagedemo": 248, "cloud_upload": 248, "1196": 248, "ricoh_theta": [248, 318], "comms_image_servic": 249, "robotip": 249, "Or": [249, 258], "port_num": 249, "iperf3": 250, "server_ip": [250, 297], "1234": 250, "comms_test": 250, "comms_test_l4t": 250, "comms_out": 250, "pwm": 251, "dry": 251, "putput": 251, "gpio_exampl": 251, "pwm_control": 251, "gpio_control": 251, "pin_mod": 251, "gpio_pwm": 251, "mp4": 252, "signals_coreio_modem_plugin": 252, "plugin_file_nam": 252, "ip_where_plugin_will_run": 252, "port_the_plugin_will_monitor": 252, "tradit": [252, 273, 315, 318, 320], "weightless": [252, 318], "THE": 252, "WILL": 252, "port_numb": [252, 318, 320], "robot_usernam": 252, "robot_password": 252, "save_file_plugin_servic": 252, "full_path_to_a_fil": 252, "data_acquisition_exampl": 252, "rfc": 252, "3339": 252, "yyyi": 252, "ddthh": 252, "sz": 252, "year": 252, "zulu": 252, "timezon": [252, 299], "data_acquisition_download": 252, "09": [252, 299], "01t00": 252, "0z": 252, "04t00": 252, "signals_lt": 253, "signals_lte_arm": 253, "20201030": 255, "20201031": 255, "20201031_115000": 255, "20201031_115950": 255, "hhmmss": 255, "disable_ir_emiss": 257, "engag": [258, 269, 270, 316], "disengag": 258, "dock_my_robot": 258, "purpl": [269, 316], "edit_autowalk": [269, 314], "walk_directori": [269, 316], "walk_filenam": [269, 316], "qpa": 270, "xcb": 270, "eglf": 270, "linuxfb": 270, "minimalegl": 270, "offscreen": 270, "wayland": 270, "egl": 270, "xcomposit": 270, "glx": 270, "webgl": 270, "tarbal": 271, "stem": 271, "artifact": 271, "pushd": 271, "post_docking_callback": [271, 312], "docking_callback": [271, 312], "popd": 271, "aws_docking_callback": [271, 312], "amd64": [271, 310], "image1": 271, "image2": 271, "extra_imag": 271, "images_tarbal": 271, "file1": 271, "file2": 271, "aws_docking_callback_arm64": [271, 312], "protocolerror": 271, "permissionerror": 271, "connectionerror": 271, "typeerror": 271, "httpconnect": 271, "dockerexcept": 271, "gpasswd": 271, "superus": 271, "IT": 271, "acoust": 272, "extract_images_from_walk": 272, "input_fil": 272, "path_to_walk_fil": 272, "directory_for_output": 272, "cool": 273, "BY": 273, "basic_fan_command": 273, "fan_control_mission_servic": 273, "endpoint_ip": [273, 315, 319], "aprilrobot": 274, "ld_library_path": 274, "cpython": 274, "36m": 274, "x86_64": 274, "_standup": 274, "_movement_on": 274, "_max_x_spe": 274, "_max_y_spe": 274, "dx": 275, "fisheye_imag": 277, "image_view": 277, "payload_guid_and_secret_fil": 282, "144": 282, "5018": 282, "gps_servic": 282, "gps_listener_image_arm64": 282, "trimble_sps986": 282, "trimble_listen": 282, "create_fault_cli": 282, "swap": 282, "offend": 282, "secs_per_attempt": 282, "create_stream": 282, "calculate_body_tform_gp": 282, "spatial": 282, "tempor": 282, "realiz": 282, "qt5": 283, "mplbackend": 283, "qt5agg": 283, "importerror": 283, "dll": 283, "_cext": 283, "msvc": 283, "w1": 283, "w2": 283, "w3": 283, "triangl": 283, "twin": [283, 285], "_lease_cli": 283, "_lease_wallet": 283, "map_processing_cli": 283, "load_graph_and_snapshot": 283, "input_map": 283, "upload_graph_and_snapshot": 283, "optimize_anchor": 283, "opt_info": 283, "map_processing_pb2": 283, "object_hint": 283, "fiducial_id": 283, "get_fiducial_origin": 283, "house_plan": 283, "ruler": 283, "deg2rad": 283, "fiducial_rot": 283, "sin": 283, "rot_matrix": 283, "world_tform_fiduci": 283, "fiducial_posit": 283, "pixels_per_met": 283, "optimized_anchor": 283, "wp": 283, "anchoring_respons": 283, "closet": 283, "bedroom": 283, "blueprint_example_optim": 283, "optimized_anchoring_view": 283, "unoptim": 283, "319": 283, "passiv": 284, "path_to_downloaded_map": 284, "subfold": 284, "downloaded_graph": 284, "snapshot_": 284, "edge_snapshot_": 284, "my_graph_fold": 284, "sight": [284, 296, 314], "latitude_degre": 284, "longitude_degre": 284, "yaw_around_up_radian": 284, "zigzag": 284, "filli": 284, "8ien": 284, "xz8c9pl5tdztqyw": 284, "unambigu": 284, "zf": 284, "hammi": 284, "skink": 284, "ikqi6hgq": 284, "fcbwxjy6mmjqg": 284, "unread": 284, "beagl": 284, "vqfl7nrkvhhpouoo": 284, "ffig": 284, "ub": 284, "prerequisit": [285, 298, 312], "xyz32f": 285, "extract_point_cloud": 285, "path_to_your_map_directori": [285, 286, 287], "meshlab": 285, "ceil": 285, "intention": 285, "8080": 286, "load_map": 286, "get_raw_gps_data": 286, "current_waypoint_snapshot": 286, "get_annotated_gps_data": 286, "current_waypoint": 286, "plot_gps_web_docu": 286, "raw_gps_data_arrai": 286, "annotated_gps_data_arrai": 286, "leaflet": 286, "vtk": [287, 334], "toolkit": 287, "get_gripper_camera_param": 288, "parameter_flag": 288, "set_focus_region": 288, "strike": 289, "rechabl": 290, "noarm_squat": 291, "wiggle_arm": 291, "duration_in_second": 292, "log_spot_data": 293, "sim": 294, "apn": 294, "fivegsetup": 294, "panda": 294, "pandawireless": 294, "metrics_over_coreio": 294, "metrics_over_modem": 294, "metric_file_group": 294, "metricfilegroup": 294, "reciev": [294, 321], "metricmanag": 294, "savin": 294, "carrier": 294, "cellular": 294, "2fa": 294, "autent": 294, "build_miss": 295, "path_to_mission_fil": 295, "directory_to_save_miss": 296, "spacebar": 296, "qe": [296, 314, 335], "neural": [297, 321], "cnn": [297, 321], "identify_object": 297, "retinanet": [297, 298], "requirements_serv": 297, "requirements_cli": 297, "g3doc": [297, 321], "tf1_detection_zoo": [297, 321], "frozen_inference_graph": [297, 321, 326], "pb": [297, 321, 326], "faster_rcnn_inception_v2_coco": [297, 321, 326], "orang": [297, 321], "server_alert_model_alert_output": 297, "identify_object_without_robot": 297, "obj1_label_person": 297, "1146": 297, "ncb_server": [297, 321], "model_directori": [297, 321], "ncb_client": 297, "start_serv": 298, "retinanet_serv": 298, "fire_extinguisher_serv": 298, "fire_ext_detector_imag": 298, "fire_extinguisher_detector": 298, "ext": 298, "mustcontain": 299, "openweathermap": [299, 308], "repons": 299, "citi": [299, 308], "4941935": 299, "lexington": 299, "lon": 299, "2409": 299, "lat": 299, "4116": 299, "countri": [299, 308], "14400": 299, "sun": 299, "27t09": 299, "28t00": 299, "295": 299, "293": 299, "297": 299, "feels_lik": 299, "296": 299, "81": 299, "1010": 299, "hpa": 299, "wind": 299, "breez": 299, "gust": 299, "240": 299, "wsw": 299, "southwest": 299, "overcast": 299, "3219": 299, "precipit": 299, "rain": 299, "501": 299, "moder": 299, "10d": 299, "lastupd": 299, "27t15": 299, "31": 299, "appid": 299, "retirev": 300, "vulner": [300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "ca": [300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "elementid": 300, "element_id_1": 300, "element_id_2": 300, "element_id_3": 300, "anomaly_uuid_1": 300, "bosdyn_orbit_client_api_token": [300, 301, 302, 303, 304, 305, 306, 307, 308, 309], "export_run_arch": 302, "hello_orbit": 304, "runs_respons": 305, "schedule_miss": 306, "forecast": 308, "pyowm": 308, "toggle_mission_based_on_weath": 308, "owmapikei": 308, "api_kei": 308, "hello_webhook": 309, "your_orbit_ip": 310, "your_comput": 310, "21600": 310, "21800": 310, "writeabl": [311, 319], "attach_detach_payload": 311, "aws_access_key_id": 312, "aws_secret_access_kei": 312, "daq_upload_docking_callback": 312, "your_bucket": 312, "spot_ip": 312, "path_to_key_json": 312, "test_fold": 312, "container_id": 312, "docking_callback_arm64": 312, "cast_single_rai": 313, "514": 313, "5136719346046448": 313, "5138996896169675": 313, "016": 313, "516": 313, "5157292485237122": 313, "stitch_front_imag": [314, 328], "record_autowalk": 314, "602": 315, "helloworldservic": 315, "338": 315, "339": 315, "robot_command_mission_servic": 315, "greet": 315, "everyon": 315, "your_ip": 315, "open_port": 315, "577": 315, "585": 315, "695": 315, "009": 315, "inde": 315, "custom_mission_fil": 316, "resetsafetystoprequest": 317, "reset_primary_safety_stop": 317, "reset_redundant_safety_stop": 317, "z1": 318, "test_driv": 318, "wirelessli": 318, "osc": 318, "phone": 318, "thetayl00196843": 318, "wifi_ssid": 318, "wifi_password": 318, "_setaccesspoint": 318, "static_ip": 318, "subnet_mask": 318, "default_gatewai": 318, "cl": 318, "ricoh_theta_image_servic": 318, "theta_ssid": 318, "drain": 318, "quicker": 318, "takepictur": 318, "remind": 318, "wil": 319, "grpc_tool": 319, "grpc_python_out": 319, "announce_servic": 319, "self_register_payload": 319, "name_of_payload": 319, "payload_descript": 319, "endpoint_port": 319, "self_register_servic": 319, "announce_cli": 319, "string_messag": 319, "initialize_payload": 319, "payload_ip": 320, "computer_ip": [320, 322], "camera1": 320, "camera2": 320, "videoxxx": 320, "decompress": 320, "divx": 320, "mjpg": 320, "videoio": 320, "cap_v4l": 320, "cpp": 320, "998": 320, "tryioctl": 320, "v4l2": 320, "video1": 320, "chees": 320, "requirements_server_cpu": 321, "requirements_server_gpu": 321, "daq_plugin_custom_param": 322, "autonomous_robot_en": 324, "get_colormap": 324, "set_colormap": 324, "set_reticl": 324, "store_retriev": 324, "image_uuid": 324, "f0e835c2": 324, "54d4": 324, "11ea": 324, "9365": 324, "00044be03a91": 324, "seq": 324, "xarg": 324, "set_posit": 324, "get_posit": 324, "set_focu": 324, "auto_focu": 324, "manual_focu": 324, "get_focu": 324, "ice_set": 324, "set_ic": 324, "bitrat": 324, "2mbp": 324, "aiortc": 324, "stream_qual": 324, "2000000": 324, "spotcam_video": 324, "aquis": 324, "acquis": 324, "shine": 325, "crude": 325, "spot_light": 325, "brightness_threshold": 325, "comma": 326, "spot_tensorflow_detector": 326, "path_to_pb": 326, "raw_images_queu": 326, "processed_images_queu": 326, "network_delai": 326, "processing_delai": 326, "display_delai": 326, "total_delai": 326, "display_skip": 326, "processing_skip": 326, "stance_in_plac": 327, "payload_nam": 329, "your_new_image_servic": 329, "your_new_data_acquisition_plugin": 329, "terminologi": 331, "csq": 331, "user_nogo_region": 332, "theme": 333, "prism": 334, "world_object_with_image_coordin": 337, "xboxdrv": 338, "xbox360": 338, "xinput": 338}, "objects": {"bosdyn.bddf": [[189, 0, 0, "-", "base_data_reader"], [190, 0, 0, "-", "block_writer"], [191, 0, 0, "-", "bosdyn"], [192, 0, 0, "-", "common"], [193, 0, 0, "-", "data_reader"], [194, 0, 0, "-", "data_writer"], [195, 0, 0, "-", "file_indexer"], [196, 0, 0, "-", "grpc_proto_reader"], [197, 0, 0, "-", "grpc_reader"], [198, 0, 0, "-", "grpc_service_reader"], [199, 0, 0, "-", "grpc_service_writer"], [200, 0, 0, "-", "message_reader"], [201, 0, 0, "-", "pod_series_reader"], [202, 0, 0, "-", "pod_series_writer"], [203, 0, 0, "-", "protobuf_channel_reader"], [204, 0, 0, "-", "protobuf_reader"], [205, 0, 0, "-", "protobuf_series_writer"], [206, 0, 0, "-", "stream_data_reader"]], "bosdyn.bddf.base_data_reader": [[189, 1, 1, "", "BaseDataReader"]], "bosdyn.bddf.base_data_reader.BaseDataReader": [[189, 2, 1, "", "annotations"], [189, 2, 1, "", "checksum"], [189, 2, 1, "", "file_descriptor"], [189, 2, 1, "", "file_index"], [189, 2, 1, "", "filename"], [189, 2, 1, "", "read_checksum"], [189, 3, 1, "", "series_spec_to_index"], [189, 2, 1, "", "version"]], "bosdyn.bddf.block_writer": [[190, 1, 1, "", "BlockWriter"]], "bosdyn.bddf.block_writer.BlockWriter": [[190, 3, 1, "", "close"], [190, 2, 1, "", "closed"], [190, 3, 1, "", "tell"], [190, 3, 1, "", "write_data_block"], [190, 3, 1, "", "write_descriptor_block"], [190, 3, 1, "", "write_file_end"], [190, 3, 1, "", "write_header"]], "bosdyn.bddf.bosdyn": [[191, 1, 1, "", "GrpcRequests"], [191, 1, 1, "", "GrpcResponses"], [191, 1, 1, "", "MessageChannel"], [191, 1, 1, "", "TypedMessageChannel"]], "bosdyn.bddf.bosdyn.GrpcRequests": [[191, 4, 1, "", "KEYS"], [191, 4, 1, "", "MESSAGE_TYPE"], [191, 4, 1, "", "SERIES_TYPE"], [191, 4, 1, "", "SERVICE_NAME"]], "bosdyn.bddf.bosdyn.GrpcResponses": [[191, 4, 1, "", "KEYS"], [191, 4, 1, "", "MESSAGE_TYPE"], [191, 4, 1, "", "SERIES_TYPE"], [191, 4, 1, "", "SERVICE_NAME"]], "bosdyn.bddf.bosdyn.MessageChannel": [[191, 4, 1, "", "CHANNEL"], [191, 4, 1, "", "KEYS"], [191, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.bosdyn.TypedMessageChannel": [[191, 4, 1, "", "CHANNEL"], [191, 4, 1, "", "KEYS"], [191, 4, 1, "", "MESSAGE_TYPE"], [191, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.common": [[192, 5, 1, "", "AddSeriesError"], [192, 5, 1, "", "ChecksumError"], [192, 5, 1, "", "DataError"], [192, 5, 1, "", "DataFormatError"], [192, 5, 1, "", "ParseError"], [192, 1, 1, "", "SeriesIdentifier"], [192, 5, 1, "", "SeriesNotUniqueError"]], "bosdyn.bddf.common.SeriesIdentifier": [[192, 4, 1, "", "KEYS"], [192, 4, 1, "", "SERIES_TYPE"]], "bosdyn.bddf.data_reader": [[193, 1, 1, "", "DataReader"]], "bosdyn.bddf.data_reader.DataReader": [[193, 3, 1, "", "num_data_blocks"], [193, 3, 1, "", "read"], [193, 3, 1, "", "series_block_index"], [193, 3, 1, "", "series_descriptor"], [193, 3, 1, "", "total_bytes"]], "bosdyn.bddf.data_writer": [[194, 1, 1, "", "DataWriter"]], "bosdyn.bddf.data_writer.DataWriter": [[194, 3, 1, "", "add_message_series"], [194, 3, 1, "", "add_pod_series"], [194, 3, 1, "", "add_series"], [194, 2, 1, "", "file_index"], [194, 3, 1, "", "run_on_close"], [194, 3, 1, "", "write_data"]], "bosdyn.bddf.file_indexer": [[195, 1, 1, "", "FileIndexer"]], "bosdyn.bddf.file_indexer.FileIndexer": [[195, 3, 1, "", "add_series"], [195, 3, 1, "", "add_series_descriptor"], [195, 2, 1, "", "descriptor_index"], [195, 2, 1, "", "file_index"], [195, 3, 1, "", "index_data_block"], [195, 3, 1, "", "make_data_descriptor"], [195, 2, 1, "", "series_block_indexes"], [195, 3, 1, "", "series_descriptor"], [195, 3, 1, "", "series_identifier_to_hash"], [195, 3, 1, "", "write_index"]], "bosdyn.bddf.grpc_proto_reader": [[196, 1, 1, "", "GrpcProtoReader"]], "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader": [[196, 3, 1, "", "get_message"], [196, 2, 1, "", "num_messages"]], "bosdyn.bddf.grpc_reader": [[197, 1, 1, "", "GrpcReader"]], "bosdyn.bddf.grpc_reader.GrpcReader": [[197, 2, 1, "", "data_reader"], [197, 3, 1, "", "get_message"], [197, 3, 1, "", "get_proto_reader"]], "bosdyn.bddf.grpc_service_reader": [[198, 1, 1, "", "GrpcServiceReader"]], "bosdyn.bddf.grpc_service_reader.GrpcServiceReader": [[198, 3, 1, "", "add_proto_reader"], [198, 2, 1, "", "data_reader"], [198, 3, 1, "", "get_proto_reader"]], "bosdyn.bddf.grpc_service_writer": [[199, 1, 1, "", "GrpcServiceWriter"]], "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter": [[199, 3, 1, "", "log_request"], [199, 3, 1, "", "log_response"]], "bosdyn.bddf.message_reader": [[200, 1, 1, "", "MessageReader"]], "bosdyn.bddf.message_reader.MessageReader": [[200, 2, 1, "", "channel_name_to_series_decriptor"], [200, 2, 1, "", "channel_name_to_series_descriptor"], [200, 2, 1, "", "data_reader"], [200, 3, 1, "", "get_blob"], [200, 3, 1, "", "series_index"], [200, 3, 1, "", "series_index_to_descriptor"]], "bosdyn.bddf.pod_series_reader": [[201, 1, 1, "", "PodSeriesReader"]], "bosdyn.bddf.pod_series_reader.PodSeriesReader": [[201, 2, 1, "", "num_data_blocks"], [201, 2, 1, "", "pod_type"], [201, 3, 1, "", "read_samples"], [201, 2, 1, "", "series_descriptor"]], "bosdyn.bddf.pod_series_writer": [[202, 1, 1, "", "PodSeriesWriter"]], "bosdyn.bddf.pod_series_writer.PodSeriesWriter": [[202, 3, 1, "", "finish_block"], [202, 2, 1, "", "series_spec"], [202, 2, 1, "", "series_type"], [202, 3, 1, "", "write"]], "bosdyn.bddf.protobuf_channel_reader": [[203, 1, 1, "", "ProtobufChannelReader"]], "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader": [[203, 1, 1, "", "Iterator"], [203, 3, 1, "", "get_message"], [203, 2, 1, "", "num_messages"], [203, 2, 1, "", "series_descriptor"]], "bosdyn.bddf.protobuf_reader": [[204, 1, 1, "", "ProtobufReader"]], "bosdyn.bddf.protobuf_reader.ProtobufReader": [[204, 3, 1, "", "get_message"]], "bosdyn.bddf.protobuf_series_writer": [[205, 1, 1, "", "ProtobufSeriesWriter"]], "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter": [[205, 2, 1, "", "series_spec"], [205, 2, 1, "", "series_type"], [205, 3, 1, "", "write"]], "bosdyn.bddf.stream_data_reader": [[206, 1, 1, "", "StreamDataReader"]], "bosdyn.bddf.stream_data_reader.StreamDataReader": [[206, 2, 1, "", "eof"], [206, 2, 1, "", "read_checksum"], [206, 3, 1, "", "read_data_block"], [206, 3, 1, "", "read_next_block"], [206, 3, 1, "", "series_block_index"], [206, 2, 1, "", "series_block_indexes"], [206, 3, 1, "", "series_descriptor"], [206, 2, 1, "", "stream_file_index"]], "bosdyn.choreography.client": [[95, 0, 0, "-", "animation_file_conversion_helpers"], [96, 0, 0, "-", "animation_file_to_proto"], [97, 0, 0, "-", "choreography"]], "bosdyn.choreography.client.animation_file_conversion_helpers": [[95, 6, 1, "", "arm_joints_handler"], [95, 6, 1, "", "arm_playback_option"], [95, 6, 1, "", "arm_prohibited_option"], [95, 6, 1, "", "arm_required_option"], [95, 6, 1, "", "assume_zero_roll_and_pitch_option"], [95, 6, 1, "", "body_euler_rpy_angles_handler"], [95, 6, 1, "", "body_pitch_handler"], [95, 6, 1, "", "body_pos_handler"], [95, 6, 1, "", "body_quat_w_handler"], [95, 6, 1, "", "body_quat_x_handler"], [95, 6, 1, "", "body_quat_y_handler"], [95, 6, 1, "", "body_quat_z_handler"], [95, 6, 1, "", "body_quaternion_wxyz_handler"], [95, 6, 1, "", "body_quaternion_xyzw_handler"], [95, 6, 1, "", "body_roll_handler"], [95, 6, 1, "", "body_x_handler"], [95, 6, 1, "", "body_y_handler"], [95, 6, 1, "", "body_yaw_handler"], [95, 6, 1, "", "body_z_handler"], [95, 6, 1, "", "bpm_option"], [95, 6, 1, "", "com_pos_handler"], [95, 6, 1, "", "com_x_handler"], [95, 6, 1, "", "com_y_handler"], [95, 6, 1, "", "com_z_handler"], [95, 6, 1, "", "contact_handler"], [95, 6, 1, "", "controls_option"], [95, 6, 1, "", "custom_gait_cycle_option"], [95, 6, 1, "", "description_option"], [95, 6, 1, "", "display_rgb_option"], [95, 6, 1, "", "el0_handler"], [95, 6, 1, "", "el1_handler"], [95, 6, 1, "", "extendable_option"], [95, 6, 1, "", "fl_angles_handler"], [95, 6, 1, "", "fl_contact_handler"], [95, 6, 1, "", "fl_hx_handler"], [95, 6, 1, "", "fl_hy_handler"], [95, 6, 1, "", "fl_kn_handler"], [95, 6, 1, "", "fl_pos_handler"], [95, 6, 1, "", "fl_x_handler"], [95, 6, 1, "", "fl_y_handler"], [95, 6, 1, "", "fl_z_handler"], [95, 6, 1, "", "foot_pos_handler"], [95, 6, 1, "", "fr_angles_handler"], [95, 6, 1, "", "fr_contact_handler"], [95, 6, 1, "", "fr_hx_handler"], [95, 6, 1, "", "fr_hy_handler"], [95, 6, 1, "", "fr_kn_handler"], [95, 6, 1, "", "fr_pos_handler"], [95, 6, 1, "", "fr_x_handler"], [95, 6, 1, "", "fr_y_handler"], [95, 6, 1, "", "fr_z_handler"], [95, 6, 1, "", "frequency_option"], [95, 6, 1, "", "gripper_handler"], [95, 6, 1, "", "hand_euler_rpy_angles_handler"], [95, 6, 1, "", "hand_pitch_handler"], [95, 6, 1, "", "hand_pos_handler"], [95, 6, 1, "", "hand_quat_w_handler"], [95, 6, 1, "", "hand_quat_x_handler"], [95, 6, 1, "", "hand_quat_y_handler"], [95, 6, 1, "", "hand_quat_z_handler"], [95, 6, 1, "", "hand_quaternion_wxyz_handler"], [95, 6, 1, "", "hand_quaternion_xyzw_handler"], [95, 6, 1, "", "hand_roll_handler"], [95, 6, 1, "", "hand_x_handler"], [95, 6, 1, "", "hand_y_handler"], [95, 6, 1, "", "hand_yaw_handler"], [95, 6, 1, "", "hand_z_handler"], [95, 6, 1, "", "hl_angles_handler"], [95, 6, 1, "", "hl_contact_handler"], [95, 6, 1, "", "hl_hx_handler"], [95, 6, 1, "", "hl_hy_handler"], [95, 6, 1, "", "hl_kn_handler"], [95, 6, 1, "", "hl_pos_handler"], [95, 6, 1, "", "hl_x_handler"], [95, 6, 1, "", "hl_y_handler"], [95, 6, 1, "", "hl_z_handler"], [95, 6, 1, "", "hr_angles_handler"], [95, 6, 1, "", "hr_contact_handler"], [95, 6, 1, "", "hr_hx_handler"], [95, 6, 1, "", "hr_hy_handler"], [95, 6, 1, "", "hr_kn_handler"], [95, 6, 1, "", "hr_pos_handler"], [95, 6, 1, "", "hr_x_handler"], [95, 6, 1, "", "hr_y_handler"], [95, 6, 1, "", "hr_z_handler"], [95, 6, 1, "", "leg_angles_handler"], [95, 6, 1, "", "neutral_start_option"], [95, 6, 1, "", "no_looping_option"], [95, 6, 1, "", "precise_steps_option"], [95, 6, 1, "", "precise_timing_option"], [95, 6, 1, "", "retime_to_integer_slices_option"], [95, 6, 1, "", "sh0_handler"], [95, 6, 1, "", "sh1_handler"], [95, 6, 1, "", "start_time_handler"], [95, 6, 1, "", "starts_sitting_option"], [95, 6, 1, "", "timing_adjustability_option"], [95, 6, 1, "", "track_hand_rt_body_option"], [95, 6, 1, "", "track_hand_rt_feet_option"], [95, 6, 1, "", "track_swing_trajectories_option"], [95, 6, 1, "", "truncatable_option"], [95, 6, 1, "", "wr0_handler"], [95, 6, 1, "", "wr1_handler"]], "bosdyn.choreography.client.animation_file_to_proto": [[96, 1, 1, "", "Animation"], [96, 5, 1, "", "AnimationFileFormatError"], [96, 6, 1, "", "convert_animation_file_to_proto"], [96, 6, 1, "", "handle_nested_double_value_params"], [96, 6, 1, "", "main"], [96, 6, 1, "", "read_and_find_animation_params"], [96, 6, 1, "", "read_animation_params"], [96, 6, 1, "", "set_proto"], [96, 6, 1, "", "write_animation_to_dest"]], "bosdyn.choreography.client.animation_file_to_proto.Animation": [[96, 3, 1, "", "create_move_info_proto"]], "bosdyn.choreography.client.choreography": [[97, 1, 1, "", "AnimationUploadHelper"], [97, 5, 1, "", "AnimationValidationFailedError"], [97, 1, 1, "", "ChoreographyClient"], [97, 5, 1, "", "IncompleteData"], [97, 5, 1, "", "InvalidUploadedChoreographyError"], [97, 5, 1, "", "LeaseError"], [97, 5, 1, "", "NoRecordedInformation"], [97, 5, 1, "", "RecordingBufferFull"], [97, 5, 1, "", "RobotCommandIssuesError"], [97, 5, 1, "", "UnknownRecordingSessionId"], [97, 6, 1, "", "load_choreography_sequence_from_binary_file"], [97, 6, 1, "", "load_choreography_sequence_from_txt_file"], [97, 6, 1, "", "save_choreography_sequence_to_file"]], "bosdyn.choreography.client.choreography.AnimationUploadHelper": [[97, 4, 1, "", "ANIMATION_MOVE_PREFIX"], [97, 3, 1, "", "generate_animation_id"], [97, 3, 1, "", "initialize"], [97, 3, 1, "", "upload_animated_move"]], "bosdyn.choreography.client.choreography.ChoreographyClient": [[97, 3, 1, "", "build_choreography_command_request"], [97, 3, 1, "", "build_choreography_time_adjust_request"], [97, 3, 1, "", "build_execute_choreography_request"], [97, 3, 1, "", "build_modify_choreography_info_request"], [97, 3, 1, "", "build_save_sequence_request"], [97, 3, 1, "", "build_start_recording_state_request"], [97, 3, 1, "", "choreography_command"], [97, 3, 1, "", "choreography_command_async"], [97, 3, 1, "", "choreography_log_to_animation_file"], [97, 3, 1, "", "choreography_time_adjust"], [97, 3, 1, "", "choreography_time_adjust_async"], [97, 3, 1, "", "clear_all_sequence_files"], [97, 3, 1, "", "clear_all_sequence_files_async"], [97, 4, 1, "", "default_service_name"], [97, 3, 1, "", "delete_sequence"], [97, 3, 1, "", "delete_sequence_async"], [97, 3, 1, "", "download_robot_state_log"], [97, 3, 1, "", "execute_choreography"], [97, 3, 1, "", "execute_choreography_async"], [97, 3, 1, "", "get_animation"], [97, 3, 1, "", "get_animation_async"], [97, 3, 1, "", "get_choreography_sequence"], [97, 3, 1, "", "get_choreography_sequence_async"], [97, 3, 1, "", "get_choreography_status"], [97, 3, 1, "", "get_choreography_status_async"], [97, 4, 1, "", "license_name"], [97, 3, 1, "", "list_all_moves"], [97, 3, 1, "", "list_all_moves_async"], [97, 3, 1, "", "list_all_sequences"], [97, 3, 1, "", "list_all_sequences_async"], [97, 3, 1, "", "modify_choreography_info"], [97, 3, 1, "", "modify_choreography_info_async"], [97, 3, 1, "", "save_sequence"], [97, 3, 1, "", "save_sequence_async"], [97, 4, 1, "", "service_type"], [97, 3, 1, "", "start_recording_state"], [97, 3, 1, "", "start_recording_state_async"], [97, 3, 1, "", "stop_recording_state"], [97, 3, 1, "", "stop_recording_state_async"], [97, 2, 1, "", "timesync_endpoint"], [97, 3, 1, "", "update_from"], [97, 3, 1, "", "upload_animated_move"], [97, 3, 1, "", "upload_animated_move_async"], [97, 3, 1, "", "upload_choreography"], [97, 3, 1, "", "upload_choreography_async"]], "bosdyn.client": [[99, 0, 0, "-", "area_callback"], [100, 0, 0, "-", "area_callback_region_handler_base"], [101, 0, 0, "-", "area_callback_service_runner"], [102, 0, 0, "-", "area_callback_service_servicer"], [103, 0, 0, "-", "area_callback_service_utils"], [104, 0, 0, "-", "arm_surface_contact"], [105, 0, 0, "-", "async_tasks"], [106, 0, 0, "-", "auth"], [107, 0, 0, "-", "auto_return"], [108, 0, 0, "-", "autowalk"], [109, 0, 0, "-", "bddf"], [110, 0, 0, "-", "bddf_download"], [111, 0, 0, "-", "channel"], [112, 0, 0, "-", "command_line"], [113, 0, 0, "-", "common"], [114, 0, 0, "-", "data_acquisition"], [115, 0, 0, "-", "data_acquisition_helpers"], [116, 0, 0, "-", "data_acquisition_plugin"], [117, 0, 0, "-", "data_acquisition_plugin_service"], [118, 0, 0, "-", "data_acquisition_store"], [119, 0, 0, "-", "data_buffer"], [120, 0, 0, "-", "data_chunk"], [121, 0, 0, "-", "data_service"], [122, 0, 0, "-", "directory"], [123, 0, 0, "-", "directory_registration"], [124, 0, 0, "-", "docking"], [125, 0, 0, "-", "door"], [126, 0, 0, "-", "estop"], [127, 0, 0, "-", "exceptions"], [128, 0, 0, "-", "fault"], [129, 0, 0, "-", "frame_helpers"], [135, 0, 0, "-", "graph_nav"], [136, 0, 0, "-", "gripper_camera_param"], [137, 0, 0, "-", "image"], [138, 0, 0, "-", "image_service_helpers"], [139, 0, 0, "-", "inverse_kinematics"], [140, 0, 0, "-", "ir_enable_disable"], [141, 0, 0, "-", "keepalive"], [142, 0, 0, "-", "lease"], [143, 0, 0, "-", "lease_resource_hierarchy"], [144, 0, 0, "-", "lease_validator"], [145, 0, 0, "-", "license"], [146, 0, 0, "-", "local_grid"], [147, 0, 0, "-", "log_status"], [148, 0, 0, "-", "manipulation_api_client"], [149, 0, 0, "-", "map_processing"], [150, 0, 0, "-", "math_helpers"], [151, 0, 0, "-", "metrics_logging"], [152, 0, 0, "-", "network_compute_bridge_client"], [153, 0, 0, "-", "payload"], [154, 0, 0, "-", "payload_registration"], [155, 0, 0, "-", "point_cloud"], [156, 0, 0, "-", "power"], [157, 0, 0, "-", "processors"], [158, 0, 0, "-", "ray_cast"], [159, 0, 0, "-", "recording"], [160, 0, 0, "-", "robot"], [161, 0, 0, "-", "robot_command"], [162, 0, 0, "-", "robot_id"], [163, 0, 0, "-", "robot_state"], [164, 0, 0, "-", "sdk"], [165, 0, 0, "-", "server_util"], [166, 0, 0, "-", "service_customization_helpers"], [167, 0, 0, "-", "signals_helpers"], [180, 0, 0, "-", "spot_check"], [181, 0, 0, "-", "time_sync"], [182, 0, 0, "-", "token_cache"], [183, 0, 0, "-", "token_manager"], [184, 0, 0, "-", "units_helpers"], [185, 0, 0, "-", "util"], [186, 0, 0, "-", "world_object"]], "bosdyn.client.area_callback": [[99, 1, 1, "", "AreaCallbackClient"], [99, 5, 1, "", "AreaCallbackResponseError"], [99, 5, 1, "", "ExpiredEndTimeError"], [99, 5, 1, "", "InvalidCommandIdError"], [99, 5, 1, "", "InvalidConfigError"], [99, 5, 1, "", "MissingLeaseResourcesError"], [99, 5, 1, "", "ShutdownCallbackFailedError"]], "bosdyn.client.area_callback.AreaCallbackClient": [[99, 3, 1, "", "area_callback_information"], [99, 3, 1, "", "begin_callback"], [99, 3, 1, "", "begin_control"], [99, 4, 1, "", "default_service_name"], [99, 3, 1, "", "end_callback"], [99, 4, 1, "", "service_type"], [99, 3, 1, "", "update_callback"]], "bosdyn.client.area_callback_region_handler_base": [[100, 1, 1, "", "AreaCallbackRegionHandlerBase"], [100, 5, 1, "", "CallbackEnded"], [100, 5, 1, "", "CallbackTimedOutError"], [100, 5, 1, "", "HandlerError"], [100, 5, 1, "", "IncorrectUsage"], [100, 5, 1, "", "PathBlocked"], [100, 1, 1, "", "RouteChangedResult"]], "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase": [[100, 2, 1, "", "area_callback_information"], [100, 3, 1, "", "begin"], [100, 3, 1, "", "block_until_arrived_at_end"], [100, 3, 1, "", "block_until_arrived_at_start"], [100, 3, 1, "", "block_until_control"], [100, 3, 1, "", "check"], [100, 2, 1, "", "config"], [100, 3, 1, "", "continue_past_end"], [100, 3, 1, "", "continue_past_start"], [100, 3, 1, "", "control_at_end"], [100, 3, 1, "", "control_at_start"], [100, 3, 1, "", "end"], [100, 3, 1, "", "has_control"], [100, 3, 1, "", "internal_begin_complete"], [100, 3, 1, "", "internal_give_control"], [100, 3, 1, "", "internal_run_wrapper"], [100, 3, 1, "", "internal_set_end_time"], [100, 3, 1, "", "internal_set_stage"], [100, 3, 1, "", "route_changed"], [100, 3, 1, "", "run"], [100, 3, 1, "", "safe_sleep"], [100, 3, 1, "", "set_complete"], [100, 3, 1, "", "set_localization_at_end"], [100, 2, 1, "", "stage"], [100, 3, 1, "", "stop_at_end"], [100, 3, 1, "", "stop_at_start"], [100, 2, 1, "", "update_response"], [100, 3, 1, "", "will_get_control"]], "bosdyn.client.area_callback_service_runner": [[101, 6, 1, "", "run_service"]], "bosdyn.client.area_callback_service_servicer": [[102, 1, 1, "", "AreaCallbackServiceServicer"]], "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer": [[102, 3, 1, "", "AreaCallbackInformation"], [102, 3, 1, "", "BeginCallback"], [102, 3, 1, "", "BeginControl"], [102, 3, 1, "", "EndCallback"], [102, 3, 1, "", "RouteChange"], [102, 4, 1, "", "SERVICE_TYPE"], [102, 3, 1, "", "Shutdown"], [102, 3, 1, "", "UpdateCallback"]], "bosdyn.client.area_callback_service_utils": [[103, 1, 1, "", "AreaCallbackServiceConfig"], [103, 6, 1, "", "handle_service_faults"]], "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig": [[103, 3, 1, "", "parse_params"]], "bosdyn.client.arm_surface_contact": [[104, 1, 1, "", "ArmSurfaceContactClient"]], "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient": [[104, 3, 1, "", "arm_surface_contact_command"], [104, 3, 1, "", "arm_surface_contact_command_async"], [104, 4, 1, "", "default_service_name"], [104, 4, 1, "", "service_type"], [104, 3, 1, "", "update_from"]], "bosdyn.client.async_tasks": [[105, 1, 1, "", "AsyncGRPCTask"], [105, 1, 1, "", "AsyncPeriodicGRPCTask"], [105, 1, 1, "", "AsyncPeriodicQuery"], [105, 1, 1, "", "AsyncTasks"]], "bosdyn.client.async_tasks.AsyncGRPCTask": [[105, 3, 1, "", "update"]], "bosdyn.client.async_tasks.AsyncPeriodicQuery": [[105, 2, 1, "", "proto"]], "bosdyn.client.async_tasks.AsyncTasks": [[105, 3, 1, "", "add_task"], [105, 3, 1, "", "update"]], "bosdyn.client.auth": [[106, 1, 1, "", "AuthClient"], [106, 5, 1, "", "AuthResponseError"], [106, 5, 1, "", "InvalidLoginError"], [106, 5, 1, "", "InvalidTokenError"], [106, 5, 1, "", "TemporarilyLockedOutError"]], "bosdyn.client.auth.AuthClient": [[106, 3, 1, "", "auth"], [106, 3, 1, "", "auth_async"], [106, 3, 1, "", "auth_with_token"], [106, 3, 1, "", "auth_with_token_async"], [106, 4, 1, "", "default_service_name"], [106, 4, 1, "", "service_type"]], "bosdyn.client.auto_return": [[107, 1, 1, "", "AutoReturnClient"], [107, 5, 1, "", "AutoReturnResponseError"], [107, 5, 1, "", "InvalidParameterError"], [107, 6, 1, "", "configure_error"], [107, 6, 1, "", "start_error"]], "bosdyn.client.auto_return.AutoReturnClient": [[107, 3, 1, "", "configure"], [107, 3, 1, "", "configure_async"], [107, 4, 1, "", "default_service_name"], [107, 3, 1, "", "get_configuration"], [107, 3, 1, "", "get_configuration_async"], [107, 4, 1, "", "service_type"], [107, 3, 1, "", "start"], [107, 3, 1, "", "start_async"]], "bosdyn.client.autowalk": [[108, 1, 1, "", "AutowalkClient"], [108, 5, 1, "", "AutowalkResponseError"], [108, 5, 1, "", "CompilationError"], [108, 5, 1, "", "ValidationError"]], "bosdyn.client.autowalk.AutowalkClient": [[108, 3, 1, "", "compile_autowalk"], [108, 4, 1, "", "default_service_name"], [108, 3, 1, "", "load_autowalk"], [108, 4, 1, "", "service_type"], [108, 3, 1, "", "update_from"]], "bosdyn.client.bddf_download": [[110, 6, 1, "", "download_data"], [110, 6, 1, "", "main"]], "bosdyn.client.channel": [[111, 1, 1, "", "RefreshingAccessTokenAuthMetadataPlugin"], [111, 6, 1, "", "create_insecure_channel"], [111, 6, 1, "", "create_secure_channel"], [111, 6, 1, "", "create_secure_channel_creds"], [111, 6, 1, "", "generate_channel_options"], [111, 6, 1, "", "translate_exception"]], "bosdyn.client.command_line": [[112, 1, 1, "", "BecomeEstopCommand"], [112, 1, 1, "", "Command"], [112, 1, 1, "", "DataAcquisitionCommand"], [112, 1, 1, "", "DataAcquisitionGetLiveDataCommand"], [112, 1, 1, "", "DataAcquisitionRequestCommand"], [112, 1, 1, "", "DataAcquisitionServiceCommand"], [112, 1, 1, "", "DataAcquisitionStatusCommand"], [112, 1, 1, "", "DataBufferCommands"], [112, 1, 1, "", "DataServiceCommands"], [112, 1, 1, "", "DirectoryCommands"], [112, 1, 1, "", "DirectoryGetCommand"], [112, 1, 1, "", "DirectoryListCommand"], [112, 1, 1, "", "DirectoryRegisterCommand"], [112, 1, 1, "", "DirectoryUnregisterCommand"], [112, 1, 1, "", "EstopCommands"], [112, 1, 1, "", "ExperimentLogCommand"], [112, 1, 1, "", "FaultCommands"], [112, 1, 1, "", "FaultShowCommand"], [112, 1, 1, "", "FaultWatchCommand"], [112, 1, 1, "", "FullStateCommand"], [112, 1, 1, "", "GetActiveLogStatusesCommand"], [112, 1, 1, "", "GetDataBufferCommentsCommand"], [112, 1, 1, "", "GetDataBufferEventsCommand"], [112, 1, 1, "", "GetDataBufferEventsCommentsCommand"], [112, 1, 1, "", "GetDataBufferStatusCommand"], [112, 1, 1, "", "GetEstopConfigCommand"], [112, 1, 1, "", "GetEstopStatusCommand"], [112, 1, 1, "", "GetImageCommand"], [112, 1, 1, "", "GetLocalGridsCommand"], [112, 1, 1, "", "GetLogCommand"], [112, 1, 1, "", "HardwareConfigurationCommand"], [112, 1, 1, "", "HostComputerIPCommand"], [112, 1, 1, "", "ImageCommands"], [112, 1, 1, "", "KeepaliveCommand"], [112, 1, 1, "", "KeepaliveGetStatusCommand"], [112, 1, 1, "", "KeepaliveRemovePoliciesCommand"], [112, 1, 1, "", "LeaseCommands"], [112, 1, 1, "", "LeaseListCommand"], [112, 1, 1, "", "LicenseCommand"], [112, 1, 1, "", "ListImageSourcesCommand"], [112, 1, 1, "", "ListLocalGridTypesCommand"], [112, 1, 1, "", "LocalGridCommands"], [112, 1, 1, "", "LogStatusCommands"], [112, 1, 1, "", "MetricsCommand"], [112, 1, 1, "", "OldBecomeEstopCommand"], [112, 1, 1, "", "OperatorCommentCommand"], [112, 1, 1, "", "PayloadCommands"], [112, 1, 1, "", "PayloadListCommand"], [112, 1, 1, "", "PayloadRegisterCommand"], [112, 1, 1, "", "PowerCommand"], [112, 1, 1, "", "PowerPayloadsCommand"], [112, 1, 1, "", "PowerRobotCommand"], [112, 1, 1, "", "PowerWifiRadioCommand"], [112, 1, 1, "", "RobotIdCommand"], [112, 1, 1, "", "RobotModel"], [112, 1, 1, "", "RobotStateCommands"], [112, 1, 1, "", "StartContinuousExperimentLogCommand"], [112, 1, 1, "", "StartRetroLogCommand"], [112, 1, 1, "", "StartTimedExperimentLogCommand"], [112, 1, 1, "", "Subcommands"], [112, 1, 1, "", "TerminateLogCommand"], [112, 1, 1, "", "TextMsgCommand"], [112, 1, 1, "", "TimeSyncCommand"], [112, 6, 1, "", "lease_details"], [112, 6, 1, "", "main"]], "bosdyn.client.command_line.BecomeEstopCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.Command": [[112, 4, 1, "", "NAME"], [112, 4, 1, "", "NEED_AUTHENTICATION"], [112, 3, 1, "", "run"]], "bosdyn.client.command_line.DataAcquisitionCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionRequestCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionServiceCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataAcquisitionStatusCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataBufferCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DataServiceCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryGetCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryListCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryRegisterCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.DirectoryUnregisterCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.EstopCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ExperimentLogCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultShowCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FaultWatchCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.FullStateCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetActiveLogStatusesCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetDataBufferCommentsCommand": [[112, 4, 1, "", "NAME"], [112, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferEventsCommand": [[112, 4, 1, "", "NAME"], [112, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand": [[112, 3, 1, "", "pretty_print"]], "bosdyn.client.command_line.GetDataBufferStatusCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetEstopConfigCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetEstopStatusCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetImageCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetLocalGridsCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.GetLogCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.HardwareConfigurationCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.HostComputerIPCommand": [[112, 4, 1, "", "NAME"], [112, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.ImageCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.KeepaliveCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.KeepaliveGetStatusCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.KeepaliveRemovePoliciesCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LeaseCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LeaseListCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LicenseCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ListImageSourcesCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.ListLocalGridTypesCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LocalGridCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.LogStatusCommands": [[112, 4, 1, "", "NAME"], [112, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.MetricsCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.OldBecomeEstopCommand": [[112, 3, 1, "", "run"]], "bosdyn.client.command_line.OperatorCommentCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadListCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PayloadRegisterCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerPayloadsCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerRobotCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.PowerWifiRadioCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.RobotIdCommand": [[112, 4, 1, "", "NAME"], [112, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.RobotModel": [[112, 4, 1, "", "NAME"], [112, 4, 1, "", "NEED_AUTHENTICATION"]], "bosdyn.client.command_line.RobotStateCommands": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.StartContinuousExperimentLogCommand": [[112, 4, 1, "", "NAME"], [112, 3, 1, "", "handle_keyboard_interruption"]], "bosdyn.client.command_line.StartRetroLogCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.StartTimedExperimentLogCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TerminateLogCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TextMsgCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.command_line.TimeSyncCommand": [[112, 4, 1, "", "NAME"]], "bosdyn.client.common": [[113, 1, 1, "", "BaseClient"], [113, 1, 1, "", "FutureWrapper"], [113, 6, 1, "", "common_header_errors"], [113, 6, 1, "", "common_lease_errors"], [113, 6, 1, "", "common_license_errors"], [113, 6, 1, "", "custom_params_error"], [113, 6, 1, "", "error_factory"], [113, 6, 1, "", "error_pair"], [113, 6, 1, "", "get_self_ip"], [113, 6, 1, "", "handle_common_header_errors"], [113, 6, 1, "", "handle_custom_params_errors"], [113, 6, 1, "", "handle_lease_use_result_errors"], [113, 6, 1, "", "handle_license_errors"], [113, 6, 1, "", "handle_license_errors_if_present"], [113, 6, 1, "", "handle_unset_status_error"], [113, 6, 1, "", "maybe_raise"], [113, 6, 1, "", "print_response"], [113, 6, 1, "", "process_kwargs"], [113, 6, 1, "", "streaming_common_header_errors"], [113, 6, 1, "", "streaming_common_lease_errors"]], "bosdyn.client.common.BaseClient": [[113, 3, 1, "", "call"], [113, 3, 1, "", "call_async"], [113, 3, 1, "", "call_async_streaming"], [113, 2, 1, "", "channel"], [113, 3, 1, "", "chunk_message"], [113, 3, 1, "", "handle_response"], [113, 3, 1, "", "handle_response_streaming"], [113, 3, 1, "", "request_trim_for_log"], [113, 3, 1, "", "response_trim_for_log"], [113, 3, 1, "", "update_from"], [113, 3, 1, "", "update_request_iterator"], [113, 3, 1, "", "update_response_iterator"]], "bosdyn.client.common.FutureWrapper": [[113, 3, 1, "", "add_done_callback"], [113, 3, 1, "", "cancel"], [113, 3, 1, "", "cancelled"], [113, 3, 1, "", "done"], [113, 3, 1, "", "exception"], [113, 3, 1, "", "result"], [113, 3, 1, "", "running"], [113, 3, 1, "", "traceback"]], "bosdyn.client.data_acquisition": [[114, 5, 1, "", "CancellationFailedError"], [114, 1, 1, "", "DataAcquisitionClient"], [114, 5, 1, "", "DataAcquisitionResponseError"], [114, 5, 1, "", "RequestIdDoesNotExistError"], [114, 5, 1, "", "UnknownCaptureTypeError"], [114, 6, 1, "", "acquire_data_error"], [114, 6, 1, "", "get_request_id"], [114, 6, 1, "", "metadata_to_proto"]], "bosdyn.client.data_acquisition.DataAcquisitionClient": [[114, 3, 1, "", "acquire_data"], [114, 3, 1, "", "acquire_data_async"], [114, 3, 1, "", "acquire_data_from_request"], [114, 3, 1, "", "acquire_data_from_request_async"], [114, 3, 1, "", "cancel_acquisition"], [114, 3, 1, "", "cancel_acquisition_async"], [114, 4, 1, "", "default_service_name"], [114, 3, 1, "", "get_live_data"], [114, 3, 1, "", "get_live_data_async"], [114, 3, 1, "", "get_service_info"], [114, 3, 1, "", "get_service_info_async"], [114, 3, 1, "", "get_status"], [114, 3, 1, "", "get_status_async"], [114, 3, 1, "", "make_acquire_data_request"], [114, 4, 1, "", "service_type"], [114, 3, 1, "", "update_from"]], "bosdyn.client.data_acquisition_helpers": [[115, 6, 1, "", "acquire_and_process_request"], [115, 6, 1, "", "cancel_acquisition_request"], [115, 6, 1, "", "clean_filename"], [115, 6, 1, "", "download_data_REST"], [115, 6, 1, "", "issue_acquire_data_request"], [115, 6, 1, "", "make_time_query_params"], [115, 6, 1, "", "make_time_query_params_from_group_name"]], "bosdyn.client.data_acquisition_plugin": [[116, 1, 1, "", "DataAcquisitionPluginClient"]], "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient": [[116, 3, 1, "", "acquire_plugin_data"], [116, 3, 1, "", "acquire_plugin_data_async"], [116, 3, 1, "", "cancel_acquisition"], [116, 3, 1, "", "cancel_acquisition_async"], [116, 4, 1, "", "default_service_name"], [116, 3, 1, "", "get_live_data"], [116, 3, 1, "", "get_live_data_async"], [116, 3, 1, "", "get_service_info"], [116, 3, 1, "", "get_service_info_async"], [116, 3, 1, "", "get_status"], [116, 3, 1, "", "get_status_async"], [116, 4, 1, "", "service_type"], [116, 3, 1, "", "update_from"]], "bosdyn.client.data_acquisition_plugin_service": [[117, 1, 1, "", "DataAcquisitionPluginService"], [117, 1, 1, "", "DataAcquisitionStoreHelper"], [117, 5, 1, "", "RequestCancelledError"], [117, 1, 1, "", "RequestManager"], [117, 1, 1, "", "RequestState"], [117, 6, 1, "", "make_error"]], "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService": [[117, 3, 1, "", "AcquirePluginData"], [117, 3, 1, "", "CancelAcquisition"], [117, 3, 1, "", "GetLiveData"], [117, 3, 1, "", "GetServiceInfo"], [117, 3, 1, "", "GetStatus"], [117, 4, 1, "", "acquire_response_fn"], [117, 4, 1, "", "capabilities"], [117, 4, 1, "", "data_collect_fn"], [117, 4, 1, "", "executor"], [117, 4, 1, "", "live_response_fn"], [117, 4, 1, "", "logger"], [117, 4, 1, "", "request_manager"], [117, 4, 1, "", "robot"], [117, 4, 1, "", "service_type"], [117, 4, 1, "", "store_client"], [117, 3, 1, "", "validate_params"]], "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper": [[117, 3, 1, "", "cancel_check"], [117, 4, 1, "", "cancel_interval"], [117, 4, 1, "", "data_id_future_pairs"], [117, 4, 1, "", "state"], [117, 4, 1, "", "store_client"], [117, 3, 1, "", "store_data"], [117, 3, 1, "", "store_data_as_chunks"], [117, 3, 1, "", "store_file"], [117, 3, 1, "", "store_image"], [117, 3, 1, "", "store_metadata"], [117, 3, 1, "", "wait_for_stores_complete"]], "bosdyn.client.data_acquisition_plugin_service.RequestManager": [[117, 3, 1, "", "add_request"], [117, 3, 1, "", "cleanup_requests"], [117, 3, 1, "", "get_request_state"], [117, 3, 1, "", "get_status_proto"], [117, 3, 1, "", "mark_request_cancelled"], [117, 3, 1, "", "mark_request_finished"]], "bosdyn.client.data_acquisition_plugin_service.RequestState": [[117, 3, 1, "", "add_errors"], [117, 3, 1, "", "add_saved"], [117, 3, 1, "", "cancel_check"], [117, 3, 1, "", "has_data_errors"], [117, 3, 1, "", "is_cancelled"], [117, 4, 1, "", "kNonError"], [117, 3, 1, "", "set_complete_if_no_error"], [117, 3, 1, "", "set_status"]], "bosdyn.client.data_acquisition_store": [[118, 1, 1, "", "DataAcquisitionStoreClient"]], "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient": [[118, 4, 1, "", "default_service_name"], [118, 3, 1, "", "list_capture_actions"], [118, 3, 1, "", "list_capture_actions_async"], [118, 3, 1, "", "list_stored_alertdata"], [118, 3, 1, "", "list_stored_alertdata_async"], [118, 3, 1, "", "list_stored_data"], [118, 3, 1, "", "list_stored_data_async"], [118, 3, 1, "", "list_stored_images"], [118, 3, 1, "", "list_stored_images_async"], [118, 3, 1, "", "list_stored_metadata"], [118, 3, 1, "", "list_stored_metadata_async"], [118, 3, 1, "", "query_max_capture_id"], [118, 3, 1, "", "query_max_capture_id_async"], [118, 3, 1, "", "query_stored_captures"], [118, 3, 1, "", "query_stored_captures_async"], [118, 4, 1, "", "service_type"], [118, 3, 1, "", "store_alertdata"], [118, 3, 1, "", "store_alertdata_async"], [118, 3, 1, "", "store_data"], [118, 3, 1, "", "store_data_as_chunks"], [118, 3, 1, "", "store_data_as_chunks_async"], [118, 3, 1, "", "store_data_async"], [118, 3, 1, "", "store_file"], [118, 3, 1, "", "store_file_async"], [118, 3, 1, "", "store_image"], [118, 3, 1, "", "store_image_async"], [118, 3, 1, "", "store_metadata"], [118, 3, 1, "", "store_metadata_async"], [118, 3, 1, "", "update_from"]], "bosdyn.client.data_buffer": [[119, 1, 1, "", "DataBufferClient"], [119, 5, 1, "", "InvalidArgument"], [119, 1, 1, "", "LoggingHandler"], [119, 6, 1, "", "is_not_rpc"], [119, 6, 1, "", "is_not_text_log"], [119, 6, 1, "", "log_event"], [119, 6, 1, "", "make_parameter"]], "bosdyn.client.data_buffer.DataBufferClient": [[119, 3, 1, "", "add_blob"], [119, 3, 1, "", "add_blob_async"], [119, 3, 1, "", "add_events"], [119, 3, 1, "", "add_events_async"], [119, 3, 1, "", "add_operator_comment"], [119, 3, 1, "", "add_operator_comment_async"], [119, 3, 1, "", "add_protobuf"], [119, 3, 1, "", "add_protobuf_async"], [119, 3, 1, "", "add_signal_tick"], [119, 3, 1, "", "add_signal_tick_async"], [119, 3, 1, "", "add_text_messages"], [119, 3, 1, "", "add_text_messages_async"], [119, 4, 1, "", "default_service_name"], [119, 3, 1, "", "now_in_robot_basis"], [119, 3, 1, "", "register_signal_schema"], [119, 3, 1, "", "register_signal_schema_async"], [119, 4, 1, "", "service_type"], [119, 3, 1, "", "update_from"]], "bosdyn.client.data_buffer.LoggingHandler": [[119, 3, 1, "", "close"], [119, 3, 1, "", "emit"], [119, 3, 1, "", "fallback_log"], [119, 3, 1, "", "flush"], [119, 3, 1, "", "is_thread_alive"], [119, 3, 1, "", "record_level_to_proto_level"], [119, 3, 1, "", "record_to_msg"], [119, 3, 1, "", "restart"]], "bosdyn.client.data_chunk": [[120, 6, 1, "", "chunk_message"], [120, 6, 1, "", "chunk_serialized"], [120, 6, 1, "", "parse_from_chunks"], [120, 6, 1, "", "serialized_from_chunks"], [120, 6, 1, "", "serialized_from_messages"], [120, 6, 1, "", "serialized_from_strings"], [120, 6, 1, "", "split_serialized"]], "bosdyn.client.data_service": [[121, 1, 1, "", "DataServiceClient"], [121, 5, 1, "", "InvalidArgument"]], "bosdyn.client.data_service.DataServiceClient": [[121, 4, 1, "", "default_service_name"], [121, 3, 1, "", "delete_data_pages"], [121, 3, 1, "", "delete_data_pages_async"], [121, 3, 1, "", "get_data_buffer_status"], [121, 3, 1, "", "get_data_buffer_status_async"], [121, 3, 1, "", "get_data_index"], [121, 3, 1, "", "get_data_index_async"], [121, 3, 1, "", "get_data_pages"], [121, 3, 1, "", "get_data_pages_async"], [121, 3, 1, "", "get_events_comments"], [121, 3, 1, "", "get_events_comments_async"], [121, 4, 1, "", "service_type"], [121, 3, 1, "", "update_from"]], "bosdyn.client.directory": [[122, 1, 1, "", "DirectoryClient"], [122, 5, 1, "", "DirectoryResponseError"], [122, 5, 1, "", "NonexistentServiceError"]], "bosdyn.client.directory.DirectoryClient": [[122, 4, 1, "", "default_service_name"], [122, 3, 1, "", "get_entry"], [122, 3, 1, "", "get_entry_async"], [122, 3, 1, "", "list"], [122, 3, 1, "", "list_async"], [122, 4, 1, "", "service_type"]], "bosdyn.client.directory_registration": [[123, 1, 1, "", "DirectoryRegistrationClient"], [123, 1, 1, "", "DirectoryRegistrationKeepAlive"], [123, 5, 1, "", "DirectoryRegistrationResponseError"], [123, 5, 1, "", "ServiceAlreadyExistsError"], [123, 5, 1, "", "ServiceDoesNotExistError"], [123, 6, 1, "", "reset_service_registration"]], "bosdyn.client.directory_registration.DirectoryRegistrationClient": [[123, 4, 1, "", "default_service_name"], [123, 3, 1, "", "register"], [123, 4, 1, "", "service_type"], [123, 3, 1, "", "unregister"], [123, 3, 1, "", "update"]], "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive": [[123, 3, 1, "", "is_alive"], [123, 3, 1, "", "shutdown"], [123, 3, 1, "", "start"], [123, 3, 1, "", "unregister"]], "bosdyn.client.docking": [[124, 1, 1, "", "DockingClient"], [124, 6, 1, "", "blocking_dock_robot"], [124, 6, 1, "", "blocking_go_to_prep_pose"], [124, 6, 1, "", "blocking_undock"], [124, 6, 1, "", "get_dock_id"]], "bosdyn.client.docking.DockingClient": [[124, 4, 1, "", "default_service_name"], [124, 3, 1, "", "docking_command"], [124, 3, 1, "", "docking_command_async"], [124, 3, 1, "", "docking_command_feedback"], [124, 3, 1, "", "docking_command_feedback_async"], [124, 3, 1, "", "docking_command_feedback_full"], [124, 3, 1, "", "docking_command_feedback_full_async"], [124, 3, 1, "", "docking_command_full"], [124, 3, 1, "", "docking_command_full_async"], [124, 3, 1, "", "get_docking_config"], [124, 3, 1, "", "get_docking_config_async"], [124, 3, 1, "", "get_docking_state"], [124, 3, 1, "", "get_docking_state_async"], [124, 4, 1, "", "service_type"], [124, 3, 1, "", "update_from"]], "bosdyn.client.door": [[125, 1, 1, "", "DoorClient"]], "bosdyn.client.door.DoorClient": [[125, 4, 1, "", "default_service_name"], [125, 3, 1, "", "open_door"], [125, 3, 1, "", "open_door_async"], [125, 3, 1, "", "open_door_feedback"], [125, 3, 1, "", "open_door_feedback_async"], [125, 4, 1, "", "service_type"], [125, 3, 1, "", "update_from"]], "bosdyn.client.estop": [[126, 5, 1, "", "ConfigMismatchError"], [126, 5, 1, "", "EndpointMismatchError"], [126, 5, 1, "", "EndpointUnknownError"], [126, 1, 1, "", "EstopClient"], [126, 1, 1, "", "EstopEndpoint"], [126, 1, 1, "", "EstopKeepAlive"], [126, 5, 1, "", "EstopResponseError"], [126, 5, 1, "", "IncorrectChallengeResponseError"], [126, 5, 1, "", "InvalidEndpointError"], [126, 5, 1, "", "InvalidIdError"], [126, 5, 1, "", "MotorsOnError"], [126, 1, 1, "", "StopLevel"], [126, 6, 1, "", "is_estopped"], [126, 6, 1, "", "response_from_challenge"]], "bosdyn.client.estop.EstopClient": [[126, 3, 1, "", "check_in"], [126, 3, 1, "", "check_in_async"], [126, 4, 1, "", "default_service_name"], [126, 3, 1, "", "deregister"], [126, 3, 1, "", "deregister_async"], [126, 3, 1, "", "get_config"], [126, 3, 1, "", "get_config_async"], [126, 3, 1, "", "get_status"], [126, 3, 1, "", "get_status_async"], [126, 3, 1, "", "register"], [126, 3, 1, "", "register_async"], [126, 4, 1, "", "service_type"], [126, 3, 1, "", "set_config"], [126, 3, 1, "", "set_config_async"]], "bosdyn.client.estop.EstopEndpoint": [[126, 4, 1, "", "REQUIRED_ROLE"], [126, 3, 1, "", "allow"], [126, 3, 1, "", "allow_async"], [126, 3, 1, "", "check_in_at_level"], [126, 3, 1, "", "check_in_at_level_async"], [126, 3, 1, "", "deregister"], [126, 3, 1, "", "deregister_async"], [126, 3, 1, "", "force_simple_setup"], [126, 3, 1, "", "from_proto"], [126, 3, 1, "", "get_challenge"], [126, 2, 1, "", "last_set_level"], [126, 3, 1, "", "register"], [126, 3, 1, "", "set_challenge"], [126, 3, 1, "", "settle_then_cut"], [126, 3, 1, "", "settle_then_cut_async"], [126, 3, 1, "", "stop"], [126, 3, 1, "", "stop_async"], [126, 3, 1, "", "to_proto"], [126, 2, 1, "", "unique_id"]], "bosdyn.client.estop.EstopKeepAlive": [[126, 1, 1, "", "KeepAliveStatus"], [126, 3, 1, "", "allow"], [126, 2, 1, "", "client"], [126, 2, 1, "", "endpoint"], [126, 2, 1, "", "last_set_level"], [126, 2, 1, "", "logger"], [126, 3, 1, "", "settle_then_cut"], [126, 3, 1, "", "shutdown"], [126, 3, 1, "", "stop"]], "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus": [[126, 4, 1, "", "DISABLED"], [126, 4, 1, "", "ERROR"], [126, 4, 1, "", "OK"]], "bosdyn.client.estop.StopLevel": [[126, 4, 1, "", "ESTOP_LEVEL_CUT"], [126, 4, 1, "", "ESTOP_LEVEL_NONE"], [126, 4, 1, "", "ESTOP_LEVEL_SETTLE_THEN_CUT"], [126, 4, 1, "", "ESTOP_LEVEL_UNKNOWN"]], "bosdyn.client.exceptions": [[127, 5, 1, "", "ClientCancelledOperationError"], [127, 5, 1, "", "CustomParamError"], [127, 5, 1, "", "Error"], [127, 5, 1, "", "InternalServerError"], [127, 5, 1, "", "InvalidClientCertificateError"], [127, 5, 1, "", "InvalidRequestError"], [127, 5, 1, "", "LeaseUseError"], [127, 5, 1, "", "LicenseError"], [127, 5, 1, "", "NonexistentAuthorityError"], [127, 5, 1, "", "NotFoundError"], [127, 5, 1, "", "PermissionDeniedError"], [127, 5, 1, "", "PersistentRpcError"], [127, 5, 1, "", "ProxyConnectionError"], [127, 5, 1, "", "ResponseError"], [127, 5, 1, "", "ResponseTooLargeError"], [127, 5, 1, "", "RetryableRpcError"], [127, 5, 1, "", "RetryableUnavailableError"], [127, 5, 1, "", "RpcError"], [127, 5, 1, "", "ServerError"], [127, 5, 1, "", "ServiceFailedDuringExecutionError"], [127, 5, 1, "", "ServiceUnavailableError"], [127, 5, 1, "", "TimeSyncRequired"], [127, 5, 1, "", "TimedOutError"], [127, 5, 1, "", "TooManyRequestsError"], [127, 5, 1, "", "TransientFailureError"], [127, 5, 1, "", "UnableToConnectToRobotError"], [127, 5, 1, "", "UnauthenticatedError"], [127, 5, 1, "", "UnimplementedError"], [127, 5, 1, "", "UnknownDnsNameError"], [127, 5, 1, "", "UnsetStatusError"]], "bosdyn.client.fault": [[128, 1, 1, "", "FaultClient"], [128, 5, 1, "", "FaultResponseError"], [128, 5, 1, "", "ServiceFaultAlreadyExistsError"], [128, 5, 1, "", "ServiceFaultDoesNotExistError"]], "bosdyn.client.fault.FaultClient": [[128, 3, 1, "", "clear_service_fault"], [128, 3, 1, "", "clear_service_fault_async"], [128, 4, 1, "", "default_service_name"], [128, 4, 1, "", "service_type"], [128, 3, 1, "", "trigger_service_fault"], [128, 3, 1, "", "trigger_service_fault_async"]], "bosdyn.client.frame_helpers": [[129, 5, 1, "", "ChildFrameInTree"], [129, 5, 1, "", "Error"], [129, 5, 1, "", "GenerateTreeError"], [129, 5, 1, "", "ValidateFrameTreeCycleError"], [129, 5, 1, "", "ValidateFrameTreeDisjointError"], [129, 5, 1, "", "ValidateFrameTreeError"], [129, 5, 1, "", "ValidateFrameTreeUnknownFrameError"], [129, 6, 1, "", "add_edge_to_tree"], [129, 6, 1, "", "express_se2_velocity_in_new_frame"], [129, 6, 1, "", "express_se3_velocity_in_new_frame"], [129, 6, 1, "", "get_a_tform_b"], [129, 6, 1, "", "get_frame_names"], [129, 6, 1, "", "get_odom_tform_body"], [129, 6, 1, "", "get_se2_a_tform_b"], [129, 6, 1, "", "get_vision_tform_body"], [129, 6, 1, "", "is_gravity_aligned_frame_name"], [129, 6, 1, "", "validate_frame_tree_snapshot"]], "bosdyn.client.gps": [[130, 0, 0, "-", "NMEAParser"], [132, 0, 0, "-", "aggregator_client"], [133, 0, 0, "-", "gps_listener"], [134, 0, 0, "-", "registration_client"]], "bosdyn.client.gps.NMEAParser": [[130, 1, 1, "", "NMEAParser"]], "bosdyn.client.gps.NMEAParser.NMEAParser": [[130, 4, 1, "", "LOG_THROTTLE_TIME"], [130, 3, 1, "", "nmea_message_group_to_gps_data_point"], [130, 3, 1, "", "parse"]], "bosdyn.client.gps.aggregator_client": [[132, 1, 1, "", "AggregatorClient"]], "bosdyn.client.gps.aggregator_client.AggregatorClient": [[132, 4, 1, "", "default_service_name"], [132, 3, 1, "", "new_gps_data"], [132, 3, 1, "", "new_gps_data_async"], [132, 4, 1, "", "service_type"]], "bosdyn.client.gps.gps_listener": [[133, 1, 1, "", "GpsListener"], [133, 1, 1, "", "NMEAStreamReader"]], "bosdyn.client.gps.gps_listener.GpsListener": [[133, 3, 1, "", "run"]], "bosdyn.client.gps.gps_listener.NMEAStreamReader": [[133, 4, 1, "", "LOG_THROTTLE_TIME"], [133, 3, 1, "", "read_data"]], "bosdyn.client.gps.registration_client": [[134, 1, 1, "", "RegistrationClient"]], "bosdyn.client.gps.registration_client.RegistrationClient": [[134, 4, 1, "", "default_service_name"], [134, 3, 1, "", "get_location"], [134, 3, 1, "", "get_location_async"], [134, 3, 1, "", "reset_registration"], [134, 3, 1, "", "reset_registration_async"], [134, 4, 1, "", "service_type"]], "bosdyn.client.graph_nav": [[135, 5, 1, "", "AreaCallbackMapError"], [135, 5, 1, "", "CannotModifyMapDuringRecordingError"], [135, 5, 1, "", "CommandExpiredError"], [135, 5, 1, "", "ConstraintFaultError"], [135, 5, 1, "", "FeatureDesertError"], [135, 1, 1, "", "GraphNavClient"], [135, 5, 1, "", "GraphNavServiceResponseError"], [135, 5, 1, "", "IncompatibleSensorsError"], [135, 5, 1, "", "InvalidEdgeError"], [135, 5, 1, "", "InvalidGPSError"], [135, 5, 1, "", "InvalidGraphError"], [135, 5, 1, "", "InvalidPoseError"], [135, 5, 1, "", "IsRecordingError"], [135, 5, 1, "", "MapTooLargeLicenseError"], [135, 5, 1, "", "NoAnchoringError"], [135, 5, 1, "", "NoPathError"], [135, 5, 1, "", "NoTimeSyncError"], [135, 5, 1, "", "RequestAbortedError"], [135, 5, 1, "", "RequestFailedError"], [135, 5, 1, "", "RobotFaultedError"], [135, 5, 1, "", "RobotImpairedError"], [135, 5, 1, "", "RobotLostError"], [135, 5, 1, "", "RobotNotLocalizedToRouteError"], [135, 5, 1, "", "RobotStateError"], [135, 5, 1, "", "RobotStuckError"], [135, 5, 1, "", "RouteError"], [135, 5, 1, "", "RouteNavigationError"], [135, 5, 1, "", "RouteNotUpdatingError"], [135, 5, 1, "", "TimeError"], [135, 5, 1, "", "TooDistantError"], [135, 5, 1, "", "UnknownMapInformationError"], [135, 5, 1, "", "UnknownRouteElementsError"], [135, 5, 1, "", "UnknownWaypointError"], [135, 5, 1, "", "UnkownRouteElementsError"], [135, 5, 1, "", "UnrecognizedCommandError"], [135, 5, 1, "", "UnrecongizedCommandError"], [135, 5, 1, "", "UploadGraphError"], [135, 5, 1, "", "UploadWaypointSnapshotError"]], "bosdyn.client.graph_nav.GraphNavClient": [[135, 3, 1, "", "build_route"], [135, 3, 1, "", "clear_graph"], [135, 3, 1, "", "clear_graph_async"], [135, 4, 1, "", "default_service_name"], [135, 3, 1, "", "download_edge_snapshot"], [135, 3, 1, "", "download_graph"], [135, 3, 1, "", "download_graph_async"], [135, 3, 1, "", "download_waypoint_snapshot"], [135, 3, 1, "", "generate_travel_params"], [135, 3, 1, "", "get_localization_state"], [135, 3, 1, "", "get_localization_state_async"], [135, 3, 1, "", "navigate_route"], [135, 3, 1, "", "navigate_route_async"], [135, 3, 1, "", "navigate_route_full"], [135, 3, 1, "", "navigate_route_full_async"], [135, 3, 1, "", "navigate_to"], [135, 3, 1, "", "navigate_to_anchor"], [135, 3, 1, "", "navigate_to_anchor_async"], [135, 3, 1, "", "navigate_to_async"], [135, 3, 1, "", "navigate_to_full"], [135, 3, 1, "", "navigate_to_full_async"], [135, 3, 1, "", "navigation_feedback"], [135, 3, 1, "", "navigation_feedback_async"], [135, 4, 1, "", "service_type"], [135, 3, 1, "", "set_localization"], [135, 3, 1, "", "set_localization_async"], [135, 3, 1, "", "set_localization_async_full_response"], [135, 3, 1, "", "set_localization_full_response"], [135, 3, 1, "", "update_from"], [135, 3, 1, "", "upload_edge_snapshot"], [135, 3, 1, "", "upload_graph"], [135, 3, 1, "", "upload_graph_async"], [135, 3, 1, "", "upload_waypoint_snapshot"], [135, 3, 1, "", "write_graph_and_snapshots"]], "bosdyn.client.gripper_camera_param": [[136, 1, 1, "", "GripperCameraParamClient"]], "bosdyn.client.gripper_camera_param.GripperCameraParamClient": [[136, 4, 1, "", "default_service_name"], [136, 3, 1, "", "get_camera_params"], [136, 3, 1, "", "get_camera_params_async"], [136, 4, 1, "", "service_type"], [136, 3, 1, "", "set_camera_params"], [136, 3, 1, "", "set_camera_params_async"]], "bosdyn.client.image": [[137, 1, 1, "", "ImageClient"], [137, 5, 1, "", "ImageDataError"], [137, 5, 1, "", "ImageResponseError"], [137, 5, 1, "", "SourceDataError"], [137, 5, 1, "", "UnknownImageSourceError"], [137, 5, 1, "", "UnsupportedImageFormatRequestedError"], [137, 5, 1, "", "UnsupportedPixelFormatRequestedError"], [137, 5, 1, "", "UnsupportedResizeRatioRequestedError"], [137, 6, 1, "", "build_image_request"], [137, 6, 1, "", "depth_image_to_pointcloud"], [137, 6, 1, "", "pixel_to_camera_space"], [137, 6, 1, "", "save_images_as_files"], [137, 6, 1, "", "write_image_data"], [137, 6, 1, "", "write_pgm_or_ppm"]], "bosdyn.client.image.ImageClient": [[137, 4, 1, "", "default_service_name"], [137, 3, 1, "", "get_image"], [137, 3, 1, "", "get_image_async"], [137, 3, 1, "", "get_image_from_sources"], [137, 3, 1, "", "get_image_from_sources_async"], [137, 3, 1, "", "list_image_sources"], [137, 3, 1, "", "list_image_sources_async"], [137, 4, 1, "", "service_type"]], "bosdyn.client.image_service_helpers": [[138, 1, 1, "", "CameraBaseImageServicer"], [138, 1, 1, "", "CameraInterface"], [138, 1, 1, "", "ImageCaptureThread"], [138, 1, 1, "", "ThreadCaptureOutput"], [138, 1, 1, "", "VisualImageSource"], [138, 6, 1, "", "convert_RGB_to_grayscale"]], "bosdyn.client.image_service_helpers.CameraBaseImageServicer": [[138, 3, 1, "", "GetImage"], [138, 3, 1, "", "ListImageSources"]], "bosdyn.client.image_service_helpers.CameraInterface": [[138, 3, 1, "", "blocking_capture"], [138, 3, 1, "", "image_decode"]], "bosdyn.client.image_service_helpers.ImageCaptureThread": [[138, 3, 1, "", "get_latest_captured_image"], [138, 3, 1, "", "maybe_update_thread"], [138, 3, 1, "", "set_last_captured_image"], [138, 3, 1, "", "start_capturing"], [138, 3, 1, "", "stop_capturing"]], "bosdyn.client.image_service_helpers.VisualImageSource": [[138, 3, 1, "", "clear_fault"], [138, 3, 1, "", "create_capture_thread"], [138, 3, 1, "", "get_image_and_timestamp"], [138, 3, 1, "", "image_decode_with_error_checking"], [138, 3, 1, "", "initialize_faults"], [138, 3, 1, "", "make_capture_parameters"], [138, 3, 1, "", "make_image_source"], [138, 3, 1, "", "set_logger"], [138, 3, 1, "", "stop_capturing"], [138, 3, 1, "", "trigger_fault"]], "bosdyn.client.inverse_kinematics": [[139, 1, 1, "", "InverseKinematicsClient"]], "bosdyn.client.inverse_kinematics.InverseKinematicsClient": [[139, 4, 1, "", "default_service_name"], [139, 3, 1, "", "inverse_kinematics"], [139, 3, 1, "", "inverse_kinematics_async"], [139, 4, 1, "", "service_type"]], "bosdyn.client.ir_enable_disable": [[140, 1, 1, "", "IREnableDisableServiceClient"]], "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient": [[140, 4, 1, "", "default_service_name"], [140, 4, 1, "", "service_type"], [140, 3, 1, "", "set_ir_enabled"], [140, 3, 1, "", "set_ir_enabled_async"]], "bosdyn.client.keepalive": [[141, 5, 1, "", "InvalidLeaseError"], [141, 5, 1, "", "InvalidPolicyError"], [141, 1, 1, "", "KeepaliveClient"], [141, 5, 1, "", "KeepaliveResponseError"], [141, 1, 1, "", "Policy"], [141, 1, 1, "", "PolicyKeepalive"], [141, 6, 1, "", "check_in_error"], [141, 6, 1, "", "modify_policy_error"], [141, 6, 1, "", "remove_all_policies"]], "bosdyn.client.keepalive.KeepaliveClient": [[141, 3, 1, "", "check_in"], [141, 3, 1, "", "check_in_async"], [141, 4, 1, "", "default_service_name"], [141, 3, 1, "", "get_status"], [141, 3, 1, "", "get_status_async"], [141, 3, 1, "", "modify_policy"], [141, 3, 1, "", "modify_policy_async"], [141, 4, 1, "", "service_type"]], "bosdyn.client.keepalive.Policy": [[141, 3, 1, "", "add_associated_lease"], [141, 3, 1, "", "add_auto_return_action"], [141, 3, 1, "", "add_controlled_motors_off_action"], [141, 3, 1, "", "add_immediate_robot_off_action"], [141, 3, 1, "", "add_lease_stale_action"], [141, 3, 1, "", "add_record_event_action"], [141, 2, 1, "", "name"], [141, 3, 1, "", "shortest_action_delay"]], "bosdyn.client.keepalive.PolicyKeepalive": [[141, 3, 1, "", "remove_policy"], [141, 3, 1, "", "shutdown"], [141, 3, 1, "", "start"]], "bosdyn.client.lease": [[142, 5, 1, "", "DisplacedLeaseError"], [142, 5, 1, "", "Error"], [142, 5, 1, "", "InvalidLeaseError"], [142, 5, 1, "", "InvalidResourceError"], [142, 1, 1, "", "Lease"], [142, 1, 1, "", "LeaseClient"], [142, 1, 1, "", "LeaseKeepAlive"], [142, 5, 1, "", "LeaseNotOwnedByWallet"], [142, 5, 1, "", "LeaseResponseError"], [142, 1, 1, "", "LeaseState"], [142, 1, 1, "", "LeaseWallet"], [142, 1, 1, "", "LeaseWalletRequestProcessor"], [142, 1, 1, "", "LeaseWalletResponseProcessor"], [142, 5, 1, "", "NoSuchLease"], [142, 5, 1, "", "NotActiveLeaseError"], [142, 5, 1, "", "NotAuthoritativeServiceError"], [142, 5, 1, "", "ResourceAlreadyClaimedError"], [142, 5, 1, "", "RevokedLeaseError"], [142, 5, 1, "", "UnmanagedResourceError"], [142, 5, 1, "", "WrongEpochError"], [142, 6, 1, "", "add_lease_wallet_processors"], [142, 6, 1, "", "test_active_lease"]], "bosdyn.client.lease.Lease": [[142, 1, 1, "", "CompareResult"], [142, 3, 1, "", "compare"], [142, 3, 1, "", "compare_result_to_lease_use_result_status"], [142, 3, 1, "", "create_newer"], [142, 3, 1, "", "create_sublease"], [142, 3, 1, "", "is_valid_lease"], [142, 3, 1, "", "is_valid_proto"]], "bosdyn.client.lease.Lease.CompareResult": [[142, 4, 1, "", "DIFFERENT_EPOCHS"], [142, 4, 1, "", "DIFFERENT_RESOURCES"], [142, 4, 1, "", "NEWER"], [142, 4, 1, "", "OLDER"], [142, 4, 1, "", "SAME"], [142, 4, 1, "", "SUB_LEASE"], [142, 4, 1, "", "SUPER_LEASE"]], "bosdyn.client.lease.LeaseClient": [[142, 3, 1, "", "acquire"], [142, 3, 1, "", "acquire_async"], [142, 4, 1, "", "default_service_name"], [142, 3, 1, "", "list_leases"], [142, 3, 1, "", "list_leases_async"], [142, 3, 1, "", "list_leases_full"], [142, 3, 1, "", "list_leases_full_async"], [142, 3, 1, "", "retain_lease"], [142, 3, 1, "", "retain_lease_async"], [142, 3, 1, "", "return_lease"], [142, 3, 1, "", "return_lease_async"], [142, 4, 1, "", "service_type"], [142, 3, 1, "", "take"], [142, 3, 1, "", "take_async"]], "bosdyn.client.lease.LeaseKeepAlive": [[142, 3, 1, "", "is_alive"], [142, 2, 1, "", "lease_wallet"], [142, 3, 1, "", "shutdown"], [142, 3, 1, "", "wait_until_done"]], "bosdyn.client.lease.LeaseState": [[142, 4, 1, "", "STATUS_NOT_MANAGED"], [142, 4, 1, "", "STATUS_OTHER_OWNER"], [142, 4, 1, "", "STATUS_REVOKED"], [142, 4, 1, "", "STATUS_SELF_OWNER"], [142, 4, 1, "", "STATUS_UNOWNED"], [142, 1, 1, "", "Status"], [142, 3, 1, "", "create_newer"], [142, 3, 1, "", "update_from_lease_use_result"]], "bosdyn.client.lease.LeaseState.Status": [[142, 4, 1, "", "NOT_MANAGED"], [142, 4, 1, "", "OTHER_OWNER"], [142, 4, 1, "", "REVOKED"], [142, 4, 1, "", "SELF_OWNER"], [142, 4, 1, "", "UNOWNED"]], "bosdyn.client.lease.LeaseWallet": [[142, 3, 1, "", "add"], [142, 3, 1, "", "advance"], [142, 3, 1, "", "get_lease"], [142, 3, 1, "", "get_lease_state"], [142, 3, 1, "", "on_lease_use_result"], [142, 3, 1, "", "remove"], [142, 3, 1, "", "set_client_name"]], "bosdyn.client.lease.LeaseWalletRequestProcessor": [[142, 3, 1, "", "get_lease_state"], [142, 3, 1, "", "mutate"]], "bosdyn.client.lease.LeaseWalletResponseProcessor": [[142, 3, 1, "", "mutate"]], "bosdyn.client.lease_resource_hierarchy": [[143, 1, 1, "", "ResourceHierarchy"]], "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy": [[143, 3, 1, "", "get_hierarchy"], [143, 3, 1, "", "get_resource"], [143, 3, 1, "", "get_resource_tree"], [143, 3, 1, "", "has_resource"], [143, 3, 1, "", "has_sub_resources"], [143, 3, 1, "", "leaf_resources"]], "bosdyn.client.lease_validator": [[144, 1, 1, "", "LeaseValidator"], [144, 1, 1, "", "LeaseValidatorResponseProcessor"]], "bosdyn.client.lease_validator.LeaseValidator": [[144, 3, 1, "", "get_active_lease"], [144, 3, 1, "", "test_active_lease"], [144, 3, 1, "", "test_and_set_active_lease"]], "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor": [[144, 3, 1, "", "mutate"]], "bosdyn.client.license": [[145, 1, 1, "", "LicenseClient"]], "bosdyn.client.license.LicenseClient": [[145, 4, 1, "", "default_service_name"], [145, 3, 1, "", "get_feature_enabled"], [145, 3, 1, "", "get_license_info"], [145, 4, 1, "", "service_type"]], "bosdyn.client.local_grid": [[146, 1, 1, "", "LocalGridClient"]], "bosdyn.client.local_grid.LocalGridClient": [[146, 4, 1, "", "default_service_name"], [146, 3, 1, "", "get_local_grid_types"], [146, 3, 1, "", "get_local_grid_types_async"], [146, 3, 1, "", "get_local_grids"], [146, 3, 1, "", "get_local_grids_async"], [146, 4, 1, "", "service_type"]], "bosdyn.client.log_status": [[147, 5, 1, "", "ConcurrencyLimitReachedError"], [147, 5, 1, "", "ExperimentAlreadyRunningError"], [147, 5, 1, "", "InactiveLogError"], [147, 1, 1, "", "LogStatusClient"], [147, 5, 1, "", "LogStatusResponseError"], [147, 5, 1, "", "RequestIdDoesNotExistError"], [147, 6, 1, "", "get_active_log_statuses_error"], [147, 6, 1, "", "get_log_status_error"], [147, 6, 1, "", "start_experiment_log_error"], [147, 6, 1, "", "start_retro_log_error"], [147, 6, 1, "", "terminate_log_error"], [147, 6, 1, "", "update_experiment_log_error"]], "bosdyn.client.log_status.LogStatusClient": [[147, 4, 1, "", "default_service_name"], [147, 3, 1, "", "get_active_log_statuses"], [147, 3, 1, "", "get_active_log_statuses_async"], [147, 3, 1, "", "get_log_status"], [147, 3, 1, "", "get_log_status_async"], [147, 4, 1, "", "service_type"], [147, 3, 1, "", "start_experiment_log"], [147, 3, 1, "", "start_experiment_log_async"], [147, 3, 1, "", "start_retro_log"], [147, 3, 1, "", "start_retro_log_async"], [147, 3, 1, "", "terminate_log"], [147, 3, 1, "", "terminate_log_async"], [147, 3, 1, "", "update_experiment"], [147, 3, 1, "", "update_experiment_async"]], "bosdyn.client.manipulation_api_client": [[148, 1, 1, "", "ManipulationApiClient"]], "bosdyn.client.manipulation_api_client.ManipulationApiClient": [[148, 4, 1, "", "default_service_name"], [148, 3, 1, "", "grasp_override_command"], [148, 3, 1, "", "grasp_override_command_async"], [148, 3, 1, "", "manipulation_api_command"], [148, 3, 1, "", "manipulation_api_command_async"], [148, 3, 1, "", "manipulation_api_feedback_command"], [148, 3, 1, "", "manipulation_api_feedback_command_async"], [148, 4, 1, "", "service_type"], [148, 3, 1, "", "update_from"]], "bosdyn.client.map_processing": [[149, 5, 1, "", "ConstraintViolationError"], [149, 5, 1, "", "InvalidGraphError"], [149, 5, 1, "", "InvalidGravityAlignmentError"], [149, 5, 1, "", "InvalidHintsError"], [149, 5, 1, "", "InvalidParamsError"], [149, 5, 1, "", "MapModifiedError"], [149, 1, 1, "", "MapProcessingServiceClient"], [149, 5, 1, "", "MapProcessingServiceResponseError"], [149, 5, 1, "", "MaxIterationsError"], [149, 5, 1, "", "MaxTimeError"], [149, 5, 1, "", "MissingSnapshotsError"], [149, 5, 1, "", "OptimizationFailureError"]], "bosdyn.client.map_processing.MapProcessingServiceClient": [[149, 4, 1, "", "default_service_name"], [149, 3, 1, "", "process_anchoring"], [149, 3, 1, "", "process_topology"], [149, 4, 1, "", "service_type"]], "bosdyn.client.math_helpers": [[150, 1, 1, "", "Quat"], [150, 1, 1, "", "SE2Pose"], [150, 1, 1, "", "SE2Velocity"], [150, 1, 1, "", "SE3Pose"], [150, 1, 1, "", "SE3Velocity"], [150, 1, 1, "", "Vec2"], [150, 1, 1, "", "Vec3"], [150, 6, 1, "", "angle_diff"], [150, 6, 1, "", "angle_diff_degrees"], [150, 6, 1, "", "is_within_threshold"], [150, 6, 1, "", "pose_to_xyz_yaw"], [150, 6, 1, "", "quat_to_eulerZYX"], [150, 6, 1, "", "recenter_angle"], [150, 6, 1, "", "recenter_angle_mod"], [150, 6, 1, "", "recenter_value_mod"], [150, 6, 1, "", "skew_matrix_2d"], [150, 6, 1, "", "skew_matrix_3d"], [150, 6, 1, "", "transform_se2velocity"], [150, 6, 1, "", "transform_se3velocity"]], "bosdyn.client.math_helpers.Quat": [[150, 3, 1, "", "closest_yaw_only_quaternion"], [150, 3, 1, "", "conj"], [150, 3, 1, "", "from_matrix"], [150, 3, 1, "", "from_obj"], [150, 3, 1, "", "from_pitch"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "from_roll"], [150, 3, 1, "", "from_two_vectors"], [150, 3, 1, "", "from_yaw"], [150, 3, 1, "", "inverse"], [150, 3, 1, "", "mult"], [150, 3, 1, "", "normalize"], [150, 3, 1, "", "slerp"], [150, 3, 1, "", "to_axis_angle"], [150, 3, 1, "", "to_matrix"], [150, 3, 1, "", "to_obj"], [150, 3, 1, "", "to_pitch"], [150, 3, 1, "", "to_proto"], [150, 3, 1, "", "to_roll"], [150, 3, 1, "", "to_yaw"], [150, 3, 1, "", "transform_point"], [150, 3, 1, "", "transform_vec3"]], "bosdyn.client.math_helpers.SE2Pose": [[150, 3, 1, "", "flatten"], [150, 3, 1, "", "from_matrix"], [150, 3, 1, "", "from_obj"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "get_closest_se3_transform"], [150, 3, 1, "", "inverse"], [150, 3, 1, "", "mult"], [150, 2, 1, "", "position"], [150, 3, 1, "", "to_adjoint_matrix"], [150, 3, 1, "", "to_matrix"], [150, 3, 1, "", "to_obj"], [150, 3, 1, "", "to_proto"], [150, 3, 1, "", "to_rot_matrix"]], "bosdyn.client.math_helpers.SE2Velocity": [[150, 2, 1, "", "angular"], [150, 3, 1, "", "from_obj"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "from_vector"], [150, 2, 1, "", "linear"], [150, 3, 1, "", "to_obj"], [150, 3, 1, "", "to_proto"], [150, 3, 1, "", "to_vector"]], "bosdyn.client.math_helpers.SE3Pose": [[150, 3, 1, "", "from_identity"], [150, 3, 1, "", "from_matrix"], [150, 3, 1, "", "from_obj"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "from_se2"], [150, 3, 1, "", "get_closest_se2_transform"], [150, 3, 1, "", "get_translation"], [150, 3, 1, "", "interp"], [150, 3, 1, "", "inverse"], [150, 3, 1, "", "mult"], [150, 2, 1, "", "position"], [150, 2, 1, "", "rotation"], [150, 3, 1, "", "to_adjoint_matrix"], [150, 3, 1, "", "to_matrix"], [150, 3, 1, "", "to_obj"], [150, 3, 1, "", "to_proto"], [150, 3, 1, "", "transform_cloud"], [150, 3, 1, "", "transform_cloud_from_matrix"], [150, 3, 1, "", "transform_point"], [150, 3, 1, "", "transform_vec3"]], "bosdyn.client.math_helpers.SE3Velocity": [[150, 2, 1, "", "angular"], [150, 3, 1, "", "from_obj"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "from_vector"], [150, 2, 1, "", "linear"], [150, 3, 1, "", "to_obj"], [150, 3, 1, "", "to_proto"], [150, 3, 1, "", "to_vector"]], "bosdyn.client.math_helpers.Vec2": [[150, 3, 1, "", "cross"], [150, 3, 1, "", "dot"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "length"], [150, 3, 1, "", "to_proto"]], "bosdyn.client.math_helpers.Vec3": [[150, 3, 1, "", "cross"], [150, 3, 1, "", "dot"], [150, 3, 1, "", "from_numpy"], [150, 3, 1, "", "from_proto"], [150, 3, 1, "", "length"], [150, 3, 1, "", "to_numpy"], [150, 3, 1, "", "to_proto"]], "bosdyn.client.metrics_logging": [[151, 1, 1, "", "MetricsLoggingClient"], [151, 5, 1, "", "MissingKeysError"], [151, 5, 1, "", "UnableToOptOutError"], [151, 6, 1, "", "make_parameter_update"]], "bosdyn.client.metrics_logging.MetricsLoggingClient": [[151, 4, 1, "", "default_service_name"], [151, 3, 1, "", "get_absolute_metric_snapshot"], [151, 3, 1, "", "get_absolute_metric_snapshot_async"], [151, 3, 1, "", "get_metrics"], [151, 3, 1, "", "get_metrics_async"], [151, 3, 1, "", "get_store_sequence_range"], [151, 3, 1, "", "get_store_sequence_range_async"], [151, 4, 1, "", "service_type"]], "bosdyn.client.network_compute_bridge_client": [[152, 5, 1, "", "ExternalServerError"], [152, 5, 1, "", "ExternalServiceNotFoundError"], [152, 5, 1, "", "NetworkComputeAnalysisFailedError"], [152, 1, 1, "", "NetworkComputeBridgeClient"], [152, 5, 1, "", "NetworkComputeRotationError"]], "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient": [[152, 4, 1, "", "default_service_name"], [152, 3, 1, "", "list_available_models"], [152, 3, 1, "", "list_available_models_async"], [152, 3, 1, "", "list_available_models_command"], [152, 3, 1, "", "list_available_models_command_async"], [152, 3, 1, "", "network_compute_bridge_command"], [152, 3, 1, "", "network_compute_bridge_command_async"], [152, 4, 1, "", "service_type"]], "bosdyn.client.payload": [[153, 1, 1, "", "PayloadClient"]], "bosdyn.client.payload.PayloadClient": [[153, 4, 1, "", "default_service_name"], [153, 3, 1, "", "list_payloads"], [153, 3, 1, "", "list_payloads_async"], [153, 4, 1, "", "service_type"]], "bosdyn.client.payload_registration": [[154, 5, 1, "", "InvalidPayloadCredentialsError"], [154, 5, 1, "", "PayloadAlreadyExistsError"], [154, 5, 1, "", "PayloadDoesNotExistError"], [154, 5, 1, "", "PayloadNotAuthorizedError"], [154, 1, 1, "", "PayloadRegistrationClient"], [154, 1, 1, "", "PayloadRegistrationKeepAlive"], [154, 5, 1, "", "PayloadRegistrationResponseError"]], "bosdyn.client.payload_registration.PayloadRegistrationClient": [[154, 3, 1, "", "attach_payload"], [154, 3, 1, "", "attach_payload_async"], [154, 4, 1, "", "default_service_name"], [154, 3, 1, "", "detach_payload"], [154, 3, 1, "", "detach_payload_async"], [154, 3, 1, "", "get_payload_auth_token"], [154, 3, 1, "", "register_payload"], [154, 3, 1, "", "register_payload_async"], [154, 4, 1, "", "service_type"], [154, 3, 1, "", "update_payload_version"], [154, 3, 1, "", "update_payload_version_async"]], "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive": [[154, 3, 1, "", "is_alive"], [154, 3, 1, "", "shutdown"], [154, 3, 1, "", "start"]], "bosdyn.client.point_cloud": [[155, 1, 1, "", "PointCloudClient"], [155, 5, 1, "", "PointCloudDataError"], [155, 5, 1, "", "PointCloudResponseError"], [155, 5, 1, "", "SourceDataError"], [155, 5, 1, "", "UnknownPointCloudSourceError"], [155, 6, 1, "", "build_pc_request"]], "bosdyn.client.point_cloud.PointCloudClient": [[155, 4, 1, "", "default_service_name"], [155, 3, 1, "", "get_point_cloud"], [155, 3, 1, "", "get_point_cloud_async"], [155, 3, 1, "", "get_point_cloud_from_sources"], [155, 3, 1, "", "get_point_cloud_from_sources_async"], [155, 3, 1, "", "list_point_cloud_sources"], [155, 3, 1, "", "list_point_cloud_sources_async"], [155, 4, 1, "", "service_type"]], "bosdyn.client.power": [[156, 5, 1, "", "BatteryMissingError"], [156, 5, 1, "", "CommandInProgressError"], [156, 5, 1, "", "CommandTimedOutError"], [156, 5, 1, "", "EstoppedError"], [156, 5, 1, "", "FanControlTemperatureError"], [156, 5, 1, "", "FaultedError"], [156, 5, 1, "", "KeepaliveMotorsOffError"], [156, 5, 1, "", "OverriddenError"], [156, 1, 1, "", "PowerClient"], [156, 5, 1, "", "PowerError"], [156, 5, 1, "", "PowerResponseError"], [156, 5, 1, "", "SafetyStopFailedError"], [156, 5, 1, "", "SafetyStopIncompatibleHardwareError"], [156, 5, 1, "", "SafetyStopUnknownStopTypeError"], [156, 5, 1, "", "ShorePowerConnectedError"], [156, 6, 1, "", "is_powered_on"], [156, 6, 1, "", "power_cycle_robot"], [156, 6, 1, "", "power_off"], [156, 6, 1, "", "power_off_motors"], [156, 6, 1, "", "power_off_payload_ports"], [156, 6, 1, "", "power_off_robot"], [156, 6, 1, "", "power_off_wifi_radio"], [156, 6, 1, "", "power_on"], [156, 6, 1, "", "power_on_motors"], [156, 6, 1, "", "power_on_payload_ports"], [156, 6, 1, "", "power_on_wifi_radio"], [156, 6, 1, "", "safe_power_cycle_robot"], [156, 6, 1, "", "safe_power_off"], [156, 6, 1, "", "safe_power_off_motors"], [156, 6, 1, "", "safe_power_off_robot"]], "bosdyn.client.power.PowerClient": [[156, 4, 1, "", "default_service_name"], [156, 3, 1, "", "fan_power_command"], [156, 3, 1, "", "fan_power_command_async"], [156, 3, 1, "", "fan_power_command_feedback"], [156, 3, 1, "", "fan_power_command_feedback_async"], [156, 3, 1, "", "power_command"], [156, 3, 1, "", "power_command_async"], [156, 3, 1, "", "power_command_feedback"], [156, 3, 1, "", "power_command_feedback_async"], [156, 3, 1, "", "reset_safety_stop"], [156, 3, 1, "", "reset_safety_stop_async"], [156, 4, 1, "", "service_type"], [156, 3, 1, "", "update_from"]], "bosdyn.client.processors": [[157, 1, 1, "", "AddRequestHeader"]], "bosdyn.client.processors.AddRequestHeader": [[157, 3, 1, "", "mutate"]], "bosdyn.client.ray_cast": [[158, 5, 1, "", "InvalidIntersectionTypeError"], [158, 5, 1, "", "InvalidRequestError"], [158, 1, 1, "", "RayCastClient"], [158, 5, 1, "", "RayCastResponseError"], [158, 5, 1, "", "UnknownFrameError"]], "bosdyn.client.ray_cast.RayCastClient": [[158, 4, 1, "", "default_authority"], [158, 4, 1, "", "default_service_name"], [158, 3, 1, "", "raycast"], [158, 3, 1, "", "raycast_async"], [158, 4, 1, "", "service_type"]], "bosdyn.client.recording": [[159, 5, 1, "", "CouldNotCreateWaypointError"], [159, 5, 1, "", "EdgeExistsError"], [159, 5, 1, "", "EdgeMissingTransformError"], [159, 5, 1, "", "FiducialPoseError"], [159, 5, 1, "", "FollowingRouteError"], [159, 1, 1, "", "GraphNavRecordingServiceClient"], [159, 5, 1, "", "MapTooLargeLicenseError"], [159, 5, 1, "", "MissingFiducialsError"], [159, 5, 1, "", "NotLocalizedToEndError"], [159, 5, 1, "", "NotLocalizedToExistingMapError"], [159, 5, 1, "", "NotReadyYetError"], [159, 5, 1, "", "NotRecordingError"], [159, 5, 1, "", "RecordingServiceResponseError"], [159, 5, 1, "", "RemoteCloudFailureNoDataError"], [159, 5, 1, "", "RemoteCloudFailureNotInDirectoryError"], [159, 5, 1, "", "RobotImpairedError"], [159, 5, 1, "", "TooFarFromExistingMapError"], [159, 5, 1, "", "UnknownWaypointError"], [159, 1, 1, "", "WaypointRegion"]], "bosdyn.client.recording.GraphNavRecordingServiceClient": [[159, 3, 1, "", "create_edge"], [159, 3, 1, "", "create_edge_async"], [159, 3, 1, "", "create_waypoint"], [159, 3, 1, "", "create_waypoint_async"], [159, 4, 1, "", "default_service_name"], [159, 3, 1, "", "get_record_status"], [159, 3, 1, "", "get_record_status_async"], [159, 3, 1, "", "make_client_metadata"], [159, 3, 1, "", "make_edge"], [159, 3, 1, "", "make_edge_environment"], [159, 3, 1, "", "make_recording_environment"], [159, 3, 1, "", "make_waypoint_environment"], [159, 4, 1, "", "service_type"], [159, 3, 1, "", "set_recording_environment"], [159, 3, 1, "", "set_recording_environment_async"], [159, 3, 1, "", "start_recording"], [159, 3, 1, "", "start_recording_async"], [159, 3, 1, "", "start_recording_full"], [159, 3, 1, "", "start_recording_full_async"], [159, 3, 1, "", "stop_recording"], [159, 3, 1, "", "stop_recording_async"]], "bosdyn.client.recording.WaypointRegion": [[159, 4, 1, "", "CIRCLE_REGION"], [159, 4, 1, "", "DEFAULT_REGION"], [159, 4, 1, "", "EMPTY_REGION"]], "bosdyn.client.robot": [[160, 1, 1, "", "Robot"], [160, 5, 1, "", "RobotError"], [160, 5, 1, "", "UnregisteredServiceError"], [160, 5, 1, "", "UnregisteredServiceNameError"], [160, 5, 1, "", "UnregisteredServiceTypeError"]], "bosdyn.client.robot.Robot": [[160, 3, 1, "", "authenticate"], [160, 3, 1, "", "authenticate_from_cache"], [160, 3, 1, "", "authenticate_from_payload_credentials"], [160, 3, 1, "", "authenticate_with_token"], [160, 3, 1, "", "ensure_channel"], [160, 3, 1, "", "ensure_client"], [160, 3, 1, "", "ensure_secure_channel"], [160, 3, 1, "", "get_cached_hardware_hardware_configuration"], [160, 3, 1, "", "get_cached_robot_id"], [160, 3, 1, "", "get_cached_usernames"], [160, 3, 1, "", "get_frame_tree_snapshot"], [160, 3, 1, "", "get_id"], [160, 3, 1, "", "has_arm"], [160, 2, 1, "", "host"], [160, 3, 1, "", "is_estopped"], [160, 3, 1, "", "is_powered_on"], [160, 3, 1, "", "list_services"], [160, 3, 1, "", "log_event"], [160, 3, 1, "", "operator_comment"], [160, 3, 1, "", "power_off"], [160, 3, 1, "", "power_on"], [160, 3, 1, "", "register_payload_and_authenticate"], [160, 3, 1, "", "setup_token_cache"], [160, 3, 1, "", "shutdown"], [160, 3, 1, "", "start_time_sync"], [160, 3, 1, "", "stop_time_sync"], [160, 3, 1, "", "sync_with_directory"], [160, 3, 1, "", "sync_with_services_list"], [160, 3, 1, "", "time_sec"], [160, 2, 1, "", "time_sync"], [160, 3, 1, "", "update_from"], [160, 3, 1, "", "update_secure_channel_port"], [160, 3, 1, "", "update_user_token"]], "bosdyn.client.robot_command": [[161, 5, 1, "", "BehaviorFaultError"], [161, 5, 1, "", "CommandFailedError"], [161, 5, 1, "", "CommandFailedErrorWithFeedback"], [161, 5, 1, "", "CommandTimedOutError"], [161, 5, 1, "", "DockedError"], [161, 5, 1, "", "Error"], [161, 5, 1, "", "ExpiredError"], [161, 5, 1, "", "NoTimeSyncError"], [161, 5, 1, "", "NotClearedError"], [161, 5, 1, "", "NotPoweredOnError"], [161, 1, 1, "", "RobotCommandBuilder"], [161, 1, 1, "", "RobotCommandClient"], [161, 5, 1, "", "RobotCommandResponseError"], [161, 1, 1, "", "RobotCommandStreamingClient"], [161, 5, 1, "", "TooDistantError"], [161, 5, 1, "", "UnknownFrameError"], [161, 5, 1, "", "UnsupportedError"], [161, 6, 1, "", "block_for_trajectory_cmd"], [161, 6, 1, "", "block_until_arm_arrives"], [161, 6, 1, "", "blocking_command"], [161, 6, 1, "", "blocking_selfright"], [161, 6, 1, "", "blocking_sit"], [161, 6, 1, "", "blocking_stand"]], "bosdyn.client.robot_command.RobotCommandBuilder": [[161, 3, 1, "", "arm_carry_command"], [161, 3, 1, "", "arm_cartesian_move_helper"], [161, 3, 1, "", "arm_gaze_command"], [161, 3, 1, "", "arm_joint_command"], [161, 3, 1, "", "arm_joint_freeze_command"], [161, 3, 1, "", "arm_joint_move_helper"], [161, 3, 1, "", "arm_pose_command"], [161, 3, 1, "", "arm_pose_command_from_pose"], [161, 3, 1, "", "arm_ready_command"], [161, 3, 1, "", "arm_stow_command"], [161, 3, 1, "", "arm_wrench_command"], [161, 3, 1, "", "battery_change_pose_command"], [161, 3, 1, "", "body_pose"], [161, 3, 1, "", "build_body_external_forces"], [161, 3, 1, "", "build_synchro_command"], [161, 3, 1, "", "claw_gripper_close_command"], [161, 3, 1, "", "claw_gripper_command_helper"], [161, 3, 1, "", "claw_gripper_open_angle_command"], [161, 3, 1, "", "claw_gripper_open_command"], [161, 3, 1, "", "claw_gripper_open_fraction_command"], [161, 3, 1, "", "constrained_manipulation_command"], [161, 3, 1, "", "create_arm_joint_trajectory_point"], [161, 3, 1, "", "follow_arm_command"], [161, 3, 1, "", "freeze_command"], [161, 3, 1, "", "joint_command"], [161, 3, 1, "", "mobility_params"], [161, 3, 1, "", "payload_estimation_command"], [161, 3, 1, "", "safe_power_off_command"], [161, 3, 1, "", "selfright_command"], [161, 3, 1, "", "stance_command"], [161, 3, 1, "", "stop_command"], [161, 3, 1, "", "synchro_se2_trajectory_command"], [161, 3, 1, "", "synchro_se2_trajectory_point_command"], [161, 3, 1, "", "synchro_sit_command"], [161, 3, 1, "", "synchro_stand_command"], [161, 3, 1, "", "synchro_trajectory_command_in_body_frame"], [161, 3, 1, "", "synchro_velocity_command"]], "bosdyn.client.robot_command.RobotCommandClient": [[161, 3, 1, "", "clear_behavior_fault"], [161, 3, 1, "", "clear_behavior_fault_async"], [161, 4, 1, "", "default_service_name"], [161, 3, 1, "", "robot_command"], [161, 3, 1, "", "robot_command_async"], [161, 3, 1, "", "robot_command_feedback"], [161, 3, 1, "", "robot_command_feedback_async"], [161, 4, 1, "", "service_type"], [161, 2, 1, "", "timesync_endpoint"], [161, 3, 1, "", "update_from"]], "bosdyn.client.robot_command.RobotCommandStreamingClient": [[161, 4, 1, "", "default_service_name"], [161, 3, 1, "", "send_joint_control_commands"], [161, 4, 1, "", "service_type"]], "bosdyn.client.robot_id": [[162, 1, 1, "", "RobotIdClient"], [162, 6, 1, "", "create_strict_version"], [162, 6, 1, "", "version_tuple"]], "bosdyn.client.robot_id.RobotIdClient": [[162, 4, 1, "", "default_service_name"], [162, 3, 1, "", "get_id"], [162, 3, 1, "", "get_id_async"], [162, 4, 1, "", "service_type"]], "bosdyn.client.robot_state": [[163, 1, 1, "", "RobotStateClient"], [163, 1, 1, "", "RobotStateStreamingClient"], [163, 6, 1, "", "has_arm"]], "bosdyn.client.robot_state.RobotStateClient": [[163, 4, 1, "", "default_service_name"], [163, 3, 1, "", "get_hardware_config_with_link_info"], [163, 3, 1, "", "get_robot_hardware_configuration"], [163, 3, 1, "", "get_robot_hardware_configuration_async"], [163, 3, 1, "", "get_robot_link_model"], [163, 3, 1, "", "get_robot_link_model_async"], [163, 3, 1, "", "get_robot_metrics"], [163, 3, 1, "", "get_robot_metrics_async"], [163, 3, 1, "", "get_robot_state"], [163, 3, 1, "", "get_robot_state_async"], [163, 4, 1, "", "service_type"]], "bosdyn.client.robot_state.RobotStateStreamingClient": [[163, 4, 1, "", "default_service_name"], [163, 3, 1, "", "get_robot_state_stream"], [163, 4, 1, "", "service_type"]], "bosdyn.client.sdk": [[164, 1, 1, "", "Sdk"], [164, 5, 1, "", "SdkError"], [164, 5, 1, "", "UnableToLoadAppTokenError"], [164, 5, 1, "", "UnsetAppTokenError"], [164, 6, 1, "", "create_standard_sdk"], [164, 6, 1, "", "decode_token"], [164, 6, 1, "", "generate_client_name"], [164, 6, 1, "", "log_token_time_remaining"]], "bosdyn.client.sdk.Sdk": [[164, 3, 1, "", "clear_robots"], [164, 3, 1, "", "create_robot"], [164, 3, 1, "", "load_robot_cert"], [164, 3, 1, "", "register_service_client"], [164, 3, 1, "", "set_max_message_length"]], "bosdyn.client.server_util": [[165, 1, 1, "", "GrpcServiceRunner"], [165, 1, 1, "", "ResponseContext"], [165, 6, 1, "", "get_bytes_field_allowlist"], [165, 6, 1, "", "populate_response_header"], [165, 6, 1, "", "strip_get_image_response"], [165, 6, 1, "", "strip_image_response"], [165, 6, 1, "", "strip_large_bytes_fields"], [165, 6, 1, "", "strip_local_grid_responses"], [165, 6, 1, "", "strip_record_data_blob"], [165, 6, 1, "", "strip_record_signal_tick"], [165, 6, 1, "", "strip_store_data_request"], [165, 6, 1, "", "strip_store_image_request"]], "bosdyn.client.server_util.GrpcServiceRunner": [[165, 3, 1, "", "run_until_interrupt"], [165, 3, 1, "", "stop"]], "bosdyn.client.service_customization_helpers": [[166, 5, 1, "", "InvalidCustomParamSpecError"], [166, 5, 1, "", "InvalidCustomParamValueError"], [166, 6, 1, "", "bool_spec_to_default"], [166, 6, 1, "", "check_types_match"], [166, 6, 1, "", "create_value_validator"], [166, 6, 1, "", "custom_param_coerce_to"], [166, 6, 1, "", "custom_spec_to_default"], [166, 6, 1, "", "dict_param_coerce_to"], [166, 6, 1, "", "dict_params_to_dict"], [166, 6, 1, "", "dict_spec_to_default"], [166, 6, 1, "", "double_param_coerce_to"], [166, 6, 1, "", "double_spec_to_default"], [166, 6, 1, "", "int_param_coerce_to"], [166, 6, 1, "", "int_spec_to_default"], [166, 6, 1, "", "list_param_coerce_to"], [166, 6, 1, "", "list_params_to_list"], [166, 6, 1, "", "list_spec_to_default"], [166, 6, 1, "", "make_bool_param_spec"], [166, 6, 1, "", "make_custom_param_spec"], [166, 6, 1, "", "make_dict_child_spec"], [166, 6, 1, "", "make_dict_param_spec"], [166, 6, 1, "", "make_double_param_spec"], [166, 6, 1, "", "make_int64_param_spec"], [166, 6, 1, "", "make_list_param_spec"], [166, 6, 1, "", "make_one_of_child_spec"], [166, 6, 1, "", "make_one_of_param_spec"], [166, 6, 1, "", "make_region_of_interest_param_spec"], [166, 6, 1, "", "make_roi_service_and_source"], [166, 6, 1, "", "make_string_param_spec"], [166, 6, 1, "", "make_user_interface_info"], [166, 6, 1, "", "one_of_param_coerce_to"], [166, 6, 1, "", "one_of_spec_to_default"], [166, 6, 1, "", "oneof_param_to_dict"], [166, 6, 1, "", "roi_param_coerce_to"], [166, 6, 1, "", "roi_spec_to_default"], [166, 6, 1, "", "string_param_coerce_to"], [166, 6, 1, "", "string_spec_to_default"], [166, 6, 1, "", "validate_dict_spec"]], "bosdyn.client.signals_helpers": [[167, 6, 1, "", "build_capability_live_data"], [167, 6, 1, "", "build_live_data_response"], [167, 6, 1, "", "build_max_alert_spec"], [167, 6, 1, "", "build_simple_signal"], [167, 6, 1, "", "get_data"]], "bosdyn.client.spot_cam": [[169, 0, 0, "-", "audio"], [170, 0, 0, "-", "compositor"], [171, 0, 0, "-", "health"], [172, 0, 0, "-", "lighting"], [173, 0, 0, "-", "lights_helper"], [174, 0, 0, "-", "media_log"], [175, 0, 0, "-", "network"], [176, 0, 0, "-", "power"], [177, 0, 0, "-", "ptz"], [178, 0, 0, "-", "streamquality"], [179, 0, 0, "-", "version"]], "bosdyn.client.spot_cam.audio": [[169, 1, 1, "", "AudioClient"]], "bosdyn.client.spot_cam.audio.AudioClient": [[169, 4, 1, "", "default_service_name"], [169, 3, 1, "", "delete_sound"], [169, 3, 1, "", "delete_sound_async"], [169, 3, 1, "", "get_audio_capture_channel"], [169, 3, 1, "", "get_audio_capture_channel_async"], [169, 3, 1, "", "get_audio_capture_gain"], [169, 3, 1, "", "get_audio_capture_gain_async"], [169, 3, 1, "", "get_volume"], [169, 3, 1, "", "get_volume_async"], [169, 3, 1, "", "list_sounds"], [169, 3, 1, "", "list_sounds_async"], [169, 3, 1, "", "load_sound"], [169, 3, 1, "", "play_sound"], [169, 3, 1, "", "play_sound_async"], [169, 4, 1, "", "service_type"], [169, 3, 1, "", "set_audio_capture_channel"], [169, 3, 1, "", "set_audio_capture_channel_async"], [169, 3, 1, "", "set_audio_capture_gain"], [169, 3, 1, "", "set_audio_capture_gain_async"], [169, 3, 1, "", "set_volume"], [169, 3, 1, "", "set_volume_async"]], "bosdyn.client.spot_cam.compositor": [[170, 1, 1, "", "CompositorClient"]], "bosdyn.client.spot_cam.compositor.CompositorClient": [[170, 4, 1, "", "default_service_name"], [170, 3, 1, "", "get_ir_colormap"], [170, 3, 1, "", "get_ir_colormap_async"], [170, 3, 1, "", "get_ir_meter_overlay"], [170, 3, 1, "", "get_ir_meter_overlay_async"], [170, 3, 1, "", "get_screen"], [170, 3, 1, "", "get_screen_async"], [170, 3, 1, "", "get_visible_cameras"], [170, 3, 1, "", "get_visible_cameras_async"], [170, 3, 1, "", "list_screens"], [170, 3, 1, "", "list_screens_async"], [170, 4, 1, "", "service_type"], [170, 3, 1, "", "set_ir_colormap"], [170, 3, 1, "", "set_ir_colormap_async"], [170, 3, 1, "", "set_ir_meter_overlay"], [170, 3, 1, "", "set_ir_meter_overlay_async"], [170, 3, 1, "", "set_multi_ir_meter_overlay"], [170, 3, 1, "", "set_multi_ir_meter_overlay_async"], [170, 3, 1, "", "set_screen"], [170, 3, 1, "", "set_screen_async"]], "bosdyn.client.spot_cam.health": [[171, 1, 1, "", "HealthClient"]], "bosdyn.client.spot_cam.health.HealthClient": [[171, 3, 1, "", "clear_bit_events"], [171, 3, 1, "", "clear_bit_events_async"], [171, 4, 1, "", "default_service_name"], [171, 3, 1, "", "get_bit_status"], [171, 3, 1, "", "get_bit_status_async"], [171, 3, 1, "", "get_system_log"], [171, 3, 1, "", "get_system_log_async"], [171, 3, 1, "", "get_temperature"], [171, 3, 1, "", "get_temperature_async"], [171, 4, 1, "", "service_type"]], "bosdyn.client.spot_cam.lighting": [[172, 1, 1, "", "LightingClient"]], "bosdyn.client.spot_cam.lighting.LightingClient": [[172, 4, 1, "", "default_service_name"], [172, 3, 1, "", "get_led_brightness"], [172, 3, 1, "", "get_led_brightness_async"], [172, 4, 1, "", "service_type"], [172, 3, 1, "", "set_led_brightness"], [172, 3, 1, "", "set_led_brightness_async"]], "bosdyn.client.spot_cam.lights_helper": [[173, 1, 1, "", "LightsHelper"], [173, 6, 1, "", "set_lights_with_freq_and_brightness"]], "bosdyn.client.spot_cam.media_log": [[174, 1, 1, "", "MediaLogClient"]], "bosdyn.client.spot_cam.media_log.MediaLogClient": [[174, 4, 1, "", "default_service_name"], [174, 3, 1, "", "delete"], [174, 3, 1, "", "delete_async"], [174, 3, 1, "", "enable_debug"], [174, 3, 1, "", "enable_debug_async"], [174, 3, 1, "", "get_status"], [174, 3, 1, "", "get_status_async"], [174, 3, 1, "", "list_cameras"], [174, 3, 1, "", "list_cameras_async"], [174, 3, 1, "", "list_logpoints"], [174, 3, 1, "", "retrieve"], [174, 3, 1, "", "retrieve_raw_data"], [174, 4, 1, "", "service_type"], [174, 3, 1, "", "set_passphrase"], [174, 3, 1, "", "set_passphrase_async"], [174, 3, 1, "", "store"], [174, 3, 1, "", "store_async"], [174, 3, 1, "", "tag"], [174, 3, 1, "", "tag_async"]], "bosdyn.client.spot_cam.network": [[175, 1, 1, "", "NetworkClient"]], "bosdyn.client.spot_cam.network.NetworkClient": [[175, 4, 1, "", "default_service_name"], [175, 3, 1, "", "get_ice_configuration"], [175, 3, 1, "", "get_ice_configuration_async"], [175, 4, 1, "", "service_type"], [175, 3, 1, "", "set_ice_configuration"], [175, 3, 1, "", "set_ice_configuration_async"]], "bosdyn.client.spot_cam.power": [[176, 1, 1, "", "PowerClient"]], "bosdyn.client.spot_cam.power.PowerClient": [[176, 3, 1, "", "cycle_power"], [176, 3, 1, "", "cycle_power_async"], [176, 4, 1, "", "default_service_name"], [176, 3, 1, "", "get_power_status"], [176, 3, 1, "", "get_power_status_async"], [176, 4, 1, "", "service_type"], [176, 3, 1, "", "set_power_status"], [176, 3, 1, "", "set_power_status_async"]], "bosdyn.client.spot_cam.ptz": [[177, 1, 1, "", "PtzClient"], [177, 6, 1, "", "shift_pan_angle"]], "bosdyn.client.spot_cam.ptz.PtzClient": [[177, 4, 1, "", "default_service_name"], [177, 3, 1, "", "get_ptz_focus_state"], [177, 3, 1, "", "get_ptz_focus_state_async"], [177, 3, 1, "", "get_ptz_position"], [177, 3, 1, "", "get_ptz_position_async"], [177, 3, 1, "", "get_ptz_velocity"], [177, 3, 1, "", "get_ptz_velocity_async"], [177, 3, 1, "", "initialize_lens"], [177, 3, 1, "", "initialize_lens_async"], [177, 3, 1, "", "list_ptz"], [177, 3, 1, "", "list_ptz_async"], [177, 4, 1, "", "service_type"], [177, 3, 1, "", "set_ptz_focus_state"], [177, 3, 1, "", "set_ptz_focus_state_async"], [177, 3, 1, "", "set_ptz_position"], [177, 3, 1, "", "set_ptz_position_async"], [177, 3, 1, "", "set_ptz_velocity"], [177, 3, 1, "", "set_ptz_velocity_async"]], "bosdyn.client.spot_cam.streamquality": [[178, 1, 1, "", "StreamQualityClient"]], "bosdyn.client.spot_cam.streamquality.StreamQualityClient": [[178, 4, 1, "", "default_service_name"], [178, 3, 1, "", "enable_congestion_control"], [178, 3, 1, "", "enable_congestion_control_async"], [178, 3, 1, "", "get_stream_params"], [178, 3, 1, "", "get_stream_params_async"], [178, 4, 1, "", "service_type"], [178, 3, 1, "", "set_stream_params"], [178, 3, 1, "", "set_stream_params_async"]], "bosdyn.client.spot_cam.version": [[179, 1, 1, "", "VersionClient"]], "bosdyn.client.spot_cam.version.VersionClient": [[179, 4, 1, "", "default_service_name"], [179, 3, 1, "", "get_software_version"], [179, 3, 1, "", "get_software_version_async"], [179, 3, 1, "", "get_software_version_full"], [179, 3, 1, "", "get_software_version_full_async"], [179, 4, 1, "", "service_type"]], "bosdyn.client.spot_check": [[180, 5, 1, "", "CameraCalibrationCalibrationError"], [180, 5, 1, "", "CameraCalibrationInternalError"], [180, 5, 1, "", "CameraCalibrationPowerError"], [180, 5, 1, "", "CameraCalibrationResponseError"], [180, 5, 1, "", "CameraCalibrationRobotCommandError"], [180, 5, 1, "", "CameraCalibrationTargetNotCenteredError"], [180, 5, 1, "", "CameraCalibrationTimedOutError"], [180, 5, 1, "", "CameraCalibrationUserCanceledError"], [180, 5, 1, "", "CameraSpotCheckFeedbackError"], [180, 5, 1, "", "CameraSpotCheckTimedOutError"], [180, 5, 1, "", "SpotCheckCameraTimeoutError"], [180, 1, 1, "", "SpotCheckClient"], [180, 5, 1, "", "SpotCheckEndstopTimeoutError"], [180, 5, 1, "", "SpotCheckError"], [180, 5, 1, "", "SpotCheckGroundCheckError"], [180, 5, 1, "", "SpotCheckImuCheckError"], [180, 5, 1, "", "SpotCheckLoadcellTimeoutError"], [180, 5, 1, "", "SpotCheckNotSittingError"], [180, 5, 1, "", "SpotCheckPowerOnFailure"], [180, 5, 1, "", "SpotCheckResponseError"], [180, 5, 1, "", "SpotCheckStandFailureError"], [180, 5, 1, "", "SpotCheckTimedOutError"], [180, 5, 1, "", "SpotCheckUnexpectedPowerChangeError"], [180, 6, 1, "", "run_camera_calibration"], [180, 6, 1, "", "run_spot_check"]], "bosdyn.client.spot_check.SpotCheckClient": [[180, 3, 1, "", "camera_calibration_command"], [180, 3, 1, "", "camera_calibration_command_async"], [180, 3, 1, "", "camera_calibration_feedback"], [180, 3, 1, "", "camera_calibration_feedback_async"], [180, 4, 1, "", "default_service_name"], [180, 4, 1, "", "service_type"], [180, 3, 1, "", "spot_check_command"], [180, 3, 1, "", "spot_check_command_async"], [180, 3, 1, "", "spot_check_feedback"], [180, 3, 1, "", "spot_check_feedback_async"]], "bosdyn.client.time_sync": [[181, 5, 1, "", "InactiveThreadError"], [181, 5, 1, "", "NotEstablishedError"], [181, 1, 1, "", "TimeSyncClient"], [181, 1, 1, "", "TimeSyncEndpoint"], [181, 5, 1, "", "TimeSyncError"], [181, 1, 1, "", "TimeSyncThread"], [181, 5, 1, "", "TimedOutError"], [181, 6, 1, "", "robot_time_range_from_datetimes"], [181, 6, 1, "", "robot_time_range_from_nanoseconds"], [181, 6, 1, "", "timespec_to_robot_timespan"], [181, 6, 1, "", "update_time_filter"], [181, 6, 1, "", "update_timestamp_filter"]], "bosdyn.client.time_sync.TimeSyncClient": [[181, 4, 1, "", "default_service_name"], [181, 3, 1, "", "get_time_sync_update"], [181, 3, 1, "", "get_time_sync_update_async"], [181, 4, 1, "", "service_type"]], "bosdyn.client.time_sync.TimeSyncEndpoint": [[181, 2, 1, "", "clock_identifier"], [181, 2, 1, "", "clock_skew"], [181, 3, 1, "", "establish_timesync"], [181, 3, 1, "", "get_new_estimate"], [181, 3, 1, "", "get_robot_time_converter"], [181, 2, 1, "", "has_established_time_sync"], [181, 2, 1, "", "response"], [181, 3, 1, "", "robot_timestamp_from_local_secs"], [181, 2, 1, "", "round_trip_time"]], "bosdyn.client.time_sync.TimeSyncThread": [[181, 4, 1, "", "DEFAULT_TIME_SYNC_INTERVAL_SEC"], [181, 4, 1, "", "TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC"], [181, 2, 1, "", "endpoint"], [181, 3, 1, "", "get_robot_clock_skew"], [181, 3, 1, "", "get_robot_time_converter"], [181, 2, 1, "", "has_established_time_sync"], [181, 3, 1, "", "robot_timestamp_from_local_secs"], [181, 2, 1, "", "should_exit"], [181, 3, 1, "", "start"], [181, 3, 1, "", "stop"], [181, 2, 1, "", "stopped"], [181, 2, 1, "", "thread_exception"], [181, 2, 1, "", "time_sync_interval_sec"], [181, 3, 1, "", "wait_for_sync"]], "bosdyn.client.token_cache": [[182, 5, 1, "", "ClearFailedError"], [182, 5, 1, "", "NotInCacheError"], [182, 1, 1, "", "TokenCache"], [182, 5, 1, "", "TokenCacheError"], [182, 1, 1, "", "TokenCacheFilesystem"], [182, 5, 1, "", "WriteFailedError"], [182, 6, 1, "", "atomic_file_write"]], "bosdyn.client.token_cache.TokenCache": [[182, 3, 1, "", "clear"], [182, 3, 1, "", "match"], [182, 3, 1, "", "read"], [182, 3, 1, "", "write"]], "bosdyn.client.token_cache.TokenCacheFilesystem": [[182, 3, 1, "", "clear"], [182, 3, 1, "", "match"], [182, 3, 1, "", "read"], [182, 3, 1, "", "write"]], "bosdyn.client.token_manager": [[183, 1, 1, "", "TokenManager"]], "bosdyn.client.token_manager.TokenManager": [[183, 3, 1, "", "is_alive"], [183, 3, 1, "", "stop"], [183, 3, 1, "", "update"]], "bosdyn.client.units_helpers": [[184, 6, 1, "", "units_to_string"]], "bosdyn.client.util": [[185, 1, 1, "", "DedupLoggingMessages"], [185, 1, 1, "", "GrpcServiceRunner"], [185, 6, 1, "", "add_base_arguments"], [185, 6, 1, "", "add_common_arguments"], [185, 6, 1, "", "add_credentials_arguments"], [185, 6, 1, "", "add_payload_credentials_arguments"], [185, 6, 1, "", "add_payload_credentials_file_argument"], [185, 6, 1, "", "add_service_endpoint_arguments"], [185, 6, 1, "", "add_service_hosting_arguments"], [185, 6, 1, "", "authenticate"], [185, 6, 1, "", "cli_auth"], [185, 6, 1, "", "cli_login_prompt"], [185, 6, 1, "", "does_dedup_filter_exist"], [185, 6, 1, "", "get_guid_and_secret"], [185, 6, 1, "", "get_logger"], [185, 6, 1, "", "read_or_create_payload_credentials"], [185, 6, 1, "", "read_payload_credentials"], [185, 6, 1, "", "safe_pb_enum_to_string"], [185, 6, 1, "", "setup_logging"]], "bosdyn.client.util.DedupLoggingMessages": [[185, 3, 1, "", "filter"]], "bosdyn.client.util.GrpcServiceRunner": [[185, 3, 1, "", "run_until_interrupt"], [185, 3, 1, "", "stop"]], "bosdyn.client.world_object": [[186, 1, 1, "", "WorldObjectClient"], [186, 6, 1, "", "make_add_world_object_req"], [186, 6, 1, "", "make_change_world_object_req"], [186, 6, 1, "", "make_delete_world_object_req"], [186, 6, 1, "", "send_add_mutation_requests"], [186, 6, 1, "", "send_delete_mutation_requests"]], "bosdyn.client.world_object.WorldObjectClient": [[186, 4, 1, "", "default_service_name"], [186, 3, 1, "", "draw_oriented_bounding_box"], [186, 3, 1, "", "draw_sphere"], [186, 3, 1, "", "list_world_objects"], [186, 3, 1, "", "list_world_objects_async"], [186, 3, 1, "", "mutate_world_objects"], [186, 3, 1, "", "mutate_world_objects_async"], [186, 4, 1, "", "service_type"], [186, 2, 1, "", "timesync_endpoint"], [186, 3, 1, "", "update_from"]], "bosdyn": [[207, 0, 0, "-", "deprecated"], [208, 0, 0, "-", "geometry"], [209, 0, 0, "-", "util"]], "bosdyn.deprecated": [[207, 6, 1, "", "moved_to"], [207, 6, 1, "", "renamed_to"]], "bosdyn.geometry": [[208, 1, 1, "", "EulerZXY"], [208, 6, 1, "", "to_euler_zxy"]], "bosdyn.geometry.EulerZXY": [[208, 3, 1, "", "to_quaternion"]], "bosdyn.mission": [[211, 0, 0, "-", "client"], [212, 0, 0, "-", "constants"], [213, 0, 0, "-", "exceptions"], [214, 0, 0, "-", "remote_client"], [215, 0, 0, "-", "server_util"], [216, 0, 0, "-", "util"]], "bosdyn.mission.client": [[211, 5, 1, "", "CompilationError"], [211, 5, 1, "", "CustomParamsError"], [211, 5, 1, "", "IncompatibleAnswer"], [211, 5, 1, "", "InvalidAnswerCode"], [211, 5, 1, "", "InvalidQuestionId"], [211, 1, 1, "", "MissionClient"], [211, 5, 1, "", "MissionResponseError"], [211, 5, 1, "", "NoMissionError"], [211, 5, 1, "", "NoMissionPlayingError"], [211, 5, 1, "", "QuestionAlreadyAnswered"], [211, 5, 1, "", "ValidationError"]], "bosdyn.mission.client.MissionClient": [[211, 3, 1, "", "answer_question"], [211, 3, 1, "", "answer_question_async"], [211, 4, 1, "", "default_service_name"], [211, 3, 1, "", "get_info"], [211, 3, 1, "", "get_info_async"], [211, 3, 1, "", "get_mission"], [211, 3, 1, "", "get_mission_async"], [211, 3, 1, "", "get_state"], [211, 3, 1, "", "get_state_async"], [211, 3, 1, "", "load_mission"], [211, 3, 1, "", "load_mission_as_chunks"], [211, 3, 1, "", "load_mission_as_chunks2"], [211, 3, 1, "", "load_mission_async"], [211, 3, 1, "", "pause_mission"], [211, 3, 1, "", "pause_mission_async"], [211, 3, 1, "", "play_mission"], [211, 3, 1, "", "play_mission_async"], [211, 3, 1, "", "restart_mission"], [211, 3, 1, "", "restart_mission_async"], [211, 4, 1, "", "service_type"], [211, 3, 1, "", "stop_mission"], [211, 3, 1, "", "stop_mission_async"], [211, 2, 1, "", "timesync_endpoint"], [211, 3, 1, "", "update_from"]], "bosdyn.mission.constants": [[212, 1, 1, "", "Result"]], "bosdyn.mission.constants.Result": [[212, 4, 1, "", "ERROR"], [212, 4, 1, "", "FAILURE"], [212, 4, 1, "", "RUNNING"], [212, 4, 1, "", "SUCCESS"]], "bosdyn.mission.exceptions": [[213, 5, 1, "", "CompileError"], [213, 5, 1, "", "Error"], [213, 5, 1, "", "InaccessibleParameterError"], [213, 5, 1, "", "MessageOverrideError"], [213, 5, 1, "", "MissingParameterError"], [213, 5, 1, "", "NodeUnreferenceableError"], [213, 5, 1, "", "UnknownType"], [213, 5, 1, "", "ValidationError"]], "bosdyn.mission.exceptions.CompileError": [[213, 3, 1, "", "get_node_details"], [213, 3, 1, "", "node_impl"], [213, 3, 1, "", "node_name"]], "bosdyn.mission.remote_client": [[214, 5, 1, "", "Error"], [214, 5, 1, "", "InvalidSessionId"], [214, 5, 1, "", "MissingInputs"], [214, 5, 1, "", "MissingLeases"], [214, 1, 1, "", "RemoteClient"], [214, 6, 1, "", "tree_status_from_tick_status"]], "bosdyn.mission.remote_client.RemoteClient": [[214, 4, 1, "", "default_service_name"], [214, 3, 1, "", "establish_session"], [214, 3, 1, "", "establish_session_async"], [214, 3, 1, "", "get_service_info"], [214, 3, 1, "", "get_service_info_async"], [214, 4, 1, "", "service_type"], [214, 3, 1, "", "stop"], [214, 3, 1, "", "stop_async"], [214, 3, 1, "", "teardown_session"], [214, 3, 1, "", "teardown_session_async"], [214, 3, 1, "", "tick"], [214, 3, 1, "", "tick_async"], [214, 3, 1, "", "update_from"]], "bosdyn.mission.server_util": [[215, 1, 1, "", "ResponseContext"]], "bosdyn.mission.util": [[216, 5, 1, "", "Error"], [216, 5, 1, "", "InvalidConversion"], [216, 1, 1, "", "ResultFromProto"], [216, 6, 1, "", "create_value"], [216, 6, 1, "", "define_blackboard"], [216, 6, 1, "", "field_desc_to_pb_type"], [216, 6, 1, "", "get_value_from_constant_value_message"], [216, 6, 1, "", "get_value_from_value_message"], [216, 6, 1, "", "is_string_identifier"], [216, 6, 1, "", "most_restrictive_travel_params"], [216, 6, 1, "", "node_spec_to_short_string"], [216, 6, 1, "", "one_line_str"], [216, 6, 1, "", "proto_enum_to_result_constant"], [216, 6, 1, "", "proto_from_tuple"], [216, 6, 1, "", "python_type_to_pb_type"], [216, 6, 1, "", "python_var_to_value"], [216, 6, 1, "", "result_constant_to_proto_enum"], [216, 6, 1, "", "safe_pb_type_to_string"], [216, 6, 1, "", "set_blackboard"], [216, 6, 1, "", "severity_to_log_level"], [216, 6, 1, "", "tree_to_string"], [216, 6, 1, "", "type_to_field_name"]], "bosdyn.mission.util.ResultFromProto": [[216, 4, 1, "", "proto_from_results"], [216, 4, 1, "", "results_from_proto"]], "bosdyn.orbit": [[218, 0, 0, "-", "client"], [219, 0, 0, "-", "exceptions"], [220, 0, 0, "-", "utils"]], "bosdyn.orbit.client": [[218, 1, 1, "", "Client"], [218, 6, 1, "", "create_client"]], "bosdyn.orbit.client.Client": [[218, 3, 1, "", "authenticate_with_api_token"], [218, 3, 1, "", "delete_backup"], [218, 3, 1, "", "delete_calendar_event"], [218, 3, 1, "", "delete_resource"], [218, 3, 1, "", "delete_robot"], [218, 3, 1, "", "delete_site_walk"], [218, 3, 1, "", "delete_webhook"], [218, 3, 1, "", "get_calendar"], [218, 3, 1, "", "get_image"], [218, 3, 1, "", "get_image_response"], [218, 3, 1, "", "get_resource"], [218, 3, 1, "", "get_robot_by_hostname"], [218, 3, 1, "", "get_robot_info"], [218, 3, 1, "", "get_robots"], [218, 3, 1, "", "get_run_archives_by_id"], [218, 3, 1, "", "get_run_by_id"], [218, 3, 1, "", "get_run_capture_by_id"], [218, 3, 1, "", "get_run_captures"], [218, 3, 1, "", "get_run_event_by_id"], [218, 3, 1, "", "get_run_events"], [218, 3, 1, "", "get_runs"], [218, 3, 1, "", "get_site_dock_by_id"], [218, 3, 1, "", "get_site_docks"], [218, 3, 1, "", "get_site_element_by_id"], [218, 3, 1, "", "get_site_elements"], [218, 3, 1, "", "get_site_walk_archive_by_id"], [218, 3, 1, "", "get_site_walk_by_id"], [218, 3, 1, "", "get_site_walks"], [218, 3, 1, "", "get_system_time"], [218, 3, 1, "", "get_version"], [218, 3, 1, "", "get_webhook"], [218, 3, 1, "", "get_webhook_by_id"], [218, 3, 1, "", "patch_anomaly_by_id"], [218, 3, 1, "", "patch_bulk_close_anomalies"], [218, 3, 1, "", "patch_resource"], [218, 3, 1, "", "post_backup_task"], [218, 3, 1, "", "post_calendar_event"], [218, 3, 1, "", "post_calendar_event_disable_by_id"], [218, 3, 1, "", "post_calendar_event_enable_by_id"], [218, 3, 1, "", "post_calendar_events_disable_all"], [218, 3, 1, "", "post_calendar_events_enable_all"], [218, 3, 1, "", "post_dispatch_mission_to_robot"], [218, 3, 1, "", "post_export_as_walk"], [218, 3, 1, "", "post_import_from_walk"], [218, 3, 1, "", "post_resource"], [218, 3, 1, "", "post_return_to_dock_mission"], [218, 3, 1, "", "post_robot"], [218, 3, 1, "", "post_site_dock"], [218, 3, 1, "", "post_site_element"], [218, 3, 1, "", "post_site_walk"], [218, 3, 1, "", "post_webhook"], [218, 3, 1, "", "post_webhook_by_id"]], "bosdyn.orbit.exceptions": [[219, 5, 1, "", "Error"], [219, 5, 1, "", "UnauthenticatedClientError"], [219, 5, 1, "", "WebhookSignatureVerificationError"]], "bosdyn.orbit.utils": [[220, 6, 1, "", "data_capture_url_from_run_capture_resources"], [220, 6, 1, "", "data_capture_urls_from_run_events"], [220, 6, 1, "", "datetime_from_isostring"], [220, 6, 1, "", "get_action_names_from_run_events"], [220, 6, 1, "", "get_api_token"], [220, 6, 1, "", "get_latest_created_at_for_run_captures"], [220, 6, 1, "", "get_latest_created_at_for_run_events"], [220, 6, 1, "", "get_latest_end_time_for_runs"], [220, 6, 1, "", "get_latest_run_capture_resources"], [220, 6, 1, "", "get_latest_run_in_progress"], [220, 6, 1, "", "get_latest_run_resource"], [220, 6, 1, "", "print_json_response"], [220, 6, 1, "", "validate_webhook_payload"], [220, 6, 1, "", "write_image"]], "bosdyn.scout": [[222, 0, 0, "-", "client"], [223, 0, 0, "-", "exceptions"], [224, 0, 0, "-", "utils"]], "bosdyn.scout.client": [[222, 1, 1, "", "ScoutClient"], [222, 6, 1, "", "create_scout_client"]], "bosdyn.scout.client.ScoutClient": [[222, 3, 1, "", "authenticate_with_api_token"], [222, 3, 1, "", "authenticate_with_password"], [222, 3, 1, "", "delete_calendar_event"], [222, 3, 1, "", "delete_resource"], [222, 3, 1, "", "delete_robot"], [222, 3, 1, "", "delete_site_walk"], [222, 3, 1, "", "delete_webhook"], [222, 3, 1, "", "get_calendar"], [222, 3, 1, "", "get_image"], [222, 3, 1, "", "get_image_response"], [222, 3, 1, "", "get_resource"], [222, 3, 1, "", "get_robot_by_hostname"], [222, 3, 1, "", "get_robot_info"], [222, 3, 1, "", "get_robots"], [222, 3, 1, "", "get_run_archives_by_id"], [222, 3, 1, "", "get_run_by_id"], [222, 3, 1, "", "get_run_capture_by_id"], [222, 3, 1, "", "get_run_captures"], [222, 3, 1, "", "get_run_event_by_id"], [222, 3, 1, "", "get_run_events"], [222, 3, 1, "", "get_runs"], [222, 3, 1, "", "get_scout_system_time"], [222, 3, 1, "", "get_scout_version"], [222, 3, 1, "", "get_site_dock_by_id"], [222, 3, 1, "", "get_site_docks"], [222, 3, 1, "", "get_site_element_by_id"], [222, 3, 1, "", "get_site_elements"], [222, 3, 1, "", "get_site_walk_by_id"], [222, 3, 1, "", "get_site_walks"], [222, 3, 1, "", "get_webhook"], [222, 3, 1, "", "get_webhook_by_id"], [222, 3, 1, "", "post_calendar_event"], [222, 3, 1, "", "post_calendar_event_disable_by_id"], [222, 3, 1, "", "post_calendar_event_enable_by_id"], [222, 3, 1, "", "post_calendar_events_disable_all"], [222, 3, 1, "", "post_calendar_events_enable_all"], [222, 3, 1, "", "post_dispatch_mission_to_robot"], [222, 3, 1, "", "post_export_as_walk"], [222, 3, 1, "", "post_import_from_walk"], [222, 3, 1, "", "post_resource"], [222, 3, 1, "", "post_return_to_dock_mission"], [222, 3, 1, "", "post_robot"], [222, 3, 1, "", "post_site_dock"], [222, 3, 1, "", "post_site_element"], [222, 3, 1, "", "post_site_walk"], [222, 3, 1, "", "post_webhook"], [222, 3, 1, "", "post_webhook_by_id"]], "bosdyn.scout.utils": [[224, 6, 1, "", "data_capture_url_from_run_capture_resources"], [224, 6, 1, "", "data_capture_urls_from_run_events"], [224, 6, 1, "", "get_credentials"], [224, 6, 1, "", "get_latest_created_at_for_run_captures"], [224, 6, 1, "", "get_latest_created_at_for_run_events"], [224, 6, 1, "", "get_latest_end_time_for_runs"], [224, 6, 1, "", "get_latest_run_capture_resources"], [224, 6, 1, "", "get_latest_run_in_progress"], [224, 6, 1, "", "get_latest_run_resource"]], "bosdyn.util": [[209, 5, 1, "", "DatetimeParseError"], [209, 1, 1, "", "RobotTimeConverter"], [209, 6, 1, "", "distance_str"], [209, 6, 1, "", "duration_str"], [209, 6, 1, "", "duration_to_seconds"], [209, 6, 1, "", "format_metric"], [209, 6, 1, "", "now_nsec"], [209, 6, 1, "", "now_sec"], [209, 6, 1, "", "now_timestamp"], [209, 6, 1, "", "nsec_to_sec"], [209, 6, 1, "", "nsec_to_timestamp"], [209, 6, 1, "", "parse_datetime"], [209, 6, 1, "", "parse_timespan"], [209, 6, 1, "", "sec_to_nsec"], [209, 6, 1, "", "seconds_to_duration"], [209, 6, 1, "", "seconds_to_timestamp"], [209, 6, 1, "", "secs_to_hms"], [209, 6, 1, "", "set_clock_source"], [209, 6, 1, "", "set_timestamp_from_datetime"], [209, 6, 1, "", "set_timestamp_from_now"], [209, 6, 1, "", "set_timestamp_from_nsec"], [209, 6, 1, "", "timestamp_str"], [209, 6, 1, "", "timestamp_to_datetime"], [209, 6, 1, "", "timestamp_to_nsec"], [209, 6, 1, "", "timestamp_to_sec"]], "bosdyn.util.RobotTimeConverter": [[209, 3, 1, "", "convert_timestamp_from_local_to_robot"], [209, 3, 1, "", "local_seconds_from_robot_timestamp"], [209, 3, 1, "", "robot_seconds_from_local_seconds"], [209, 3, 1, "", "robot_timestamp_from_local"], [209, 3, 1, "", "robot_timestamp_from_local_nsecs"], [209, 3, 1, "", "robot_timestamp_from_local_secs"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:exception", "6": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "exception", "Python exception"], "6": ["py", "function", "Python function"]}, "titleterms": {"spot": [0, 1, 2, 3, 14, 15, 27, 34, 38, 46, 59, 61, 63, 68, 69, 70, 71, 72, 76, 77, 78, 79, 82, 88, 89, 90, 92, 180, 226, 227, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 256, 257, 271, 280, 288, 289, 290, 298, 313, 318, 321, 324, 326, 328], "sdk": [0, 27, 55, 76, 88, 89, 90, 164, 273, 317], "content": [0, 1, 3, 7, 27, 38, 47, 49, 54, 55, 59, 70, 73, 75, 76, 82, 91, 92, 93, 94, 98, 131, 168, 187, 188, 210, 217, 221, 225, 252, 259, 260, 261, 262, 264, 265, 266, 267, 268], "concept": [1, 4, 20, 40, 52, 54], "api": [1, 34, 43, 47, 54, 55, 60, 73, 74, 77, 78, 90, 92, 148, 263, 276, 293, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 334], "orbit": [1, 54, 55, 90, 217, 265, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310], "about": [2, 20, 21, 54, 271], "camera": [2, 58, 89, 92, 136, 287, 288, 318, 334], "hip": 2, "joint": [2, 4, 6, 47, 49, 90, 263, 291], "robot": [2, 14, 16, 17, 20, 22, 25, 30, 37, 43, 46, 47, 49, 53, 56, 65, 66, 67, 80, 88, 89, 90, 160, 161, 162, 163, 229, 255, 258, 268, 274, 279, 283, 291, 297, 307, 315, 327, 335, 338], "specif": [2, 6, 28, 57, 67, 338], "dimens": [2, 65, 68], "environ": [2, 20, 61, 76, 77, 78, 88], "power": [2, 56, 67, 89, 90, 92, 156, 176, 273], "payload": [2, 54, 58, 59, 60, 63, 64, 66, 67, 76, 77, 78, 90, 92, 153, 154, 266, 311, 319], "sens": 2, "connect": [2, 37, 61, 283, 318], "arm": [3, 4, 5, 6, 28, 36, 66, 90, 104, 228, 230, 232, 233, 236, 237, 238, 239, 240, 241, 242, 244, 245, 259, 291], "gripper": [3, 6, 28, 36, 90, 136, 288], "synchronizedcommand": [4, 92], "request": [4, 40, 88, 92, 247, 299], "feedback": [4, 16, 90, 92], "armcommand": [4, 92], "cartesian": 4, "move": [4, 30, 36, 88, 89, 90], "predefin": 4, "pose": 4, "veloc": 4, "gaze": [4, 233], "stop": [4, 17, 44, 63, 88, 89, 90, 270, 274, 275, 317, 325, 331], "drag": 4, "mobil": [4, 90, 228, 245], "followarmcommand": [4, 92], "hand": [4, 232], "frame": [4, 5, 15, 46, 89, 90, 129, 275], "collis": 4, "avoid": 4, "bodi": [4, 28, 36, 232], "forc": [4, 231], "limit": [4, 48, 92], "safeti": [4, 6, 30, 32, 33, 67, 90, 317], "note": [4, 20, 34, 47, 54, 55, 90, 92], "servic": [5, 8, 10, 11, 14, 15, 17, 19, 23, 25, 34, 40, 42, 43, 44, 45, 50, 51, 56, 57, 58, 60, 61, 69, 77, 78, 79, 89, 90, 92, 101, 102, 103, 117, 121, 138, 166, 198, 199, 249, 252, 254, 255, 256, 261, 273, 277, 279, 281, 284, 290, 292, 311, 315, 318, 319, 320, 323, 324, 329, 330, 333, 337], "manipul": [5, 90, 148, 229, 256], "armsurfacecontact": [5, 92], "door": [5, 90, 92, 125, 230], "invers": [5, 90, 139, 290], "kinemat": [5, 90, 139, 290], "rang": [6, 255, 310], "motion": 6, "link": [6, 90, 92], "length": [6, 66], "how": [6, 8, 11, 13, 17, 61, 89, 249, 284, 296], "big": 6, "an": [6, 11, 15, 17, 58, 88, 89, 243, 254, 270, 295, 314, 315, 329, 338], "object": [6, 55, 56, 89, 186, 229, 243, 267, 281, 326, 334, 336, 337], "can": [6, 18, 88, 90], "grasp": [6, 229, 235, 236], "pinch": 6, "point": [6, 68, 90, 155, 252, 285, 333], "autonomi": [7, 20, 260], "autoreturn": [8, 92], "what": [8, 13, 18, 34, 54, 285], "i": [8, 13, 34, 54, 61, 62, 63, 78, 79, 87, 90, 249, 251, 285, 298, 319, 320], "why": [8, 18], "would": 8, "want": 8, "us": [8, 15, 20, 24, 32, 33, 34, 53, 54, 58, 63, 72, 75, 249, 252, 254, 255, 273, 277, 279, 281, 284, 292, 311, 312, 315, 317, 318, 320, 330, 333, 337], "NOT": 8, "do": [8, 11, 18], "configur": [8, 17, 35, 44, 54, 60, 61, 63, 66, 71, 80, 89, 256, 298, 312, 318], "happen": 8, "when": [8, 13, 28, 54, 249], "finish": 8, "safe": [8, 90], "autonom": [9, 16, 24, 85, 90], "navig": [9, 10, 12, 15, 16, 19, 90, 284], "code": [9, 41, 47, 84, 90, 92, 93, 283], "exampl": [9, 17, 18, 23, 29, 34, 41, 42, 43, 47, 52, 57, 58, 60, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 250, 251, 252, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 320, 322, 323, 324, 325, 327, 330, 331, 332, 333, 334, 335, 336, 337], "autowalk": [11, 15, 32, 90, 92, 108, 248, 269, 314, 315], "terminologi": [11, 34], "differ": 11, "from": [11, 18, 62, 88, 252, 272], "mission": [11, 15, 23, 32, 54, 55, 57, 80, 90, 92, 210, 260, 273, 278, 295, 296, 302, 303, 306, 307, 308, 315, 316], "format": [11, 26, 42, 92], "compon": [11, 12, 47, 52, 294], "element": [11, 92], "dock": [11, 14, 90, 92, 124, 258, 307, 312], "rpc": [11, 15, 19, 23, 52, 60, 98, 210], "node": [11, 23, 92, 295], "identifi": [11, 26], "debug": [11, 294, 318, 320], "failur": 11, "break": [11, 90], "go": [11, 332], "here": 11, "thi": [11, 76, 251], "structur": [11, 18, 23, 26, 28, 39, 43, 55, 63, 287], "direct": 13, "explor": 13, "invok": 13, "enabl": [13, 64, 72, 90, 140, 308], "disabl": [13, 90, 140, 257, 308], "typic": [14, 24], "usag": [14, 47, 51, 90, 273, 284, 294, 317], "undock": 14, "config": [14, 34], "state": [14, 47, 56, 89, 90, 92, 163, 236, 278, 279, 280], "gp": [15, 90, 92, 131, 133, 282, 286], "hardwar": [15, 291], "integr": [15, 58, 90, 310], "receiv": 15, "overview": [15, 30, 34, 40, 42, 72, 76, 294, 296, 310], "attach": [15, 58, 311], "write": [15, 17, 81, 90], "custom": [15, 35, 54, 57, 63, 90, 166, 315, 320, 321, 322], "background": [15, 58, 283], "common": [15, 113, 192, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 289, 290], "refer": [15, 35, 36, 68, 93], "softwar": [15, 60, 63, 69, 72, 89, 291], "registr": [15, 44, 58, 60, 92, 123, 134, 154, 311, 319], "odometri": 15, "graph": [15, 90, 92, 135, 227, 282, 283], "nav": [15, 90, 92, 135, 227, 282, 283], "map": [15, 18, 20, 41, 90, 92, 149, 284, 287], "tablet": [15, 18, 33, 324], "statu": [15, 16, 56, 92, 147, 292], "displai": 15, "record": [15, 17, 18, 80, 90, 92, 159, 226, 227, 284, 296, 314, 315], "graphnav": [16, 17, 18, 19, 20, 21, 22, 90, 284, 285, 286, 287], "locomot": [16, 90, 332], "navigateto": [16, 92], "navigaterout": [16, 92], "navigatetoanchor": 16, "error": [16, 17, 51, 53, 58, 92], "area": [17, 57, 90, 92, 99, 100, 101, 102, 103, 227], "callback": [17, 57, 90, 99, 100, 101, 102, 103, 227, 299, 312, 315], "introduct": [17, 59], "doe": 17, "work": [17, 61], "polici": [17, 50, 92], "crosswalk": [17, 227], "spotcam": [17, 90, 168], "light": [17, 36, 172, 173, 227, 325], "The": [17, 50, 62, 273, 317], "life": 17, "cycl": 17, "startup": 17, "execut": [17, 34, 297, 298, 320, 321, 322, 326, 328, 331, 338], "shutdown": 17, "creat": [17, 18, 23, 58, 62, 63, 72, 79, 80, 89, 270, 306], "behavior": [17, 23, 35, 45, 47, 90, 268], "expect": 17, "blockag": [17, 92], "impair": [17, 92], "check": [17, 69, 90, 180], "entiti": 17, "wait": 17, "": [17, 46, 63, 88, 89], "run": [17, 30, 31, 54, 55, 58, 62, 63, 77, 78, 87, 88, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 293, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 323, 324, 325, 327, 330, 331, 332, 333, 334, 335, 336, 337], "control": [17, 18, 28, 30, 37, 47, 90, 244, 263, 287, 291, 321, 334, 335, 338], "updat": [17, 22, 90], "local": [17, 20, 21, 22, 56, 61, 63, 79, 92, 146, 249, 296, 310, 320], "report": [17, 58], "handl": [17, 53, 90, 323], "re": 17, "rout": [17, 92], "test": [17, 58, 63, 77, 78, 79, 80, 250, 252, 318, 329], "runner": [17, 101], "script": [17, 29, 63, 81, 271, 319], "within": [17, 35], "view": [18, 66, 89, 283], "python": [18, 29, 34, 55, 75, 76, 88, 89, 90, 93, 94, 98, 168, 187, 188, 210, 217, 221, 225, 273, 317], "modifi": [18, 30], "waypoint": [18, 20, 92], "edg": [18, 20, 22, 64, 92], "process": [18, 80, 81, 149], "topologi": 18, "ar": [18, 89], "loop": [18, 47], "import": 18, "automat": [18, 29, 80], "closur": 18, "ensur": 18, "good": 18, "anchor": [18, 92, 283], "optim": [18, 283], "you": [18, 88], "data": [18, 20, 26, 38, 39, 40, 41, 42, 49, 55, 58, 76, 77, 78, 79, 80, 81, 90, 92, 114, 115, 116, 117, 118, 119, 120, 121, 189, 193, 194, 206, 247, 252, 254, 255, 262, 264, 283, 302, 303, 322, 329], "transfer": [18, 32], "download": [18, 40, 42, 110, 247, 252], "upload": [18, 29, 33, 80, 248, 283, 331], "graphnavservic": [19, 92], "graphnavrecordingservic": [19, 92], "technic": 20, "summari": 20, "kei": [20, 54, 310], "initi": [20, 21, 76, 227, 319], "lost": [20, 22], "fiduci": [21, 274, 296], "place": [21, 327], "search": 21, "geometri": [21, 46, 65, 90, 92, 208], "textur": 21, "interv": 22, "featur": [22, 90], "desert": 22, "stuck": 22, "stair": [22, 90, 92], "other": [22, 58, 63, 77, 78, 90, 283], "constraint": 22, "origin": 22, "tree": 23, "blackboard": 23, "type": [23, 34, 41, 42, 57, 84, 92], "action": [23, 32, 40, 50, 54, 55, 80, 92, 298, 324], "simpl": [23, 239, 297], "sequenc": [23, 30, 32, 33, 34, 35, 92, 331], "more": 23, "complex": 23, "missionservic": [23, 92], "remotemissionservic": [23, 92, 315], "case": [24, 64], "base": [25, 100, 189, 308], "id": [25, 88, 89, 92, 162], "auth": [25, 92, 106], "directori": [25, 43, 58, 77, 78, 92, 122, 123, 256], "time": [25, 34, 54, 60, 181, 247, 255], "sync": [25, 181], "leas": [25, 51, 89, 90, 92, 142, 143, 144], "bddf": [26, 42, 92, 109, 110, 188, 247], "motiv": 26, "organ": 26, "seri": [26, 201, 202, 205], "annot": [26, 92], "file": [26, 28, 29, 30, 34, 39, 41, 61, 62, 63, 79, 95, 96, 195, 252, 272], "choreographi": [27, 29, 30, 32, 33, 34, 36, 90, 94, 97, 331], "anim": [28, 29, 32, 34, 92, 95, 96, 226], "choreograph": [28, 29, 30, 31, 33, 37, 90], "name": [28, 84], "extens": [28, 61, 62, 63, 79, 90, 271, 282, 294, 298, 324], "unit": [28, 57, 92, 184], "comment": [28, 42, 247, 254, 318], "option": [28, 90, 92], "section": 28, "support": [28, 42, 75, 90], "keyword": 28, "paramet": [28, 30, 35, 57, 92, 288, 320, 321, 322], "pertain": 28, "all": [28, 62], "track": [28, 30, 34], "keyfram": 28, "column": 28, "particular": 28, "leg": [28, 64, 66, 92], "pipelin": [29, 58], "text": [29, 42, 84], "repres": 29, "log": [29, 34, 42, 56, 63, 90, 92, 147, 151, 174, 254, 264, 292, 293], "boston": [30, 33, 42, 74, 93], "dynam": [30, 33, 36, 42, 74, 93], "develop": [30, 43, 59, 61, 76, 90, 318], "guid": [30, 59, 93, 326, 338], "beginn": 30, "advanc": [30, 51, 90, 225, 284], "mode": [30, 33, 92], "user": [30, 88, 325, 326, 332, 338], "interfac": [30, 43, 60, 65, 67, 284], "slice": [30, 34], "beat": 30, "bpm": 30, "measur": 30, "danc": 30, "timelin": 30, "ad": [30, 32, 33, 46, 90], "block": [30, 89, 190], "preview": 30, "select": [30, 319], "multipl": [30, 88], "copi": [30, 88], "past": 30, "delet": [30, 33, 306], "load": [30, 64, 283], "music": 30, "red": 30, "slider": 30, "perform": [30, 90, 280], "save": [30, 33, 34, 54, 252], "keyboard": [30, 37, 61, 244, 296, 314, 335], "edit": [30, 269, 306], "wasd": 30, "drive": [30, 33, 35, 63], "command": [30, 47, 56, 63, 88, 89, 90, 92, 112, 161, 230, 231, 233, 237, 238, 268, 270, 273, 275, 284, 292, 296, 317], "line": [30, 63, 90, 112, 270, 284], "argument": [30, 271, 272, 329], "instal": [31, 63, 72, 77, 79, 88, 248, 271, 297, 312, 318, 321, 326, 328, 338], "system": [31, 40, 45, 52, 61, 69, 88, 297, 321], "requir": [31, 66, 67, 76, 77, 88, 312, 318, 328], "store": [32, 90, 118, 252], "ui": 33, "plai": [33, 82, 86], "your": [33, 34, 77, 78, 88], "own": 33, "manag": [33, 63, 69, 71, 88, 183], "remov": [33, 50, 63, 90], "label": 33, "reliabl": 34, "layer": 34, "entri": 34, "exit": 34, "condit": [34, 92], "interact": [34, 315, 318, 325], "With": [34, 54], "dure": [34, 46, 307], "adjust": [34, 327], "client": [34, 52, 90, 94, 98, 131, 132, 134, 148, 152, 168, 210, 211, 214, 218, 222, 297, 319], "moveinfoconfig": 34, "txt": 34, "moveparamsconfig": 34, "gait": 35, "diagram": [35, 297, 321], "preset": 35, "tip": [35, 58, 318, 320], "rotate_bodi": 36, "rotate_body_sharp": 36, "body_hold": 36, "body_const": 36, "swai": 36, "random_rot": 36, "twerk": 36, "butt_circl": 36, "fidget_stand": 36, "step": [36, 88, 92, 283, 315, 318, 328], "goto": 36, "trot": 36, "pace": 36, "turn_2step": 36, "pace_2step": 36, "crawl": 36, "custom_gait": 36, "running_man": 36, "bourre": 36, "hop": 36, "jog": 36, "skip": 36, "front_up": 36, "jump": 36, "transit": 36, "sit": 36, "stand_up": 36, "sit_to_sprawl": 36, "random_stretch": 36, "stand_to_kneel": 36, "kneel_to_stand": 36, "kneel_to_stand_fast": 36, "self_right": 36, "leg_pos": 36, "kneel": 36, "kneel_leg_mov": 36, "kneel_leg_move2": 36, "kneel_clap": 36, "kneel_circl": 36, "nod": 36, "stow": [36, 240], "unstow": 36, "shoulder_left": 36, "shoulder_right": 36, "arm_mov": 36, "arm_move_no_gripp": 36, "arm_move_rel": 36, "workspace_arm_mov": 36, "figure8_mov": 36, "frame_snapshot": 36, "chicken_head": 36, "face": 36, "set_color": 36, "fade_color": 36, "independent_color": 36, "ripple_color": 36, "audio": [36, 92, 169], "visual": [36, 276, 334], "set_audio_visual_color": 36, "set_all_color": 36, "buzzer": 36, "buzzer_not": 36, "joystick": 37, "acquisit": [39, 40, 42, 58, 78, 90, 114, 115, 116, 117, 118, 252, 262, 322, 329], "output": [39, 62, 276], "zip": 39, "metadata": [39, 58, 92], "json": [39, 79], "csv": 39, "high": 40, "level": [40, 92], "captur": [40, 58, 76, 77, 78, 89], "capabl": [40, 58], "group": [40, 61], "channel": [40, 111, 203], "architectur": [40, 79], "implement": [40, 57], "thermal": 41, "raw": [41, 42], "understand": [41, 51, 77, 78, 81, 89, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 282, 283, 285, 286, 287, 288, 289, 290, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 313], "pgm": 41, "v": [41, 54, 89], "render": 41, "scale": 41, "color": [41, 92], "palett": 41, "buffer": [42, 53, 90, 119, 254], "messag": [42, 89, 200, 334], "oper": [42, 44, 46, 247, 254], "event": [42, 54, 92, 247, 254], "signal": [42, 92, 167, 253], "blob": [42, 254], "intern": 42, "author": [42, 60, 84, 89, 90], "grpc": [43, 53, 196, 197, 198, 199, 247], "basic": [43, 51, 91, 238, 242, 247, 261, 273, 334], "infrastructur": 43, "start": [43, 54, 62, 72, 295, 310, 315, 319], "server": [43, 52, 61, 72, 165, 215, 297, 298, 315], "regist": [43, 60, 76, 77, 78, 89, 319], "e": [44, 88, 89, 270, 274, 275, 325, 331], "checkin": 44, "fault": [45, 60, 90, 128, 323], "guidelin": [45, 64, 74], "world": [46, 56, 186, 232, 267, 281, 336, 337], "transform": 46, "between": [46, 319], "math": [46, 150], "beta": [47, 90], "stream": [47, 92, 206, 334], "close": 47, "knee": [48, 49], "torqu": [48, 49], "supplement": 49, "order": 49, "morphologi": 49, "transmiss": 49, "detail": [49, 234], "gear": 49, "ratio": 49, "max": 49, "motor": [49, 67, 89], "coupl": 49, "sh1": 49, "el0": 49, "keepal": [50, 90, 92, 141], "timer": 50, "backward": 50, "compat": 50, "resourc": [51, 72, 143], "addit": [51, 69, 90, 296], "pattern": [51, 92], "represent": 51, "machin": 52, "learn": 52, "bridg": [52, 57, 90, 152, 252, 297, 321], "extern": [52, 64, 274], "comput": [52, 57, 63, 90, 152, 252, 297, 321], "definit": [52, 91], "networkcomputebridg": [52, 90, 92], "networkcomputebridgework": [52, 92], "parameter": 52, "network": [53, 57, 60, 61, 69, 90, 92, 152, 175, 252, 297, 299, 321], "choic": 53, "protocol": [53, 73, 92], "http": [53, 54], "2": [53, 70, 76, 77, 83, 88, 90, 283], "tl": 53, "tcp": 53, "discoveri": 53, "formerli": [54, 90], "scout": [54, 90, 221], "webview": 54, "webhook": [54, 309, 310], "complet": [54, 92], "alert": [54, 90, 92, 297], "secur": 54, "should": 54, "schedul": [54, 306], "weekli": 54, "repeat": [54, 92], "predict": 54, "prioriti": 54, "gotcha": 54, "midnight": 54, "unpredict": 54, "fast": 54, "possibl": 54, "zone": 54, "daylight": 54, "authent": [55, 61, 89], "archiv": [55, 302, 303], "runev": 55, "runcaptur": 55, "sitewalk": [55, 303], "siteel": 55, "sitedock": 55, "charg": 55, "station": 55, "facet": 55, "deprec": [55, 90, 207, 320], "warn": 55, "estop": [56, 92, 126], "metrics_log": [56, 92], "imag": [56, 57, 58, 63, 76, 77, 79, 89, 90, 92, 137, 138, 249, 272, 276, 277, 318, 320, 328, 329, 337], "grid": [56, 146], "languag": [57, 84], "spec": [57, 92], "doubl": 57, "int": 57, "string": 57, "bool": 57, "region": [57, 92, 100, 332], "interest": 57, "dictionari": 57, "One": 57, "Of": 57, "list": [57, 58, 89], "param": [57, 92, 136], "worker": 57, "remot": [57, 92, 214, 273, 315], "coercion": 57, "camerainterfac": 58, "thread": 58, "non": 58, "collect": [58, 76, 79, 80, 81], "function": [58, 89, 90], "plugin": [58, 78, 90, 116, 117, 252, 329], "new": [58, 90], "directoryservic": [60, 92], "directoryregistrationservic": [60, 92], "payloadservic": [60, 92], "payloadregistrationservic": [60, 92], "synchron": 60, "self": [60, 64], "devic": 60, "port": [60, 63, 66, 67, 310], "forward": 60, "tabl": [60, 92], "mass": 60, "properti": 60, "posit": [60, 92], "m": 60, "orient": [60, 65], "radian": 60, "total": 60, "kg": 60, "center": 60, "moment": 60, "inertia": 60, "tensor": 60, "m2": 60, "bound": [60, 92], "box": 60, "zxy": 60, "xyz": 60, "extent": 60, "core": [61, 62, 63, 69, 70, 71, 72, 78, 79, 87, 90, 187, 249, 251, 282, 298, 319, 320, 324], "o": [61, 62, 63, 78, 79, 87, 90, 249, 251, 298, 319, 320, 338], "document": [61, 62, 69, 70, 90, 92], "releas": [61, 90], "admin": 61, "web": [61, 63, 77, 79, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 320], "via": [61, 325], "ssh": 61, "termin": [61, 69], "monitor": [61, 63], "default": [61, 92], "password": [61, 72], "gpio": [61, 251], "pwm": 61, "i2c": 61, "gpu": 61, "openvpn": 62, "befor": 62, "dockerfil": 62, "docker": [62, 63, 69, 71, 79, 249, 250, 251, 252, 297, 312, 318, 320, 321], "compos": [62, 63, 79], "yml": [62, 79], "kickoff": 62, "sh": 62, "includ": 62, "follow": [62, 245, 274], "our": 62, "build": [62, 63, 271, 282, 294, 295, 298], "folder": 62, "contain": [62, 63, 69, 71, 79], "abov": 62, "applic": [63, 79], "engin": 63, "For": 63, "incom": 63, "traffic": 63, "helper": [63, 90, 95, 115, 129, 131, 138, 150, 166, 167, 173, 184], "manifest": [63, 79], "yaml": 63, "portal": 63, "usb": 63, "access": [63, 319], "directli": 63, "robust": 64, "design": 64, "crash": 64, "protect": 64, "shock": 64, "ingress": 64, "cabl": [64, 65], "interfer": [64, 66], "right": 64, "mechan": 65, "connector": 65, "correct": 65, "db25": 65, "rel": 65, "front": [65, 328], "keepout": 65, "mm": 65, "seal": 65, "gland": 65, "width": [66, 92], "height": 66, "weight": [66, 92], "isometr": 66, "top": 66, "rom": 66, "clearanc": 66, "under": 66, "electr": 67, "pinout": 67, "categori": [67, 92], "pin": [67, 251], "commun": [67, 90, 252, 319], "puls": 67, "per": 67, "second": 67, "pp": 67, "mount": 68, "rail": 68, "cockpit": 69, "tool": [69, 90], "prerequisit": [69, 320, 322], "setup": [69, 76, 77, 78, 88, 89, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 250, 252, 254, 255, 256, 257, 258, 269, 270, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 323, 324, 325, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337], "version": [69, 75, 92, 179, 270], "wifi": [69, 294], "set": [69, 76, 236, 283, 284, 319, 324, 332], "pre": [70, 84], "3": [70, 76, 77, 78, 84, 90, 283], "portain": 71, "vnc": 72, "tigervnc": 72, "viewer": [72, 277, 286, 287], "vncviewer": 72, "prepar": [72, 77, 78, 90], "vncserver": 72, "boot": 72, "protobuf": [74, 89, 90, 203, 204, 205, 254], "librari": [75, 274], "platform": 75, "tutori": [76, 82, 227], "up": [76, 85, 283, 284, 319, 324], "variabl": [76, 92], "head": [76, 77, 78, 79, 80], "over": [76, 77, 78, 79, 80, 90], "part": [76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 315], "enter": [77, 78], "virtualenv": [77, 78, 88], "cam": [77, 79, 90, 227, 320, 324], "4": [78, 79, 85, 90], "deploi": [78, 79, 240], "packag": [79, 88, 248, 312, 318, 328], "deploy": 79, "web_cam_image_servic": 79, "battery_servic": 79, "recreat": 79, "arm64": 79, "udev": 79, "rule": 79, "It": 79, "confirm": 79, "5": [79, 80, 86, 90], "playback": [80, 307], "its": 80, "cloud": [80, 90, 155, 248, 252, 285, 310, 333], "6": [80, 81, 87], "further": 81, "read": 81, "fetch": [82, 83, 84, 85, 86, 87], "train": 83, "model": [83, 84, 87], "evalu": 84, "class": [84, 90], "token": [84, 182, 183], "pick": 85, "detect": [86, 326], "peopl": 86, "quickstart": 88, "pip": 88, "verifi": 88, "queri": [88, 280], "get": [88, 277, 310], "account": 88, "ping": 88, "full": 88, "distribut": 88, "github": 88, "hello": [88, 289, 304, 309], "let": 88, "see": 88, "independ": [88, 297], "take": [88, 89], "next": 88, "program": [89, 226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 257, 284, 288, 289, 290, 313, 329], "fundament": 89, "retriev": [89, 264, 278], "asynchron": [89, 280], "inspect": 89, "wa": 89, "defin": [89, 283], "endpoint": [89, 92, 270, 274, 325], "clear": 89, "ownership": 89, "establish": 89, "timesync": [89, 330], "off": [89, 90], "1": [90, 283], "0": 90, "chang": [90, 327], "bug": 90, "fix": 90, "improv": 90, "rajant": 90, "known": [90, 328], "issu": [90, 328], "preexist": 90, "undiscov": 90, "prior": 90, "sampl": 90, "live": 90, "relat": 90, "upcom": 90, "logstatu": [90, 92], "depend": [90, 93, 226, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 250, 251, 252, 254, 255, 256, 257, 258, 269, 270, 271, 272, 273, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 295, 296, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 315, 316, 317, 323, 324, 325, 327, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338], "field": 90, "valu": [90, 92, 319], "imped": [90, 237], "fan": [90, 273], "ground": 90, "clutter": 90, "staircas": [90, 92], "timeout": 90, "renam": 90, "disallow": 90, "auto": [90, 107, 246], "return": [90, 107, 246], "constrain": [90, 229], "pushbar": 90, "open": 90, "ir": [90, 140, 257], "emitt": 90, "estim": 90, "licens": [90, 92, 145, 291], "se2trajectorycommand": [90, 92], "except": [90, 127, 213, 219, 223], "environment": 90, "expand": 90, "poor": 90, "expos": 90, "specifi": [90, 247], "consist": [90, 283], "across": 90, "bosdyn": [90, 92, 191], "miscellan": 90, "proto": [91, 92, 96, 196], "alertdata": 92, "severitylevel": 92, "arm_command": 92, "armcartesiancommand": 92, "armimpedancecommand": 92, "armjointmovecommand": 92, "armjointposit": 92, "armjointtrajectori": 92, "armjointtrajectorypoint": 92, "armjointveloc": 92, "armparam": 92, "armstopcommand": 92, "armvelocitycommand": 92, "cartesianveloc": 92, "cylindricalveloc": 92, "gazecommand": 92, "namedarmpositionscommand": 92, "axismod": 92, "plannerstatu": 92, "arm_surface_contact": 92, "admittanceset": 92, "arm_surface_contact_servic": 92, "armsurfacecontactcommand": 92, "armsurfacecontactrespons": 92, "armsurfacecontactservic": 92, "getauthtokenrequest": 92, "getauthtokenrespons": 92, "auth_servic": 92, "authservic": 92, "auto_return": 92, "configurerequest": 92, "configurerespons": 92, "getconfigurationrequest": 92, "getconfigurationrespons": 92, "startrequest": 92, "startrespons": 92, "auto_return_servic": 92, "autoreturnservic": 92, "compileautowalkrequest": 92, "compileautowalkrespons": 92, "failedelementsentri": 92, "elementidentifi": 92, "failedel": 92, "loadautowalkrequest": 92, "loadautowalkrespons": 92, "nodeidentifi": 92, "autowalk_servic": 92, "autowalkservic": 92, "walk": [92, 243, 272], "dataacquisit": 92, "executechoreographi": 92, "remotegrpc": 92, "sleep": 92, "actionwrapp": 92, "armsensorpoint": 92, "grippercameraparam": 92, "grippercommand": 92, "robotbodypos": 92, "robotbodysit": 92, "spotcamalign": 92, "align": 92, "spotcaml": 92, "brightnessesentri": 92, "spotcamptz": 92, "batterymonitor": 92, "choreographyitem": 92, "failurebehavior": 92, "proceedif": 92, "returntostartandtermin": 92, "returntostartandtryagainlat": 92, "safepoweroff": 92, "globalparamet": 92, "hribehavior": 92, "playbackmod": 92, "continu": 92, "onc": 92, "period": 92, "target": 92, "reloc": 92, "targetstowbehavior": 92, "basic_command": 92, "armdragcommand": 92, "batterychangeposecommand": 92, "constrainedmanipulationcommand": 92, "freezecommand": 92, "jointcommand": 92, "contactadvic": 92, "updaterequest": 92, "gain": 92, "robotcommandfeedbackstatu": 92, "se2velocitycommand": 92, "safepoweroffcommand": 92, "selfrightcommand": 92, "sitcommand": 92, "stanc": [92, 327], "footpositionsentri": 92, "stancecommand": 92, "standcommand": 92, "stopcommand": 92, "directionhint": 92, "controlmod": 92, "tasktyp": 92, "advic": 92, "bodymovementstatu": 92, "finalgoalstatu": 92, "unsafeact": 92, "standingst": 92, "datadescriptor": 92, "descriptorblock": 92, "fileformatdescriptor": 92, "annotationsentri": 92, "fileformatvers": 92, "fileindex": 92, "messagetypedescriptor": 92, "podtypedescriptor": 92, "seriesblockindex": 92, "blockentri": 92, "seriesdescriptor": 92, "seriesidentifi": 92, "specentri": 92, "structtypedescriptor": 92, "keytoseriesidentifierhashentri": 92, "checksumtyp": 92, "podtypeenum": 92, "data_acquisit": 92, "acquiredatarequest": 92, "acquiredatarespons": 92, "acquireplugindatarequest": 92, "acquireplugindatarespons": 92, "acquisitioncapabilitylist": 92, "acquisitionrequestlist": 92, "associatedalertdata": 92, "associatedmetadata": 92, "cancelacquisitionrequest": 92, "cancelacquisitionrespons": 92, "captureactionid": 92, "dataacquisitioncap": 92, "datacaptur": 92, "dataerror": 92, "dataidentifi": 92, "getserviceinforequest": 92, "getserviceinforespons": 92, "getstatusrequest": 92, "getstatusrespons": 92, "imageacquisitioncap": 92, "imagesourcecaptur": 92, "livedatarequest": 92, "livedatarespons": 92, "capabilitylivedata": 92, "signalsentri": 92, "networkcomputecap": 92, "networkcomputecaptur": 92, "networkcomputeerror": 92, "pluginserviceerror": 92, "errorcod": 92, "data_acquisition_plugin_servic": 92, "dataacquisitionpluginservic": 92, "data_acquisition_servic": 92, "dataacquisitionservic": 92, "data_acquisition_stor": 92, "actionidqueri": 92, "dataqueryparam": 92, "listcaptureactionsrequest": 92, "listcaptureactionsrespons": 92, "liststoredalertdatarequest": 92, "liststoredalertdatarespons": 92, "liststoreddatarequest": 92, "liststoreddatarespons": 92, "liststoredimagesrequest": 92, "liststoredimagesrespons": 92, "liststoredmetadatarequest": 92, "liststoredmetadatarespons": 92, "querymaxcaptureidrequest": 92, "querymaxcaptureidrespons": 92, "queryparamet": 92, "querystoredcaptureresult": 92, "querystoredcapturesrequest": 92, "querystoredcapturesrespons": 92, "storealertdatarequest": 92, "storealertdatarespons": 92, "storedatarequest": 92, "storedatarespons": 92, "storeimagerequest": 92, "storeimagerespons": 92, "storemetadatarequest": 92, "storemetadatarespons": 92, "storestreamrequest": 92, "storestreamrespons": 92, "storedcaptureddata": 92, "storedlargecaptureddata": 92, "timerangequeri": 92, "data_acquisition_store_servic": 92, "dataacquisitionstoreservic": 92, "data_buff": 92, "datablob": 92, "operatorcom": 92, "recorddatablobsrequest": 92, "recorddatablobsrespons": 92, "recordeventsrequest": 92, "recordeventsrespons": 92, "recordoperatorcommentsrequest": 92, "recordoperatorcommentsrespons": 92, "recordsignalticksrequest": 92, "recordsignalticksrespons": 92, "recordtextmessagesrequest": 92, "recordtextmessagesrespons": 92, "registersignalschemarequest": 92, "registersignalschemarespons": 92, "signalschema": 92, "signalschemaid": 92, "signaltick": 92, "textmessag": 92, "logpreservehint": 92, "encod": 92, "data_buffer_servic": 92, "databufferservic": 92, "data_chunk": 92, "datachunk": 92, "data_index": 92, "blobpag": 92, "blobspec": 92, "databufferstatu": 92, "dataindex": 92, "dataqueri": 92, "deletedatapagesrequest": 92, "deletedatapagesrespons": 92, "deletepagestatu": 92, "eventspec": 92, "eventscom": 92, "eventscommentsspec": 92, "getdatabufferstatusrequest": 92, "getdatabufferstatusrespons": 92, "getdataindexrequest": 92, "getdataindexrespons": 92, "getdatapagesrequest": 92, "getdatapagesrespons": 92, "geteventscommentsrequest": 92, "geteventscommentsrespons": 92, "grpcpage": 92, "grpcspec": 92, "pageinfo": 92, "pagesandtimestamp": 92, "compress": 92, "pageformat": 92, "data_servic": 92, "dataservic": 92, "getserviceentryrequest": 92, "getserviceentryrespons": 92, "listserviceentriesrequest": 92, "listserviceentriesrespons": 92, "serviceentri": 92, "directory_registr": 92, "registerservicerequest": 92, "registerservicerespons": 92, "unregisterservicerequest": 92, "unregisterservicerespons": 92, "updateservicerequest": 92, "updateservicerespons": 92, "directory_registration_servic": 92, "directory_servic": 92, "configrang": 92, "dockstat": 92, "dockingcommandfeedbackrequest": 92, "dockingcommandfeedbackrespons": 92, "dockingcommandrequest": 92, "dockingcommandrespons": 92, "getdockingconfigrequest": 92, "getdockingconfigrespons": 92, "getdockingstaterequest": 92, "getdockingstaterespons": 92, "updatedockingparam": 92, "dockedstatu": 92, "linkstatu": 92, "docktyp": 92, "prepposebehavior": 92, "docking_servic": 92, "dockingservic": 92, "deregisterestopendpointrequest": 92, "deregisterestopendpointrespons": 92, "estopcheckinrequest": 92, "estopcheckinrespons": 92, "estopconfig": 92, "estopendpoint": 92, "estopendpointwithstatu": 92, "estopsystemstatu": 92, "getestopconfigrequest": 92, "getestopconfigrespons": 92, "getestopsystemstatusrequest": 92, "getestopsystemstatusrespons": 92, "registerestopendpointrequest": 92, "registerestopendpointrespons": 92, "setestopconfigrequest": 92, "setestopconfigrespons": 92, "estopstoplevel": 92, "estop_servic": 92, "estopservic": 92, "fault_servic": 92, "faultservic": 92, "full_body_command": 92, "fullbodycommand": 92, "box2": 92, "box2withfram": 92, "box3": 92, "box3withfram": 92, "circl": 92, "circlewithfram": 92, "cylindricalcoordin": 92, "frametreesnapshot": 92, "childtoparentedgemapentri": 92, "parentedg": 92, "matrix": 92, "matrixint32": 92, "matrixint64": 92, "matrixf": 92, "orientedbox2": 92, "plane": 92, "polylin": 92, "polygon": 92, "polygonwithexclus": 92, "quad": 92, "quaternion": 92, "rai": [92, 158, 313], "se2pos": 92, "se2veloc": 92, "se2velocitylimit": 92, "se3covari": 92, "se3pos": 92, "se3veloc": 92, "vec2": 92, "vec2valu": 92, "vec3": 92, "vec3valu": 92, "vector": 92, "volum": 92, "wrench": 92, "aggreg": [92, 132], "newgpsdatarequest": 92, "newgpsdatarespons": 92, "aggregator_servic": 92, "aggregatorservic": 92, "gpsdatapoint": 92, "accuraci": 92, "fixmod": 92, "satellit": 92, "gpsdevic": 92, "llh": 92, "locationandgpsdevic": 92, "filter": 92, "constel": 92, "getlocationrequest": 92, "getlocationrespons": 92, "gpsstate": 92, "resetregistrationrequest": 92, "resetregistrationrespons": 92, "registration_servic": 92, "registrationservic": 92, "graph_nav": [92, 283], "area_callback": 92, "areacallbackerror": 92, "areacallbackinform": 92, "areacallbackinformationrequest": 92, "areacallbackinformationrespons": 92, "begincallbackrequest": 92, "begincallbackrespons": 92, "begincontrolrequest": 92, "begincontrolrespons": 92, "endcallbackrequest": 92, "endcallbackrespons": 92, "regioninform": 92, "routechangerequest": 92, "routechangerespons": 92, "stopconfigur": 92, "updatecallbackrequest": 92, "updatecallbackrespons": 92, "navpolici": 92, "updateloc": 92, "callerror": 92, "entitywait": 92, "facedirect": 92, "stage": 92, "errortyp": 92, "localizationchang": 92, "area_callback_data": 92, "areacallbackdata": 92, "areacallbackmapconfig": 92, "area_callback_servic": 92, "areacallbackservic": 92, "gpslocal": 92, "areacallbackserviceerror": 92, "cleargraphrequest": 92, "cleargraphrespons": 92, "downloadedgesnapshotrequest": 92, "downloadedgesnapshotrespons": 92, "downloadgraphrequest": 92, "downloadgraphrespons": 92, "downloadgraphstreamingrespons": 92, "downloadwaypointsnapshotrequest": 92, "downloadwaypointsnapshotrespons": 92, "gpsnavigationparam": 92, "getlocalizationstaterequest": 92, "getlocalizationstaterespons": 92, "lostdetectorst": 92, "modifynavigationrespons": 92, "navigaterouterequest": 92, "navigaterouterespons": 92, "navigatetoanchorrequest": 92, "navigatetoanchorrespons": 92, "navigatetorequest": 92, "navigatetorespons": 92, "navigationfeedbackrequest": 92, "navigationfeedbackrespons": 92, "activeregioninform": 92, "activeregioninformationentri": 92, "areacallbackerrorsentri": 92, "remotepointcloudstatu": 92, "routefollowingparam": 92, "routegenparam": 92, "sensorcompatibilitystatu": 92, "setlocalizationrequest": 92, "setlocalizationrespons": 92, "suspectedambigu": 92, "travelparam": 92, "uploadedgesnapshotrequest": 92, "uploadedgesnapshotrespons": 92, "uploadgraphrequest": 92, "uploadgraphrespons": 92, "validationstatu": 92, "uploadgraphstreamingrequest": 92, "uploadwaypointsnapshotrequest": 92, "uploadwaypointsnapshotrespons": 92, "validategraphrequest": 92, "validategraphrespons": 92, "visualrefinementopt": 92, "gpsstatu": 92, "areacallbackstatu": 92, "blockagestatu": 92, "routefollowingstatu": 92, "stuckreason": 92, "resumebehavior": 92, "routeblockedbehavior": 92, "startroutebehavior": 92, "fiducialinit": 92, "qualitycheckresult": 92, "featurequalitytoler": 92, "pathplannermod": 92, "graph_nav_servic": 92, "lost_detect": 92, "lostdetectorstrict": 92, "anchoredworldobject": 92, "areacallbackregion": 92, "clientmetadata": 92, "areacallbacksentri": 92, "stairdata": 92, "edgesnapshot": 92, "mapstat": 92, "stat": 92, "regionwithfram": 92, "gpsset": 92, "localizeregion": 92, "circle2d": 92, "empti": 92, "loopclosureset": 92, "waypointsnapshot": 92, "annotationst": 92, "directionconstraint": 92, "groundclutteravoidancemod": 92, "pathfollowingmod": 92, "descentprefer": 92, "edgesourc": 92, "datafilt": 92, "waypointsourc": 92, "map_process": 92, "anchorhintuncertainti": 92, "anchoringhint": 92, "posebound": 92, "processanchoringrequest": 92, "measurementparam": 92, "optimizerparam": 92, "processanchoringrespons": 92, "gpsresult": 92, "processtopologyrequest": 92, "collisioncheckingparam": 92, "featurematchingparam": 92, "fiducialloopclosureparam": 92, "icpparam": 92, "odometryloopclosureparam": 92, "processtopologyrespons": 92, "waypointanchorhint": 92, "worldobjectanchorhint": 92, "map_processing_servic": 92, "mapprocessingservic": 92, "completedrout": 92, "completededg": 92, "createedgerequest": 92, "createedgerespons": 92, "createwaypointrequest": 92, "createwaypointrespons": 92, "getrecordstatusrequest": 92, "getrecordstatusrespons": 92, "recordingenviron": 92, "setrecordingenvironmentrequest": 92, "setrecordingenvironmentrespons": 92, "startrecordingrequest": 92, "startrecordingrespons": 92, "stoprecordingrequest": 92, "stoprecordingrespons": 92, "recording_servic": 92, "visual_featur": 92, "directionwithcovari": 92, "genericdescriptor": 92, "landmarkobservationindex": 92, "positionwithcovari": 92, "visualdescriptor": 92, "visualkeyfram": 92, "visualkeyframebundl": 92, "visualkeypoint": 92, "visuallandmark": 92, "gripper_camera_param": 92, "grippercameragetparamrequest": 92, "grippercameragetparamrespons": 92, "grippercameraparamrequest": 92, "grippercameraparamrespons": 92, "roiparamet": 92, "cameramod": 92, "ledmod": 92, "hdrparamet": 92, "roiwindows": 92, "gripper_camera_param_servic": 92, "grippercameraparamservic": 92, "gripper_command": 92, "clawgrippercommand": 92, "header": 92, "commonerror": 92, "requesthead": 92, "responsehead": 92, "captureparamet": 92, "getimagerequest": 92, "getimagerespons": 92, "imagecaptur": 92, "imagecaptureandsourc": 92, "imagerequest": 92, "imagerespons": 92, "imagesourc": 92, "kannalabrandtmodel": 92, "kannalabrandtintrins": 92, "pinholebrownconradi": 92, "pinholebrownconradyintrins": 92, "pinholemodel": 92, "cameraintrins": 92, "listimagesourcesrequest": 92, "listimagesourcesrespons": 92, "pixelformat": 92, "imagetyp": 92, "image_geometri": 92, "areai": 92, "rectanglei": 92, "image_servic": 92, "imageservic": 92, "ir_enable_dis": 92, "irenabledisablerequest": 92, "irenabledisablerespons": 92, "ir_enable_disable_servic": 92, "irenabledisableservic": 92, "actionaft": 92, "controlledmotorsoff": 92, "immediaterobotoff": 92, "leasestal": 92, "recordev": 92, "checkinrequest": 92, "checkinrespons": 92, "livepolici": 92, "modifypolicyrequest": 92, "modifypolicyrespons": 92, "policycontrolact": 92, "keepalive_servic": 92, "keepaliveservic": 92, "acquireleaserequest": 92, "acquireleaserespons": 92, "leaseown": 92, "leaseresourc": 92, "leaseuseresult": 92, "listleasesrequest": 92, "listleasesrespons": 92, "resourcetre": 92, "retainleaserequest": 92, "retainleaserespons": 92, "returnleaserequest": 92, "returnleaserespons": 92, "takeleaserequest": 92, "takeleaserespons": 92, "lease_servic": 92, "leaseservic": 92, "getfeatureenabledrequest": 92, "getfeatureenabledrespons": 92, "featureenabledentri": 92, "getlicenseinforequest": 92, "getlicenseinforespons": 92, "licenseinfo": 92, "license_servic": 92, "licenseservic": 92, "local_grid": 92, "getlocalgridtypesrequest": 92, "getlocalgridtypesrespons": 92, "getlocalgridsrequest": 92, "getlocalgridsrespons": 92, "localgrid": 92, "localgridext": 92, "localgridrequest": 92, "localgridrespons": 92, "localgridtyp": 92, "cellformat": 92, "local_grid_servic": 92, "localgridservic": 92, "log_statu": 92, "getactivelogstatusesrequest": 92, "getactivelogstatusesrespons": 92, "getlogstatusrequest": 92, "getlogstatusrespons": 92, "startexperimentlogrequest": 92, "startexperimentlogrespons": 92, "startretrologrequest": 92, "startretrologrespons": 92, "terminatelogrequest": 92, "terminatelogrespons": 92, "updateexperimentlogrequest": 92, "updateexperimentlogrespons": 92, "log_status_servic": 92, "logstatusservic": 92, "manipulation_api": 92, "allowableorient": 92, "apigraspoverrid": 92, "apigraspoverriderequest": 92, "apigraspoverriderespons": 92, "apigraspedcarrystateoverrid": 92, "graspparam": 92, "manipulationapifeedbackrequest": 92, "manipulationapifeedbackrespons": 92, "manipulationapirequest": 92, "manipulationapirespons": 92, "pickobject": 92, "pickobjectexecuteplan": 92, "pickobjectinimag": 92, "pickobjectrayinworld": 92, "rotationwithtoler": 92, "squeezegrasp": 92, "vectoralignmentwithtoler": 92, "walktoobjectinimag": 92, "walktoobjectrayinworld": 92, "overrid": [92, 236], "grasppositionconstraint": 92, "manipulationcamerasourc": 92, "manipulationfeedbackst": 92, "walkgazemod": 92, "manipulation_api_servic": 92, "manipulationapiservic": 92, "absolute_metr": 92, "absolutemetricssnapshot": 92, "metrics_logging_robot": 92, "getabsolutemetricsnapshotrequest": 92, "getabsolutemetricsnapshotrespons": 92, "getmetricsrequest": 92, "getmetricsrespons": 92, "getstoresequencerangerequest": 92, "getstoresequencerangerespons": 92, "metrics_logging_robot_servic": 92, "metricsloggingrobotservic": 92, "signed_proto": 92, "signedproto": 92, "answerquestionrequest": 92, "answerquestionrespons": 92, "failednod": 92, "getinforequest": 92, "getinforespons": 92, "getmissionrequest": 92, "getmissionrespons": 92, "getstaterequest": 92, "getstaterespons": 92, "loadmissionrequest": 92, "loadmissionrespons": 92, "missioninfo": 92, "nodeinfo": 92, "pausemissionrequest": 92, "pausemissionrespons": 92, "playmissionrequest": 92, "playmissionrespons": 92, "playset": 92, "question": [92, 295], "restartmissionrequest": 92, "restartmissionrespons": 92, "answeredquest": 92, "nodestatesattick": 92, "nodest": 92, "blackboardst": 92, "stopmissionrequest": 92, "stopmissionrespons": 92, "mission_servic": 92, "bosdyndockst": 92, "bosdyngraphnavloc": 92, "bosdyngraphnavst": 92, "bosdyngrippercameraparamsst": 92, "bosdynnavigaterout": 92, "bosdynnavigateto": 92, "bosdynpowerrequest": 92, "bosdynquerystoredcaptur": 92, "captureactionidformat": 92, "bosdynrecordev": 92, "additionalparametersentri": 92, "bosdynrobotcommand": 92, "bosdynrobotst": 92, "clearbehaviorfault": 92, "operand": 92, "constantresult": 92, "createmissiontext": 92, "dataacquisitiononinterrupt": 92, "datetoblackboard": 92, "defineblackboard": 92, "fordur": 92, "formatblackboard": 92, "missionuploadchoreographi": 92, "paralleland": 92, "prompt": [92, 295], "optionslist": 92, "restartwhenpaus": 92, "retainleas": 92, "retri": 92, "selector": 92, "setblackboard": 92, "setgraspoverrid": 92, "setgrippercameraparam": 92, "simpleparallel": 92, "spotcamfocusst": 92, "adjustparamet": 92, "spotcamresetautofocu": 92, "spotcamstoremedia": 92, "storemetadata": 92, "switch": 92, "intchildrenentri": 92, "compar": 92, "handlestal": 92, "completionbehavior": 92, "establishsessionrequest": 92, "establishsessionrespons": 92, "getremotemissionserviceinforequest": 92, "getremotemissionserviceinforespons": 92, "stoprequest": 92, "stoprespons": 92, "teardownsessionrequest": 92, "teardownsessionrespons": 92, "tickrequest": 92, "tickrespons": 92, "remote_servic": 92, "util": [92, 103, 165, 185, 209, 215, 216, 220, 224], "constantvalu": 92, "keyvalu": 92, "missiontext": 92, "userdata": 92, "variabledeclar": 92, "result": [92, 283], "mobility_command": 92, "mobilitycommand": 92, "network_compute_bridg": 92, "availablemodel": 92, "computeparamet": 92, "imagesourceandservic": 92, "listavailablemodelsrequest": 92, "listavailablemodelsrespons": 92, "modeldata": 92, "modellabel": 92, "networkcomputeinputdata": 92, "networkcomputeinputdatabridg": 92, "networkcomputeinputdatawork": 92, "networkcomputerequest": 92, "networkcomputerespons": 92, "outputimagesentri": 92, "roioutputdataentri": 92, "networkcomputeserverconfigur": 92, "outputdata": 92, "outputimag": 92, "outputimagespec": 92, "workercomputerequest": 92, "workercomputerespons": 92, "listavailablemodelsstatu": 92, "rotateimag": 92, "networkcomputestatu": 92, "network_compute_bridge_servic": 92, "network_stat": 92, "associ": 92, "wifidevic": 92, "wifistat": 92, "jointlimit": 92, "listpayloadsrequest": 92, "listpayloadsrespons": 92, "momentofintertia": 92, "payloadmassvolumeproperti": 92, "payloadpreset": 92, "mountframenam": 92, "payload_estim": 92, "payloadestimationcommand": 92, "payload_registr": 92, "getpayloadauthtokenrequest": 92, "getpayloadauthtokenrespons": 92, "payloadcredenti": 92, "registerpayloadrequest": 92, "registerpayloadrespons": 92, "updatepayloadattachedrequest": 92, "updatepayloadattachedrespons": 92, "updatepayloadversionrequest": 92, "updatepayloadversionrespons": 92, "payload_registration_servic": 92, "payload_servic": 92, "point_cloud": 92, "getpointcloudrequest": 92, "getpointcloudrespons": 92, "listpointcloudsourcesrequest": 92, "listpointcloudsourcesrespons": 92, "pointcloud": 92, "encodingparamet": 92, "pointcloudrequest": 92, "pointcloudrespons": 92, "pointcloudsourc": 92, "point_cloud_servic": 92, "pointcloudservic": 92, "fanpowercommandfeedbackrequest": 92, "fanpowercommandfeedbackrespons": 92, "fanpowercommandrequest": 92, "fanpowercommandrespons": 92, "powercommandfeedbackrequest": 92, "powercommandfeedbackrespons": 92, "powercommandrequest": 92, "powercommandrespons": 92, "resetsafetystoprequest": 92, "resetsafetystoprespons": 92, "powercommandstatu": 92, "safetystoptyp": 92, "power_servic": 92, "powerservic": 92, "ray_cast": 92, "rayintersect": 92, "raycastrequest": 92, "raycastrespons": 92, "ray_cast_servic": 92, "raycastservic": 92, "robot_command": 92, "clearbehaviorfaultrequest": 92, "clearbehaviorfaultrespons": 92, "jointcontrolstreamrequest": 92, "jointcontrolstreamrespons": 92, "robotcommand": 92, "robotcommandfeedback": 92, "robotcommandfeedbackrequest": 92, "robotcommandfeedbackrespons": 92, "robotcommandrequest": 92, "robotcommandrespons": 92, "robot_command_servic": 92, "robotcommandservic": 92, "robotcommandstreamingservic": 92, "robot_id": 92, "robotid": 92, "robotidrequest": 92, "robotidrespons": 92, "robotsoftwarereleas": 92, "softwarevers": 92, "robot_id_servic": 92, "robotidservic": 92, "robot_st": 92, "batteryst": 92, "behaviorfault": 92, "behaviorfaultst": 92, "behaviorst": 92, "combinedjointst": 92, "commsstat": 92, "estopst": 92, "footstat": 92, "terrainst": 92, "hardwareconfigur": 92, "imust": 92, "packet": 92, "jointstat": 92, "kinematicst": 92, "manipulatorst": 92, "motortemperatur": 92, "powerst": 92, "robothardwareconfigurationrequest": 92, "robothardwareconfigurationrespons": 92, "robotimpairedst": 92, "robotlinkmodelrequest": 92, "robotlinkmodelrespons": 92, "robotmetr": 92, "robotmetricsrequest": 92, "robotmetricsrespons": 92, "robotst": 92, "robotstaterequest": 92, "robotstaterespons": 92, "robotstatestreamrequest": 92, "robotstatestreamrespons": 92, "commandst": 92, "servicefaultst": 92, "aggregatedentri": 92, "skeleton": 92, "objmodel": 92, "systemfault": 92, "systemfaultst": 92, "systemst": 92, "wifist": 92, "caus": 92, "contact": [92, 104, 241], "carryst": 92, "stowstat": 92, "motorpowerst": 92, "payloadportspowerst": 92, "robotpowerst": 92, "shorepowerst": 92, "wifiradiopowerst": 92, "impairedstatu": 92, "sever": 92, "robot_state_servic": 92, "robotstateservic": 92, "robotstatestreamingservic": 92, "service_custom": 92, "boolparam": 92, "customparam": 92, "customparamcollect": 92, "customparamerror": 92, "dictparam": 92, "childspec": 92, "specsentri": 92, "valuesentri": 92, "doubleparam": 92, "int64param": 92, "listparam": 92, "oneofparam": 92, "regionofinterestparam": 92, "serviceandsourc": 92, "stringparam": 92, "userinterfaceinfo": 92, "service_fault": 92, "clearservicefaultrequest": 92, "clearservicefaultrespons": 92, "servicefault": 92, "servicefaultid": 92, "triggerservicefaultrequest": 92, "triggerservicefaultrespons": 92, "alertconditionspec": 92, "sensoroutputspec": 92, "signaldata": 92, "signaldisplayinfo": 92, "signalspec": 92, "sparse_featur": 92, "keypoint": 92, "keypointmatch": 92, "keypointset": 92, "match": 92, "matchtyp": 92, "keypointtyp": 92, "choreography_param": 92, "animateparam": 92, "animatedcycleparam": 92, "armmoveparam": 92, "bodyholdparam": 92, "bourreeparam": 92, "buttcircleparam": 92, "buzzernoteparam": 92, "chickenheadparam": 92, "clapparam": 92, "crawlparam": 92, "customgaitcommand": 92, "customgaitcommandlimit": 92, "customgaitparam": 92, "eulerratezyxvalu": 92, "eulerzyx": 92, "eulerzyxvalu": 92, "fadecolorparam": 92, "fidgetstandparam": 92, "figure8param": 92, "framesnapshotparam": 92, "frontupparam": 92, "gotoparam": 92, "gripperparam": 92, "hopparam": 92, "independentcolorparam": 92, "jumpparam": 92, "kneelcircleparam": 92, "kneellegmove2param": 92, "kneellegmoveparam": 92, "legjointparam": 92, "pace2stepparam": 92, "randomrotateparam": 92, "ripplecolorparam": 92, "rotatebodyparam": 92, "runningmanparam": 92, "setallcolorparam": 92, "setaudiovisualcolorparam": 92, "setcolorparam": 92, "sideparam": 92, "stanceshap": 92, "stepparam": 92, "swayparam": 92, "swingparam": 92, "swingphas": 92, "turnparam": 92, "twerkparam": 92, "workspacearmmoveparam": 92, "armmovefram": 92, "eas": 92, "fidgetpreset": 92, "inclus": 92, "lead": 92, "ledlight": 92, "pivot": 92, "lightsid": 92, "side": 92, "swaystyl": 92, "choreography_sequ": 92, "activemov": 92, "animatearm": 92, "handpos": 92, "animatebodi": 92, "animategripp": 92, "animateleg": 92, "animatesingleleg": 92, "animationkeyfram": 92, "armjointangl": 92, "choreographerdisplayinfo": 92, "choreographersav": 92, "choreographycommandrequest": 92, "choreographycommandrespons": 92, "choreographyinfo": 92, "choreographysequ": 92, "choreographystatelog": 92, "choreographystatusrequest": 92, "choreographystatusrespons": 92, "choreographytimeadjustrequest": 92, "choreographytimeadjustrespons": 92, "clearallsequencefilesrequest": 92, "clearallsequencefilesrespons": 92, "deletesequencerequest": 92, "deletesequencerespons": 92, "downloadrobotstatelogrequest": 92, "downloadrobotstatelogrespons": 92, "executechoreographyrequest": 92, "executechoreographyrespons": 92, "getanimationrequest": 92, "getanimationrespons": 92, "getchoreographysequencerequest": 92, "getchoreographysequencerespons": 92, "legjointangl": 92, "listallmovesrequest": 92, "listallmovesrespons": 92, "listallsequencesrequest": 92, "listallsequencesrespons": 92, "loggedfootcontact": 92, "loggedjoint": 92, "loggedstatekeyfram": 92, "modifychoreographyinforequest": 92, "modifychoreographyinforespons": 92, "movecommand": 92, "moveinfo": 92, "moveparam": 92, "savesequencerequest": 92, "savesequencerespons": 92, "sequenceinfo": 92, "startrecordingstaterequest": 92, "startrecordingstaterespons": 92, "stoprecordingstaterequest": 92, "stoprecordingstaterespons": 92, "uploadanimatedmoverequest": 92, "uploadanimatedmoverespons": 92, "uploadchoreographyrequest": 92, "uploadchoreographyrespons": 92, "armplayback": 92, "logtyp": 92, "transitionst": 92, "savedst": 92, "choreography_servic": 92, "choreographyservic": 92, "doorcommand": 92, "autograspcommand": 92, "autopushcommand": 92, "warmstartcommand": 92, "opendoorcommandrequest": 92, "opendoorcommandrespons": 92, "opendoorfeedbackrequest": 92, "opendoorfeedbackrespons": 92, "handletyp": 92, "hingesid": 92, "swingdirect": 92, "door_area_callback": 92, "areacallbackdoorconfig": 92, "door_servic": 92, "doorservic": 92, "inverse_kinemat": 92, "inversekinematicsrequest": 92, "bodymountedtool": 92, "fixedst": 92, "ongroundplanest": 92, "toolgazetask": 92, "toolposetask": 92, "wristmountedtool": 92, "inversekinematicsrespons": 92, "namedarmconfigur": 92, "inverse_kinematics_servic": 92, "inversekinematicsservic": 92, "bodycontrolparam": 92, "bodyassistformanipul": 92, "bodypos": 92, "bodyexternalforceparam": 92, "mobilityparam": 92, "obstacleparam": 92, "terrainparam": 92, "rotationset": 92, "externalforceind": 92, "locomotionhint": 92, "hazarddetectionmod": 92, "stairsmod": 92, "swingheight": 92, "gratedsurfacesmod": 92, "spot_check": 92, "cameracalibrationcommandrequest": 92, "cameracalibrationcommandrespons": 92, "cameracalibrationfeedbackrequest": 92, "cameracalibrationfeedbackrespons": 92, "depthplanespotcheckresult": 92, "footheightcheckresult": 92, "hiprangeofmotionresult": 92, "jointkinematiccheckresult": 92, "legpaircheckresult": 92, "loadcellspotcheckresult": 92, "payloadcheckresult": 92, "spotcheckcommandrequest": 92, "spotcheckcommandrespons": 92, "spotcheckfeedbackrequest": 92, "spotcheckfeedbackrespons": 92, "cameraresultsentri": 92, "hiprangeofmotionresultsentri": 92, "kinematiccalresultsentri": 92, "loadcellresultsentri": 92, "spot_check_servic": 92, "spotcheckservic": 92, "spot_const": 92, "jointindex": 92, "legdoford": 92, "legindex": 92, "spot_cam": 92, "led": 92, "getledbrightnessrequest": 92, "getledbrightnessrespons": 92, "setledbrightnessrequest": 92, "setledbrightnessrespons": 92, "deletesoundrequest": 92, "deletesoundrespons": 92, "getaudiocapturechannelrequest": 92, "getaudiocapturechannelrespons": 92, "getaudiocapturegainrequest": 92, "getaudiocapturegainrespons": 92, "getvolumerequest": 92, "getvolumerespons": 92, "listsoundsrequest": 92, "listsoundsrespons": 92, "loadsoundrequest": 92, "loadsoundrespons": 92, "playsoundrequest": 92, "playsoundrespons": 92, "setaudiocapturechannelrequest": 92, "setaudiocapturechannelrespons": 92, "setaudiocapturegainrequest": 92, "setaudiocapturegainrespons": 92, "setvolumerequest": 92, "setvolumerespons": 92, "sound": 92, "audiocapturechannel": 92, "pinholeintrins": 92, "sphericallimit": 92, "compositor": [92, 170], "getircolormaprequest": 92, "getircolormaprespons": 92, "getirmeteroverlayrequest": 92, "getirmeteroverlayrespons": 92, "getscreenrequest": 92, "getscreenrespons": 92, "getvisiblecamerasrequest": 92, "getvisiblecamerasrespons": 92, "window": 92, "ircolormap": 92, "scalingpair": 92, "irmeteroverlai": 92, "deltapair": 92, "normalizedcoordin": 92, "tempunit": 92, "listscreensrequest": 92, "listscreensrespons": 92, "screendescript": 92, "setircolormaprequest": 92, "setircolormaprespons": 92, "setirmeteroverlayrequest": 92, "setirmeteroverlayrespons": 92, "setscreenrequest": 92, "setscreenrespons": 92, "colormap": 92, "tempunittyp": 92, "health": [92, 171], "clearbiteventsrequest": 92, "clearbiteventsrespons": 92, "getbitstatusrequest": 92, "getbitstatusrespons": 92, "degrad": 92, "getsystemlogrequest": 92, "getsystemlogrespons": 92, "gettemperaturerequest": 92, "gettemperaturerespons": 92, "temperatur": 92, "degradationtyp": 92, "debugrequest": 92, "debugrespons": 92, "deleterequest": 92, "deleterespons": 92, "listcamerasrequest": 92, "listcamerasrespons": 92, "listlogpointsrequest": 92, "listlogpointsrespons": 92, "logpoint": 92, "calibr": 92, "imageparam": 92, "retrieverawdatarequest": 92, "retrieverawdatarespons": 92, "retrieverequest": 92, "retrieverespons": 92, "setpassphraserequest": 92, "setpassphraserespons": 92, "storerequest": 92, "storerespons": 92, "tagrequest": 92, "tagrespons": 92, "queuestatu": 92, "recordtyp": 92, "geticeconfigurationrequest": 92, "geticeconfigurationrespons": 92, "getnetworksettingsrequest": 92, "getnetworksettingsrespons": 92, "getsslcertrequest": 92, "getsslcertrespons": 92, "iceserv": 92, "auth_param": 92, "oauth_pair": 92, "networktupl": 92, "seticeconfigurationrequest": 92, "seticeconfigurationrespons": 92, "icetransport": 92, "servertyp": 92, "cyclepowerrequest": 92, "cyclepowerrespons": 92, "getpowerstatusrequest": 92, "getpowerstatusrespons": 92, "powerstatu": 92, "setpowerstatusrequest": 92, "setpowerstatusrespons": 92, "ptz": [92, 177], "getptzfocusstaterequest": 92, "getptzfocusstaterespons": 92, "getptzpositionrequest": 92, "getptzpositionrespons": 92, "getptzvelocityrequest": 92, "getptzvelocityrespons": 92, "initializelensrequest": 92, "initializelensrespons": 92, "listptzrequest": 92, "listptzrespons": 92, "ptzdescript": 92, "ptzfocusst": 92, "ptzposit": 92, "ptzveloc": 92, "setptzfocusstaterequest": 92, "setptzfocusstaterespons": 92, "setptzpositionrequest": 92, "setptzpositionrespons": 92, "setptzvelocityrequest": 92, "setptzvelocityrespons": 92, "ptzfocusmod": 92, "audioservic": 92, "compositorservic": 92, "healthservic": 92, "lightingservic": 92, "medialogservic": 92, "networkservic": 92, "ptzservic": 92, "streamqualityservic": 92, "versionservic": 92, "streamqual": [92, 178], "enablecongestioncontrolrequest": 92, "enablecongestioncontrolrespons": 92, "getstreamparamsrequest": 92, "getstreamparamsrespons": 92, "setstreamparamsrequest": 92, "setstreamparamsrespons": 92, "streamparam": 92, "autoexposur": 92, "awbmod": 92, "manualexposur": 92, "syncautoexposur": 92, "awbmodeenum": 92, "getsoftwareversionrequest": 92, "getsoftwareversionrespons": 92, "stairtransform": 92, "staircaseland": 92, "staircasewithland": 92, "straightstaircas": 92, "land": 92, "knowledgetyp": 92, "boundedwidth": 92, "synchronized_command": 92, "time_rang": 92, "timerang": 92, "time_sync": 92, "timesyncestim": 92, "timesyncroundtrip": 92, "timesyncst": 92, "timesyncupdaterequest": 92, "timesyncupdaterespons": 92, "time_sync_servic": 92, "timesyncservic": 92, "trajectori": [92, 238, 242, 275], "se2trajectori": 92, "se2trajectorypoint": 92, "se3trajectori": 92, "se3trajectorypoint": 92, "scalartrajectori": 92, "scalartrajectorypoint": 92, "vec3trajectori": 92, "vec3trajectorypoint": 92, "wrenchtrajectori": 92, "wrenchtrajectorypoint": 92, "angularinterpol": 92, "positionalinterpol": 92, "pressureenum": 92, "temperatureenum": 92, "world_object": 92, "apriltagproperti": 92, "boundingboxproperti": 92, "dockproperti": 92, "drawablearrow": 92, "drawablebox": 92, "drawablecapsul": 92, "drawablecylind": 92, "drawablefram": 92, "drawablelinestrip": 92, "drawablepoint": 92, "drawableproperti": 92, "drawablespher": 92, "gpsproperti": 92, "imageproperti": 92, "listworldobjectrequest": 92, "listworldobjectrespons": 92, "mutateworldobjectrequest": 92, "mutat": [92, 336], "mutateworldobjectrespons": 92, "nogoregionproperti": 92, "rayproperti": 92, "staircaseproperti": 92, "worldobject": 92, "apriltagposestatu": 92, "worldobjecttyp": 92, "world_object_servic": 92, "worldobjectservic": 92, "scalar": 92, "standard": 93, "convers": 95, "To": [96, 328], "handler": 100, "surfac": [104, 241], "async": 105, "task": 105, "chunk": 120, "nmeapars": 130, "listen": [133, 282], "hierarchi": 143, "valid": 144, "metric": [151, 283], "processor": 157, "cast": [158, 313], "media": 174, "cach": 182, "reader": [189, 193, 196, 197, 198, 200, 201, 203, 204, 206], "writer": [190, 194, 199, 202, 205], "index": 195, "pod": [201, 202], "constant": 212, "recommend": [225, 294], "introductori": 225, "intermedi": 225, "problem": [226, 228, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 283, 289, 290], "begin": 227, "end": 227, "without": [227, 270, 315], "freez": 232, "gcode": 234, "draw": 234, "chalk": 234, "carri": 236, "jointmov": 238, "long": [238, 242], "span": 247, "respons": [247, 305], "gui": [247, 270], "credenti": 248, "gcp": 248, "aw": 248, "comm": [249, 250], "modem": 253, "add": 254, "get_com": 255, "py": [255, 271], "get_ev": 255, "get_index": 255, "get_pag": 255, "delete_pag": 255, "emiss": 257, "my": 258, "percept": 267, "troubleshoot": [270, 271, 283, 297, 321, 329], "generate_extension_data": 271, "build_extens": 271, "extract": 272, "gener": [273, 317], "apriltag": 274, "movement": 274, "distanc": 274, "depth": 276, "io": [282, 324], "interpret": 283, "wai": 283, "extractor": 285, "actual": 285, "armless": 291, "squat": 291, "wiggl": 291, "through": 293, "lte": 294, "coreio": 294, "answer": 295, "mission_question_answer": 295, "replai": [295, 296, 316], "fire": 298, "extinguish": 298, "detector": 298, "export": [298, 302, 303], "anomali": 300, "backup": 301, "send": 307, "back": 307, "weather": 308, "forcast": 308, "vocabulari": 310, "On": 310, "sitehub": 310, "host": 310, "allow": 310, "detach": 311, "post": 312, "incorpor": 315, "one": 315, "two": 315, "reset": 317, "primari": 317, "redund": 317, "ricoh": 318, "theta": 318, "item": [318, 328], "pc": [318, 328], "demo": 319, "announc": 319, "spotcor": 320, "app": 321, "video": 324, "respond": 325, "tensorflow": 326, "In": 327, "offset": 327, "stitch": 328, "togeth": 328, "tester": 329, "velodyn": 333, "coordin": 337, "xbox": 338, "instruct": 338}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Spot SDK": [[0, "spot-sdk"]], "Contents": [[0, "contents"], [1, "contents"], [3, "contents"], [7, "contents"], [27, "contents"], [38, "contents"], [47, "contents"], [49, "contents"], [54, "contents"], [55, "contents"], [59, "contents"], [70, "contents"], [73, "contents"], [75, "contents"], [76, "contents"], [82, "contents"], [91, "contents"], [93, "contents"], [94, "contents"], [98, "contents"], [131, "contents"], [168, "contents"], [187, "contents"], [188, "contents"], [210, "contents"], [217, "contents"], [221, "contents"], [225, "contents"], [252, "contents"], [259, "contents"], [260, "contents"], [261, "contents"], [262, "contents"], [264, "contents"], [265, "contents"], [266, "contents"], [267, "contents"], [268, "contents"]], "Concepts": [[1, "concepts"]], "Spot API": [[1, "spot-api"]], "Orbit API": [[1, "orbit-api"], [55, "orbit-api"]], "About Spot": [[2, "about-spot"]], "Cameras": [[2, "cameras"]], "Hips and joints": [[2, "hips-and-joints"]], "Robot specifications": [[2, "robot-specifications"]], "Dimensions": [[2, "dimensions"]], "Environment": [[2, "environment"]], "Power": [[2, "power"], [156, "module-bosdyn.client.power"], [176, "module-bosdyn.client.spot_cam.power"]], "Payload": [[2, "payload"], [92, "payload"], [153, "module-bosdyn.client.payload"]], "Sensing": [[2, "sensing"]], "Connectivity": [[2, "connectivity"]], "Spot Arm and Gripper": [[3, "spot-arm-and-gripper"]], "Arm Concepts": [[4, "arm-concepts"]], "SynchronizedCommand": [[4, "synchronizedcommand"], [92, "synchronizedcommand"]], "Requests": [[4, "requests"]], "Feedback": [[4, "feedback"]], "ArmCommand Requests": [[4, "armcommand-requests"]], "Cartesian Moves": [[4, "cartesian-moves"]], "Joint Moves": [[4, "joint-moves"]], "Predefined Poses": [[4, "predefined-poses"]], "Arm Velocity": [[4, "arm-velocity"]], "Gaze": [[4, "gaze"]], "Stop": [[4, "stop"]], "Drag": [[4, "drag"]], "Mobility Request": [[4, "mobility-request"]], "FollowArmCommand": [[4, "followarmcommand"], [92, "followarmcommand"]], "Hand frame": [[4, "hand-frame"]], "Collision avoidance": [[4, "collision-avoidance"]], "Body force limiter": [[4, "body-force-limiter"]], "Safety notes": [[4, "safety-notes"]], "Arm Services": [[5, "arm-services"]], "Manipulation Service": [[5, "manipulation-service"]], "ArmSurfaceContact Service": [[5, "armsurfacecontact-service"]], "Door Service": [[5, "door-service"]], "Inverse Kinematics Service": [[5, "inverse-kinematics-service"], [290, "inverse-kinematics-service"]], "Frames": [[5, "frames"]], "Arm and gripper specifications": [[6, "arm-and-gripper-specifications"]], "Joint ranges of motion and link lengths": [[6, "joint-ranges-of-motion-and-link-lengths"]], "Arm specifications": [[6, "arm-specifications"]], "Gripper specifications": [[6, "gripper-specifications"]], "How big an object can the gripper grasp": [[6, "how-big-an-object-can-the-gripper-grasp"]], "Gripper safety": [[6, "gripper-safety"]], "Pinch points": [[6, "pinch-points"]], "Autonomy": [[7, "autonomy"]], "AutoReturn Service": [[8, "autoreturn-service"]], "What is AutoReturn?": [[8, "what-is-autoreturn"]], "Why would I want to use AutoReturn?": [[8, "why-would-i-want-to-use-autoreturn"]], "Why would I NOT want to use AutoReturn?": [[8, "why-would-i-not-want-to-use-autoreturn"]], "How do I use AutoReturn?": [[8, "how-do-i-use-autoreturn"]], "Configuring AutoReturn": [[8, "configuring-autoreturn"]], "What happens when AutoReturn finishes?": [[8, "what-happens-when-autoreturn-finishes"]], "Using AutoReturn Safely": [[8, "using-autoreturn-safely"]], "Autonomous navigation code examples": [[9, "autonomous-navigation-code-examples"]], "Navigation Services": [[10, "navigation-services"]], "Autowalk Service": [[11, "autowalk-service"], [90, "autowalk-service"]], "Terminology": [[11, "terminology"]], "How Autowalks Differs From Missions": [[11, "how-autowalks-differs-from-missions"]], "Autowalk Format": [[11, "autowalk-format"]], "Components of an Element": [[11, "components-of-an-element"]], "Docking in Autowalk Missions": [[11, "docking-in-autowalk-missions"]], "Autowalk Service RPCs": [[11, "autowalk-service-rpcs"]], "Node Identifiers": [[11, "node-identifiers"]], "Debugging Autowalk Service RPC Failures": [[11, "debugging-autowalk-service-rpc-failures"]], "Breaking the \u201cGo Here, Do This\u201d Structure": [[11, "breaking-the-go-here-do-this-structure"]], "Components of Navigation": [[12, "components-of-navigation"]], "Directed Exploration": [[13, "directed-exploration"]], "What is Directed Exploration?": [[13, "what-is-directed-exploration"]], "When is Directed Exploration invoked?": [[13, "when-is-directed-exploration-invoked"]], "How to enable/disable Directed Exploration": [[13, "how-to-enable-disable-directed-exploration"]], "Docking": [[14, "docking"], [90, "docking"], [90, "id163"], [124, "module-bosdyn.client.docking"]], "Spot Dock": [[14, "spot-dock"]], "Docking Service": [[14, "docking-service"]], "Typical Usage": [[14, "typical-usage"]], "Docking the Robot": [[14, "docking-the-robot"]], "Undocking the Robot": [[14, "undocking-the-robot"]], "Docking Config": [[14, "docking-config"]], "Docking State": [[14, "docking-state"]], "GPS on Spot": [[15, "gps-on-spot"]], "Hardware Integration": [[15, "hardware-integration"]], "GPS Receiver Overview": [[15, "gps-receiver-overview"]], "Attaching GPS Receivers to Spot": [[15, "attaching-gps-receivers-to-spot"]], "Writing Custom GPS Services": [[15, "writing-custom-gps-services"]], "Background": [[15, "background"]], "Common Reference Frames": [[15, "common-reference-frames"]], "Software Integration": [[15, "software-integration"]], "Registration to Odometry": [[15, "registration-to-odometry"]], "Registration to Graph Nav Maps": [[15, "registration-to-graph-nav-maps"]], "Navigating using Graph Nav and GPS": [[15, "navigating-using-graph-nav-and-gps"]], "RPCs": [[15, "rpcs"]], "Tablet": [[15, "tablet"]], "GPS Status Display": [[15, "gps-status-display"]], "Recording an Autowalk Mission with GPS": [[15, "recording-an-autowalk-mission-with-gps"]], "GraphNav and Robot Locomotion": [[16, "graphnav-and-robot-locomotion"]], "NavigateTo": [[16, "navigateto"]], "NavigateRoute": [[16, "navigateroute"]], "NavigateToAnchor": [[16, "navigatetoanchor"]], "Status and feedback": [[16, "status-and-feedback"]], "Autonomous navigation errors": [[16, "autonomous-navigation-errors"]], "GraphNav Area Callbacks": [[17, "graphnav-area-callbacks"]], "Introduction": [[17, "introduction"]], "How does an Area Callback work?": [[17, "how-does-an-area-callback-work"]], "Area Callback Policies": [[17, "area-callback-policies"]], "Example: Crosswalk SpotCAM Light": [[17, "example-crosswalk-spotcam-light"]], "The Life Cycle of an Area Callback": [[17, "the-life-cycle-of-an-area-callback"]], "Startup": [[17, "startup"]], "Recording": [[17, "recording"], [159, "module-bosdyn.client.recording"]], "Execution": [[17, "execution"], [297, "execution"], [298, "execution"], [321, "execution"], [326, "execution"], [338, "execution"]], "Service Shutdown": [[17, "service-shutdown"]], "Creating an Area Callback": [[17, "creating-an-area-callback"]], "Configuring behavior for a callback": [[17, "configuring-behavior-for-a-callback"]], "Expected Blockages": [[17, "expected-blockages"]], "Impairment Check": [[17, "impairment-check"]], "Entity Waiting": [[17, "entity-waiting"]], "Stop Configuration": [[17, "stop-configuration"]], "How to write a callback\u2019s run()": [[17, "how-to-write-a-callback-s-run"]], "Controlling the Robot": [[17, "controlling-the-robot"]], "Updating the localization": [[17, "updating-the-localization"]], "Reporting Errors": [[17, "reporting-errors"]], "Handling Re-routing": [[17, "handling-re-routing"]], "Testing an Area Callback": [[17, "testing-an-area-callback"]], "Test runner script": [[17, "test-runner-script"]], "Test within GraphNav": [[17, "test-within-graphnav"]], "GraphNav Map Structure": [[18, "graphnav-map-structure"], [287, "graphnav-map-structure"]], "View Map Python Example": [[18, "view-map-python-example"]], "Recording and Modifying Maps": [[18, "recording-and-modifying-maps"]], "Creating waypoints": [[18, "creating-waypoints"]], "Creating edges": [[18, "creating-edges"]], "Map Processing": [[18, "map-processing"], [149, "module-bosdyn.client.map_processing"]], "Topology Processing": [[18, "topology-processing"]], "Why are loops important?": [[18, "why-are-loops-important"]], "Automatic Loop Closure": [[18, "automatic-loop-closure"]], "Ensuring good topology": [[18, "ensuring-good-topology"]], "Anchorings and Anchoring Optimization": [[18, "anchorings-and-anchoring-optimization"]], "What can you do with anchorings?": [[18, "what-can-you-do-with-anchorings"]], "Map Data Transfer": [[18, "map-data-transfer"]], "Downloading maps": [[18, "downloading-maps"]], "Download a map from the controller tablet": [[18, "download-a-map-from-the-controller-tablet"]], "Uploading maps": [[18, "uploading-maps"]], "GraphNav Service": [[19, "graphnav-service"]], "Navigation": [[19, "navigation"], [90, "navigation"], [90, "id53"]], "GraphNavService RPCs": [[19, "graphnavservice-rpcs"]], "GraphNavRecordingService RPCs": [[19, "graphnavrecordingservice-rpcs"]], "Autonomy Technical Summary": [[20, "autonomy-technical-summary"]], "About GraphNav": [[20, "about-graphnav"]], "Key concepts": [[20, "key-concepts"]], "Waypoints": [[20, "waypoints"]], "Edges": [[20, "edges"]], "Mapping the environment": [[20, "mapping-the-environment"]], "Initialization and localization": [[20, "initialization-and-localization"]], "Lost robots": [[20, "lost-robots"], [22, "lost-robots"]], "Notes on Using Localization Data": [[20, "notes-on-using-localization-data"]], "GraphNav Initialization": [[21, "graphnav-initialization"]], "Initializing with fiducials": [[21, "initializing-with-fiducials"]], "About fiducials": [[21, "about-fiducials"]], "Placing fiducials": [[21, "placing-fiducials"]], "Initializing with search": [[21, "initializing-with-search"]], "Initializing with local geometry and texture": [[21, "initializing-with-local-geometry-and-texture"]], "GraphNav Localization": [[22, "graphnav-localization"]], "Localization update interval": [[22, "localization-update-interval"]], "Feature Deserts": [[22, "feature-deserts"]], "Stuck robots": [[22, "stuck-robots"]], "Stairs and other edge constraints": [[22, "stairs-and-other-edge-constraints"]], "GraphNav Origin": [[22, "graphnav-origin"]], "Mission Service": [[23, "mission-service"]], "Behavior trees": [[23, "behavior-trees"]], "Behavior tree blackboard": [[23, "behavior-tree-blackboard"]], "Behavior tree node types": [[23, "behavior-tree-node-types"]], "Structural nodes": [[23, "structural-nodes"]], "Action nodes": [[23, "action-nodes"]], "Creating a behavior tree": [[23, "creating-a-behavior-tree"]], "Simple sequence example": [[23, "simple-sequence-example"]], "More complex behavior tree example": [[23, "more-complex-behavior-tree-example"]], "MissionService RPCs": [[23, "missionservice-rpcs"]], "RemoteMissionService RPCs": [[23, "remotemissionservice-rpcs"]], "Typical Autonomous Use Case": [[24, "typical-autonomous-use-case"]], "Base Services": [[25, "base-services"]], "robot-id": [[25, "robot-id"]], "auth": [[25, "auth"]], "directory": [[25, "directory"]], "time-sync": [[25, "time-sync"]], "lease": [[25, "lease"]], "BDDF data format": [[26, "bddf-data-format"]], "Motivation": [[26, "motivation"]], "Organization": [[26, "organization"]], "Identifying data series": [[26, "identifying-data-series"]], "Data series annotations": [[26, "data-series-annotations"]], "File structure": [[26, "file-structure"]], "Spot Choreography SDK": [[27, "spot-choreography-sdk"]], "Animation files for Choreographer": [[28, "animation-files-for-choreographer"]], "File specification": [[28, "file-specification"]], "File name and extension": [[28, "file-name-and-extension"]], "Structure": [[28, "structure"]], "Units": [[28, "units"], [92, "units"]], "Commenting": [[28, "commenting"]], "Options file section": [[28, "options-file-section"]], "Supported keywords for the Options section": [[28, "supported-keywords-for-the-options-section"]], "Parameters file section": [[28, "parameters-file-section"]], "Supported parameters pertaining to all tracks": [[28, "supported-parameters-pertaining-to-all-tracks"]], "Supported parameters when controlling the body track": [[28, "supported-parameters-when-controlling-the-body-track"]], "Supported parameters when controlling the arm track": [[28, "supported-parameters-when-controlling-the-arm-track"]], "Supported parameters when controlling the gripper track": [[28, "supported-parameters-when-controlling-the-gripper-track"]], "Supported parameters when controlling arm and gripper tracks": [[28, "supported-parameters-when-controlling-arm-and-gripper-tracks"]], "Body keyframe file section": [[28, "body-keyframe-file-section"]], "Supported columns not pertaining to a particular track": [[28, "supported-columns-not-pertaining-to-a-particular-track"]], "Supported columns pertaining to gripper track": [[28, "supported-columns-pertaining-to-gripper-track"]], "Supported columns pertaining to arm track": [[28, "supported-columns-pertaining-to-arm-track"]], "Supported columns pertaining to body track": [[28, "supported-columns-pertaining-to-body-track"]], "Supported columns pertaining to legs track": [[28, "supported-columns-pertaining-to-legs-track"]], "Animations in Choreography": [[29, "animations-in-choreography"]], "Animation pipeline": [[29, "animation-pipeline"]], "Text files for representing animations": [[29, "text-files-for-representing-animations"]], "Python example script": [[29, "python-example-script"]], "Automatic animation uploading in Choreographer": [[29, "automatic-animation-uploading-in-choreographer"]], "Choreography logs for animations": [[29, "choreography-logs-for-animations"]], "Boston Dynamics Choreographer Developer Guide": [[30, "boston-dynamics-choreographer-developer-guide"]], "Running Choreographer": [[30, "running-choreographer"]], "Choreography safety": [[30, "choreography-safety"], [32, "choreography-safety"], [33, "choreography-safety"]], "Beginner and advanced modes": [[30, "beginner-and-advanced-modes"]], "User interface overview": [[30, "user-interface-overview"]], "Tracks": [[30, "tracks"]], "Slices, beats, BPM, and measures": [[30, "slices-beats-bpm-and-measures"]], "Dance timeline": [[30, "dance-timeline"]], "Adding moves": [[30, "adding-moves"]], "Modifying move blocks": [[30, "modifying-move-blocks"]], "Modifying move parameters": [[30, "modifying-move-parameters"]], "Robot preview": [[30, "robot-preview"]], "Selecting multiple moves": [[30, "selecting-multiple-moves"]], "Copying, pasting, and deleting moves": [[30, "copying-pasting-and-deleting-moves"]], "Loading music": [[30, "loading-music"]], "Red slider": [[30, "red-slider"]], "Previewing moves": [[30, "previewing-moves"]], "Performing Choreography sequences": [[30, "performing-choreography-sequences"]], "Saving and loading Choreography files": [[30, "saving-and-loading-choreography-files"]], "Keyboard controls": [[30, "keyboard-controls"], [37, "keyboard-controls"]], "Sequence editing": [[30, "sequence-editing"]], "Robot control": [[30, "robot-control"]], "WASD driving mode": [[30, "wasd-driving-mode"]], "Command-line arguments": [[30, "command-line-arguments"]], "Install Choreographer": [[31, "install-choreographer"]], "System requirements": [[31, "system-requirements"], [88, "system-requirements"]], "Installing and running Choreographer": [[31, "installing-and-running-choreographer"]], "Choreography in Autowalk": [[32, "choreography-in-autowalk"]], "Adding Choreography Actions to Autowalk Missions": [[32, "adding-choreography-actions-to-autowalk-missions"]], "Using Autowalk to Store and Transfer Choreography Sequences and Animations": [[32, "using-autowalk-to-store-and-transfer-choreography-sequences-and-animations"]], "Boston Dynamics Choreography tablet UI": [[33, "boston-dynamics-choreography-tablet-ui"]], "Using the Choreography drive mode": [[33, "using-the-choreography-drive-mode"]], "Using the tablet to play your own Choreography sequences": [[33, "using-the-tablet-to-play-your-own-choreography-sequences"]], "Uploading choreography sequences with Choreographer": [[33, "uploading-choreography-sequences-with-choreographer"]], "Managing your uploaded Choreography sequences": [[33, "managing-your-uploaded-choreography-sequences"]], "Deleting Saved Choreography Sequences": [[33, "deleting-saved-choreography-sequences"]], "Adding and Removing Labels": [[33, "adding-and-removing-labels"]], "Choreography service": [[34, "choreography-service"]], "Overview": [[34, "overview"], [72, "overview"], [76, "overview"], [294, "overview"], [296, "overview"]], "What is it?": [[34, "what-is-it"]], "Note on reliability": [[34, "note-on-reliability"]], "Choreography terminology": [[34, "choreography-terminology"]], "Slices": [[34, "slices"]], "Tracks and layering": [[34, "tracks-and-layering"]], "Entry and exit conditions": [[34, "entry-and-exit-conditions"]], "APIs": [[34, "apis"]], "Choreography API": [[34, "choreography-api"]], "Interacting With a Sequence During Execution": [[34, "interacting-with-a-sequence-during-execution"]], "Saving Choreography Sequences to your Spot": [[34, "saving-choreography-sequences-to-your-spot"]], "Animation API": [[34, "animation-api"]], "Choreography logs API": [[34, "choreography-logs-api"]], "Choreography log types": [[34, "choreography-log-types"]], "Time Adjust API": [[34, "time-adjust-api"]], "Choreography client": [[34, "choreography-client"]], "Python examples using the Choreography API": [[34, "python-examples-using-the-choreography-api"]], "Config files": [[34, "config-files"]], "MoveInfoConfig.txt": [[34, "moveinfoconfig-txt"]], "MoveParamsConfig.txt": [[34, "moveparamsconfig-txt"]], "Custom Gait": [[35, "custom-gait"]], "Behavior Within a Sequence": [[35, "behavior-within-a-sequence"]], "Driving Custom Gait": [[35, "driving-custom-gait"]], "Gait Diagram": [[35, "gait-diagram"]], "Presets": [[35, "presets"]], "Tips for Configuring Custom Gait": [[35, "tips-for-configuring-custom-gait"]], "Parameter Reference": [[35, "parameter-reference"]], "Choreography moves reference": [[36, "choreography-moves-reference"]], "Body moves": [[36, "body-moves"]], "rotate_body": [[36, "rotate-body"]], "rotate_body_sharp": [[36, "rotate-body-sharp"]], "body_hold": [[36, "body-hold"]], "body_const": [[36, "body-const"]], "sway": [[36, "sway"]], "random_rotate": [[36, "random-rotate"]], "twerk": [[36, "twerk"]], "butt_circle": [[36, "butt-circle"]], "fidget_stand": [[36, "fidget-stand"]], "Step moves": [[36, "step-moves"]], "step": [[36, "step"]], "goto": [[36, "goto"]], "trot": [[36, "trot"]], "pace": [[36, "pace"]], "turn_2step": [[36, "turn-2step"]], "pace_2step": [[36, "pace-2step"]], "crawl": [[36, "crawl"]], "custom_gait": [[36, "custom-gait"]], "Dynamic moves": [[36, "dynamic-moves"]], "running_man": [[36, "running-man"]], "bourree": [[36, "bourree"]], "hop": [[36, "hop"]], "jog": [[36, "jog"]], "skip": [[36, "skip"]], "front_up": [[36, "front-up"]], "jump": [[36, "jump"]], "Transition moves": [[36, "transition-moves"]], "sit": [[36, "sit"]], "stand_up": [[36, "stand-up"]], "sit_to_sprawl": [[36, "sit-to-sprawl"]], "random_stretch": [[36, "random-stretch"]], "stand_to_kneel": [[36, "stand-to-kneel"]], "kneel_to_stand": [[36, "kneel-to-stand"]], "kneel_to_stand_fast": [[36, "kneel-to-stand-fast"]], "self_right": [[36, "self-right"]], "leg_pose": [[36, "leg-pose"]], "Kneel moves": [[36, "kneel-moves"]], "kneel_leg_move": [[36, "kneel-leg-move"]], "kneel_leg_move2": [[36, "kneel-leg-move2"]], "kneel_clap": [[36, "kneel-clap"]], "kneel_circles": [[36, "kneel-circles"]], "Arm moves": [[36, "arm-moves"]], "nod": [[36, "nod"]], "stow": [[36, "stow"]], "unstow": [[36, "unstow"]], "shoulder_left": [[36, "shoulder-left"]], "shoulder_right": [[36, "shoulder-right"]], "arm_move": [[36, "arm-move"]], "arm_move_no_gripper": [[36, "arm-move-no-gripper"]], "arm_move_relative": [[36, "arm-move-relative"]], "workspace_arm_move": [[36, "workspace-arm-move"]], "figure8_move": [[36, "figure8-move"]], "gripper": [[36, "gripper"]], "frame_snapshot": [[36, "frame-snapshot"]], "chicken_head": [[36, "chicken-head"]], "Face Lights moves": [[36, "face-lights-moves"]], "set_color": [[36, "set-color"]], "fade_color": [[36, "fade-color"]], "independent_color": [[36, "independent-color"]], "ripple_color": [[36, "ripple-color"]], "Audio Visual Lights moves": [[36, "audio-visual-lights-moves"]], "set_audio_visual_color": [[36, "set-audio-visual-color"]], "set_all_color": [[36, "set-all-color"]], "Audio Visual Buzzer moves": [[36, "audio-visual-buzzer-moves"]], "buzzer_note": [[36, "buzzer-note"]], "Connecting robots to Choreographer": [[37, "connecting-robots-to-choreographer"]], "Robot controls": [[37, "robot-controls"]], "Joystick controls": [[37, "joystick-controls"]], "Spot Data": [[38, "spot-data"]], "Data Acquisition Output": [[39, "data-acquisition-output"]], "Zip file structure": [[39, "zip-file-structure"]], "Metadata.json structure": [[39, "metadata-json-structure"]], "CSV structure": [[39, "csv-structure"]], "Data Acquisition Overview": [[40, "data-acquisition-overview"]], "High-level concepts": [[40, "high-level-concepts"]], "Capture capabilities": [[40, "capture-capabilities"]], "Actions": [[40, "actions"], [50, "actions"]], "Acquisition request:": [[40, "acquisition-request"]], "Groups": [[40, "groups"]], "Data Channels": [[40, "data-channels"]], "Downloaded Data": [[40, "downloaded-data"]], "System architecture": [[40, "system-architecture"]], "Implementing Data Acquisition services": [[40, "implementing-data-acquisition-services"]], "Thermal Raw Data": [[41, "thermal-raw-data"]], "Understanding thermal data": [[41, "understanding-thermal-data"]], "Thermal file types (.pgm vs .raw)": [[41, "thermal-file-types-pgm-vs-raw"]], "Rendering raw thermal data": [[41, "rendering-raw-thermal-data"]], "Scaling the color mapping": [[41, "scaling-the-color-mapping"]], "Color palettes:": [[41, "color-palettes"]], "Example code": [[41, "example-code"]], "Data Buffer Overview": [[42, "data-buffer-overview"]], "Supported Data Types": [[42, "supported-data-types"]], "Text Messages": [[42, "text-messages"]], "Operator Comments": [[42, "operator-comments"]], "Events": [[42, "events"], [247, "events"]], "Signals": [[42, "signals"]], "Blobs": [[42, "blobs"]], "Internally Logged Data": [[42, "internally-logged-data"]], "Data Service": [[42, "data-service"], [121, "module-bosdyn.client.data_service"]], "Data Download": [[42, "data-download"]], "Raw Data Download": [[42, "raw-data-download"]], "Data Acquisition Download": [[42, "data-acquisition-download"]], "Authorization": [[42, "authorization"]], "Example": [[42, "example"]], "BDDF (Boston Dynamics Data Format)": [[42, "bddf-boston-dynamics-data-format"]], "Developing API Services": [[43, "developing-api-services"]], "Interface": [[43, "interface"]], "Robot Directory": [[43, "robot-directory"]], "gRPC": [[43, "grpc"]], "Basic Structure": [[43, "basic-structure"]], "Servicers": [[43, "servicers"]], "Infrastructure": [[43, "infrastructure"]], "Starting a Server": [[43, "starting-a-server"]], "Registering a Service": [[43, "registering-a-service"]], "Examples": [[43, "examples"], [263, "examples"], [291, "examples"]], "E-Stop Service": [[44, "e-stop-service"]], "Configuration": [[44, "configuration"]], "Registration": [[44, "registration"], [92, "registration"]], "CheckIn": [[44, "checkin"]], "Operation": [[44, "operation"]], "Faults": [[45, "faults"]], "System Faults": [[45, "system-faults"]], "Behavior Faults": [[45, "behavior-faults"], [90, "behavior-faults"]], "Service Faults": [[45, "service-faults"], [90, "service-faults"]], "Service Fault Guidelines": [[45, "service-fault-guidelines"]], "Geometry and Frames": [[46, "geometry-and-frames"], [90, "geometry-and-frames"]], "Frames in the Spot robot world": [[46, "frames-in-the-spot-robot-world"]], "Transformations between Spot\u2019s frames": [[46, "transformations-between-spot-s-frames"]], "Transformation Math": [[46, "transformation-math"]], "Adding frames during robot operation": [[46, "adding-frames-during-robot-operation"]], "Joint Control API (Beta)": [[47, "joint-control-api-beta"]], "Components": [[47, "components"], [294, "components"]], "Usage": [[47, "usage"], [294, "usage"]], "Robot Command Stream": [[47, "robot-command-stream"]], "Note on Closed-Loop Joint Behavior": [[47, "note-on-closed-loop-joint-behavior"]], "Robot State Stream": [[47, "robot-state-stream"]], "Example Code": [[47, "example-code"]], "Knee Torque Limits": [[48, "knee-torque-limits"]], "Supplemental Data": [[49, "supplemental-data"]], "Joint Order": [[49, "joint-order"]], "Robot Morphology": [[49, "robot-morphology"]], "Joint Transmission Details": [[49, "joint-transmission-details"]], "Joint Gear Ratios and Max Motor Torque": [[49, "joint-gear-ratios-and-max-motor-torque"]], "Knee Joints": [[49, "knee-joints"]], "Coupled SH1/EL0 Joints": [[49, "coupled-sh1-el0-joints"]], "Keepalive Service": [[50, "keepalive-service"], [90, "keepalive-service"]], "Policy": [[50, "policy"], [92, "policy"]], "The Policy timer": [[50, "the-policy-timer"]], "Removing a Policy": [[50, "removing-a-policy"]], "Backwards compatibility": [[50, "backwards-compatibility"]], "Lease Service": [[51, "lease-service"]], "Basic Lease Usage": [[51, "basic-lease-usage"]], "[Advanced] Understanding Lease Errors": [[51, "advanced-understanding-lease-errors"]], "[Advanced] Lease Resources": [[51, "advanced-lease-resources"]], "[Advanced] Additional Lease Usage Patterns": [[51, "advanced-additional-lease-usage-patterns"]], "[Advanced] Lease Representation": [[51, "advanced-lease-representation"]], "Machine Learning Bridge and External Compute": [[52, "machine-learning-bridge-and-external-compute"]], "Components of the system": [[52, "components-of-the-system"]], "Example Concept": [[52, "example-concept"]], "Example Clients and Servers": [[52, "example-clients-and-servers"]], "RPC Definitions: NetworkComputeBridge and NetworkComputeBridgeWorker": [[52, "rpc-definitions-networkcomputebridge-and-networkcomputebridgeworker"]], "Parameterization": [[52, "parameterization"]], "Networking": [[53, "networking"], [69, "networking"]], "Network Choice": [[53, "network-choice"]], "gRPC and Protocol Buffers": [[53, "grpc-and-protocol-buffers"]], "Using gRPC and Protocol Buffers": [[53, "using-grpc-and-protocol-buffers"]], "Error Handling": [[53, "error-handling"]], "HTTP/2, TLS, and TCP": [[53, "http-2-tls-and-tcp"]], "Robot Discovery": [[53, "robot-discovery"]], "About Orbit (formerly Scout)": [[54, "about-orbit-formerly-scout"]], "WebViews": [[54, "webviews"]], "Custom WebViews": [[54, "custom-webviews"]], "Note": [[54, "note"], [55, "note"]], "Webhooks": [[54, "webhooks"]], "What is a webhook?": [[54, "what-is-a-webhook"]], "Configuring Webhooks": [[54, "configuring-webhooks"]], "Webhook Payloads": [[54, "webhook-payloads"]], "Webhook Events": [[54, "webhook-events"]], "Action Completed": [[54, "action-completed"]], "Action Completed With Alert": [[54, "action-completed-with-alert"]], "Securing Webhooks": [[54, "securing-webhooks"]], "HTTP vs HTTPS": [[54, "http-vs-https"]], "Should I use webhooks or the Orbit API?": [[54, "should-i-use-webhooks-or-the-orbit-api"]], "When to use the Orbit API": [[54, "when-to-use-the-orbit-api"]], "When to use webhooks": [[54, "when-to-use-webhooks"]], "Scheduling Missions": [[54, "scheduling-missions"]], "Key Concepts": [[54, "key-concepts"]], "Weekly Repeat": [[54, "weekly-repeat"]], "Predicting Start Times": [[54, "predicting-start-times"]], "Schedule Priority": [[54, "schedule-priority"]], "Scheduling \u201cGotchas\u201d": [[54, "scheduling-gotchas"]], "Missions Running at Midnight": [[54, "missions-running-at-midnight"]], "Unpredictable \u201cFast as Possible\u201d Schedules": [[54, "unpredictable-fast-as-possible-schedules"]], "Time Zones": [[54, "time-zones"]], "Daylight Savings Time": [[54, "daylight-savings-time"]], "Authentication": [[55, "authentication"]], "Orbit Object Structure": [[55, "orbit-object-structure"]], "Data": [[55, "data"]], "Run (Mission Archive)": [[55, "run-mission-archive"]], "RunEvent (Action Archive)": [[55, "runevent-action-archive"]], "RunCapture (Data Archive)": [[55, "runcapture-data-archive"]], "Missions": [[55, "missions"], [90, "missions"], [90, "id94"], [90, "id121"], [90, "id124"], [90, "id131"], [90, "id174"], [90, "id183"]], "SiteWalk (Mission)": [[55, "sitewalk-mission"]], "SiteElement (Action)": [[55, "siteelement-action"]], "SiteDock (Charging Station)": [[55, "sitedock-charging-station"]], "Facets": [[55, "facets"]], "Orbit API and the Python SDK": [[55, "orbit-api-and-the-python-sdk"]], "Deprecation Warning": [[55, "deprecation-warning"]], "Robot Services": [[56, "robot-services"]], "estop": [[56, "estop"]], "power": [[56, "power"]], "robot-command": [[56, "robot-command"]], "robot-state": [[56, "robot-state"]], "log-status": [[56, "log-status"]], "metrics_logging": [[56, "metrics-logging"]], "image": [[56, "image"]], "local-grid": [[56, "local-grid"]], "world-object": [[56, "world-object"]], "Service Customization": [[57, "service-customization"], [90, "service-customization"], [90, "id52"]], "Service Customization Language": [[57, "service-customization-language"]], "Spec": [[57, "spec"]], "Parameter": [[57, "parameter"], [92, "parameter"]], "Parameter Types": [[57, "parameter-types"]], "Double": [[57, "double"]], "Int": [[57, "int"]], "Units for Int & Double": [[57, "units-for-int-double"]], "String": [[57, "string"]], "Bool": [[57, "bool"]], "Region of Interest": [[57, "region-of-interest"]], "Dictionary": [[57, "dictionary"]], "One-Of": [[57, "one-of"]], "List": [[57, "list"]], "Custom Param": [[57, "custom-param"]], "Example Specifications": [[57, "example-specifications"]], "Implementing Service Customization": [[57, "implementing-service-customization"]], "Image services": [[57, "image-services"]], "Network Compute Bridge Worker services": [[57, "network-compute-bridge-worker-services"]], "Remote Mission services": [[57, "remote-mission-services"]], "Area Callback services": [[57, "area-callback-services"]], "Parameter Coercion": [[57, "parameter-coercion"]], "Integrate a Payload with the Data Acquisition Pipeline": [[58, "integrate-a-payload-with-the-data-acquisition-pipeline"]], "Camera Payloads": [[58, "camera-payloads"]], "CameraInterface": [[58, "camerainterface"]], "Using Background Capture Threads": [[58, "using-background-capture-threads"]], "Example Image Services": [[58, "example-image-services"]], "Tips for Creating an Image Service": [[58, "tips-for-creating-an-image-service"]], "Non-image Payloads": [[58, "non-image-payloads"]], "Data Capabilities List": [[58, "data-capabilities-list"]], "Data Collection Function": [[58, "data-collection-function"]], "Example Plugins": [[58, "example-plugins"]], "Error Reporting": [[58, "error-reporting"]], "Tips for Creating a Data Acquisition Plugin": [[58, "tips-for-creating-a-data-acquisition-plugin"]], "Attaching Metadata with other Data or Images": [[58, "attaching-metadata-with-other-data-or-images"]], "Directory Registration and Running the New Service": [[58, "directory-registration-and-running-the-new-service"]], "Testing the New Service": [[58, "testing-the-new-service"]], "Payload Developer Guide": [[59, "payload-developer-guide"]], "Introduction to Spot payloads": [[59, "introduction-to-spot-payloads"]], "Payload Software Interface": [[60, "payload-software-interface"]], "Payload API services": [[60, "payload-api-services"]], "Service and Payload Faults": [[60, "service-and-payload-faults"]], "DirectoryService RPCs": [[60, "directoryservice-rpcs"]], "DirectoryRegistrationService RPCs": [[60, "directoryregistrationservice-rpcs"]], "PayloadService RPCs": [[60, "payloadservice-rpcs"]], "PayloadRegistrationService RPCs": [[60, "payloadregistrationservice-rpcs"]], "Time Synchronization": [[60, "time-synchronization"]], "Registering payloads": [[60, "registering-payloads"]], "Payload self-registration": [[60, "payload-self-registration"]], "Registration examples": [[60, "registration-examples"]], "Configuring and authorizing payloads": [[60, "configuring-and-authorizing-payloads"]], "Payload device network configuration": [[60, "payload-device-network-configuration"]], "Payload port forwarding table": [[60, "payload-port-forwarding-table"]], "Configuring payload mass properties": [[60, "configuring-payload-mass-properties"]], "Position (m)": [[60, "position-m"]], "Orientation (radians)": [[60, "orientation-radians"]], "Total mass (kg)": [[60, "total-mass-kg"]], "Position of Center of Mass (m)": [[60, "position-of-center-of-mass-m"]], "Moment of inertia tensor (kg-m2)": [[60, "moment-of-inertia-tensor-kg-m2"]], "Bounding boxes: Center (m)": [[60, "bounding-boxes-center-m"]], "Bounding boxes: Orientation (radians) ZXY": [[60, "bounding-boxes-orientation-radians-zxy"]], "Bounding boxes: XYZ extent (m)": [[60, "bounding-boxes-xyz-extent-m"]], "CORE I/O Documentation": [[61, "core-i-o-documentation"]], "File System and Release System": [[61, "file-system-and-release-system"]], "System Configuration": [[61, "system-configuration"]], "Admin Web Server Authentication": [[61, "admin-web-server-authentication"]], "How to connect via SSH": [[61, "how-to-connect-via-ssh"]], "How to connect via local terminal with monitor and keyboard": [[61, "how-to-connect-via-local-terminal-with-monitor-and-keyboard"]], "Network and SSH Configuration": [[61, "network-and-ssh-configuration"]], "Default Services": [[61, "default-services"]], "Passwords and Groups": [[61, "passwords-and-groups"]], "Developing on the CORE I/O": [[61, "developing-on-the-core-i-o"]], "Development Environment": [[61, "development-environment"]], "GPIO and PWM": [[61, "gpio-and-pwm"]], "Working with i2c": [[61, "working-with-i2c"]], "Working with the GPU": [[61, "working-with-the-gpu"]], "Spot Extensions": [[61, "spot-extensions"]], "CORE I/O OpenVPN Extension Documentation": [[62, "core-i-o-openvpn-extension-documentation"]], "Before Starting": [[62, "before-starting"]], "dockerfile": [[62, "dockerfile"]], "docker-compose.yml": [[62, "docker-compose-yml"]], "kickoff.sh": [[62, "kickoff-sh"]], "Create or include the following files for our extension": [[62, "create-or-include-the-following-files-for-our-extension"]], "Build The Extension": [[62, "build-the-extension"]], "Run the following from the folder containing all of the above files to build and output the OpenVPN extension": [[62, "run-the-following-from-the-folder-containing-all-of-the-above-files-to-build-and-output-the-openvpn-extension"]], "Running the Extension": [[62, "running-the-extension"]], "Running Custom Applications with Spot": [[63, "running-custom-applications-with-spot"]], "Installing Docker Engine": [[63, "installing-docker-engine"]], "Create Docker Images": [[63, "create-docker-images"]], "Build Docker Images": [[63, "build-docker-images"]], "Test Docker Images Locally": [[63, "test-docker-images-locally"]], "Ports For Incoming Traffic": [[63, "ports-for-incoming-traffic"]], "Manage Payload Software in CORE I/O": [[63, "manage-payload-software-in-core-i-o"]], "CORE I/O Extensions Configuration": [[63, "core-i-o-extensions-configuration"]], "Helper Scripts": [[63, "helper-scripts"]], "Extension Structure": [[63, "extension-structure"]], "Manifest file": [[63, "manifest-file"]], "Docker Images": [[63, "docker-images"]], "Docker Compose YAML configuration file": [[63, "docker-compose-yaml-configuration-file"]], "Other files": [[63, "other-files"]], "Extension Management": [[63, "extension-management"]], "Create Extension": [[63, "create-extension"]], "Install Extension Using Web Portal": [[63, "install-extension-using-web-portal"]], "Install Extension Using a USB Drive": [[63, "install-extension-using-a-usb-drive"]], "Monitoring": [[63, "monitoring"]], "Access Extension Logs": [[63, "access-extension-logs"]], "Stop Extension": [[63, "stop-extension"]], "Remove Extension": [[63, "remove-extension"]], "Command-line Configuration": [[63, "command-line-configuration"]], "Run Application(s) Directly on Compute Payload": [[63, "run-application-s-directly-on-compute-payload"]], "Run Application(s) as a Docker Container": [[63, "run-application-s-as-a-docker-container"]], "Run Applications with docker-compose": [[63, "run-applications-with-docker-compose"]], "Guidelines for Robust Payload Design": [[64, "guidelines-for-robust-payload-design"]], "Crash protection": [[64, "crash-protection"]], "Shock loads": [[64, "shock-loads"]], "Ingress protection": [[64, "ingress-protection"]], "External cabling": [[64, "external-cabling"]], "Designing for edge-case leg interference": [[64, "designing-for-edge-case-leg-interference"]], "Enabling self-righting": [[64, "enabling-self-righting"]], "Mechanical Interfaces": [[65, "mechanical-interfaces"]], "Cable and connector interface": [[65, "cable-and-connector-interface"]], "Correct orientation of DB25 relative to front of robot": [[65, "correct-orientation-of-db25-relative-to-front-of-robot"]], "Keepout dimensions in mm": [[65, "keepout-dimensions-in-mm"]], "Sealing gland geometry in mm": [[65, "sealing-gland-geometry-in-mm"]], "Configuration Requirements": [[66, "configuration-requirements"], [312, "configuration-requirements"]], "Payload ports": [[66, "payload-ports"]], "Payload width": [[66, "payload-width"]], "Payload length": [[66, "payload-length"]], "Payload height": [[66, "payload-height"]], "Payload weight": [[66, "payload-weight"]], "Payload leg Interference": [[66, "payload-leg-interference"]], "Isometric and top views of robot legs ROM": [[66, "isometric-and-top-views-of-robot-legs-rom"]], "Payload clearance with robot arm": [[66, "payload-clearance-with-robot-arm"]], "Payload under arm clearance": [[66, "payload-under-arm-clearance"]], "Electrical Interface": [[67, "electrical-interface"]], "Payload port pinouts by category": [[67, "payload-port-pinouts-by-category"]], "Payload port PIN specifications": [[67, "payload-port-pin-specifications"]], "Payload power requirements": [[67, "payload-power-requirements"]], "Motor power safety": [[67, "motor-power-safety"]], "Payload port requirements": [[67, "payload-port-requirements"]], "Robot Communication and pulse-per-second (PPS)": [[67, "robot-communication-and-pulse-per-second-pps"]], "Mounting Rails": [[68, "mounting-rails"]], "Spot dimensions and reference points": [[68, "spot-dimensions-and-reference-points"]], "Spot CORE Cockpit - System Management Tool": [[69, "spot-core-cockpit-system-management-tool"]], "Prerequisites": [[69, "prerequisites"], [320, "prerequisites"], [322, "prerequisites"]], "Setup": [[69, "setup"]], "Terminal": [[69, "terminal"]], "Check Spot CORE Software Version": [[69, "check-spot-core-software-version"]], "Spot CORE WiFi Network Settings": [[69, "spot-core-wifi-network-settings"]], "Docker Containers": [[69, "docker-containers"]], "Services": [[69, "services"], [90, "services"]], "Additional Cockpit Documentation": [[69, "additional-cockpit-documentation"]], "Pre-3.2 Spot CORE Documentation": [[70, "pre-3-2-spot-core-documentation"]], "Manage Docker Containers in Spot CORE": [[71, "manage-docker-containers-in-spot-core"]], "Portainer Configuration": [[71, "portainer-configuration"]], "Spot CORE VNC": [[72, "spot-core-vnc"]], "TigerVNC Server Enable": [[72, "tigervnc-server-enable"]], "Create a VNC password": [[72, "create-a-vnc-password"]], "TigerVNC Viewer": [[72, "tigervnc-viewer"]], "Install vncviewer": [[72, "install-vncviewer"]], "Start vncviewer": [[72, "start-vncviewer"]], "TigerVNC Server Installation": [[72, "tigervnc-server-installation"]], "Install software": [[72, "install-software"]], "Prepare vncserver": [[72, "prepare-vncserver"]], "Start vncserver": [[72, "start-vncserver"]], "Enable vncserver on boot": [[72, "enable-vncserver-on-boot"]], "Useful TigerVNC Resources": [[72, "useful-tigervnc-resources"]], "API Protocol": [[73, "api-protocol"]], "Boston Dynamics API Protobuf Guidelines": [[74, "boston-dynamics-api-protobuf-guidelines"]], "Python Library": [[75, "python-library"]], "Using the Python Library": [[75, "using-the-python-library"]], "Supported Platforms and Versions": [[75, "supported-platforms-and-versions"]], "Tutorial: Data Collection": [[76, "tutorial-data-collection"]], "Requirements": [[76, "requirements"]], "Initial setup": [[76, "initial-setup"]], "Setting up Python 3 and the Spot SDK": [[76, "setting-up-python-3-and-the-spot-sdk"]], "Environment variables for this tutorial": [[76, "environment-variables-for-this-tutorial"]], "Register a payload for development": [[76, "register-a-payload-for-development"]], "Head over to Part 2: Capturing images >>": [[76, "head-over-to-part-2-capturing-images"]], "Part 2: Capturing Images": [[77, "part-2-capturing-images"]], "Understanding Image Services": [[77, "understanding-image-services"]], "Preparing the environment": [[77, "preparing-the-environment"], [78, "preparing-the-environment"]], "Enter your Spot API virtualenv": [[77, "enter-your-spot-api-virtualenv"], [78, "enter-your-spot-api-virtualenv"]], "Install requirements": [[77, "install-requirements"]], "Directory Setup": [[77, "directory-setup"], [78, "directory-setup"]], "Web cam image service": [[77, "web-cam-image-service"]], "Testing the service": [[77, "testing-the-service"]], "Registering a payload": [[77, "registering-a-payload"], [78, "registering-a-payload"]], "Running the service": [[77, "running-the-service"], [78, "running-the-service"]], "Head over to Part 3: Capturing Other Data >>": [[77, "head-over-to-part-3-capturing-other-data"]], "Part 3: Capturing Other Data": [[78, "part-3-capturing-other-data"]], "Understanding data acquisition plugins": [[78, "understanding-data-acquisition-plugins"]], "Data Acquisition Plugin Service": [[78, "data-acquisition-plugin-service"], [117, "module-bosdyn.client.data_acquisition_plugin_service"]], "Testing the plugin": [[78, "testing-the-plugin"]], "Head over to Part 4: Deploying to the CORE I/O >>": [[78, "head-over-to-part-4-deploying-to-the-core-i-o"]], "Part 4: Deploying to the CORE I/O": [[79, "part-4-deploying-to-the-core-i-o"]], "Packaging the services for deployment": [[79, "packaging-the-services-for-deployment"]], "Creating Docker images": [[79, "creating-docker-images"]], "Creating web_cam_image_service Docker image": [[79, "creating-web-cam-image-service-docker-image"]], "Creating battery_service Docker image": [[79, "creating-battery-service-docker-image"]], "Testing Docker container locally": [[79, "testing-docker-container-locally"]], "Create Spot Extension and Install it on CORE I/O": [[79, "create-spot-extension-and-install-it-on-core-i-o"]], "Recreate Docker Images for ARM64 Architecture": [[79, "recreate-docker-images-for-arm64-architecture"]], "Create docker-compose.yml File": [[79, "create-docker-compose-yml-file"]], "Create Udev Rules Files for Web Cam application": [[79, "create-udev-rules-files-for-web-cam-application"]], "Create manifest.json File": [[79, "create-manifest-json-file"]], "Create Extension and Install It on CORE I/O": [[79, "create-extension-and-install-it-on-core-i-o"]], "Confirming deployment": [[79, "confirming-deployment"]], "Head over to Part 5: Collecting Data >>": [[79, "head-over-to-part-5-collecting-data"]], "Part 5: Collecting Data": [[80, "part-5-collecting-data"]], "Creating Actions": [[80, "creating-actions"]], "Testing the action": [[80, "testing-the-action"]], "Mission Recording": [[80, "mission-recording"]], "Mission playback": [[80, "mission-playback"]], "Configure the robot to automatically upload its data to the cloud.": [[80, "configure-the-robot-to-automatically-upload-its-data-to-the-cloud"]], "Head over to Part 6: Processing Collected Data >>": [[80, "head-over-to-part-6-processing-collected-data"]], "Part 6: Processing Collected Data": [[81, "part-6-processing-collected-data"]], "Understanding the data": [[81, "understanding-the-data"]], "Writing the processing script": [[81, "writing-the-processing-script"]], "Further Reading": [[81, "further-reading"]], "Tutorial: Playing Fetch with Spot": [[82, "tutorial-playing-fetch-with-spot"]], "Fetch Part 2: Training the Model": [[83, "fetch-part-2-training-the-model"]], "Fetch Part 3: Evaluating the Model": [[84, "fetch-part-3-evaluating-the-model"]], "
                                                                                                                                                                                                                                              name type authority tokens": [[84, "pre-code-class-language-text-name-type-authority-tokens"]], "Fetch Part 4: Autonomous Pick Up": [[85, "fetch-part-4-autonomous-pick-up"]], "Fetch Part 5: Detecting People and Playing Fetch": [[86, "fetch-part-5-detecting-people-and-playing-fetch"]], "Fetch Part 6: Running the model on CORE I/O": [[87, "fetch-part-6-running-the-model-on-core-i-o"]], "QuickStart": [[88, "quickstart"]], "System setup": [[88, "system-setup"]], "Python requirements": [[88, "python-requirements"]], "Pip Installation": [[88, "pip-installation"]], "Manage multiple Python environments with virtualenv": [[88, "manage-multiple-python-environments-with-virtualenv"]], "Install Spot Python packages": [[88, "install-spot-python-packages"]], "Verify your Spot packages installation": [[88, "verify-your-spot-packages-installation"]], "Verify you can command and query Spot": [[88, "verify-you-can-command-and-query-spot"]], "Get a Spot robot": [[88, "get-a-spot-robot"]], "Get a user account on the robot": [[88, "get-a-user-account-on-the-robot"]], "Ping Spot": [[88, "ping-spot"]], "Request Spot robot\u2019s ID": [[88, "request-spot-robot-s-id"]], "Get a copy of the full SDK distribution from github": [[88, "get-a-copy-of-the-full-sdk-distribution-from-github"]], "Run Hello Spot - let\u2019s see the robot move!": [[88, "run-hello-spot-let-s-see-the-robot-move"]], "Run an independent E-Stop": [[88, "run-an-independent-e-stop"]], "Run Hello Spot (take 2)": [[88, "run-hello-spot-take-2"]], "Next Steps": [[88, "next-steps"]], "Understanding Spot Programming": [[89, "understanding-spot-programming"], [226, "understanding-spot-programming"], [228, "understanding-spot-programming"], [230, "understanding-spot-programming"], [231, "understanding-spot-programming"], [232, "understanding-spot-programming"], [233, "understanding-spot-programming"], [234, "understanding-spot-programming"], [235, "understanding-spot-programming"], [236, "understanding-spot-programming"], [237, "understanding-spot-programming"], [238, "understanding-spot-programming"], [239, "understanding-spot-programming"], [240, "understanding-spot-programming"], [241, "understanding-spot-programming"], [242, "understanding-spot-programming"], [243, "understanding-spot-programming"], [244, "understanding-spot-programming"], [245, "understanding-spot-programming"], [257, "understanding-spot-programming"], [288, "understanding-spot-programming"], [289, "understanding-spot-programming"], [290, "understanding-spot-programming"], [313, "understanding-spot-programming"]], "Fundamental Robot Services": [[89, "fundamental-robot-services"]], "Understanding the \u201cid\u201d command": [[89, "understanding-the-id-command"]], "Listing services": [[89, "listing-services"]], "How to Setup and Command Spot to Move": [[89, "how-to-setup-and-command-spot-to-move"]], "Create the SDK object": [[89, "create-the-sdk-object"]], "Create a robot object": [[89, "create-a-robot-object"]], "Retrieve the Robot ID": [[89, "retrieve-the-robot-id"]], "Blocking vs. Asynchronous Spot Python SDK functions": [[89, "blocking-vs-asynchronous-spot-python-sdk-functions"]], "Inspecting robot state": [[89, "inspecting-robot-state"]], "Services and Authentication": [[89, "services-and-authentication"]], "Retrieving robot state": [[89, "retrieving-robot-state"]], "Robot State was a message, messages are defined by protobufs": [[89, "robot-state-was-a-message-messages-are-defined-by-protobufs"]], "Spot\u2019s Frames": [[89, "spot-s-frames"]], "Capture and View Camera Images": [[89, "capture-and-view-camera-images"]], "Configuring \u201cMotor Power Authority\u201d (software E-Stop)": [[89, "configuring-motor-power-authority-software-e-stop"]], "Create and register an E-Stop Endpoint": [[89, "create-and-register-an-e-stop-endpoint"]], "Clear the E-Stop": [[89, "clear-the-e-stop"]], "Taking ownership of Spot (Leases)": [[89, "taking-ownership-of-spot-leases"]], "Powering on the robot": [[89, "powering-on-the-robot"]], "Establishing timesync": [[89, "establishing-timesync"]], "Commanding the robot": [[89, "commanding-the-robot"]], "Powering off the robot": [[89, "powering-off-the-robot"]], "Spot Release Notes": [[90, "spot-release-notes"]], "4.1.0": [[90, "id1"]], "Breaking Changes": [[90, "breaking-changes"], [90, "id6"], [90, "id10"], [90, "id23"], [90, "id30"], [90, "id57"], [90, "id77"], [90, "id98"], [90, "id127"], [90, "id138"], [90, "id150"], [90, "id169"]], "New Features": [[90, "new-features"], [90, "id11"], [90, "id31"], [90, "id51"], [90, "id74"], [90, "id92"], [90, "id107"], [90, "id111"], [90, "id117"], [90, "id136"], [90, "id142"], [90, "id147"], [90, "id154"], [90, "id159"], [90, "id173"], [90, "id180"], [90, "id192"], [90, "id196"], [90, "id202"]], "Autowalk / Missions": [[90, "autowalk-missions"]], "Clients": [[90, "clients"], [90, "id2"]], "Data Acquisition Store": [[90, "data-acquisition-store"], [90, "id32"], [118, "module-bosdyn.client.data_acquisition_store"]], "GraphNav": [[90, "graphnav"], [90, "id34"]], "Bug Fixes and Improvements": [[90, "bug-fixes-and-improvements"], [90, "id12"], [90, "id24"], [90, "id35"], [90, "id44"], [90, "id55"], [90, "id64"], [90, "id69"], [90, "id75"], [90, "id86"], [90, "id95"], [90, "id166"], [90, "id184"], [90, "id193"], [90, "id197"], [90, "id203"]], "Choreography": [[90, "choreography"], [90, "id13"], [90, "id33"], [90, "id54"], [90, "id93"], [90, "id119"], [97, "module-bosdyn.choreography.client.choreography"]], "Extensions": [[90, "extensions"]], "Graph Nav": [[90, "graph-nav"], [90, "id96"], [90, "id118"], [90, "id123"], [90, "id130"], [90, "id148"], [90, "id164"], [90, "id182"], [135, "module-bosdyn.client.graph_nav"]], "Rajant": [[90, "rajant"]], "Robot State": [[90, "robot-state"], [90, "id14"], [163, "module-bosdyn.client.robot_state"]], "Deprecations": [[90, "deprecations"], [90, "id7"], [90, "id15"], [90, "id25"], [90, "id36"], [90, "id56"], [90, "id76"], [90, "id97"], [90, "id113"], [90, "id128"], [90, "id139"], [90, "id168"], [90, "id176"], [90, "id187"]], "Known Issues": [[90, "known-issues"], [90, "id8"], [90, "id16"], [90, "id26"], [90, "id38"], [90, "id45"], [90, "id58"], [90, "id65"], [90, "id70"], [90, "id79"], [90, "id87"], [90, "id89"], [90, "id101"], [90, "id105"], [90, "id109"], [90, "id114"], [90, "id133"], [90, "id140"], [90, "id144"], [90, "id151"], [90, "id156"], [90, "id170"], [90, "id186"], [90, "id194"], [90, "id199"], [328, "known-issues"]], "Preexisting, but undiscovered prior to 4.1.0": [[90, "preexisting-but-undiscovered-prior-to-4-1-0"]], "Preexisting": [[90, "preexisting"], [90, "id39"]], "Spot Sample Code": [[90, "spot-sample-code"], [90, "id17"]], "New": [[90, "new"], [90, "id3"], [90, "id18"], [90, "id41"], [90, "id47"], [90, "id60"], [90, "id81"], [90, "id189"]], "Updated": [[90, "updated"], [90, "id4"], [90, "id19"], [90, "id21"], [90, "id27"], [90, "id42"], [90, "id48"], [90, "id61"], [90, "id67"], [90, "id72"], [90, "id82"], [90, "id190"]], "Orbit Sample Code": [[90, "orbit-sample-code"], [90, "id20"]], "4.0.3": [[90, "id5"]], "4.0.2": [[90, "id9"]], "Joint Control": [[90, "joint-control"], [291, "joint-control"]], "Orbit": [[90, "orbit"], [90, "id28"]], "4.0.1": [[90, "id22"]], "Sample Code": [[90, "sample-code"], [90, "id40"], [90, "id46"], [90, "id59"], [90, "id66"], [90, "id71"], [90, "id80"], [90, "id90"], [90, "id102"], [90, "id115"], [90, "id134"], [90, "id145"], [90, "id152"], [90, "id157"], [90, "id171"], [90, "id178"], [90, "id188"], [90, "id200"], [90, "id207"], [90, "id211"]], "Spot": [[90, "spot"]], "4.0.0": [[90, "id29"]], "Autowalk and Missions": [[90, "autowalk-and-missions"]], "Orbit (formerly Scout)": [[90, "orbit-formerly-scout"], [90, "id37"]], "GPS": [[90, "gps"]], "Robot Mobility": [[90, "robot-mobility"]], "Data Acquisition Live Data": [[90, "data-acquisition-live-data"]], "Spot Arm": [[90, "spot-arm"]], "Network Compute Bridge": [[90, "network-compute-bridge"], [90, "id125"], [90, "id161"], [297, "network-compute-bridge"], [321, "network-compute-bridge"]], "Safety-Related Stopping Function": [[90, "safety-related-stopping-function"]], "New in 4.0": [[90, "new-in-4-0"]], "Preexisting, but undiscovered prior to 4.0.0": [[90, "preexisting-but-undiscovered-prior-to-4-0-0"]], "3.3.1": [[90, "id43"]], "Upcoming Removals": [[90, "upcoming-removals"], [90, "id50"]], "3.3.0": [[90, "id49"]], "New Service - Inverse Kinematics": [[90, "new-service-inverse-kinematics"]], "New Service - LogStatus": [[90, "new-service-logstatus"]], "Arm and Manipulation": [[90, "arm-and-manipulation"]], "Payloads": [[90, "payloads"], [90, "id120"], [90, "id132"]], "Images and Data": [[90, "images-and-data"]], "Robot Control": [[90, "robot-control"], [90, "id129"]], "Dependencies": [[90, "dependencies"], [90, "id78"], [90, "id84"], [90, "id100"], [90, "id167"], [251, "dependencies"]], "NetworkComputeBridge": [[90, "networkcomputebridge"], [92, "networkcomputebridge"]], "Deprecated fields and values": [[90, "deprecated-fields-and-values"]], "Python functions": [[90, "python-functions"]], "3.2.3": [[90, "id62"]], "3.2.2": [[90, "id63"]], "3.2.1": [[90, "id68"]], "3.2.0": [[90, "id73"]], "Arm Impedance Control (Beta)": [[90, "arm-impedance-control-beta"]], "Graph Nav \u2013 Area Callbacks": [[90, "graph-nav-area-callbacks"]], "Fan Power Control": [[90, "fan-power-control"]], "Ground Clutter": [[90, "ground-clutter"]], "Added CORE I/O Documentation": [[90, "added-core-i-o-documentation"]], "Added Spot Extensions Documentation": [[90, "added-spot-extensions-documentation"]], "API": [[90, "api"]], "Documentation": [[90, "documentation"]], "SDK": [[90, "sdk"]], "3.1.2.1": [[90, "id83"]], "3.1.2": [[90, "id85"]], "3.1.1": [[90, "id88"]], "3.1.0": [[90, "id91"]], "Safely powering off on staircases.": [[90, "safely-powering-off-on-staircases"]], "Lease timeout changes.": [[90, "lease-timeout-changes"]], "Data Acquisition": [[90, "data-acquisition"], [90, "id99"], [90, "id126"], [114, "module-bosdyn.client.data_acquisition"]], "Alerts": [[90, "alerts"]], "New Services": [[90, "new-services"]], "Control and Feedback": [[90, "control-and-feedback"]], "Python Helpers": [[90, "python-helpers"]], "Spot Check": [[90, "spot-check"], [180, "module-bosdyn.client.spot_check"]], "Renamed functions and classes": [[90, "renamed-functions-and-classes"]], "Behavior change on lease timeout": [[90, "behavior-change-on-lease-timeout"]], "Behavior change of powering off on stairs": [[90, "behavior-change-of-powering-off-on-stairs"]], "Disallowed Commands": [[90, "disallowed-commands"]], "3.0.3": [[90, "id103"]], "Bug fixes and improvements": [[90, "id104"], [90, "id108"], [90, "id112"], [90, "id122"], [90, "id137"], [90, "id143"], [90, "id149"], [90, "id175"], [90, "id210"]], "3.0.2": [[90, "id106"]], "3.0.1": [[90, "id110"]], "3.0.0": [[90, "id116"]], "Auto Return": [[90, "auto-return"], [107, "module-bosdyn.client.auto_return"]], "Constrained manipulation": [[90, "constrained-manipulation"]], "Pushbar Door Opening": [[90, "pushbar-door-opening"]], "SpotCam": [[90, "spotcam"]], "Enable and Disable IR Emitters": [[90, "enable-and-disable-ir-emitters"]], "Arm and Gripper Control": [[90, "arm-and-gripper-control"], [90, "id160"]], "Robot Commands": [[90, "robot-commands"]], "Leases": [[90, "leases"], [90, "id165"]], "Other Changes": [[90, "other-changes"]], "Writing services": [[90, "writing-services"]], "2.3.5": [[90, "id135"]], "Spot CAM": [[90, "spot-cam"], [90, "id181"], [90, "id198"]], "Data Buffer": [[90, "data-buffer"], [119, "module-bosdyn.client.data_buffer"]], "2.3.4": [[90, "id141"]], "Power Control": [[90, "power-control"]], "2.3.3": [[90, "id146"]], "2.3.2": [[90, "id153"]], "SpotCAM": [[90, "id155"], [90, "id162"]], "2.3.0": [[90, "id158"]], "Payload Estimation": [[90, "payload-estimation"]], "Arm Support in Choreographer": [[90, "arm-support-in-choreographer"]], "2.2.0": [[90, "id172"]], "Docking (license dependent)": [[90, "docking-license-dependent"]], "Payload Authorization Faults": [[90, "payload-authorization-faults"]], "Service and plugin development": [[90, "service-and-plugin-development"]], "SE2TrajectoryCommand Feedback": [[90, "se2trajectorycommand-feedback"]], "Other Helper Functions**": [[90, "other-helper-functions"]], "Dependency Changes": [[90, "dependency-changes"]], "Known issues": [[90, "id177"], [90, "id206"]], "2.1.0": [[90, "id179"]], "Spot I/O: Data Acquisition": [[90, "spot-i-o-data-acquisition"]], "New Mobility Commands": [[90, "new-mobility-commands"]], "Arm Control Preparation": [[90, "arm-control-preparation"]], "Data Logging": [[90, "data-logging"]], "Point Clouds": [[90, "point-clouds"]], "Choreography (License-dependent)": [[90, "choreography-license-dependent"]], "Docking (Beta, License-dependent)": [[90, "docking-beta-license-dependent"]], "Breaking changes": [[90, "id185"], [90, "id204"]], "Protobuf changes": [[90, "protobuf-changes"]], "Client changes": [[90, "client-changes"]], "Removed": [[90, "removed"], [90, "id205"]], "2.0.2": [[90, "id191"]], "Power Command Exceptions": [[90, "power-command-exceptions"]], "2.0.1": [[90, "id195"]], "License Changes": [[90, "license-changes"]], "Map Recording": [[90, "map-recording"]], "Payload Integration": [[90, "payload-integration"]], "Additional Fixes": [[90, "additional-fixes"]], "2.0.0": [[90, "id201"]], "Autonomous Navigation APIs": [[90, "autonomous-navigation-apis"]], "Spot CAM API": [[90, "spot-cam-api"]], "Payload API integration": [[90, "payload-api-integration"]], "Environmental APIs": [[90, "environmental-apis"]], "Expanded and improved documentation": [[90, "expanded-and-improved-documentation"]], "Improved performance over poor communication links": [[90, "improved-performance-over-poor-communication-links"]], "Additional robot state is exposed": [[90, "additional-robot-state-is-exposed"]], "Clients can specify additional advanced locomotion options": [[90, "clients-can-specify-additional-advanced-locomotion-options"]], "Consistent Frame usage across API": [[90, "consistent-frame-usage-across-api"]], "bosdyn.client command line tool improvements": [[90, "bosdyn-client-command-line-tool-improvements"]], "Frame handling": [[90, "frame-handling"]], "New Exceptions": [[90, "new-exceptions"]], "Moved or Renamed": [[90, "moved-or-renamed"]], "Miscellaneous": [[90, "miscellaneous"]], "1.1.2": [[90, "id208"]], "New features": [[90, "id209"], [90, "id214"]], "1.1.1": [[90, "id212"]], "1.1.0": [[90, "id213"]], "Sample code": [[90, "id215"]], "Bug fixes and Improvements": [[90, "id216"]], "Deprecations and breaking changes": [[90, "deprecations-and-breaking-changes"]], "1.0.1": [[90, "id217"]], "1.0.0": [[90, "id218"]], "Basic Proto Definitions": [[91, "basic-proto-definitions"]], "Protocol Documentation": [[92, "protocol-documentation"]], "Table of Contents": [[92, "table-of-contents"]], "bosdyn/api/alerts.proto": [[92, "bosdyn-api-alerts-proto"]], "AlertData": [[92, "alertdata"]], "AlertData.SeverityLevel": [[92, "alertdata-severitylevel"]], "bosdyn/api/arm_command.proto": [[92, "bosdyn-api-arm-command-proto"]], "ArmCartesianCommand": [[92, "armcartesiancommand"]], "ArmCartesianCommand.Feedback": [[92, "armcartesiancommand-feedback"]], "ArmCartesianCommand.Request": [[92, "armcartesiancommand-request"]], "ArmCommand": [[92, "armcommand"]], "ArmCommand.Feedback": [[92, "armcommand-feedback"]], "ArmCommand.Request": [[92, "armcommand-request"]], "ArmImpedanceCommand": [[92, "armimpedancecommand"]], "ArmImpedanceCommand.Feedback": [[92, "armimpedancecommand-feedback"]], "ArmImpedanceCommand.Request": [[92, "armimpedancecommand-request"]], "ArmJointMoveCommand": [[92, "armjointmovecommand"]], "ArmJointMoveCommand.Feedback": [[92, "armjointmovecommand-feedback"]], "ArmJointMoveCommand.Request": [[92, "armjointmovecommand-request"]], "ArmJointPosition": [[92, "armjointposition"]], "ArmJointTrajectory": [[92, "armjointtrajectory"]], "ArmJointTrajectoryPoint": [[92, "armjointtrajectorypoint"]], "ArmJointVelocity": [[92, "armjointvelocity"]], "ArmParams": [[92, "armparams"]], "ArmStopCommand": [[92, "armstopcommand"]], "ArmStopCommand.Feedback": [[92, "armstopcommand-feedback"]], "ArmStopCommand.Request": [[92, "armstopcommand-request"]], "ArmVelocityCommand": [[92, "armvelocitycommand"]], "ArmVelocityCommand.CartesianVelocity": [[92, "armvelocitycommand-cartesianvelocity"]], "ArmVelocityCommand.CylindricalVelocity": [[92, "armvelocitycommand-cylindricalvelocity"]], "ArmVelocityCommand.Feedback": [[92, "armvelocitycommand-feedback"]], "ArmVelocityCommand.Request": [[92, "armvelocitycommand-request"]], "GazeCommand": [[92, "gazecommand"]], "GazeCommand.Feedback": [[92, "gazecommand-feedback"]], "GazeCommand.Request": [[92, "gazecommand-request"]], "NamedArmPositionsCommand": [[92, "namedarmpositionscommand"]], "NamedArmPositionsCommand.Feedback": [[92, "namedarmpositionscommand-feedback"]], "NamedArmPositionsCommand.Request": [[92, "namedarmpositionscommand-request"]], "ArmCartesianCommand.Feedback.Status": [[92, "armcartesiancommand-feedback-status"]], "ArmCartesianCommand.Request.AxisMode": [[92, "armcartesiancommand-request-axismode"]], "ArmImpedanceCommand.Feedback.Status": [[92, "armimpedancecommand-feedback-status"]], "ArmJointMoveCommand.Feedback.PlannerStatus": [[92, "armjointmovecommand-feedback-plannerstatus"]], "ArmJointMoveCommand.Feedback.Status": [[92, "armjointmovecommand-feedback-status"]], "GazeCommand.Feedback.Status": [[92, "gazecommand-feedback-status"]], "NamedArmPositionsCommand.Feedback.Status": [[92, "namedarmpositionscommand-feedback-status"]], "NamedArmPositionsCommand.Positions": [[92, "namedarmpositionscommand-positions"]], "bosdyn/api/arm_surface_contact.proto": [[92, "bosdyn-api-arm-surface-contact-proto"]], "ArmSurfaceContact": [[92, "armsurfacecontact"]], "ArmSurfaceContact.Feedback": [[92, "armsurfacecontact-feedback"]], "ArmSurfaceContact.Request": [[92, "armsurfacecontact-request"]], "ArmSurfaceContact.Request.AdmittanceSetting": [[92, "armsurfacecontact-request-admittancesetting"]], "ArmSurfaceContact.Request.AxisMode": [[92, "armsurfacecontact-request-axismode"]], "bosdyn/api/arm_surface_contact_service.proto": [[92, "bosdyn-api-arm-surface-contact-service-proto"]], "ArmSurfaceContactCommand": [[92, "armsurfacecontactcommand"]], "ArmSurfaceContactResponse": [[92, "armsurfacecontactresponse"]], "ArmSurfaceContactService": [[92, "armsurfacecontactservice"]], "bosdyn/api/auth.proto": [[92, "bosdyn-api-auth-proto"]], "GetAuthTokenRequest": [[92, "getauthtokenrequest"]], "GetAuthTokenResponse": [[92, "getauthtokenresponse"]], "GetAuthTokenResponse.Status": [[92, "getauthtokenresponse-status"]], "bosdyn/api/auth_service.proto": [[92, "bosdyn-api-auth-service-proto"]], "AuthService": [[92, "authservice"]], "bosdyn/api/auto_return/auto_return.proto": [[92, "bosdyn-api-auto-return-auto-return-proto"]], "ConfigureRequest": [[92, "configurerequest"]], "ConfigureResponse": [[92, "configureresponse"]], "GetConfigurationRequest": [[92, "getconfigurationrequest"]], "GetConfigurationResponse": [[92, "getconfigurationresponse"]], "Params": [[92, "params"]], "StartRequest": [[92, "startrequest"]], "StartResponse": [[92, "startresponse"]], "ConfigureResponse.Status": [[92, "configureresponse-status"]], "StartResponse.Status": [[92, "startresponse-status"]], "bosdyn/api/auto_return/auto_return_service.proto": [[92, "bosdyn-api-auto-return-auto-return-service-proto"]], "AutoReturnService": [[92, "autoreturnservice"]], "bosdyn/api/autowalk/autowalk.proto": [[92, "bosdyn-api-autowalk-autowalk-proto"]], "CompileAutowalkRequest": [[92, "compileautowalkrequest"]], "CompileAutowalkResponse": [[92, "compileautowalkresponse"]], "CompileAutowalkResponse.FailedElementsEntry": [[92, "compileautowalkresponse-failedelementsentry"]], "ElementIdentifiers": [[92, "elementidentifiers"]], "FailedElement": [[92, "failedelement"]], "LoadAutowalkRequest": [[92, "loadautowalkrequest"]], "LoadAutowalkResponse": [[92, "loadautowalkresponse"]], "LoadAutowalkResponse.FailedElementsEntry": [[92, "loadautowalkresponse-failedelementsentry"]], "NodeIdentifier": [[92, "nodeidentifier"]], "CompileAutowalkResponse.Status": [[92, "compileautowalkresponse-status"]], "LoadAutowalkResponse.Status": [[92, "loadautowalkresponse-status"]], "bosdyn/api/autowalk/autowalk_service.proto": [[92, "bosdyn-api-autowalk-autowalk-service-proto"]], "AutowalkService": [[92, "autowalkservice"]], "bosdyn/api/autowalk/walks.proto": [[92, "bosdyn-api-autowalk-walks-proto"]], "Action": [[92, "action"]], "Action.DataAcquisition": [[92, "action-dataacquisition"]], "Action.ExecuteChoreography": [[92, "action-executechoreography"]], "Action.RemoteGrpc": [[92, "action-remotegrpc"]], "Action.Sleep": [[92, "action-sleep"]], "ActionWrapper": [[92, "actionwrapper"]], "ActionWrapper.ArmSensorPointing": [[92, "actionwrapper-armsensorpointing"]], "ActionWrapper.GripperCameraParams": [[92, "actionwrapper-grippercameraparams"]], "ActionWrapper.GripperCommand": [[92, "actionwrapper-grippercommand"]], "ActionWrapper.RobotBodyPose": [[92, "actionwrapper-robotbodypose"]], "ActionWrapper.RobotBodySit": [[92, "actionwrapper-robotbodysit"]], "ActionWrapper.SpotCamAlignment": [[92, "actionwrapper-spotcamalignment"]], "ActionWrapper.SpotCamAlignment.Alignment": [[92, "actionwrapper-spotcamalignment-alignment"]], "ActionWrapper.SpotCamLed": [[92, "actionwrapper-spotcamled"]], "ActionWrapper.SpotCamLed.BrightnessesEntry": [[92, "actionwrapper-spotcamled-brightnessesentry"]], "ActionWrapper.SpotCamPtz": [[92, "actionwrapper-spotcamptz"]], "BatteryMonitor": [[92, "batterymonitor"]], "ChoreographyItems": [[92, "choreographyitems"]], "Dock": [[92, "dock"], [92, "id3"]], "Element": [[92, "element"]], "FailureBehavior": [[92, "failurebehavior"]], "FailureBehavior.ProceedIfAble": [[92, "failurebehavior-proceedifable"]], "FailureBehavior.ReturnToStartAndTerminate": [[92, "failurebehavior-returntostartandterminate"]], "FailureBehavior.ReturnToStartAndTryAgainLater": [[92, "failurebehavior-returntostartandtryagainlater"]], "FailureBehavior.SafePowerOff": [[92, "failurebehavior-safepoweroff"]], "GlobalParameters": [[92, "globalparameters"]], "HriBehaviors": [[92, "hribehaviors"]], "PlaybackMode": [[92, "playbackmode"]], "PlaybackMode.Continuous": [[92, "playbackmode-continuous"]], "PlaybackMode.Once": [[92, "playbackmode-once"]], "PlaybackMode.Periodic": [[92, "playbackmode-periodic"]], "Target": [[92, "target"]], "Target.NavigateRoute": [[92, "target-navigateroute"]], "Target.NavigateTo": [[92, "target-navigateto"]], "Target.Relocalize": [[92, "target-relocalize"]], "Walk": [[92, "walk"]], "Target.TargetStowBehavior": [[92, "target-targetstowbehavior"]], "bosdyn/api/basic_command.proto": [[92, "bosdyn-api-basic-command-proto"]], "ArmDragCommand": [[92, "armdragcommand"]], "ArmDragCommand.Feedback": [[92, "armdragcommand-feedback"]], "ArmDragCommand.Request": [[92, "armdragcommand-request"]], "BatteryChangePoseCommand": [[92, "batterychangeposecommand"]], "BatteryChangePoseCommand.Feedback": [[92, "batterychangeposecommand-feedback"]], "BatteryChangePoseCommand.Request": [[92, "batterychangeposecommand-request"]], "ConstrainedManipulationCommand": [[92, "constrainedmanipulationcommand"]], "ConstrainedManipulationCommand.Feedback": [[92, "constrainedmanipulationcommand-feedback"]], "ConstrainedManipulationCommand.Request": [[92, "constrainedmanipulationcommand-request"]], "FollowArmCommand.Feedback": [[92, "followarmcommand-feedback"]], "FollowArmCommand.Request": [[92, "followarmcommand-request"]], "FreezeCommand": [[92, "freezecommand"]], "FreezeCommand.Feedback": [[92, "freezecommand-feedback"]], "FreezeCommand.Request": [[92, "freezecommand-request"]], "JointCommand": [[92, "jointcommand"]], "JointCommand.ContactAdvice": [[92, "jointcommand-contactadvice"]], "JointCommand.Feedback": [[92, "jointcommand-feedback"]], "JointCommand.Request": [[92, "jointcommand-request"]], "JointCommand.UpdateRequest": [[92, "jointcommand-updaterequest"]], "JointCommand.UpdateRequest.Gains": [[92, "jointcommand-updaterequest-gains"]], "RobotCommandFeedbackStatus": [[92, "robotcommandfeedbackstatus"]], "SE2TrajectoryCommand": [[92, "se2trajectorycommand"]], "SE2TrajectoryCommand.Feedback": [[92, "se2trajectorycommand-feedback"]], "SE2TrajectoryCommand.Request": [[92, "se2trajectorycommand-request"]], "SE2VelocityCommand": [[92, "se2velocitycommand"]], "SE2VelocityCommand.Feedback": [[92, "se2velocitycommand-feedback"]], "SE2VelocityCommand.Request": [[92, "se2velocitycommand-request"]], "SafePowerOffCommand": [[92, "safepoweroffcommand"]], "SafePowerOffCommand.Feedback": [[92, "safepoweroffcommand-feedback"]], "SafePowerOffCommand.Request": [[92, "safepoweroffcommand-request"]], "SelfRightCommand": [[92, "selfrightcommand"]], "SelfRightCommand.Feedback": [[92, "selfrightcommand-feedback"]], "SelfRightCommand.Request": [[92, "selfrightcommand-request"]], "SitCommand": [[92, "sitcommand"]], "SitCommand.Feedback": [[92, "sitcommand-feedback"]], "SitCommand.Request": [[92, "sitcommand-request"]], "Stance": [[92, "stance"]], "Stance.FootPositionsEntry": [[92, "stance-footpositionsentry"]], "StanceCommand": [[92, "stancecommand"]], "StanceCommand.Feedback": [[92, "stancecommand-feedback"]], "StanceCommand.Request": [[92, "stancecommand-request"]], "StandCommand": [[92, "standcommand"]], "StandCommand.Feedback": [[92, "standcommand-feedback"]], "StandCommand.Request": [[92, "standcommand-request"]], "StopCommand": [[92, "stopcommand"]], "StopCommand.Feedback": [[92, "stopcommand-feedback"]], "StopCommand.Request": [[92, "stopcommand-request"]], "ArmDragCommand.Feedback.Status": [[92, "armdragcommand-feedback-status"]], "BatteryChangePoseCommand.Feedback.Status": [[92, "batterychangeposecommand-feedback-status"]], "BatteryChangePoseCommand.Request.DirectionHint": [[92, "batterychangeposecommand-request-directionhint"]], "ConstrainedManipulationCommand.Feedback.Status": [[92, "constrainedmanipulationcommand-feedback-status"]], "ConstrainedManipulationCommand.Request.ControlMode": [[92, "constrainedmanipulationcommand-request-controlmode"]], "ConstrainedManipulationCommand.Request.TaskType": [[92, "constrainedmanipulationcommand-request-tasktype"]], "JointCommand.ContactAdvice.Advice": [[92, "jointcommand-contactadvice-advice"]], "JointCommand.Feedback.Status": [[92, "jointcommand-feedback-status"]], "RobotCommandFeedbackStatus.Status": [[92, "robotcommandfeedbackstatus-status"]], "SE2TrajectoryCommand.Feedback.BodyMovementStatus": [[92, "se2trajectorycommand-feedback-bodymovementstatus"]], "SE2TrajectoryCommand.Feedback.FinalGoalStatus": [[92, "se2trajectorycommand-feedback-finalgoalstatus"]], "SE2TrajectoryCommand.Feedback.Status": [[92, "se2trajectorycommand-feedback-status"]], "SafePowerOffCommand.Feedback.Status": [[92, "safepoweroffcommand-feedback-status"]], "SafePowerOffCommand.Request.UnsafeAction": [[92, "safepoweroffcommand-request-unsafeaction"]], "SelfRightCommand.Feedback.Status": [[92, "selfrightcommand-feedback-status"]], "SitCommand.Feedback.Status": [[92, "sitcommand-feedback-status"]], "StanceCommand.Feedback.Status": [[92, "stancecommand-feedback-status"]], "StandCommand.Feedback.StandingState": [[92, "standcommand-feedback-standingstate"]], "StandCommand.Feedback.Status": [[92, "standcommand-feedback-status"]], "bosdyn/api/bddf.proto": [[92, "bosdyn-api-bddf-proto"]], "DataDescriptor": [[92, "datadescriptor"]], "DescriptorBlock": [[92, "descriptorblock"]], "FileFormatDescriptor": [[92, "fileformatdescriptor"]], "FileFormatDescriptor.AnnotationsEntry": [[92, "fileformatdescriptor-annotationsentry"]], "FileFormatVersion": [[92, "fileformatversion"]], "FileIndex": [[92, "fileindex"]], "MessageTypeDescriptor": [[92, "messagetypedescriptor"]], "PodTypeDescriptor": [[92, "podtypedescriptor"]], "SeriesBlockIndex": [[92, "seriesblockindex"]], "SeriesBlockIndex.BlockEntry": [[92, "seriesblockindex-blockentry"]], "SeriesDescriptor": [[92, "seriesdescriptor"]], "SeriesDescriptor.AnnotationsEntry": [[92, "seriesdescriptor-annotationsentry"]], "SeriesIdentifier": [[92, "seriesidentifier"]], "SeriesIdentifier.SpecEntry": [[92, "seriesidentifier-specentry"]], "StructTypeDescriptor": [[92, "structtypedescriptor"]], "StructTypeDescriptor.KeyToSeriesIdentifierHashEntry": [[92, "structtypedescriptor-keytoseriesidentifierhashentry"]], "FileFormatDescriptor.CheckSumType": [[92, "fileformatdescriptor-checksumtype"]], "PodTypeEnum": [[92, "podtypeenum"]], "bosdyn/api/data_acquisition.proto": [[92, "bosdyn-api-data-acquisition-proto"]], "AcquireDataRequest": [[92, "acquiredatarequest"]], "AcquireDataResponse": [[92, "acquiredataresponse"]], "AcquirePluginDataRequest": [[92, "acquireplugindatarequest"]], "AcquirePluginDataResponse": [[92, "acquireplugindataresponse"]], "AcquisitionCapabilityList": [[92, "acquisitioncapabilitylist"]], "AcquisitionRequestList": [[92, "acquisitionrequestlist"]], "AssociatedAlertData": [[92, "associatedalertdata"]], "AssociatedMetadata": [[92, "associatedmetadata"]], "CancelAcquisitionRequest": [[92, "cancelacquisitionrequest"]], "CancelAcquisitionResponse": [[92, "cancelacquisitionresponse"]], "CaptureActionId": [[92, "captureactionid"]], "DataAcquisitionCapability": [[92, "dataacquisitioncapability"]], "DataCapture": [[92, "datacapture"]], "DataError": [[92, "dataerror"]], "DataIdentifier": [[92, "dataidentifier"]], "GetServiceInfoRequest": [[92, "getserviceinforequest"]], "GetServiceInfoResponse": [[92, "getserviceinforesponse"]], "GetStatusRequest": [[92, "getstatusrequest"], [92, "id1"], [92, "id4"]], "GetStatusResponse": [[92, "getstatusresponse"], [92, "id2"], [92, "id5"]], "ImageAcquisitionCapability": [[92, "imageacquisitioncapability"]], "ImageSourceCapture": [[92, "imagesourcecapture"]], "LiveDataRequest": [[92, "livedatarequest"]], "LiveDataResponse": [[92, "livedataresponse"]], "LiveDataResponse.CapabilityLiveData": [[92, "livedataresponse-capabilitylivedata"]], "LiveDataResponse.CapabilityLiveData.SignalsEntry": [[92, "livedataresponse-capabilitylivedata-signalsentry"]], "Metadata": [[92, "metadata"]], "NetworkComputeCapability": [[92, "networkcomputecapability"]], "NetworkComputeCapture": [[92, "networkcomputecapture"]], "NetworkComputeError": [[92, "networkcomputeerror"]], "PluginServiceError": [[92, "pluginserviceerror"]], "AcquireDataResponse.Status": [[92, "acquiredataresponse-status"]], "AcquirePluginDataResponse.Status": [[92, "acquireplugindataresponse-status"]], "CancelAcquisitionResponse.Status": [[92, "cancelacquisitionresponse-status"]], "GetStatusResponse.Status": [[92, "getstatusresponse-status"]], "LiveDataResponse.CapabilityLiveData.Status": [[92, "livedataresponse-capabilitylivedata-status"]], "NetworkComputeError.ErrorCode": [[92, "networkcomputeerror-errorcode"]], "PluginServiceError.ErrorCode": [[92, "pluginserviceerror-errorcode"]], "bosdyn/api/data_acquisition_plugin_service.proto": [[92, "bosdyn-api-data-acquisition-plugin-service-proto"]], "DataAcquisitionPluginService": [[92, "dataacquisitionpluginservice"]], "bosdyn/api/data_acquisition_service.proto": [[92, "bosdyn-api-data-acquisition-service-proto"]], "DataAcquisitionService": [[92, "dataacquisitionservice"]], "bosdyn/api/data_acquisition_store.proto": [[92, "bosdyn-api-data-acquisition-store-proto"]], "ActionIdQuery": [[92, "actionidquery"]], "DataQueryParams": [[92, "dataqueryparams"]], "ListCaptureActionsRequest": [[92, "listcaptureactionsrequest"]], "ListCaptureActionsResponse": [[92, "listcaptureactionsresponse"]], "ListStoredAlertDataRequest": [[92, "liststoredalertdatarequest"]], "ListStoredAlertDataResponse": [[92, "liststoredalertdataresponse"]], "ListStoredDataRequest": [[92, "liststoreddatarequest"]], "ListStoredDataResponse": [[92, "liststoreddataresponse"]], "ListStoredImagesRequest": [[92, "liststoredimagesrequest"]], "ListStoredImagesResponse": [[92, "liststoredimagesresponse"]], "ListStoredMetadataRequest": [[92, "liststoredmetadatarequest"]], "ListStoredMetadataResponse": [[92, "liststoredmetadataresponse"]], "QueryMaxCaptureIdRequest": [[92, "querymaxcaptureidrequest"]], "QueryMaxCaptureIdResponse": [[92, "querymaxcaptureidresponse"]], "QueryParameters": [[92, "queryparameters"]], "QueryStoredCaptureResult": [[92, "querystoredcaptureresult"]], "QueryStoredCapturesRequest": [[92, "querystoredcapturesrequest"]], "QueryStoredCapturesResponse": [[92, "querystoredcapturesresponse"]], "StoreAlertDataRequest": [[92, "storealertdatarequest"]], "StoreAlertDataResponse": [[92, "storealertdataresponse"]], "StoreDataRequest": [[92, "storedatarequest"]], "StoreDataResponse": [[92, "storedataresponse"]], "StoreImageRequest": [[92, "storeimagerequest"]], "StoreImageResponse": [[92, "storeimageresponse"]], "StoreMetadataRequest": [[92, "storemetadatarequest"]], "StoreMetadataResponse": [[92, "storemetadataresponse"]], "StoreStreamRequest": [[92, "storestreamrequest"]], "StoreStreamResponse": [[92, "storestreamresponse"]], "StoredCapturedData": [[92, "storedcaptureddata"]], "StoredLargeCapturedData": [[92, "storedlargecaptureddata"]], "TimeRangeQuery": [[92, "timerangequery"]], "bosdyn/api/data_acquisition_store_service.proto": [[92, "bosdyn-api-data-acquisition-store-service-proto"]], "DataAcquisitionStoreService": [[92, "dataacquisitionstoreservice"]], "bosdyn/api/data_buffer.proto": [[92, "bosdyn-api-data-buffer-proto"]], "DataBlob": [[92, "datablob"]], "Event": [[92, "event"]], "OperatorComment": [[92, "operatorcomment"]], "RecordDataBlobsRequest": [[92, "recorddatablobsrequest"]], "RecordDataBlobsResponse": [[92, "recorddatablobsresponse"]], "RecordDataBlobsResponse.Error": [[92, "recorddatablobsresponse-error"]], "RecordEventsRequest": [[92, "recordeventsrequest"]], "RecordEventsResponse": [[92, "recordeventsresponse"]], "RecordEventsResponse.Error": [[92, "recordeventsresponse-error"]], "RecordOperatorCommentsRequest": [[92, "recordoperatorcommentsrequest"]], "RecordOperatorCommentsResponse": [[92, "recordoperatorcommentsresponse"]], "RecordOperatorCommentsResponse.Error": [[92, "recordoperatorcommentsresponse-error"]], "RecordSignalTicksRequest": [[92, "recordsignalticksrequest"]], "RecordSignalTicksResponse": [[92, "recordsignalticksresponse"]], "RecordSignalTicksResponse.Error": [[92, "recordsignalticksresponse-error"]], "RecordTextMessagesRequest": [[92, "recordtextmessagesrequest"]], "RecordTextMessagesResponse": [[92, "recordtextmessagesresponse"]], "RecordTextMessagesResponse.Error": [[92, "recordtextmessagesresponse-error"]], "RegisterSignalSchemaRequest": [[92, "registersignalschemarequest"]], "RegisterSignalSchemaResponse": [[92, "registersignalschemaresponse"]], "SignalSchema": [[92, "signalschema"]], "SignalSchema.Variable": [[92, "signalschema-variable"]], "SignalSchemaId": [[92, "signalschemaid"]], "SignalTick": [[92, "signaltick"]], "TextMessage": [[92, "textmessage"]], "Event.Level": [[92, "event-level"]], "Event.LogPreserveHint": [[92, "event-logpreservehint"]], "RecordDataBlobsResponse.Error.Type": [[92, "recorddatablobsresponse-error-type"]], "RecordEventsResponse.Error.Type": [[92, "recordeventsresponse-error-type"]], "RecordOperatorCommentsResponse.Error.Type": [[92, "recordoperatorcommentsresponse-error-type"]], "RecordSignalTicksResponse.Error.Type": [[92, "recordsignalticksresponse-error-type"]], "RecordTextMessagesResponse.Error.Type": [[92, "recordtextmessagesresponse-error-type"]], "SignalSchema.Variable.Type": [[92, "signalschema-variable-type"]], "SignalTick.Encoding": [[92, "signaltick-encoding"]], "TextMessage.Level": [[92, "textmessage-level"]], "bosdyn/api/data_buffer_service.proto": [[92, "bosdyn-api-data-buffer-service-proto"]], "DataBufferService": [[92, "databufferservice"]], "bosdyn/api/data_chunk.proto": [[92, "bosdyn-api-data-chunk-proto"]], "DataChunk": [[92, "datachunk"]], "bosdyn/api/data_index.proto": [[92, "bosdyn-api-data-index-proto"]], "BlobPage": [[92, "blobpage"]], "BlobPages": [[92, "blobpages"]], "BlobSpec": [[92, "blobspec"]], "DataBufferStatus": [[92, "databufferstatus"]], "DataIndex": [[92, "dataindex"]], "DataQuery": [[92, "dataquery"]], "DeleteDataPagesRequest": [[92, "deletedatapagesrequest"]], "DeleteDataPagesResponse": [[92, "deletedatapagesresponse"]], "DeletePageStatus": [[92, "deletepagestatus"]], "EventSpec": [[92, "eventspec"]], "EventsComments": [[92, "eventscomments"]], "EventsCommentsSpec": [[92, "eventscommentsspec"]], "GetDataBufferStatusRequest": [[92, "getdatabufferstatusrequest"]], "GetDataBufferStatusResponse": [[92, "getdatabufferstatusresponse"]], "GetDataIndexRequest": [[92, "getdataindexrequest"]], "GetDataIndexResponse": [[92, "getdataindexresponse"]], "GetDataPagesRequest": [[92, "getdatapagesrequest"]], "GetDataPagesResponse": [[92, "getdatapagesresponse"]], "GetEventsCommentsRequest": [[92, "geteventscommentsrequest"]], "GetEventsCommentsResponse": [[92, "geteventscommentsresponse"]], "GrpcPages": [[92, "grpcpages"]], "GrpcSpec": [[92, "grpcspec"]], "PageInfo": [[92, "pageinfo"]], "PagesAndTimestamp": [[92, "pagesandtimestamp"]], "DeletePageStatus.Status": [[92, "deletepagestatus-status"]], "PageInfo.Compression": [[92, "pageinfo-compression"]], "PageInfo.PageFormat": [[92, "pageinfo-pageformat"]], "bosdyn/api/data_service.proto": [[92, "bosdyn-api-data-service-proto"]], "DataService": [[92, "dataservice"]], "bosdyn/api/directory.proto": [[92, "bosdyn-api-directory-proto"]], "Endpoint": [[92, "endpoint"]], "GetServiceEntryRequest": [[92, "getserviceentryrequest"]], "GetServiceEntryResponse": [[92, "getserviceentryresponse"]], "ListServiceEntriesRequest": [[92, "listserviceentriesrequest"]], "ListServiceEntriesResponse": [[92, "listserviceentriesresponse"]], "ServiceEntry": [[92, "serviceentry"]], "GetServiceEntryResponse.Status": [[92, "getserviceentryresponse-status"]], "bosdyn/api/directory_registration.proto": [[92, "bosdyn-api-directory-registration-proto"]], "RegisterServiceRequest": [[92, "registerservicerequest"]], "RegisterServiceResponse": [[92, "registerserviceresponse"]], "UnregisterServiceRequest": [[92, "unregisterservicerequest"]], "UnregisterServiceResponse": [[92, "unregisterserviceresponse"]], "UpdateServiceRequest": [[92, "updateservicerequest"]], "UpdateServiceResponse": [[92, "updateserviceresponse"]], "RegisterServiceResponse.Status": [[92, "registerserviceresponse-status"]], "UnregisterServiceResponse.Status": [[92, "unregisterserviceresponse-status"]], "UpdateServiceResponse.Status": [[92, "updateserviceresponse-status"]], "bosdyn/api/directory_registration_service.proto": [[92, "bosdyn-api-directory-registration-service-proto"]], "DirectoryRegistrationService": [[92, "directoryregistrationservice"]], "bosdyn/api/directory_service.proto": [[92, "bosdyn-api-directory-service-proto"]], "DirectoryService": [[92, "directoryservice"]], "bosdyn/api/docking/docking.proto": [[92, "bosdyn-api-docking-docking-proto"]], "ConfigRange": [[92, "configrange"]], "DockState": [[92, "dockstate"]], "DockingCommandFeedbackRequest": [[92, "dockingcommandfeedbackrequest"]], "DockingCommandFeedbackResponse": [[92, "dockingcommandfeedbackresponse"]], "DockingCommandRequest": [[92, "dockingcommandrequest"]], "DockingCommandResponse": [[92, "dockingcommandresponse"]], "GetDockingConfigRequest": [[92, "getdockingconfigrequest"]], "GetDockingConfigResponse": [[92, "getdockingconfigresponse"]], "GetDockingStateRequest": [[92, "getdockingstaterequest"]], "GetDockingStateResponse": [[92, "getdockingstateresponse"]], "UpdateDockingParams": [[92, "updatedockingparams"]], "DockState.DockedStatus": [[92, "dockstate-dockedstatus"]], "DockState.LinkStatus": [[92, "dockstate-linkstatus"]], "DockType": [[92, "docktype"]], "DockingCommandFeedbackResponse.Status": [[92, "dockingcommandfeedbackresponse-status"]], "DockingCommandResponse.Status": [[92, "dockingcommandresponse-status"]], "PrepPoseBehavior": [[92, "prepposebehavior"]], "bosdyn/api/docking/docking_service.proto": [[92, "bosdyn-api-docking-docking-service-proto"]], "DockingService": [[92, "dockingservice"]], "bosdyn/api/estop.proto": [[92, "bosdyn-api-estop-proto"]], "DeregisterEstopEndpointRequest": [[92, "deregisterestopendpointrequest"]], "DeregisterEstopEndpointResponse": [[92, "deregisterestopendpointresponse"]], "EstopCheckInRequest": [[92, "estopcheckinrequest"]], "EstopCheckInResponse": [[92, "estopcheckinresponse"]], "EstopConfig": [[92, "estopconfig"]], "EstopEndpoint": [[92, "estopendpoint"]], "EstopEndpointWithStatus": [[92, "estopendpointwithstatus"]], "EstopSystemStatus": [[92, "estopsystemstatus"]], "GetEstopConfigRequest": [[92, "getestopconfigrequest"]], "GetEstopConfigResponse": [[92, "getestopconfigresponse"]], "GetEstopSystemStatusRequest": [[92, "getestopsystemstatusrequest"]], "GetEstopSystemStatusResponse": [[92, "getestopsystemstatusresponse"]], "RegisterEstopEndpointRequest": [[92, "registerestopendpointrequest"]], "RegisterEstopEndpointResponse": [[92, "registerestopendpointresponse"]], "SetEstopConfigRequest": [[92, "setestopconfigrequest"]], "SetEstopConfigResponse": [[92, "setestopconfigresponse"]], "DeregisterEstopEndpointResponse.Status": [[92, "deregisterestopendpointresponse-status"]], "EstopCheckInResponse.Status": [[92, "estopcheckinresponse-status"]], "EstopStopLevel": [[92, "estopstoplevel"]], "RegisterEstopEndpointResponse.Status": [[92, "registerestopendpointresponse-status"]], "SetEstopConfigResponse.Status": [[92, "setestopconfigresponse-status"]], "bosdyn/api/estop_service.proto": [[92, "bosdyn-api-estop-service-proto"]], "EstopService": [[92, "estopservice"]], "bosdyn/api/fault_service.proto": [[92, "bosdyn-api-fault-service-proto"]], "FaultService": [[92, "faultservice"]], "bosdyn/api/full_body_command.proto": [[92, "bosdyn-api-full-body-command-proto"]], "FullBodyCommand": [[92, "fullbodycommand"]], "FullBodyCommand.Feedback": [[92, "fullbodycommand-feedback"]], "FullBodyCommand.Request": [[92, "fullbodycommand-request"]], "bosdyn/api/geometry.proto": [[92, "bosdyn-api-geometry-proto"]], "Area": [[92, "area"]], "Bounds": [[92, "bounds"]], "Box2": [[92, "box2"]], "Box2WithFrame": [[92, "box2withframe"]], "Box3": [[92, "box3"]], "Box3WithFrame": [[92, "box3withframe"]], "Circle": [[92, "circle"]], "CircleWithFrame": [[92, "circlewithframe"]], "CylindricalCoordinate": [[92, "cylindricalcoordinate"]], "FrameTreeSnapshot": [[92, "frametreesnapshot"]], "FrameTreeSnapshot.ChildToParentEdgeMapEntry": [[92, "frametreesnapshot-childtoparentedgemapentry"]], "FrameTreeSnapshot.ParentEdge": [[92, "frametreesnapshot-parentedge"]], "Matrix": [[92, "matrix"]], "MatrixInt32": [[92, "matrixint32"]], "MatrixInt64": [[92, "matrixint64"]], "Matrixf": [[92, "matrixf"]], "OrientedBox2": [[92, "orientedbox2"]], "Plane": [[92, "plane"]], "PolyLine": [[92, "polyline"]], "Polygon": [[92, "polygon"]], "PolygonWithExclusions": [[92, "polygonwithexclusions"]], "Quad": [[92, "quad"]], "Quaternion": [[92, "quaternion"]], "Ray": [[92, "ray"]], "SE2Pose": [[92, "se2pose"]], "SE2Velocity": [[92, "se2velocity"]], "SE2VelocityLimit": [[92, "se2velocitylimit"]], "SE3Covariance": [[92, "se3covariance"]], "SE3Pose": [[92, "se3pose"]], "SE3Velocity": [[92, "se3velocity"]], "Vec2": [[92, "vec2"]], "Vec2Value": [[92, "vec2value"]], "Vec3": [[92, "vec3"]], "Vec3Value": [[92, "vec3value"]], "Vector": [[92, "vector"]], "Volume": [[92, "volume"]], "Wrench": [[92, "wrench"]], "bosdyn/api/gps/aggregator.proto": [[92, "bosdyn-api-gps-aggregator-proto"]], "NewGpsDataRequest": [[92, "newgpsdatarequest"]], "NewGpsDataResponse": [[92, "newgpsdataresponse"]], "bosdyn/api/gps/aggregator_service.proto": [[92, "bosdyn-api-gps-aggregator-service-proto"]], "AggregatorService": [[92, "aggregatorservice"]], "bosdyn/api/gps/gps.proto": [[92, "bosdyn-api-gps-gps-proto"]], "GpsDataPoint": [[92, "gpsdatapoint"]], "GpsDataPoint.Accuracy": [[92, "gpsdatapoint-accuracy"]], "GpsDataPoint.FixMode": [[92, "gpsdatapoint-fixmode"]], "GpsDataPoint.Satellite": [[92, "gpsdatapoint-satellite"]], "GpsDevice": [[92, "gpsdevice"]], "LLH": [[92, "llh"]], "LocationAndGpsDevice": [[92, "locationandgpsdevice"]], "GpsDataPoint.Filter": [[92, "gpsdatapoint-filter"]], "GpsDataPoint.FixMode.Mode": [[92, "gpsdatapoint-fixmode-mode"]], "GpsDataPoint.Satellite.Constellation": [[92, "gpsdatapoint-satellite-constellation"]], "bosdyn/api/gps/registration.proto": [[92, "bosdyn-api-gps-registration-proto"]], "GetLocationRequest": [[92, "getlocationrequest"]], "GetLocationResponse": [[92, "getlocationresponse"]], "GpsState": [[92, "gpsstate"]], "ResetRegistrationRequest": [[92, "resetregistrationrequest"]], "ResetRegistrationResponse": [[92, "resetregistrationresponse"]], "GetLocationResponse.Status": [[92, "getlocationresponse-status"]], "Registration.Status": [[92, "registration-status"]], "bosdyn/api/gps/registration_service.proto": [[92, "bosdyn-api-gps-registration-service-proto"]], "RegistrationService": [[92, "registrationservice"]], "bosdyn/api/graph_nav/area_callback.proto": [[92, "bosdyn-api-graph-nav-area-callback-proto"]], "AreaCallbackError": [[92, "areacallbackerror"]], "AreaCallbackInformation": [[92, "areacallbackinformation"]], "AreaCallbackInformationRequest": [[92, "areacallbackinformationrequest"]], "AreaCallbackInformationResponse": [[92, "areacallbackinformationresponse"]], "BeginCallbackRequest": [[92, "begincallbackrequest"]], "BeginCallbackResponse": [[92, "begincallbackresponse"]], "BeginControlRequest": [[92, "begincontrolrequest"]], "BeginControlResponse": [[92, "begincontrolresponse"]], "EndCallbackRequest": [[92, "endcallbackrequest"]], "EndCallbackResponse": [[92, "endcallbackresponse"]], "RegionInformation": [[92, "regioninformation"]], "RouteChangeRequest": [[92, "routechangerequest"]], "RouteChangeResponse": [[92, "routechangeresponse"]], "StopConfiguration": [[92, "stopconfiguration"]], "UpdateCallbackRequest": [[92, "updatecallbackrequest"]], "UpdateCallbackResponse": [[92, "updatecallbackresponse"]], "UpdateCallbackResponse.Complete": [[92, "updatecallbackresponse-complete"]], "UpdateCallbackResponse.Error": [[92, "updatecallbackresponse-error"]], "UpdateCallbackResponse.NavPolicy": [[92, "updatecallbackresponse-navpolicy"]], "UpdateCallbackResponse.UpdateLocalization": [[92, "updatecallbackresponse-updatelocalization"]], "AreaCallbackError.CallError": [[92, "areacallbackerror-callerror"]], "AreaCallbackInformation.Blockage": [[92, "areacallbackinformation-blockage"]], "AreaCallbackInformation.EntityWaiting": [[92, "areacallbackinformation-entitywaiting"]], "AreaCallbackInformation.Impairment": [[92, "areacallbackinformation-impairment"]], "BeginCallbackResponse.Status": [[92, "begincallbackresponse-status"]], "BeginControlResponse.Status": [[92, "begincontrolresponse-status"]], "EndCallbackResponse.Status": [[92, "endcallbackresponse-status"]], "RouteChangeResponse.Status": [[92, "routechangeresponse-status"]], "StopConfiguration.FaceDirection": [[92, "stopconfiguration-facedirection"]], "UpdateCallbackRequest.Stage": [[92, "updatecallbackrequest-stage"]], "UpdateCallbackResponse.Error.ErrorType": [[92, "updatecallbackresponse-error-errortype"]], "UpdateCallbackResponse.NavPolicy.Option": [[92, "updatecallbackresponse-navpolicy-option"]], "UpdateCallbackResponse.Status": [[92, "updatecallbackresponse-status"]], "UpdateCallbackResponse.UpdateLocalization.LocalizationChange": [[92, "updatecallbackresponse-updatelocalization-localizationchange"]], "bosdyn/api/graph_nav/area_callback_data.proto": [[92, "bosdyn-api-graph-nav-area-callback-data-proto"]], "AreaCallbackData": [[92, "areacallbackdata"]], "AreaCallbackMapConfig": [[92, "areacallbackmapconfig"]], "bosdyn/api/graph_nav/area_callback_service.proto": [[92, "bosdyn-api-graph-nav-area-callback-service-proto"]], "AreaCallbackService": [[92, "areacallbackservice"]], "bosdyn/api/graph_nav/gps.proto": [[92, "bosdyn-api-graph-nav-gps-proto"]], "GPSLocalization": [[92, "gpslocalization"]], "GPSLocalization.State": [[92, "gpslocalization-state"]], "bosdyn/api/graph_nav/graph_nav.proto": [[92, "bosdyn-api-graph-nav-graph-nav-proto"]], "AreaCallbackServiceError": [[92, "areacallbackserviceerror"]], "ClearGraphRequest": [[92, "cleargraphrequest"]], "ClearGraphResponse": [[92, "cleargraphresponse"]], "DownloadEdgeSnapshotRequest": [[92, "downloadedgesnapshotrequest"]], "DownloadEdgeSnapshotResponse": [[92, "downloadedgesnapshotresponse"]], "DownloadGraphRequest": [[92, "downloadgraphrequest"]], "DownloadGraphResponse": [[92, "downloadgraphresponse"]], "DownloadGraphStreamingResponse": [[92, "downloadgraphstreamingresponse"]], "DownloadWaypointSnapshotRequest": [[92, "downloadwaypointsnapshotrequest"]], "DownloadWaypointSnapshotResponse": [[92, "downloadwaypointsnapshotresponse"]], "GPSNavigationParams": [[92, "gpsnavigationparams"]], "GetLocalizationStateRequest": [[92, "getlocalizationstaterequest"]], "GetLocalizationStateResponse": [[92, "getlocalizationstateresponse"]], "LostDetectorState": [[92, "lostdetectorstate"]], "LostDetectorState.Params": [[92, "lostdetectorstate-params"]], "ModifyNavigationResponse": [[92, "modifynavigationresponse"]], "NavigateRouteRequest": [[92, "navigaterouterequest"]], "NavigateRouteResponse": [[92, "navigaterouteresponse"]], "NavigateToAnchorRequest": [[92, "navigatetoanchorrequest"]], "NavigateToAnchorResponse": [[92, "navigatetoanchorresponse"]], "NavigateToRequest": [[92, "navigatetorequest"]], "NavigateToResponse": [[92, "navigatetoresponse"]], "NavigationFeedbackRequest": [[92, "navigationfeedbackrequest"]], "NavigationFeedbackResponse": [[92, "navigationfeedbackresponse"]], "NavigationFeedbackResponse.ActiveRegionInformation": [[92, "navigationfeedbackresponse-activeregioninformation"]], "NavigationFeedbackResponse.ActiveRegionInformationEntry": [[92, "navigationfeedbackresponse-activeregioninformationentry"]], "NavigationFeedbackResponse.AreaCallbackErrorsEntry": [[92, "navigationfeedbackresponse-areacallbackerrorsentry"]], "RemotePointCloudStatus": [[92, "remotepointcloudstatus"]], "RouteFollowingParams": [[92, "routefollowingparams"]], "RouteGenParams": [[92, "routegenparams"]], "SensorCompatibilityStatus": [[92, "sensorcompatibilitystatus"]], "SetLocalizationRequest": [[92, "setlocalizationrequest"]], "SetLocalizationResponse": [[92, "setlocalizationresponse"]], "SetLocalizationResponse.SuspectedAmbiguity": [[92, "setlocalizationresponse-suspectedambiguity"]], "TravelParams": [[92, "travelparams"]], "UploadEdgeSnapshotRequest": [[92, "uploadedgesnapshotrequest"]], "UploadEdgeSnapshotResponse": [[92, "uploadedgesnapshotresponse"]], "UploadGraphRequest": [[92, "uploadgraphrequest"]], "UploadGraphResponse": [[92, "uploadgraphresponse"]], "UploadGraphResponse.ValidationStatus": [[92, "uploadgraphresponse-validationstatus"]], "UploadGraphStreamingRequest": [[92, "uploadgraphstreamingrequest"]], "UploadWaypointSnapshotRequest": [[92, "uploadwaypointsnapshotrequest"]], "UploadWaypointSnapshotResponse": [[92, "uploadwaypointsnapshotresponse"]], "ValidateGraphRequest": [[92, "validategraphrequest"]], "ValidateGraphResponse": [[92, "validategraphresponse"]], "VisualRefinementOptions": [[92, "visualrefinementoptions"]], "ClearGraphResponse.Status": [[92, "cleargraphresponse-status"]], "DownloadEdgeSnapshotResponse.Status": [[92, "downloadedgesnapshotresponse-status"]], "DownloadWaypointSnapshotResponse.Status": [[92, "downloadwaypointsnapshotresponse-status"]], "ModifyNavigationResponse.Status": [[92, "modifynavigationresponse-status"]], "NavigateRouteResponse.Status": [[92, "navigaterouteresponse-status"]], "NavigateToAnchorResponse.GPSStatus": [[92, "navigatetoanchorresponse-gpsstatus"]], "NavigateToAnchorResponse.Status": [[92, "navigatetoanchorresponse-status"]], "NavigateToResponse.Status": [[92, "navigatetoresponse-status"]], "NavigationFeedbackResponse.ActiveRegionInformation.AreaCallbackStatus": [[92, "navigationfeedbackresponse-activeregioninformation-areacallbackstatus"]], "NavigationFeedbackResponse.BlockageStatus": [[92, "navigationfeedbackresponse-blockagestatus"]], "NavigationFeedbackResponse.RouteFollowingStatus": [[92, "navigationfeedbackresponse-routefollowingstatus"]], "NavigationFeedbackResponse.Status": [[92, "navigationfeedbackresponse-status"]], "NavigationFeedbackResponse.StuckReason": [[92, "navigationfeedbackresponse-stuckreason"]], "RouteFollowingParams.ResumeBehavior": [[92, "routefollowingparams-resumebehavior"]], "RouteFollowingParams.RouteBlockedBehavior": [[92, "routefollowingparams-routeblockedbehavior"]], "RouteFollowingParams.StartRouteBehavior": [[92, "routefollowingparams-startroutebehavior"]], "SetLocalizationRequest.FiducialInit": [[92, "setlocalizationrequest-fiducialinit"]], "SetLocalizationResponse.QualityCheckResult": [[92, "setlocalizationresponse-qualitycheckresult"]], "SetLocalizationResponse.Status": [[92, "setlocalizationresponse-status"]], "TravelParams.FeatureQualityTolerance": [[92, "travelparams-featurequalitytolerance"]], "TravelParams.PathPlannerMode": [[92, "travelparams-pathplannermode"]], "UploadGraphResponse.Status": [[92, "uploadgraphresponse-status"]], "UploadWaypointSnapshotResponse.Status": [[92, "uploadwaypointsnapshotresponse-status"]], "ValidateGraphResponse.Status": [[92, "validategraphresponse-status"]], "bosdyn/api/graph_nav/graph_nav_service.proto": [[92, "bosdyn-api-graph-nav-graph-nav-service-proto"]], "GraphNavService": [[92, "graphnavservice"]], "bosdyn/api/graph_nav/lost_detection.proto": [[92, "bosdyn-api-graph-nav-lost-detection-proto"]], "LostDetectorStrictness": [[92, "lostdetectorstrictness"]], "bosdyn/api/graph_nav/map.proto": [[92, "bosdyn-api-graph-nav-map-proto"]], "Anchor": [[92, "anchor"]], "AnchoredWorldObject": [[92, "anchoredworldobject"]], "Anchoring": [[92, "anchoring"]], "AreaCallbackRegion": [[92, "areacallbackregion"]], "ClientMetadata": [[92, "clientmetadata"]], "Edge": [[92, "edge"]], "Edge.Annotations": [[92, "edge-annotations"]], "Edge.Annotations.AreaCallbacksEntry": [[92, "edge-annotations-areacallbacksentry"]], "Edge.Annotations.StairData": [[92, "edge-annotations-stairdata"]], "Edge.Id": [[92, "edge-id"]], "EdgeSnapshot": [[92, "edgesnapshot"]], "EdgeSnapshot.AreaCallbacksEntry": [[92, "edgesnapshot-areacallbacksentry"]], "EdgeSnapshot.Stance": [[92, "edgesnapshot-stance"]], "Graph": [[92, "graph"]], "MapStats": [[92, "mapstats"]], "MapStats.Stat": [[92, "mapstats-stat"]], "Region": [[92, "region"]], "RegionWithFrame": [[92, "regionwithframe"]], "Waypoint": [[92, "waypoint"]], "Waypoint.Annotations": [[92, "waypoint-annotations"]], "Waypoint.Annotations.GPSSettings": [[92, "waypoint-annotations-gpssettings"]], "Waypoint.Annotations.LocalizeRegion": [[92, "waypoint-annotations-localizeregion"]], "Waypoint.Annotations.LocalizeRegion.Circle2D": [[92, "waypoint-annotations-localizeregion-circle2d"]], "Waypoint.Annotations.LocalizeRegion.Default": [[92, "waypoint-annotations-localizeregion-default"]], "Waypoint.Annotations.LocalizeRegion.Empty": [[92, "waypoint-annotations-localizeregion-empty"]], "Waypoint.Annotations.LoopClosureSettings": [[92, "waypoint-annotations-loopclosuresettings"]], "WaypointSnapshot": [[92, "waypointsnapshot"]], "AnnotationState": [[92, "annotationstate"]], "Edge.Annotations.DirectionConstraint": [[92, "edge-annotations-directionconstraint"]], "Edge.Annotations.GroundClutterAvoidanceMode": [[92, "edge-annotations-groundclutteravoidancemode"]], "Edge.Annotations.PathFollowingMode": [[92, "edge-annotations-pathfollowingmode"]], "Edge.Annotations.StairData.DescentPreference": [[92, "edge-annotations-stairdata-descentpreference"]], "Edge.EdgeSource": [[92, "edge-edgesource"]], "Region.DataFilter": [[92, "region-datafilter"]], "Waypoint.WaypointSource": [[92, "waypoint-waypointsource"]], "bosdyn/api/graph_nav/map_processing.proto": [[92, "bosdyn-api-graph-nav-map-processing-proto"]], "AnchorHintUncertainty": [[92, "anchorhintuncertainty"]], "AnchoringHint": [[92, "anchoringhint"]], "PoseBounds": [[92, "posebounds"]], "ProcessAnchoringRequest": [[92, "processanchoringrequest"]], "ProcessAnchoringRequest.Params": [[92, "processanchoringrequest-params"]], "ProcessAnchoringRequest.Params.MeasurementParams": [[92, "processanchoringrequest-params-measurementparams"]], "ProcessAnchoringRequest.Params.OptimizerParams": [[92, "processanchoringrequest-params-optimizerparams"]], "ProcessAnchoringRequest.Params.Weights": [[92, "processanchoringrequest-params-weights"]], "ProcessAnchoringResponse": [[92, "processanchoringresponse"]], "ProcessAnchoringResponse.GPSResult": [[92, "processanchoringresponse-gpsresult"]], "ProcessTopologyRequest": [[92, "processtopologyrequest"]], "ProcessTopologyRequest.CollisionCheckingParams": [[92, "processtopologyrequest-collisioncheckingparams"]], "ProcessTopologyRequest.FeatureMatchingParams": [[92, "processtopologyrequest-featurematchingparams"]], "ProcessTopologyRequest.FiducialLoopClosureParams": [[92, "processtopologyrequest-fiducialloopclosureparams"]], "ProcessTopologyRequest.ICPParams": [[92, "processtopologyrequest-icpparams"]], "ProcessTopologyRequest.OdometryLoopClosureParams": [[92, "processtopologyrequest-odometryloopclosureparams"]], "ProcessTopologyRequest.Params": [[92, "processtopologyrequest-params"]], "ProcessTopologyResponse": [[92, "processtopologyresponse"]], "WaypointAnchorHint": [[92, "waypointanchorhint"]], "WorldObjectAnchorHint": [[92, "worldobjectanchorhint"]], "ProcessAnchoringResponse.GPSResult.GPSStatus": [[92, "processanchoringresponse-gpsresult-gpsstatus"]], "ProcessAnchoringResponse.Status": [[92, "processanchoringresponse-status"]], "ProcessTopologyResponse.Status": [[92, "processtopologyresponse-status"]], "bosdyn/api/graph_nav/map_processing_service.proto": [[92, "bosdyn-api-graph-nav-map-processing-service-proto"]], "MapProcessingService": [[92, "mapprocessingservice"]], "bosdyn/api/graph_nav/nav.proto": [[92, "bosdyn-api-graph-nav-nav-proto"]], "CompletedRoute": [[92, "completedroute"]], "CompletedRoute.CompletedEdge": [[92, "completedroute-completededge"]], "Localization": [[92, "localization"]], "Route": [[92, "route"]], "bosdyn/api/graph_nav/recording.proto": [[92, "bosdyn-api-graph-nav-recording-proto"]], "CreateEdgeRequest": [[92, "createedgerequest"]], "CreateEdgeResponse": [[92, "createedgeresponse"]], "CreateWaypointRequest": [[92, "createwaypointrequest"]], "CreateWaypointResponse": [[92, "createwaypointresponse"]], "GetRecordStatusRequest": [[92, "getrecordstatusrequest"]], "GetRecordStatusResponse": [[92, "getrecordstatusresponse"]], "RecordingEnvironment": [[92, "recordingenvironment"]], "SetRecordingEnvironmentRequest": [[92, "setrecordingenvironmentrequest"]], "SetRecordingEnvironmentResponse": [[92, "setrecordingenvironmentresponse"]], "StartRecordingRequest": [[92, "startrecordingrequest"]], "StartRecordingResponse": [[92, "startrecordingresponse"]], "StopRecordingRequest": [[92, "stoprecordingrequest"]], "StopRecordingResponse": [[92, "stoprecordingresponse"]], "CreateEdgeResponse.Status": [[92, "createedgeresponse-status"]], "CreateWaypointResponse.Status": [[92, "createwaypointresponse-status"]], "GetRecordStatusResponse.MapState": [[92, "getrecordstatusresponse-mapstate"]], "GetRecordStatusResponse.Status": [[92, "getrecordstatusresponse-status"]], "StartRecordingResponse.Status": [[92, "startrecordingresponse-status"]], "StopRecordingResponse.Status": [[92, "stoprecordingresponse-status"]], "bosdyn/api/graph_nav/recording_service.proto": [[92, "bosdyn-api-graph-nav-recording-service-proto"]], "GraphNavRecordingService": [[92, "graphnavrecordingservice"]], "bosdyn/api/graph_nav/visual_features.proto": [[92, "bosdyn-api-graph-nav-visual-features-proto"]], "DirectionWithCovariance": [[92, "directionwithcovariance"]], "GenericDescriptor": [[92, "genericdescriptor"]], "LandmarkObservationIndex": [[92, "landmarkobservationindex"]], "PositionWithCovariance": [[92, "positionwithcovariance"]], "VisualDescriptor": [[92, "visualdescriptor"]], "VisualKeyFrame": [[92, "visualkeyframe"]], "VisualKeyFrameBundle": [[92, "visualkeyframebundle"]], "VisualKeypoint": [[92, "visualkeypoint"]], "VisualLandmark": [[92, "visuallandmark"]], "VisualLandmarks": [[92, "visuallandmarks"]], "bosdyn/api/gripper_camera_param.proto": [[92, "bosdyn-api-gripper-camera-param-proto"]], "GripperCameraGetParamRequest": [[92, "grippercameragetparamrequest"]], "GripperCameraGetParamResponse": [[92, "grippercameragetparamresponse"]], "GripperCameraParamRequest": [[92, "grippercameraparamrequest"]], "GripperCameraParamResponse": [[92, "grippercameraparamresponse"]], "GripperCameraParams": [[92, "grippercameraparams"]], "RoiParameters": [[92, "roiparameters"]], "GripperCameraParams.CameraMode": [[92, "grippercameraparams-cameramode"]], "GripperCameraParams.LedMode": [[92, "grippercameraparams-ledmode"]], "HdrParameters": [[92, "hdrparameters"]], "RoiParameters.RoiWindowSize": [[92, "roiparameters-roiwindowsize"]], "bosdyn/api/gripper_camera_param_service.proto": [[92, "bosdyn-api-gripper-camera-param-service-proto"]], "GripperCameraParamService": [[92, "grippercameraparamservice"]], "bosdyn/api/gripper_command.proto": [[92, "bosdyn-api-gripper-command-proto"]], "ClawGripperCommand": [[92, "clawgrippercommand"]], "ClawGripperCommand.Feedback": [[92, "clawgrippercommand-feedback"]], "ClawGripperCommand.Request": [[92, "clawgrippercommand-request"]], "GripperCommand": [[92, "grippercommand"]], "GripperCommand.Feedback": [[92, "grippercommand-feedback"]], "GripperCommand.Request": [[92, "grippercommand-request"]], "ClawGripperCommand.Feedback.Status": [[92, "clawgrippercommand-feedback-status"]], "bosdyn/api/header.proto": [[92, "bosdyn-api-header-proto"]], "CommonError": [[92, "commonerror"]], "RequestHeader": [[92, "requestheader"]], "ResponseHeader": [[92, "responseheader"]], "CommonError.Code": [[92, "commonerror-code"]], "bosdyn/api/image.proto": [[92, "bosdyn-api-image-proto"]], "CaptureParameters": [[92, "captureparameters"]], "GetImageRequest": [[92, "getimagerequest"]], "GetImageResponse": [[92, "getimageresponse"]], "Image": [[92, "image"], [137, "module-bosdyn.client.image"]], "ImageCapture": [[92, "imagecapture"]], "ImageCaptureAndSource": [[92, "imagecaptureandsource"]], "ImageRequest": [[92, "imagerequest"]], "ImageResponse": [[92, "imageresponse"]], "ImageSource": [[92, "imagesource"]], "ImageSource.KannalaBrandtModel": [[92, "imagesource-kannalabrandtmodel"]], "ImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics": [[92, "imagesource-kannalabrandtmodel-kannalabrandtintrinsics"]], "ImageSource.PinholeBrownConrady": [[92, "imagesource-pinholebrownconrady"]], "ImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics": [[92, "imagesource-pinholebrownconrady-pinholebrownconradyintrinsics"]], "ImageSource.PinholeModel": [[92, "imagesource-pinholemodel"]], "ImageSource.PinholeModel.CameraIntrinsics": [[92, "imagesource-pinholemodel-cameraintrinsics"]], "ListImageSourcesRequest": [[92, "listimagesourcesrequest"]], "ListImageSourcesResponse": [[92, "listimagesourcesresponse"]], "Image.Format": [[92, "image-format"]], "Image.PixelFormat": [[92, "image-pixelformat"]], "ImageResponse.Status": [[92, "imageresponse-status"]], "ImageSource.ImageType": [[92, "imagesource-imagetype"]], "bosdyn/api/image_geometry.proto": [[92, "bosdyn-api-image-geometry-proto"]], "AreaI": [[92, "areai"]], "RectangleI": [[92, "rectanglei"]], "bosdyn/api/image_service.proto": [[92, "bosdyn-api-image-service-proto"]], "ImageService": [[92, "imageservice"]], "bosdyn/api/ir_enable_disable.proto": [[92, "bosdyn-api-ir-enable-disable-proto"]], "IREnableDisableRequest": [[92, "irenabledisablerequest"]], "IREnableDisableResponse": [[92, "irenabledisableresponse"]], "IREnableDisableRequest.Request": [[92, "irenabledisablerequest-request"]], "bosdyn/api/ir_enable_disable_service.proto": [[92, "bosdyn-api-ir-enable-disable-service-proto"]], "IREnableDisableService": [[92, "irenabledisableservice"]], "bosdyn/api/keepalive/keepalive.proto": [[92, "bosdyn-api-keepalive-keepalive-proto"]], "ActionAfter": [[92, "actionafter"]], "ActionAfter.AutoReturn": [[92, "actionafter-autoreturn"]], "ActionAfter.ControlledMotorsOff": [[92, "actionafter-controlledmotorsoff"]], "ActionAfter.ImmediateRobotOff": [[92, "actionafter-immediaterobotoff"]], "ActionAfter.LeaseStale": [[92, "actionafter-leasestale"]], "ActionAfter.RecordEvent": [[92, "actionafter-recordevent"]], "CheckInRequest": [[92, "checkinrequest"]], "CheckInResponse": [[92, "checkinresponse"]], "LivePolicy": [[92, "livepolicy"]], "ModifyPolicyRequest": [[92, "modifypolicyrequest"]], "ModifyPolicyResponse": [[92, "modifypolicyresponse"]], "CheckInResponse.Status": [[92, "checkinresponse-status"]], "GetStatusResponse.PolicyControlAction": [[92, "getstatusresponse-policycontrolaction"]], "ModifyPolicyResponse.Status": [[92, "modifypolicyresponse-status"]], "bosdyn/api/keepalive/keepalive_service.proto": [[92, "bosdyn-api-keepalive-keepalive-service-proto"]], "KeepaliveService": [[92, "keepaliveservice"]], "bosdyn/api/lease.proto": [[92, "bosdyn-api-lease-proto"]], "AcquireLeaseRequest": [[92, "acquireleaserequest"]], "AcquireLeaseResponse": [[92, "acquireleaseresponse"]], "Lease": [[92, "lease"], [142, "module-bosdyn.client.lease"]], "LeaseOwner": [[92, "leaseowner"]], "LeaseResource": [[92, "leaseresource"]], "LeaseUseResult": [[92, "leaseuseresult"]], "ListLeasesRequest": [[92, "listleasesrequest"]], "ListLeasesResponse": [[92, "listleasesresponse"]], "ResourceTree": [[92, "resourcetree"]], "RetainLeaseRequest": [[92, "retainleaserequest"]], "RetainLeaseResponse": [[92, "retainleaseresponse"]], "ReturnLeaseRequest": [[92, "returnleaserequest"]], "ReturnLeaseResponse": [[92, "returnleaseresponse"]], "TakeLeaseRequest": [[92, "takeleaserequest"]], "TakeLeaseResponse": [[92, "takeleaseresponse"]], "AcquireLeaseResponse.Status": [[92, "acquireleaseresponse-status"]], "LeaseUseResult.Status": [[92, "leaseuseresult-status"]], "ReturnLeaseResponse.Status": [[92, "returnleaseresponse-status"]], "TakeLeaseResponse.Status": [[92, "takeleaseresponse-status"]], "bosdyn/api/lease_service.proto": [[92, "bosdyn-api-lease-service-proto"]], "LeaseService": [[92, "leaseservice"]], "bosdyn/api/license.proto": [[92, "bosdyn-api-license-proto"]], "GetFeatureEnabledRequest": [[92, "getfeatureenabledrequest"]], "GetFeatureEnabledResponse": [[92, "getfeatureenabledresponse"]], "GetFeatureEnabledResponse.FeatureEnabledEntry": [[92, "getfeatureenabledresponse-featureenabledentry"]], "GetLicenseInfoRequest": [[92, "getlicenseinforequest"]], "GetLicenseInfoResponse": [[92, "getlicenseinforesponse"]], "LicenseInfo": [[92, "licenseinfo"]], "LicenseInfo.Status": [[92, "licenseinfo-status"]], "bosdyn/api/license_service.proto": [[92, "bosdyn-api-license-service-proto"]], "LicenseService": [[92, "licenseservice"]], "bosdyn/api/local_grid.proto": [[92, "bosdyn-api-local-grid-proto"]], "GetLocalGridTypesRequest": [[92, "getlocalgridtypesrequest"]], "GetLocalGridTypesResponse": [[92, "getlocalgridtypesresponse"]], "GetLocalGridsRequest": [[92, "getlocalgridsrequest"]], "GetLocalGridsResponse": [[92, "getlocalgridsresponse"]], "LocalGrid": [[92, "localgrid"]], "LocalGridExtent": [[92, "localgridextent"]], "LocalGridRequest": [[92, "localgridrequest"]], "LocalGridResponse": [[92, "localgridresponse"]], "LocalGridType": [[92, "localgridtype"]], "LocalGrid.CellFormat": [[92, "localgrid-cellformat"]], "LocalGrid.Encoding": [[92, "localgrid-encoding"]], "LocalGridResponse.Status": [[92, "localgridresponse-status"]], "bosdyn/api/local_grid_service.proto": [[92, "bosdyn-api-local-grid-service-proto"]], "LocalGridService": [[92, "localgridservice"]], "bosdyn/api/log_status/log_status.proto": [[92, "bosdyn-api-log-status-log-status-proto"]], "GetActiveLogStatusesRequest": [[92, "getactivelogstatusesrequest"]], "GetActiveLogStatusesResponse": [[92, "getactivelogstatusesresponse"]], "GetLogStatusRequest": [[92, "getlogstatusrequest"]], "GetLogStatusResponse": [[92, "getlogstatusresponse"]], "LogStatus": [[92, "logstatus"]], "StartExperimentLogRequest": [[92, "startexperimentlogrequest"]], "StartExperimentLogResponse": [[92, "startexperimentlogresponse"]], "StartRetroLogRequest": [[92, "startretrologrequest"]], "StartRetroLogResponse": [[92, "startretrologresponse"]], "TerminateLogRequest": [[92, "terminatelogrequest"]], "TerminateLogResponse": [[92, "terminatelogresponse"]], "UpdateExperimentLogRequest": [[92, "updateexperimentlogrequest"]], "UpdateExperimentLogResponse": [[92, "updateexperimentlogresponse"]], "GetActiveLogStatusesResponse.Status": [[92, "getactivelogstatusesresponse-status"]], "GetLogStatusResponse.Status": [[92, "getlogstatusresponse-status"]], "LogStatus.Status": [[92, "logstatus-status"]], "LogStatus.Type": [[92, "logstatus-type"]], "StartExperimentLogResponse.Status": [[92, "startexperimentlogresponse-status"]], "StartRetroLogResponse.Status": [[92, "startretrologresponse-status"]], "TerminateLogResponse.Status": [[92, "terminatelogresponse-status"]], "UpdateExperimentLogResponse.Status": [[92, "updateexperimentlogresponse-status"]], "bosdyn/api/log_status/log_status_service.proto": [[92, "bosdyn-api-log-status-log-status-service-proto"]], "LogStatusService": [[92, "logstatusservice"]], "bosdyn/api/manipulation_api.proto": [[92, "bosdyn-api-manipulation-api-proto"]], "AllowableOrientation": [[92, "allowableorientation"]], "ApiGraspOverride": [[92, "apigraspoverride"]], "ApiGraspOverrideRequest": [[92, "apigraspoverriderequest"]], "ApiGraspOverrideResponse": [[92, "apigraspoverrideresponse"]], "ApiGraspedCarryStateOverride": [[92, "apigraspedcarrystateoverride"]], "GraspParams": [[92, "graspparams"]], "ManipulationApiFeedbackRequest": [[92, "manipulationapifeedbackrequest"]], "ManipulationApiFeedbackResponse": [[92, "manipulationapifeedbackresponse"]], "ManipulationApiRequest": [[92, "manipulationapirequest"]], "ManipulationApiResponse": [[92, "manipulationapiresponse"]], "PickObject": [[92, "pickobject"]], "PickObjectExecutePlan": [[92, "pickobjectexecuteplan"]], "PickObjectInImage": [[92, "pickobjectinimage"]], "PickObjectRayInWorld": [[92, "pickobjectrayinworld"]], "RotationWithTolerance": [[92, "rotationwithtolerance"]], "SqueezeGrasp": [[92, "squeezegrasp"]], "VectorAlignmentWithTolerance": [[92, "vectoralignmentwithtolerance"]], "WalkToObjectInImage": [[92, "walktoobjectinimage"]], "WalkToObjectRayInWorld": [[92, "walktoobjectrayinworld"]], "ApiGraspOverride.Override": [[92, "apigraspoverride-override"]], "GraspPositionConstraint": [[92, "grasppositionconstraint"]], "ManipulationCameraSource": [[92, "manipulationcamerasource"]], "ManipulationFeedbackState": [[92, "manipulationfeedbackstate"]], "WalkGazeMode": [[92, "walkgazemode"]], "bosdyn/api/manipulation_api_service.proto": [[92, "bosdyn-api-manipulation-api-service-proto"]], "ManipulationApiService": [[92, "manipulationapiservice"]], "bosdyn/api/metrics_logging/absolute_metrics.proto": [[92, "bosdyn-api-metrics-logging-absolute-metrics-proto"]], "AbsoluteMetricsSnapshot": [[92, "absolutemetricssnapshot"]], "bosdyn/api/metrics_logging/metrics_logging_robot.proto": [[92, "bosdyn-api-metrics-logging-metrics-logging-robot-proto"]], "GetAbsoluteMetricSnapshotRequest": [[92, "getabsolutemetricsnapshotrequest"]], "GetAbsoluteMetricSnapshotResponse": [[92, "getabsolutemetricsnapshotresponse"]], "GetMetricsRequest": [[92, "getmetricsrequest"]], "GetMetricsResponse": [[92, "getmetricsresponse"]], "GetStoreSequenceRangeRequest": [[92, "getstoresequencerangerequest"]], "GetStoreSequenceRangeResponse": [[92, "getstoresequencerangeresponse"]], "bosdyn/api/metrics_logging/metrics_logging_robot_service.proto": [[92, "bosdyn-api-metrics-logging-metrics-logging-robot-service-proto"]], "MetricsLoggingRobotService": [[92, "metricsloggingrobotservice"]], "bosdyn/api/metrics_logging/signed_proto.proto": [[92, "bosdyn-api-metrics-logging-signed-proto-proto"]], "SignedProto": [[92, "signedproto"]], "bosdyn/api/mission/mission.proto": [[92, "bosdyn-api-mission-mission-proto"]], "AnswerQuestionRequest": [[92, "answerquestionrequest"]], "AnswerQuestionResponse": [[92, "answerquestionresponse"]], "FailedNode": [[92, "failednode"]], "GetInfoRequest": [[92, "getinforequest"]], "GetInfoResponse": [[92, "getinforesponse"]], "GetMissionRequest": [[92, "getmissionrequest"]], "GetMissionResponse": [[92, "getmissionresponse"]], "GetStateRequest": [[92, "getstaterequest"]], "GetStateResponse": [[92, "getstateresponse"]], "LoadMissionRequest": [[92, "loadmissionrequest"]], "LoadMissionResponse": [[92, "loadmissionresponse"]], "MissionInfo": [[92, "missioninfo"]], "NodeInfo": [[92, "nodeinfo"]], "PauseMissionRequest": [[92, "pausemissionrequest"]], "PauseMissionResponse": [[92, "pausemissionresponse"]], "PlayMissionRequest": [[92, "playmissionrequest"]], "PlayMissionResponse": [[92, "playmissionresponse"]], "PlaySettings": [[92, "playsettings"]], "Question": [[92, "question"]], "RestartMissionRequest": [[92, "restartmissionrequest"]], "RestartMissionResponse": [[92, "restartmissionresponse"]], "State": [[92, "state"]], "State.AnsweredQuestion": [[92, "state-answeredquestion"]], "State.NodeStatesAtTick": [[92, "state-nodestatesattick"]], "State.NodeStatesAtTick.NodeState": [[92, "state-nodestatesattick-nodestate"]], "State.NodeStatesAtTick.NodeState.BlackboardState": [[92, "state-nodestatesattick-nodestate-blackboardstate"]], "StopMissionRequest": [[92, "stopmissionrequest"]], "StopMissionResponse": [[92, "stopmissionresponse"]], "AnswerQuestionResponse.Status": [[92, "answerquestionresponse-status"]], "LoadMissionResponse.Status": [[92, "loadmissionresponse-status"]], "PauseMissionResponse.Status": [[92, "pausemissionresponse-status"]], "PlayMissionResponse.Status": [[92, "playmissionresponse-status"]], "RestartMissionResponse.Status": [[92, "restartmissionresponse-status"]], "State.Status": [[92, "state-status"]], "StopMissionResponse.Status": [[92, "stopmissionresponse-status"]], "bosdyn/api/mission/mission_service.proto": [[92, "bosdyn-api-mission-mission-service-proto"]], "MissionService": [[92, "missionservice"]], "bosdyn/api/mission/nodes.proto": [[92, "bosdyn-api-mission-nodes-proto"]], "BosdynDockState": [[92, "bosdyndockstate"]], "BosdynGraphNavLocalize": [[92, "bosdyngraphnavlocalize"]], "BosdynGraphNavState": [[92, "bosdyngraphnavstate"]], "BosdynGripperCameraParamsState": [[92, "bosdyngrippercameraparamsstate"]], "BosdynNavigateRoute": [[92, "bosdynnavigateroute"]], "BosdynNavigateTo": [[92, "bosdynnavigateto"]], "BosdynPowerRequest": [[92, "bosdynpowerrequest"]], "BosdynQueryStoredCaptures": [[92, "bosdynquerystoredcaptures"]], "BosdynQueryStoredCaptures.CaptureActionIdFormat": [[92, "bosdynquerystoredcaptures-captureactionidformat"]], "BosdynRecordEvent": [[92, "bosdynrecordevent"]], "BosdynRecordEvent.AdditionalParametersEntry": [[92, "bosdynrecordevent-additionalparametersentry"]], "BosdynRobotCommand": [[92, "bosdynrobotcommand"]], "BosdynRobotState": [[92, "bosdynrobotstate"]], "ClearBehaviorFaults": [[92, "clearbehaviorfaults"]], "Condition": [[92, "condition"]], "Condition.Operand": [[92, "condition-operand"]], "ConstantResult": [[92, "constantresult"]], "CreateMissionText": [[92, "createmissiontext"]], "DataAcquisition": [[92, "dataacquisition"]], "DataAcquisitionOnInterruption": [[92, "dataacquisitiononinterruption"]], "DateToBlackboard": [[92, "datetoblackboard"]], "DefineBlackboard": [[92, "defineblackboard"]], "ExecuteChoreography": [[92, "executechoreography"]], "ForDuration": [[92, "forduration"]], "FormatBlackboard": [[92, "formatblackboard"]], "MissionUploadChoreography": [[92, "missionuploadchoreography"]], "Node": [[92, "node"]], "ParallelAnd": [[92, "paralleland"]], "Prompt": [[92, "prompt"]], "Prompt.Option": [[92, "prompt-option"]], "Prompt.OptionsList": [[92, "prompt-optionslist"]], "RemoteGrpc": [[92, "remotegrpc"]], "Repeat": [[92, "repeat"]], "RestartWhenPaused": [[92, "restartwhenpaused"]], "RetainLease": [[92, "retainlease"]], "Retry": [[92, "retry"]], "Selector": [[92, "selector"]], "Sequence": [[92, "sequence"]], "SetBlackboard": [[92, "setblackboard"]], "SetGraspOverride": [[92, "setgraspoverride"]], "SetGripperCameraParams": [[92, "setgrippercameraparams"]], "SimpleParallel": [[92, "simpleparallel"]], "Sleep": [[92, "sleep"]], "SpotCamFocusState": [[92, "spotcamfocusstate"]], "SpotCamLed": [[92, "spotcamled"]], "SpotCamLed.BrightnessesEntry": [[92, "spotcamled-brightnessesentry"]], "SpotCamPtz": [[92, "spotcamptz"]], "SpotCamPtz.AdjustParameters": [[92, "spotcamptz-adjustparameters"]], "SpotCamResetAutofocus": [[92, "spotcamresetautofocus"]], "SpotCamStoreMedia": [[92, "spotcamstoremedia"]], "StoreMetadata": [[92, "storemetadata"]], "Switch": [[92, "switch"]], "Switch.IntChildrenEntry": [[92, "switch-intchildrenentry"]], "Condition.Compare": [[92, "condition-compare"]], "Condition.HandleStaleness": [[92, "condition-handlestaleness"]], "DataAcquisition.CompletionBehavior": [[92, "dataacquisition-completionbehavior"]], "bosdyn/api/mission/remote.proto": [[92, "bosdyn-api-mission-remote-proto"]], "EstablishSessionRequest": [[92, "establishsessionrequest"]], "EstablishSessionResponse": [[92, "establishsessionresponse"]], "GetRemoteMissionServiceInfoRequest": [[92, "getremotemissionserviceinforequest"]], "GetRemoteMissionServiceInfoResponse": [[92, "getremotemissionserviceinforesponse"]], "StopRequest": [[92, "stoprequest"]], "StopResponse": [[92, "stopresponse"]], "TeardownSessionRequest": [[92, "teardownsessionrequest"]], "TeardownSessionResponse": [[92, "teardownsessionresponse"]], "TickRequest": [[92, "tickrequest"]], "TickResponse": [[92, "tickresponse"]], "EstablishSessionResponse.Status": [[92, "establishsessionresponse-status"]], "StopResponse.Status": [[92, "stopresponse-status"]], "TeardownSessionResponse.Status": [[92, "teardownsessionresponse-status"]], "TickResponse.Status": [[92, "tickresponse-status"]], "bosdyn/api/mission/remote_service.proto": [[92, "bosdyn-api-mission-remote-service-proto"]], "RemoteMissionService": [[92, "remotemissionservice"]], "bosdyn/api/mission/util.proto": [[92, "bosdyn-api-mission-util-proto"]], "ConstantValue": [[92, "constantvalue"]], "KeyValue": [[92, "keyvalue"]], "MissionText": [[92, "missiontext"]], "UserData": [[92, "userdata"]], "Value": [[92, "value"]], "VariableDeclaration": [[92, "variabledeclaration"]], "Result": [[92, "result"]], "VariableDeclaration.Type": [[92, "variabledeclaration-type"]], "bosdyn/api/mobility_command.proto": [[92, "bosdyn-api-mobility-command-proto"]], "MobilityCommand": [[92, "mobilitycommand"]], "MobilityCommand.Feedback": [[92, "mobilitycommand-feedback"]], "MobilityCommand.Request": [[92, "mobilitycommand-request"]], "bosdyn/api/network_compute_bridge.proto": [[92, "bosdyn-api-network-compute-bridge-proto"]], "AvailableModels": [[92, "availablemodels"]], "ComputeParameters": [[92, "computeparameters"]], "ImageSourceAndService": [[92, "imagesourceandservice"]], "ListAvailableModelsRequest": [[92, "listavailablemodelsrequest"]], "ListAvailableModelsResponse": [[92, "listavailablemodelsresponse"]], "ModelData": [[92, "modeldata"]], "ModelLabels": [[92, "modellabels"]], "NetworkComputeInputData": [[92, "networkcomputeinputdata"]], "NetworkComputeInputDataBridge": [[92, "networkcomputeinputdatabridge"]], "NetworkComputeInputDataWorker": [[92, "networkcomputeinputdataworker"]], "NetworkComputeRequest": [[92, "networkcomputerequest"]], "NetworkComputeResponse": [[92, "networkcomputeresponse"]], "NetworkComputeResponse.OutputImagesEntry": [[92, "networkcomputeresponse-outputimagesentry"]], "NetworkComputeResponse.RoiOutputDataEntry": [[92, "networkcomputeresponse-roioutputdataentry"]], "NetworkComputeServerConfiguration": [[92, "networkcomputeserverconfiguration"]], "OutputData": [[92, "outputdata"]], "OutputImage": [[92, "outputimage"]], "OutputImageSpec": [[92, "outputimagespec"]], "WorkerComputeRequest": [[92, "workercomputerequest"]], "WorkerComputeResponse": [[92, "workercomputeresponse"]], "WorkerComputeResponse.OutputImagesEntry": [[92, "workercomputeresponse-outputimagesentry"]], "ListAvailableModelsStatus": [[92, "listavailablemodelsstatus"]], "NetworkComputeInputData.RotateImage": [[92, "networkcomputeinputdata-rotateimage"]], "NetworkComputeStatus": [[92, "networkcomputestatus"]], "bosdyn/api/network_compute_bridge_service.proto": [[92, "bosdyn-api-network-compute-bridge-service-proto"]], "NetworkComputeBridgeWorker": [[92, "networkcomputebridgeworker"]], "bosdyn/api/network_stats.proto": [[92, "bosdyn-api-network-stats-proto"]], "Association": [[92, "association"]], "WifiDevice": [[92, "wifidevice"]], "WifiStats": [[92, "wifistats"]], "WifiDevice.Type": [[92, "wifidevice-type"]], "bosdyn/api/parameter.proto": [[92, "bosdyn-api-parameter-proto"]], "bosdyn/api/payload.proto": [[92, "bosdyn-api-payload-proto"]], "JointLimits": [[92, "jointlimits"]], "ListPayloadsRequest": [[92, "listpayloadsrequest"]], "ListPayloadsResponse": [[92, "listpayloadsresponse"]], "MomentOfIntertia": [[92, "momentofintertia"]], "PayloadMassVolumeProperties": [[92, "payloadmassvolumeproperties"]], "PayloadPreset": [[92, "payloadpreset"]], "MountFrameName": [[92, "mountframename"]], "bosdyn/api/payload_estimation.proto": [[92, "bosdyn-api-payload-estimation-proto"]], "PayloadEstimationCommand": [[92, "payloadestimationcommand"]], "PayloadEstimationCommand.Feedback": [[92, "payloadestimationcommand-feedback"]], "PayloadEstimationCommand.Request": [[92, "payloadestimationcommand-request"]], "PayloadEstimationCommand.Feedback.Error": [[92, "payloadestimationcommand-feedback-error"]], "PayloadEstimationCommand.Feedback.Status": [[92, "payloadestimationcommand-feedback-status"]], "bosdyn/api/payload_registration.proto": [[92, "bosdyn-api-payload-registration-proto"]], "GetPayloadAuthTokenRequest": [[92, "getpayloadauthtokenrequest"]], "GetPayloadAuthTokenResponse": [[92, "getpayloadauthtokenresponse"]], "PayloadCredentials": [[92, "payloadcredentials"]], "RegisterPayloadRequest": [[92, "registerpayloadrequest"]], "RegisterPayloadResponse": [[92, "registerpayloadresponse"]], "UpdatePayloadAttachedRequest": [[92, "updatepayloadattachedrequest"]], "UpdatePayloadAttachedResponse": [[92, "updatepayloadattachedresponse"]], "UpdatePayloadVersionRequest": [[92, "updatepayloadversionrequest"]], "UpdatePayloadVersionResponse": [[92, "updatepayloadversionresponse"]], "GetPayloadAuthTokenResponse.Status": [[92, "getpayloadauthtokenresponse-status"]], "RegisterPayloadResponse.Status": [[92, "registerpayloadresponse-status"]], "UpdatePayloadAttachedRequest.Request": [[92, "updatepayloadattachedrequest-request"]], "UpdatePayloadAttachedResponse.Status": [[92, "updatepayloadattachedresponse-status"]], "UpdatePayloadVersionResponse.Status": [[92, "updatepayloadversionresponse-status"]], "bosdyn/api/payload_registration_service.proto": [[92, "bosdyn-api-payload-registration-service-proto"]], "PayloadRegistrationService": [[92, "payloadregistrationservice"]], "bosdyn/api/payload_service.proto": [[92, "bosdyn-api-payload-service-proto"]], "PayloadService": [[92, "payloadservice"]], "bosdyn/api/point_cloud.proto": [[92, "bosdyn-api-point-cloud-proto"]], "GetPointCloudRequest": [[92, "getpointcloudrequest"]], "GetPointCloudResponse": [[92, "getpointcloudresponse"]], "ListPointCloudSourcesRequest": [[92, "listpointcloudsourcesrequest"]], "ListPointCloudSourcesResponse": [[92, "listpointcloudsourcesresponse"]], "PointCloud": [[92, "pointcloud"]], "PointCloud.EncodingParameters": [[92, "pointcloud-encodingparameters"]], "PointCloudRequest": [[92, "pointcloudrequest"]], "PointCloudResponse": [[92, "pointcloudresponse"]], "PointCloudSource": [[92, "pointcloudsource"]], "PointCloud.Encoding": [[92, "pointcloud-encoding"]], "PointCloudResponse.Status": [[92, "pointcloudresponse-status"]], "bosdyn/api/point_cloud_service.proto": [[92, "bosdyn-api-point-cloud-service-proto"]], "PointCloudService": [[92, "pointcloudservice"]], "bosdyn/api/power.proto": [[92, "bosdyn-api-power-proto"]], "FanPowerCommandFeedbackRequest": [[92, "fanpowercommandfeedbackrequest"]], "FanPowerCommandFeedbackResponse": [[92, "fanpowercommandfeedbackresponse"]], "FanPowerCommandRequest": [[92, "fanpowercommandrequest"]], "FanPowerCommandResponse": [[92, "fanpowercommandresponse"]], "PowerCommandFeedbackRequest": [[92, "powercommandfeedbackrequest"]], "PowerCommandFeedbackResponse": [[92, "powercommandfeedbackresponse"]], "PowerCommandRequest": [[92, "powercommandrequest"]], "PowerCommandResponse": [[92, "powercommandresponse"]], "ResetSafetyStopRequest": [[92, "resetsafetystoprequest"]], "ResetSafetyStopResponse": [[92, "resetsafetystopresponse"]], "FanPowerCommandFeedbackResponse.Status": [[92, "fanpowercommandfeedbackresponse-status"]], "FanPowerCommandResponse.Status": [[92, "fanpowercommandresponse-status"]], "PowerCommandRequest.Request": [[92, "powercommandrequest-request"]], "PowerCommandStatus": [[92, "powercommandstatus"]], "ResetSafetyStopRequest.SafetyStopType": [[92, "resetsafetystoprequest-safetystoptype"]], "ResetSafetyStopResponse.Status": [[92, "resetsafetystopresponse-status"]], "bosdyn/api/power_service.proto": [[92, "bosdyn-api-power-service-proto"]], "PowerService": [[92, "powerservice"], [92, "id6"]], "bosdyn/api/ray_cast.proto": [[92, "bosdyn-api-ray-cast-proto"]], "RayIntersection": [[92, "rayintersection"]], "RaycastRequest": [[92, "raycastrequest"]], "RaycastResponse": [[92, "raycastresponse"]], "RayIntersection.Type": [[92, "rayintersection-type"]], "RaycastResponse.Status": [[92, "raycastresponse-status"]], "bosdyn/api/ray_cast_service.proto": [[92, "bosdyn-api-ray-cast-service-proto"]], "RayCastService": [[92, "raycastservice"]], "bosdyn/api/robot_command.proto": [[92, "bosdyn-api-robot-command-proto"]], "ClearBehaviorFaultRequest": [[92, "clearbehaviorfaultrequest"]], "ClearBehaviorFaultResponse": [[92, "clearbehaviorfaultresponse"]], "JointControlStreamRequest": [[92, "jointcontrolstreamrequest"]], "JointControlStreamResponse": [[92, "jointcontrolstreamresponse"]], "RobotCommand": [[92, "robotcommand"]], "RobotCommandFeedback": [[92, "robotcommandfeedback"]], "RobotCommandFeedbackRequest": [[92, "robotcommandfeedbackrequest"]], "RobotCommandFeedbackResponse": [[92, "robotcommandfeedbackresponse"]], "RobotCommandRequest": [[92, "robotcommandrequest"]], "RobotCommandResponse": [[92, "robotcommandresponse"]], "ClearBehaviorFaultResponse.Status": [[92, "clearbehaviorfaultresponse-status"]], "JointControlStreamResponse.Status": [[92, "jointcontrolstreamresponse-status"]], "RobotCommandResponse.Status": [[92, "robotcommandresponse-status"]], "bosdyn/api/robot_command_service.proto": [[92, "bosdyn-api-robot-command-service-proto"]], "RobotCommandService": [[92, "robotcommandservice"]], "RobotCommandStreamingService": [[92, "robotcommandstreamingservice"]], "bosdyn/api/robot_id.proto": [[92, "bosdyn-api-robot-id-proto"]], "RobotId": [[92, "robotid"]], "RobotIdRequest": [[92, "robotidrequest"]], "RobotIdResponse": [[92, "robotidresponse"]], "RobotSoftwareRelease": [[92, "robotsoftwarerelease"]], "SoftwareVersion": [[92, "softwareversion"]], "bosdyn/api/robot_id_service.proto": [[92, "bosdyn-api-robot-id-service-proto"]], "RobotIdService": [[92, "robotidservice"]], "bosdyn/api/robot_state.proto": [[92, "bosdyn-api-robot-state-proto"]], "BatteryState": [[92, "batterystate"]], "BehaviorFault": [[92, "behaviorfault"]], "BehaviorFaultState": [[92, "behaviorfaultstate"]], "BehaviorState": [[92, "behaviorstate"]], "CombinedJointStates": [[92, "combinedjointstates"]], "CommsState": [[92, "commsstate"]], "EStopState": [[92, "estopstate"]], "FootState": [[92, "footstate"]], "FootState.TerrainState": [[92, "footstate-terrainstate"]], "HardwareConfiguration": [[92, "hardwareconfiguration"]], "ImuState": [[92, "imustate"]], "ImuState.Packet": [[92, "imustate-packet"]], "JointState": [[92, "jointstate"]], "KinematicState": [[92, "kinematicstate"]], "ManipulatorState": [[92, "manipulatorstate"]], "MotorTemperature": [[92, "motortemperature"]], "PowerState": [[92, "powerstate"]], "RobotHardwareConfigurationRequest": [[92, "robothardwareconfigurationrequest"]], "RobotHardwareConfigurationResponse": [[92, "robothardwareconfigurationresponse"]], "RobotImpairedState": [[92, "robotimpairedstate"]], "RobotLinkModelRequest": [[92, "robotlinkmodelrequest"]], "RobotLinkModelResponse": [[92, "robotlinkmodelresponse"]], "RobotMetrics": [[92, "robotmetrics"]], "RobotMetricsRequest": [[92, "robotmetricsrequest"]], "RobotMetricsResponse": [[92, "robotmetricsresponse"]], "RobotState": [[92, "robotstate"]], "RobotStateRequest": [[92, "robotstaterequest"]], "RobotStateResponse": [[92, "robotstateresponse"]], "RobotStateStreamRequest": [[92, "robotstatestreamrequest"]], "RobotStateStreamResponse": [[92, "robotstatestreamresponse"]], "RobotStateStreamResponse.CommandState": [[92, "robotstatestreamresponse-commandstate"]], "RobotStateStreamResponse.KinematicState": [[92, "robotstatestreamresponse-kinematicstate"]], "ServiceFaultState": [[92, "servicefaultstate"]], "ServiceFaultState.AggregatedEntry": [[92, "servicefaultstate-aggregatedentry"]], "Skeleton": [[92, "skeleton"]], "Skeleton.Link": [[92, "skeleton-link"]], "Skeleton.Link.ObjModel": [[92, "skeleton-link-objmodel"]], "SystemFault": [[92, "systemfault"]], "SystemFaultState": [[92, "systemfaultstate"]], "SystemFaultState.AggregatedEntry": [[92, "systemfaultstate-aggregatedentry"]], "SystemState": [[92, "systemstate"]], "TerrainState": [[92, "terrainstate"]], "WiFiState": [[92, "wifistate"]], "BatteryState.Status": [[92, "batterystate-status"]], "BehaviorFault.Cause": [[92, "behaviorfault-cause"]], "BehaviorFault.Status": [[92, "behaviorfault-status"]], "BehaviorState.State": [[92, "behaviorstate-state"]], "EStopState.State": [[92, "estopstate-state"]], "EStopState.Type": [[92, "estopstate-type"]], "FootState.Contact": [[92, "footstate-contact"]], "ManipulatorState.CarryState": [[92, "manipulatorstate-carrystate"]], "ManipulatorState.StowState": [[92, "manipulatorstate-stowstate"]], "PowerState.MotorPowerState": [[92, "powerstate-motorpowerstate"]], "PowerState.PayloadPortsPowerState": [[92, "powerstate-payloadportspowerstate"]], "PowerState.RobotPowerState": [[92, "powerstate-robotpowerstate"]], "PowerState.ShorePowerState": [[92, "powerstate-shorepowerstate"]], "PowerState.WifiRadioPowerState": [[92, "powerstate-wifiradiopowerstate"]], "RobotImpairedState.ImpairedStatus": [[92, "robotimpairedstate-impairedstatus"]], "SystemFault.Severity": [[92, "systemfault-severity"]], "WiFiState.Mode": [[92, "wifistate-mode"]], "bosdyn/api/robot_state_service.proto": [[92, "bosdyn-api-robot-state-service-proto"]], "RobotStateService": [[92, "robotstateservice"]], "RobotStateStreamingService": [[92, "robotstatestreamingservice"]], "bosdyn/api/service_customization.proto": [[92, "bosdyn-api-service-customization-proto"]], "BoolParam": [[92, "boolparam"]], "BoolParam.Spec": [[92, "boolparam-spec"]], "CustomParam": [[92, "customparam"]], "CustomParam.Spec": [[92, "customparam-spec"]], "CustomParamCollection": [[92, "customparamcollection"]], "CustomParamError": [[92, "customparamerror"]], "DictParam": [[92, "dictparam"]], "DictParam.ChildSpec": [[92, "dictparam-childspec"]], "DictParam.Spec": [[92, "dictparam-spec"]], "DictParam.Spec.SpecsEntry": [[92, "dictparam-spec-specsentry"]], "DictParam.ValuesEntry": [[92, "dictparam-valuesentry"]], "DoubleParam": [[92, "doubleparam"]], "DoubleParam.Spec": [[92, "doubleparam-spec"]], "Int64Param": [[92, "int64param"]], "Int64Param.Spec": [[92, "int64param-spec"]], "ListParam": [[92, "listparam"]], "ListParam.Spec": [[92, "listparam-spec"]], "OneOfParam": [[92, "oneofparam"]], "OneOfParam.ChildSpec": [[92, "oneofparam-childspec"]], "OneOfParam.Spec": [[92, "oneofparam-spec"]], "OneOfParam.Spec.SpecsEntry": [[92, "oneofparam-spec-specsentry"]], "OneOfParam.ValuesEntry": [[92, "oneofparam-valuesentry"]], "RegionOfInterestParam": [[92, "regionofinterestparam"]], "RegionOfInterestParam.ServiceAndSource": [[92, "regionofinterestparam-serviceandsource"]], "RegionOfInterestParam.Spec": [[92, "regionofinterestparam-spec"]], "StringParam": [[92, "stringparam"]], "StringParam.Spec": [[92, "stringparam-spec"]], "UserInterfaceInfo": [[92, "userinterfaceinfo"]], "CustomParamError.Status": [[92, "customparamerror-status"]], "bosdyn/api/service_fault.proto": [[92, "bosdyn-api-service-fault-proto"]], "ClearServiceFaultRequest": [[92, "clearservicefaultrequest"]], "ClearServiceFaultResponse": [[92, "clearservicefaultresponse"]], "ServiceFault": [[92, "servicefault"]], "ServiceFaultId": [[92, "servicefaultid"]], "TriggerServiceFaultRequest": [[92, "triggerservicefaultrequest"]], "TriggerServiceFaultResponse": [[92, "triggerservicefaultresponse"]], "ClearServiceFaultResponse.Status": [[92, "clearservicefaultresponse-status"]], "ServiceFault.Severity": [[92, "servicefault-severity"]], "TriggerServiceFaultResponse.Status": [[92, "triggerservicefaultresponse-status"]], "bosdyn/api/signals.proto": [[92, "bosdyn-api-signals-proto"]], "AlertConditionSpec": [[92, "alertconditionspec"]], "SensorOutputSpec": [[92, "sensoroutputspec"]], "Signal": [[92, "signal"]], "SignalData": [[92, "signaldata"]], "SignalData.Data": [[92, "signaldata-data"]], "SignalDisplayInfo": [[92, "signaldisplayinfo"]], "SignalSpec": [[92, "signalspec"]], "bosdyn/api/sparse_features.proto": [[92, "bosdyn-api-sparse-features-proto"]], "Keypoint": [[92, "keypoint"]], "KeypointMatches": [[92, "keypointmatches"]], "KeypointSet": [[92, "keypointset"]], "Match": [[92, "match"]], "KeypointMatches.MatchType": [[92, "keypointmatches-matchtype"]], "KeypointSet.KeypointType": [[92, "keypointset-keypointtype"]], "bosdyn/api/spot/choreography_params.proto": [[92, "bosdyn-api-spot-choreography-params-proto"]], "AnimateParams": [[92, "animateparams"]], "AnimatedCycleParams": [[92, "animatedcycleparams"]], "ArmMoveParams": [[92, "armmoveparams"]], "BodyHoldParams": [[92, "bodyholdparams"]], "BourreeParams": [[92, "bourreeparams"]], "ButtCircleParams": [[92, "buttcircleparams"]], "BuzzerNoteParams": [[92, "buzzernoteparams"]], "ChickenHeadParams": [[92, "chickenheadparams"]], "ClapParams": [[92, "clapparams"]], "Color": [[92, "color"]], "CrawlParams": [[92, "crawlparams"]], "CustomGaitCommand": [[92, "customgaitcommand"]], "CustomGaitCommandLimits": [[92, "customgaitcommandlimits"]], "CustomGaitParams": [[92, "customgaitparams"]], "EulerRateZYXValue": [[92, "eulerratezyxvalue"]], "EulerZYX": [[92, "eulerzyx"]], "EulerZYXValue": [[92, "eulerzyxvalue"]], "FadeColorParams": [[92, "fadecolorparams"]], "FidgetStandParams": [[92, "fidgetstandparams"]], "Figure8Params": [[92, "figure8params"]], "FrameSnapshotParams": [[92, "framesnapshotparams"]], "FrontUpParams": [[92, "frontupparams"]], "GotoParams": [[92, "gotoparams"]], "GripperParams": [[92, "gripperparams"]], "HopParams": [[92, "hopparams"]], "IndependentColorParams": [[92, "independentcolorparams"]], "JumpParams": [[92, "jumpparams"]], "KneelCircleParams": [[92, "kneelcircleparams"]], "KneelLegMove2Params": [[92, "kneellegmove2params"]], "KneelLegMoveParams": [[92, "kneellegmoveparams"]], "LegJointParams": [[92, "legjointparams"]], "Pace2StepParams": [[92, "pace2stepparams"]], "RandomRotateParams": [[92, "randomrotateparams"]], "RippleColorParams": [[92, "ripplecolorparams"]], "RotateBodyParams": [[92, "rotatebodyparams"]], "RunningManParams": [[92, "runningmanparams"]], "SetAllColorParams": [[92, "setallcolorparams"]], "SetAudioVisualColorParams": [[92, "setaudiovisualcolorparams"]], "SetColorParams": [[92, "setcolorparams"]], "SideParams": [[92, "sideparams"]], "StanceShape": [[92, "stanceshape"]], "StepParams": [[92, "stepparams"]], "SwayParams": [[92, "swayparams"]], "SwingParams": [[92, "swingparams"]], "SwingPhases": [[92, "swingphases"]], "TurnParams": [[92, "turnparams"]], "TwerkParams": [[92, "twerkparams"]], "WorkspaceArmMoveParams": [[92, "workspacearmmoveparams"]], "ArmMoveFrame": [[92, "armmoveframe"]], "BuzzerNoteParams.Note": [[92, "buzzernoteparams-note"]], "Easing": [[92, "easing"]], "FidgetStandParams.FidgetPreset": [[92, "fidgetstandparams-fidgetpreset"]], "FrameSnapshotParams.Inclusion": [[92, "framesnapshotparams-inclusion"]], "JumpParams.Lead": [[92, "jumpparams-lead"]], "LedLight": [[92, "ledlight"]], "Leg": [[92, "leg"]], "Pivot": [[92, "pivot"]], "RippleColorParams.LightSide": [[92, "ripplecolorparams-lightside"]], "RippleColorParams.Pattern": [[92, "ripplecolorparams-pattern"]], "SideParams.Side": [[92, "sideparams-side"]], "SwayParams.SwayStyle": [[92, "swayparams-swaystyle"]], "bosdyn/api/spot/choreography_sequence.proto": [[92, "bosdyn-api-spot-choreography-sequence-proto"]], "ActiveMove": [[92, "activemove"]], "AnimateArm": [[92, "animatearm"]], "AnimateArm.HandPose": [[92, "animatearm-handpose"]], "AnimateBody": [[92, "animatebody"]], "AnimateGripper": [[92, "animategripper"]], "AnimateLegs": [[92, "animatelegs"]], "AnimateSingleLeg": [[92, "animatesingleleg"]], "Animation": [[92, "animation"]], "AnimationKeyframe": [[92, "animationkeyframe"]], "ArmJointAngles": [[92, "armjointangles"]], "ChoreographerDisplayInfo": [[92, "choreographerdisplayinfo"]], "ChoreographerDisplayInfo.Color": [[92, "choreographerdisplayinfo-color"]], "ChoreographerSave": [[92, "choreographersave"]], "ChoreographyCommandRequest": [[92, "choreographycommandrequest"]], "ChoreographyCommandResponse": [[92, "choreographycommandresponse"]], "ChoreographyInfo": [[92, "choreographyinfo"]], "ChoreographySequence": [[92, "choreographysequence"]], "ChoreographyStateLog": [[92, "choreographystatelog"]], "ChoreographyStatusRequest": [[92, "choreographystatusrequest"]], "ChoreographyStatusResponse": [[92, "choreographystatusresponse"]], "ChoreographyTimeAdjustRequest": [[92, "choreographytimeadjustrequest"]], "ChoreographyTimeAdjustResponse": [[92, "choreographytimeadjustresponse"]], "ClearAllSequenceFilesRequest": [[92, "clearallsequencefilesrequest"]], "ClearAllSequenceFilesResponse": [[92, "clearallsequencefilesresponse"]], "DeleteSequenceRequest": [[92, "deletesequencerequest"]], "DeleteSequenceResponse": [[92, "deletesequenceresponse"]], "DownloadRobotStateLogRequest": [[92, "downloadrobotstatelogrequest"]], "DownloadRobotStateLogResponse": [[92, "downloadrobotstatelogresponse"]], "ExecuteChoreographyRequest": [[92, "executechoreographyrequest"]], "ExecuteChoreographyResponse": [[92, "executechoreographyresponse"]], "GetAnimationRequest": [[92, "getanimationrequest"]], "GetAnimationResponse": [[92, "getanimationresponse"]], "GetChoreographySequenceRequest": [[92, "getchoreographysequencerequest"]], "GetChoreographySequenceResponse": [[92, "getchoreographysequenceresponse"]], "LegJointAngles": [[92, "legjointangles"]], "ListAllMovesRequest": [[92, "listallmovesrequest"]], "ListAllMovesResponse": [[92, "listallmovesresponse"]], "ListAllSequencesRequest": [[92, "listallsequencesrequest"]], "ListAllSequencesResponse": [[92, "listallsequencesresponse"]], "LoggedFootContacts": [[92, "loggedfootcontacts"]], "LoggedJoints": [[92, "loggedjoints"]], "LoggedStateKeyFrame": [[92, "loggedstatekeyframe"]], "ModifyChoreographyInfoRequest": [[92, "modifychoreographyinforequest"]], "ModifyChoreographyInfoResponse": [[92, "modifychoreographyinforesponse"]], "MoveCommand": [[92, "movecommand"]], "MoveInfo": [[92, "moveinfo"]], "MoveParams": [[92, "moveparams"]], "SaveSequenceRequest": [[92, "savesequencerequest"]], "SaveSequenceResponse": [[92, "savesequenceresponse"]], "SequenceInfo": [[92, "sequenceinfo"]], "StartRecordingStateRequest": [[92, "startrecordingstaterequest"]], "StartRecordingStateResponse": [[92, "startrecordingstateresponse"]], "StopRecordingStateRequest": [[92, "stoprecordingstaterequest"]], "StopRecordingStateResponse": [[92, "stoprecordingstateresponse"]], "UploadAnimatedMoveRequest": [[92, "uploadanimatedmoverequest"]], "UploadAnimatedMoveResponse": [[92, "uploadanimatedmoveresponse"]], "UploadChoreographyRequest": [[92, "uploadchoreographyrequest"]], "UploadChoreographyResponse": [[92, "uploadchoreographyresponse"]], "Animation.ArmPlayback": [[92, "animation-armplayback"]], "ChoreographerDisplayInfo.Category": [[92, "choreographerdisplayinfo-category"]], "ChoreographyCommandResponse.Status": [[92, "choreographycommandresponse-status"]], "ChoreographyStatusResponse.Status": [[92, "choreographystatusresponse-status"]], "ChoreographyTimeAdjustResponse.Status": [[92, "choreographytimeadjustresponse-status"]], "ClearAllSequenceFilesResponse.Status": [[92, "clearallsequencefilesresponse-status"]], "DeleteSequenceResponse.Status": [[92, "deletesequenceresponse-status"]], "DownloadRobotStateLogRequest.LogType": [[92, "downloadrobotstatelogrequest-logtype"]], "DownloadRobotStateLogResponse.Status": [[92, "downloadrobotstatelogresponse-status"]], "ExecuteChoreographyResponse.Status": [[92, "executechoreographyresponse-status"]], "GetAnimationResponse.Status": [[92, "getanimationresponse-status"]], "GetChoreographySequenceResponse.Status": [[92, "getchoreographysequenceresponse-status"]], "ModifyChoreographyInfoResponse.Status": [[92, "modifychoreographyinforesponse-status"]], "MoveInfo.TransitionState": [[92, "moveinfo-transitionstate"]], "SaveSequenceResponse.Status": [[92, "savesequenceresponse-status"]], "SequenceInfo.SavedState": [[92, "sequenceinfo-savedstate"]], "StartRecordingStateResponse.Status": [[92, "startrecordingstateresponse-status"]], "UploadAnimatedMoveResponse.Status": [[92, "uploadanimatedmoveresponse-status"]], "bosdyn/api/spot/choreography_service.proto": [[92, "bosdyn-api-spot-choreography-service-proto"]], "ChoreographyService": [[92, "choreographyservice"]], "bosdyn/api/spot/door.proto": [[92, "bosdyn-api-spot-door-proto"]], "DoorCommand": [[92, "doorcommand"]], "DoorCommand.AutoGraspCommand": [[92, "doorcommand-autograspcommand"]], "DoorCommand.AutoPushCommand": [[92, "doorcommand-autopushcommand"]], "DoorCommand.Feedback": [[92, "doorcommand-feedback"]], "DoorCommand.Request": [[92, "doorcommand-request"]], "DoorCommand.WarmstartCommand": [[92, "doorcommand-warmstartcommand"]], "OpenDoorCommandRequest": [[92, "opendoorcommandrequest"]], "OpenDoorCommandResponse": [[92, "opendoorcommandresponse"]], "OpenDoorFeedbackRequest": [[92, "opendoorfeedbackrequest"]], "OpenDoorFeedbackResponse": [[92, "opendoorfeedbackresponse"]], "DoorCommand.Feedback.Status": [[92, "doorcommand-feedback-status"]], "DoorCommand.HandleType": [[92, "doorcommand-handletype"]], "DoorCommand.HingeSide": [[92, "doorcommand-hingeside"]], "DoorCommand.SwingDirection": [[92, "doorcommand-swingdirection"]], "OpenDoorCommandResponse.Status": [[92, "opendoorcommandresponse-status"]], "bosdyn/api/spot/door_area_callback.proto": [[92, "bosdyn-api-spot-door-area-callback-proto"]], "AreaCallbackDoorConfig": [[92, "areacallbackdoorconfig"]], "bosdyn/api/spot/door_service.proto": [[92, "bosdyn-api-spot-door-service-proto"]], "DoorService": [[92, "doorservice"]], "bosdyn/api/spot/inverse_kinematics.proto": [[92, "bosdyn-api-spot-inverse-kinematics-proto"]], "InverseKinematicsRequest": [[92, "inversekinematicsrequest"]], "InverseKinematicsRequest.BodyMountedTool": [[92, "inversekinematicsrequest-bodymountedtool"]], "InverseKinematicsRequest.FixedStance": [[92, "inversekinematicsrequest-fixedstance"]], "InverseKinematicsRequest.OnGroundPlaneStance": [[92, "inversekinematicsrequest-ongroundplanestance"]], "InverseKinematicsRequest.ToolGazeTask": [[92, "inversekinematicsrequest-toolgazetask"]], "InverseKinematicsRequest.ToolPoseTask": [[92, "inversekinematicsrequest-toolposetask"]], "InverseKinematicsRequest.WristMountedTool": [[92, "inversekinematicsrequest-wristmountedtool"]], "InverseKinematicsResponse": [[92, "inversekinematicsresponse"]], "InverseKinematicsRequest.NamedArmConfiguration": [[92, "inversekinematicsrequest-namedarmconfiguration"]], "InverseKinematicsResponse.Status": [[92, "inversekinematicsresponse-status"]], "bosdyn/api/spot/inverse_kinematics_service.proto": [[92, "bosdyn-api-spot-inverse-kinematics-service-proto"]], "InverseKinematicsService": [[92, "inversekinematicsservice"]], "bosdyn/api/spot/robot_command.proto": [[92, "bosdyn-api-spot-robot-command-proto"]], "BodyControlParams": [[92, "bodycontrolparams"]], "BodyControlParams.BodyAssistForManipulation": [[92, "bodycontrolparams-bodyassistformanipulation"]], "BodyControlParams.BodyPose": [[92, "bodycontrolparams-bodypose"]], "BodyExternalForceParams": [[92, "bodyexternalforceparams"]], "MobilityParams": [[92, "mobilityparams"]], "ObstacleParams": [[92, "obstacleparams"]], "TerrainParams": [[92, "terrainparams"]], "BodyControlParams.RotationSetting": [[92, "bodycontrolparams-rotationsetting"]], "BodyExternalForceParams.ExternalForceIndicator": [[92, "bodyexternalforceparams-externalforceindicator"]], "LocomotionHint": [[92, "locomotionhint"]], "MobilityParams.HazardDetectionMode": [[92, "mobilityparams-hazarddetectionmode"]], "MobilityParams.StairsMode": [[92, "mobilityparams-stairsmode"]], "SwingHeight": [[92, "swingheight"]], "TerrainParams.GratedSurfacesMode": [[92, "terrainparams-gratedsurfacesmode"]], "bosdyn/api/spot/spot_check.proto": [[92, "bosdyn-api-spot-spot-check-proto"]], "CameraCalibrationCommandRequest": [[92, "cameracalibrationcommandrequest"]], "CameraCalibrationCommandResponse": [[92, "cameracalibrationcommandresponse"]], "CameraCalibrationFeedbackRequest": [[92, "cameracalibrationfeedbackrequest"]], "CameraCalibrationFeedbackResponse": [[92, "cameracalibrationfeedbackresponse"]], "DepthPlaneSpotCheckResult": [[92, "depthplanespotcheckresult"]], "FootHeightCheckResult": [[92, "footheightcheckresult"]], "HipRangeOfMotionResult": [[92, "hiprangeofmotionresult"]], "JointKinematicCheckResult": [[92, "jointkinematiccheckresult"]], "LegPairCheckResult": [[92, "legpaircheckresult"]], "LoadCellSpotCheckResult": [[92, "loadcellspotcheckresult"]], "PayloadCheckResult": [[92, "payloadcheckresult"]], "SpotCheckCommandRequest": [[92, "spotcheckcommandrequest"]], "SpotCheckCommandResponse": [[92, "spotcheckcommandresponse"]], "SpotCheckFeedbackRequest": [[92, "spotcheckfeedbackrequest"]], "SpotCheckFeedbackResponse": [[92, "spotcheckfeedbackresponse"]], "SpotCheckFeedbackResponse.CameraResultsEntry": [[92, "spotcheckfeedbackresponse-cameraresultsentry"]], "SpotCheckFeedbackResponse.HipRangeOfMotionResultsEntry": [[92, "spotcheckfeedbackresponse-hiprangeofmotionresultsentry"]], "SpotCheckFeedbackResponse.KinematicCalResultsEntry": [[92, "spotcheckfeedbackresponse-kinematiccalresultsentry"]], "SpotCheckFeedbackResponse.LoadCellResultsEntry": [[92, "spotcheckfeedbackresponse-loadcellresultsentry"]], "CameraCalibrationCommandRequest.Command": [[92, "cameracalibrationcommandrequest-command"]], "CameraCalibrationFeedbackResponse.Status": [[92, "cameracalibrationfeedbackresponse-status"]], "DepthPlaneSpotCheckResult.Status": [[92, "depthplanespotcheckresult-status"]], "FootHeightCheckResult.Status": [[92, "footheightcheckresult-status"]], "HipRangeOfMotionResult.Error": [[92, "hiprangeofmotionresult-error"]], "JointKinematicCheckResult.Error": [[92, "jointkinematiccheckresult-error"]], "LegPairCheckResult.Status": [[92, "legpaircheckresult-status"]], "LoadCellSpotCheckResult.Error": [[92, "loadcellspotcheckresult-error"]], "PayloadCheckResult.Error": [[92, "payloadcheckresult-error"]], "SpotCheckCommandRequest.Command": [[92, "spotcheckcommandrequest-command"]], "SpotCheckCommandResponse.Status": [[92, "spotcheckcommandresponse-status"]], "SpotCheckFeedbackResponse.Error": [[92, "spotcheckfeedbackresponse-error"]], "SpotCheckFeedbackResponse.State": [[92, "spotcheckfeedbackresponse-state"]], "bosdyn/api/spot/spot_check_service.proto": [[92, "bosdyn-api-spot-spot-check-service-proto"]], "SpotCheckService": [[92, "spotcheckservice"]], "bosdyn/api/spot/spot_constants.proto": [[92, "bosdyn-api-spot-spot-constants-proto"]], "JointIndex": [[92, "jointindex"]], "LegDofOrder": [[92, "legdoforder"]], "LegIndex": [[92, "legindex"]], "bosdyn/api/spot_cam/LED.proto": [[92, "bosdyn-api-spot-cam-led-proto"]], "GetLEDBrightnessRequest": [[92, "getledbrightnessrequest"]], "GetLEDBrightnessResponse": [[92, "getledbrightnessresponse"]], "SetLEDBrightnessRequest": [[92, "setledbrightnessrequest"]], "SetLEDBrightnessRequest.BrightnessesEntry": [[92, "setledbrightnessrequest-brightnessesentry"]], "SetLEDBrightnessResponse": [[92, "setledbrightnessresponse"]], "bosdyn/api/spot_cam/audio.proto": [[92, "bosdyn-api-spot-cam-audio-proto"]], "DeleteSoundRequest": [[92, "deletesoundrequest"]], "DeleteSoundResponse": [[92, "deletesoundresponse"]], "GetAudioCaptureChannelRequest": [[92, "getaudiocapturechannelrequest"]], "GetAudioCaptureChannelResponse": [[92, "getaudiocapturechannelresponse"]], "GetAudioCaptureGainRequest": [[92, "getaudiocapturegainrequest"]], "GetAudioCaptureGainResponse": [[92, "getaudiocapturegainresponse"]], "GetVolumeRequest": [[92, "getvolumerequest"]], "GetVolumeResponse": [[92, "getvolumeresponse"]], "ListSoundsRequest": [[92, "listsoundsrequest"]], "ListSoundsResponse": [[92, "listsoundsresponse"]], "LoadSoundRequest": [[92, "loadsoundrequest"]], "LoadSoundResponse": [[92, "loadsoundresponse"]], "PlaySoundRequest": [[92, "playsoundrequest"]], "PlaySoundResponse": [[92, "playsoundresponse"]], "SetAudioCaptureChannelRequest": [[92, "setaudiocapturechannelrequest"]], "SetAudioCaptureChannelResponse": [[92, "setaudiocapturechannelresponse"]], "SetAudioCaptureGainRequest": [[92, "setaudiocapturegainrequest"]], "SetAudioCaptureGainResponse": [[92, "setaudiocapturegainresponse"]], "SetVolumeRequest": [[92, "setvolumerequest"]], "SetVolumeResponse": [[92, "setvolumeresponse"]], "Sound": [[92, "sound"]], "AudioCaptureChannel": [[92, "audiocapturechannel"]], "bosdyn/api/spot_cam/camera.proto": [[92, "bosdyn-api-spot-cam-camera-proto"]], "Camera": [[92, "camera"]], "Camera.PinholeIntrinsics": [[92, "camera-pinholeintrinsics"]], "Camera.SphericalLimits": [[92, "camera-sphericallimits"]], "bosdyn/api/spot_cam/compositor.proto": [[92, "bosdyn-api-spot-cam-compositor-proto"]], "GetIrColormapRequest": [[92, "getircolormaprequest"]], "GetIrColormapResponse": [[92, "getircolormapresponse"]], "GetIrMeterOverlayRequest": [[92, "getirmeteroverlayrequest"]], "GetIrMeterOverlayResponse": [[92, "getirmeteroverlayresponse"]], "GetScreenRequest": [[92, "getscreenrequest"]], "GetScreenResponse": [[92, "getscreenresponse"]], "GetVisibleCamerasRequest": [[92, "getvisiblecamerasrequest"]], "GetVisibleCamerasResponse": [[92, "getvisiblecamerasresponse"]], "GetVisibleCamerasResponse.Stream": [[92, "getvisiblecamerasresponse-stream"]], "GetVisibleCamerasResponse.Stream.Window": [[92, "getvisiblecamerasresponse-stream-window"]], "IrColorMap": [[92, "ircolormap"]], "IrColorMap.ScalingPair": [[92, "ircolormap-scalingpair"]], "IrMeterOverlay": [[92, "irmeteroverlay"]], "IrMeterOverlay.DeltaPair": [[92, "irmeteroverlay-deltapair"]], "IrMeterOverlay.NormalizedCoordinates": [[92, "irmeteroverlay-normalizedcoordinates"]], "IrMeterOverlay.TempUnit": [[92, "irmeteroverlay-tempunit"]], "ListScreensRequest": [[92, "listscreensrequest"]], "ListScreensResponse": [[92, "listscreensresponse"]], "ScreenDescription": [[92, "screendescription"]], "SetIrColormapRequest": [[92, "setircolormaprequest"]], "SetIrColormapResponse": [[92, "setircolormapresponse"]], "SetIrMeterOverlayRequest": [[92, "setirmeteroverlayrequest"]], "SetIrMeterOverlayResponse": [[92, "setirmeteroverlayresponse"]], "SetScreenRequest": [[92, "setscreenrequest"]], "SetScreenResponse": [[92, "setscreenresponse"]], "IrColorMap.ColorMap": [[92, "ircolormap-colormap"]], "IrMeterOverlay.TempUnit.TempUnitType": [[92, "irmeteroverlay-tempunit-tempunittype"]], "bosdyn/api/spot_cam/health.proto": [[92, "bosdyn-api-spot-cam-health-proto"]], "ClearBITEventsRequest": [[92, "clearbiteventsrequest"]], "ClearBITEventsResponse": [[92, "clearbiteventsresponse"]], "GetBITStatusRequest": [[92, "getbitstatusrequest"]], "GetBITStatusResponse": [[92, "getbitstatusresponse"]], "GetBITStatusResponse.Degradation": [[92, "getbitstatusresponse-degradation"]], "GetSystemLogRequest": [[92, "getsystemlogrequest"]], "GetSystemLogResponse": [[92, "getsystemlogresponse"]], "GetTemperatureRequest": [[92, "gettemperaturerequest"]], "GetTemperatureResponse": [[92, "gettemperatureresponse"]], "Temperature": [[92, "temperature"]], "GetBITStatusResponse.Degradation.DegradationType": [[92, "getbitstatusresponse-degradation-degradationtype"]], "bosdyn/api/spot_cam/logging.proto": [[92, "bosdyn-api-spot-cam-logging-proto"]], "DebugRequest": [[92, "debugrequest"]], "DebugResponse": [[92, "debugresponse"]], "DeleteRequest": [[92, "deleterequest"]], "DeleteResponse": [[92, "deleteresponse"]], "ListCamerasRequest": [[92, "listcamerasrequest"]], "ListCamerasResponse": [[92, "listcamerasresponse"]], "ListLogpointsRequest": [[92, "listlogpointsrequest"]], "ListLogpointsResponse": [[92, "listlogpointsresponse"]], "Logpoint": [[92, "logpoint"]], "Logpoint.Calibration": [[92, "logpoint-calibration"]], "Logpoint.ImageParams": [[92, "logpoint-imageparams"]], "RetrieveRawDataRequest": [[92, "retrieverawdatarequest"]], "RetrieveRawDataResponse": [[92, "retrieverawdataresponse"]], "RetrieveRequest": [[92, "retrieverequest"]], "RetrieveResponse": [[92, "retrieveresponse"]], "SetPassphraseRequest": [[92, "setpassphraserequest"]], "SetPassphraseResponse": [[92, "setpassphraseresponse"]], "StoreRequest": [[92, "storerequest"]], "StoreResponse": [[92, "storeresponse"]], "TagRequest": [[92, "tagrequest"]], "TagResponse": [[92, "tagresponse"]], "Logpoint.LogStatus": [[92, "logpoint-logstatus"]], "Logpoint.QueueStatus": [[92, "logpoint-queuestatus"]], "Logpoint.RecordType": [[92, "logpoint-recordtype"]], "bosdyn/api/spot_cam/network.proto": [[92, "bosdyn-api-spot-cam-network-proto"]], "GetICEConfigurationRequest": [[92, "geticeconfigurationrequest"]], "GetICEConfigurationResponse": [[92, "geticeconfigurationresponse"]], "GetNetworkSettingsRequest": [[92, "getnetworksettingsrequest"]], "GetNetworkSettingsResponse": [[92, "getnetworksettingsresponse"]], "GetSSLCertRequest": [[92, "getsslcertrequest"]], "GetSSLCertResponse": [[92, "getsslcertresponse"]], "ICEServer": [[92, "iceserver"]], "ICEServer.auth_params": [[92, "iceserver-auth-params"]], "ICEServer.auth_params.oauth_pair": [[92, "iceserver-auth-params-oauth-pair"]], "NetworkTuple": [[92, "networktuple"]], "SetICEConfigurationRequest": [[92, "seticeconfigurationrequest"]], "SetICEConfigurationResponse": [[92, "seticeconfigurationresponse"]], "ICEServer.icetransport": [[92, "iceserver-icetransport"]], "ICEServer.servertype": [[92, "iceserver-servertype"]], "bosdyn/api/spot_cam/power.proto": [[92, "bosdyn-api-spot-cam-power-proto"]], "CyclePowerRequest": [[92, "cyclepowerrequest"]], "CyclePowerResponse": [[92, "cyclepowerresponse"]], "GetPowerStatusRequest": [[92, "getpowerstatusrequest"]], "GetPowerStatusResponse": [[92, "getpowerstatusresponse"]], "PowerStatus": [[92, "powerstatus"]], "SetPowerStatusRequest": [[92, "setpowerstatusrequest"]], "SetPowerStatusResponse": [[92, "setpowerstatusresponse"]], "bosdyn/api/spot_cam/ptz.proto": [[92, "bosdyn-api-spot-cam-ptz-proto"]], "GetPtzFocusStateRequest": [[92, "getptzfocusstaterequest"]], "GetPtzFocusStateResponse": [[92, "getptzfocusstateresponse"]], "GetPtzPositionRequest": [[92, "getptzpositionrequest"]], "GetPtzPositionResponse": [[92, "getptzpositionresponse"]], "GetPtzVelocityRequest": [[92, "getptzvelocityrequest"]], "GetPtzVelocityResponse": [[92, "getptzvelocityresponse"]], "InitializeLensRequest": [[92, "initializelensrequest"]], "InitializeLensResponse": [[92, "initializelensresponse"]], "ListPtzRequest": [[92, "listptzrequest"]], "ListPtzResponse": [[92, "listptzresponse"]], "PtzDescription": [[92, "ptzdescription"]], "PtzDescription.Limits": [[92, "ptzdescription-limits"]], "PtzFocusState": [[92, "ptzfocusstate"]], "PtzPosition": [[92, "ptzposition"]], "PtzVelocity": [[92, "ptzvelocity"]], "SetPtzFocusStateRequest": [[92, "setptzfocusstaterequest"]], "SetPtzFocusStateResponse": [[92, "setptzfocusstateresponse"]], "SetPtzPositionRequest": [[92, "setptzpositionrequest"]], "SetPtzPositionResponse": [[92, "setptzpositionresponse"]], "SetPtzVelocityRequest": [[92, "setptzvelocityrequest"]], "SetPtzVelocityResponse": [[92, "setptzvelocityresponse"]], "PtzFocusState.PtzFocusMode": [[92, "ptzfocusstate-ptzfocusmode"]], "bosdyn/api/spot_cam/service.proto": [[92, "bosdyn-api-spot-cam-service-proto"]], "AudioService": [[92, "audioservice"]], "CompositorService": [[92, "compositorservice"]], "HealthService": [[92, "healthservice"]], "LightingService": [[92, "lightingservice"]], "MediaLogService": [[92, "medialogservice"]], "NetworkService": [[92, "networkservice"]], "PtzService": [[92, "ptzservice"]], "StreamQualityService": [[92, "streamqualityservice"]], "VersionService": [[92, "versionservice"]], "bosdyn/api/spot_cam/streamquality.proto": [[92, "bosdyn-api-spot-cam-streamquality-proto"]], "EnableCongestionControlRequest": [[92, "enablecongestioncontrolrequest"]], "EnableCongestionControlResponse": [[92, "enablecongestioncontrolresponse"]], "GetStreamParamsRequest": [[92, "getstreamparamsrequest"]], "GetStreamParamsResponse": [[92, "getstreamparamsresponse"]], "SetStreamParamsRequest": [[92, "setstreamparamsrequest"]], "SetStreamParamsResponse": [[92, "setstreamparamsresponse"]], "StreamParams": [[92, "streamparams"]], "StreamParams.AutoExposure": [[92, "streamparams-autoexposure"]], "StreamParams.AwbMode": [[92, "streamparams-awbmode"]], "StreamParams.ManualExposure": [[92, "streamparams-manualexposure"]], "StreamParams.SyncAutoExposure": [[92, "streamparams-syncautoexposure"]], "StreamParams.AwbModeEnum": [[92, "streamparams-awbmodeenum"]], "bosdyn/api/spot_cam/version.proto": [[92, "bosdyn-api-spot-cam-version-proto"]], "GetSoftwareVersionRequest": [[92, "getsoftwareversionrequest"]], "GetSoftwareVersionResponse": [[92, "getsoftwareversionresponse"]], "bosdyn/api/stairs.proto": [[92, "bosdyn-api-stairs-proto"]], "StairTransform": [[92, "stairtransform"]], "Staircase": [[92, "staircase"]], "Staircase.Step": [[92, "staircase-step"]], "Staircase.Width": [[92, "staircase-width"]], "StaircaseLanding": [[92, "staircaselanding"]], "StaircaseWithLandings": [[92, "staircasewithlandings"]], "StraightStaircase": [[92, "straightstaircase"]], "StraightStaircase.Landing": [[92, "straightstaircase-landing"]], "StraightStaircase.Stair": [[92, "straightstaircase-stair"]], "Staircase.KnowledgeType": [[92, "staircase-knowledgetype"]], "Staircase.Width.BoundedWidth": [[92, "staircase-width-boundedwidth"]], "bosdyn/api/synchronized_command.proto": [[92, "bosdyn-api-synchronized-command-proto"]], "SynchronizedCommand.Feedback": [[92, "synchronizedcommand-feedback"]], "SynchronizedCommand.Request": [[92, "synchronizedcommand-request"]], "bosdyn/api/time_range.proto": [[92, "bosdyn-api-time-range-proto"]], "TimeRange": [[92, "timerange"]], "bosdyn/api/time_sync.proto": [[92, "bosdyn-api-time-sync-proto"]], "TimeSyncEstimate": [[92, "timesyncestimate"]], "TimeSyncRoundTrip": [[92, "timesyncroundtrip"]], "TimeSyncState": [[92, "timesyncstate"]], "TimeSyncUpdateRequest": [[92, "timesyncupdaterequest"]], "TimeSyncUpdateResponse": [[92, "timesyncupdateresponse"]], "TimeSyncState.Status": [[92, "timesyncstate-status"]], "bosdyn/api/time_sync_service.proto": [[92, "bosdyn-api-time-sync-service-proto"]], "TimeSyncService": [[92, "timesyncservice"]], "bosdyn/api/trajectory.proto": [[92, "bosdyn-api-trajectory-proto"]], "SE2Trajectory": [[92, "se2trajectory"]], "SE2TrajectoryPoint": [[92, "se2trajectorypoint"]], "SE3Trajectory": [[92, "se3trajectory"]], "SE3TrajectoryPoint": [[92, "se3trajectorypoint"]], "ScalarTrajectory": [[92, "scalartrajectory"]], "ScalarTrajectoryPoint": [[92, "scalartrajectorypoint"]], "Vec3Trajectory": [[92, "vec3trajectory"]], "Vec3TrajectoryPoint": [[92, "vec3trajectorypoint"]], "WrenchTrajectory": [[92, "wrenchtrajectory"]], "WrenchTrajectoryPoint": [[92, "wrenchtrajectorypoint"]], "AngularInterpolation": [[92, "angularinterpolation"]], "PositionalInterpolation": [[92, "positionalinterpolation"]], "bosdyn/api/units.proto": [[92, "bosdyn-api-units-proto"]], "PressureEnum": [[92, "pressureenum"]], "TemperatureEnum": [[92, "temperatureenum"]], "bosdyn/api/world_object.proto": [[92, "bosdyn-api-world-object-proto"]], "AprilTagProperties": [[92, "apriltagproperties"]], "BoundingBoxProperties": [[92, "boundingboxproperties"]], "DockProperties": [[92, "dockproperties"]], "DrawableArrow": [[92, "drawablearrow"]], "DrawableBox": [[92, "drawablebox"]], "DrawableCapsule": [[92, "drawablecapsule"]], "DrawableCylinder": [[92, "drawablecylinder"]], "DrawableFrame": [[92, "drawableframe"]], "DrawableLineStrip": [[92, "drawablelinestrip"]], "DrawablePoints": [[92, "drawablepoints"]], "DrawableProperties": [[92, "drawableproperties"]], "DrawableProperties.Color": [[92, "drawableproperties-color"]], "DrawableSphere": [[92, "drawablesphere"]], "GpsProperties": [[92, "gpsproperties"]], "ImageProperties": [[92, "imageproperties"]], "ListWorldObjectRequest": [[92, "listworldobjectrequest"]], "ListWorldObjectResponse": [[92, "listworldobjectresponse"]], "MutateWorldObjectRequest": [[92, "mutateworldobjectrequest"]], "MutateWorldObjectRequest.Mutation": [[92, "mutateworldobjectrequest-mutation"]], "MutateWorldObjectResponse": [[92, "mutateworldobjectresponse"]], "NoGoRegionProperties": [[92, "nogoregionproperties"]], "RayProperties": [[92, "rayproperties"]], "StaircaseProperties": [[92, "staircaseproperties"]], "WorldObject": [[92, "worldobject"]], "AprilTagProperties.AprilTagPoseStatus": [[92, "apriltagproperties-apriltagposestatus"]], "MutateWorldObjectRequest.Action": [[92, "mutateworldobjectrequest-action"]], "MutateWorldObjectResponse.Status": [[92, "mutateworldobjectresponse-status"]], "WorldObjectType": [[92, "worldobjecttype"]], "bosdyn/api/world_object_service.proto": [[92, "bosdyn-api-world-object-service-proto"]], "WorldObjectService": [[92, "worldobjectservice"]], "Scalar Value Types": [[92, "scalar-value-types"]], "Boston Dynamics Python Reference Guide": [[93, "boston-dynamics-python-reference-guide"]], "Coding standards and dependencies.": [[93, "coding-standards-and-dependencies"]], "Python Choreography Client": [[94, "python-choreography-client"]], "Animation File Conversion Helpers": [[95, "module-bosdyn.choreography.client.animation_file_conversion_helpers"]], "Animation File To Proto": [[96, "module-bosdyn.choreography.client.animation_file_to_proto"]], "Python Client": [[98, "python-client"]], "RPC Clients": [[98, "rpc-clients"], [210, "rpc-clients"]], "Area Callback": [[99, "module-bosdyn.client.area_callback"]], "Area Callback Region Handler Base": [[100, "module-bosdyn.client.area_callback_region_handler_base"]], "Area Callback Service Runner": [[101, "module-bosdyn.client.area_callback_service_runner"]], "Area Callback Service Servicer": [[102, "module-bosdyn.client.area_callback_service_servicer"]], "Area Callback Service Utils": [[103, "module-bosdyn.client.area_callback_service_utils"]], "Arm Surface Contact": [[104, "module-bosdyn.client.arm_surface_contact"], [241, "arm-surface-contact"]], "Async Tasks": [[105, "module-bosdyn.client.async_tasks"]], "Auth": [[106, "module-bosdyn.client.auth"]], "Autowalk": [[108, "module-bosdyn.client.autowalk"]], "Bddf": [[109, "module-bosdyn.client.bddf"]], "Bddf Download": [[110, "module-bosdyn.client.bddf_download"]], "Channel": [[111, "module-bosdyn.client.channel"]], "Command Line": [[112, "module-bosdyn.client.command_line"]], "Common": [[113, "module-bosdyn.client.common"], [192, "module-bosdyn.bddf.common"]], "Data Acquisition Helpers": [[115, "module-bosdyn.client.data_acquisition_helpers"]], "Data Acquisition Plugin": [[116, "module-bosdyn.client.data_acquisition_plugin"]], "Data Chunk": [[120, "module-bosdyn.client.data_chunk"]], "Directory": [[122, "module-bosdyn.client.directory"]], "Directory Registration": [[123, "module-bosdyn.client.directory_registration"]], "Door": [[125, "module-bosdyn.client.door"]], "Estop": [[126, "module-bosdyn.client.estop"]], "Exceptions": [[127, "module-bosdyn.client.exceptions"], [213, "module-bosdyn.mission.exceptions"], [219, "module-bosdyn.orbit.exceptions"], [223, "module-bosdyn.scout.exceptions"]], "Fault": [[128, "module-bosdyn.client.fault"]], "Frame Helpers": [[129, "module-bosdyn.client.frame_helpers"]], "Nmeaparser": [[130, "module-bosdyn.client.gps.NMEAParser"]], "GPS clients and helpers": [[131, "gps-clients-and-helpers"]], "Aggregator Client": [[132, "module-bosdyn.client.gps.aggregator_client"]], "Gps Listener": [[133, "module-bosdyn.client.gps.gps_listener"]], "Registration Client": [[134, "module-bosdyn.client.gps.registration_client"]], "Gripper Camera Param": [[136, "module-bosdyn.client.gripper_camera_param"]], "Image Service Helpers": [[138, "module-bosdyn.client.image_service_helpers"]], "Inverse Kinematics": [[139, "module-bosdyn.client.inverse_kinematics"]], "Ir Enable Disable": [[140, "module-bosdyn.client.ir_enable_disable"]], "Keepalive": [[141, "module-bosdyn.client.keepalive"]], "Lease Resource Hierarchy": [[143, "module-bosdyn.client.lease_resource_hierarchy"]], "Lease Validator": [[144, "module-bosdyn.client.lease_validator"]], "License": [[145, "module-bosdyn.client.license"]], "Local Grid": [[146, "module-bosdyn.client.local_grid"]], "Log Status": [[147, "module-bosdyn.client.log_status"]], "Manipulation Api Client": [[148, "module-bosdyn.client.manipulation_api_client"]], "Math Helpers": [[150, "module-bosdyn.client.math_helpers"]], "Metrics Logging": [[151, "module-bosdyn.client.metrics_logging"]], "Network Compute Bridge Client": [[152, "module-bosdyn.client.network_compute_bridge_client"]], "Payload Registration": [[154, "module-bosdyn.client.payload_registration"], [319, "payload-registration"]], "Point Cloud": [[155, "module-bosdyn.client.point_cloud"]], "Processors": [[157, "module-bosdyn.client.processors"]], "Ray Cast": [[158, "module-bosdyn.client.ray_cast"]], "Robot": [[160, "module-bosdyn.client.robot"]], "Robot Command": [[161, "module-bosdyn.client.robot_command"]], "Robot Id": [[162, "module-bosdyn.client.robot_id"]], "Sdk": [[164, "module-bosdyn.client.sdk"]], "Server Util": [[165, "module-bosdyn.client.server_util"], [215, "module-bosdyn.mission.server_util"]], "Service Customization Helpers": [[166, "module-bosdyn.client.service_customization_helpers"]], "Signals Helpers": [[167, "module-bosdyn.client.signals_helpers"]], "SpotCAM Python Client": [[168, "spotcam-python-client"]], "Audio": [[169, "module-bosdyn.client.spot_cam.audio"]], "Compositor": [[170, "module-bosdyn.client.spot_cam.compositor"]], "Health": [[171, "module-bosdyn.client.spot_cam.health"]], "Lighting": [[172, "module-bosdyn.client.spot_cam.lighting"]], "Lights Helper": [[173, "module-bosdyn.client.spot_cam.lights_helper"]], "Media Log": [[174, "module-bosdyn.client.spot_cam.media_log"]], "Network": [[175, "module-bosdyn.client.spot_cam.network"]], "Ptz": [[177, "module-bosdyn.client.spot_cam.ptz"]], "Streamquality": [[178, "module-bosdyn.client.spot_cam.streamquality"]], "Version": [[179, "module-bosdyn.client.spot_cam.version"]], "Time Sync": [[181, "module-bosdyn.client.time_sync"]], "Token Cache": [[182, "module-bosdyn.client.token_cache"]], "Token Manager": [[183, "module-bosdyn.client.token_manager"]], "Units Helpers": [[184, "module-bosdyn.client.units_helpers"]], "Util": [[185, "module-bosdyn.client.util"], [209, "module-bosdyn.util"], [216, "module-bosdyn.mission.util"]], "World Object": [[186, "module-bosdyn.client.world_object"]], "Python Core": [[187, "python-core"]], "BDDF Python": [[188, "bddf-python"]], "Base Data Reader": [[189, "module-bosdyn.bddf.base_data_reader"]], "Block Writer": [[190, "module-bosdyn.bddf.block_writer"]], "Bosdyn": [[191, "module-bosdyn.bddf.bosdyn"]], "Data Reader": [[193, "module-bosdyn.bddf.data_reader"]], "Data Writer": [[194, "module-bosdyn.bddf.data_writer"]], "File Indexer": [[195, "module-bosdyn.bddf.file_indexer"]], "Grpc Proto Reader": [[196, "module-bosdyn.bddf.grpc_proto_reader"]], "Grpc Reader": [[197, "module-bosdyn.bddf.grpc_reader"]], "Grpc Service Reader": [[198, "module-bosdyn.bddf.grpc_service_reader"]], "Grpc Service Writer": [[199, "module-bosdyn.bddf.grpc_service_writer"]], "Message Reader": [[200, "module-bosdyn.bddf.message_reader"]], "Pod Series Reader": [[201, "module-bosdyn.bddf.pod_series_reader"]], "Pod Series Writer": [[202, "module-bosdyn.bddf.pod_series_writer"]], "Protobuf Channel Reader": [[203, "module-bosdyn.bddf.protobuf_channel_reader"]], "Protobuf Reader": [[204, "module-bosdyn.bddf.protobuf_reader"]], "Protobuf Series Writer": [[205, "module-bosdyn.bddf.protobuf_series_writer"]], "Stream Data Reader": [[206, "module-bosdyn.bddf.stream_data_reader"]], "Deprecated": [[207, "module-bosdyn.deprecated"]], "Geometry": [[208, "module-bosdyn.geometry"]], "Python Mission": [[210, "python-mission"]], "Client": [[211, "module-bosdyn.mission.client"], [218, "module-bosdyn.orbit.client"], [222, "module-bosdyn.scout.client"], [297, "client"]], "Constants": [[212, "module-bosdyn.mission.constants"]], "Remote Client": [[214, "module-bosdyn.mission.remote_client"]], "Python Orbit": [[217, "python-orbit"]], "Utils": [[220, "module-bosdyn.orbit.utils"], [224, "module-bosdyn.scout.utils"]], "Python Scout": [[221, "python-scout"]], "Python Examples": [[225, "python-examples"]], "Recommended Examples": [[225, "recommended-examples"]], "Introductory Examples": [[225, "introductory-examples"]], "Intermediate Examples": [[225, "intermediate-examples"]], "Advanced Examples": [[225, "advanced-examples"]], "Animation Recorder": [[226, "animation-recorder"]], "Setup Dependencies": [[226, "setup-dependencies"], [228, "setup-dependencies"], [229, "setup-dependencies"], [230, "setup-dependencies"], [231, "setup-dependencies"], [232, "setup-dependencies"], [233, "setup-dependencies"], [234, "setup-dependencies"], [235, "setup-dependencies"], [236, "setup-dependencies"], [237, "setup-dependencies"], [238, "setup-dependencies"], [239, "setup-dependencies"], [240, "setup-dependencies"], [241, "setup-dependencies"], [242, "setup-dependencies"], [243, "setup-dependencies"], [244, "setup-dependencies"], [245, "setup-dependencies"], [246, "setup-dependencies"], [247, "setup-dependencies"], [250, "setup-dependencies"], [252, "setup-dependencies"], [254, "setup-dependencies"], [255, "setup-dependencies"], [256, "setup-dependencies"], [257, "setup-dependencies"], [258, "setup-dependencies"], [269, "setup-dependencies"], [270, "setup-dependencies"], [272, "setup-dependencies"], [273, "setup-dependencies"], [274, "setup-dependencies"], [276, "setup-dependencies"], [277, "setup-dependencies"], [278, "setup-dependencies"], [279, "setup-dependencies"], [280, "setup-dependencies"], [281, "setup-dependencies"], [282, "setup-dependencies"], [283, "setup-dependencies"], [284, "setup-dependencies"], [285, "setup-dependencies"], [286, "setup-dependencies"], [287, "setup-dependencies"], [288, "setup-dependencies"], [289, "setup-dependencies"], [290, "setup-dependencies"], [291, "setup-dependencies"], [292, "setup-dependencies"], [293, "setup-dependencies"], [295, "setup-dependencies"], [296, "setup-dependencies"], [300, "setup-dependencies"], [301, "setup-dependencies"], [302, "setup-dependencies"], [303, "setup-dependencies"], [304, "setup-dependencies"], [305, "setup-dependencies"], [306, "setup-dependencies"], [307, "setup-dependencies"], [308, "setup-dependencies"], [309, "setup-dependencies"], [310, "setup-dependencies"], [311, "setup-dependencies"], [313, "setup-dependencies"], [314, "setup-dependencies"], [315, "setup-dependencies"], [316, "setup-dependencies"], [317, "setup-dependencies"], [323, "setup-dependencies"], [324, "setup-dependencies"], [325, "setup-dependencies"], [327, "setup-dependencies"], [329, "setup-dependencies"], [330, "setup-dependencies"], [331, "setup-dependencies"], [332, "setup-dependencies"], [333, "setup-dependencies"], [334, "setup-dependencies"], [335, "setup-dependencies"], [336, "setup-dependencies"], [337, "setup-dependencies"]], "Common Problems": [[226, "common-problems"], [228, "common-problems"], [230, "common-problems"], [231, "common-problems"], [232, "common-problems"], [233, "common-problems"], [234, "common-problems"], [235, "common-problems"], [236, "common-problems"], [237, "common-problems"], [238, "common-problems"], [239, "common-problems"], [240, "common-problems"], [241, "common-problems"], [242, "common-problems"], [243, "common-problems"], [244, "common-problems"], [245, "common-problems"], [289, "common-problems"], [290, "common-problems"]], "Run the Example": [[226, "run-the-example"], [228, "run-the-example"], [230, "run-the-example"], [233, "run-the-example"], [234, "run-the-example"], [235, "run-the-example"], [236, "run-the-example"], [237, "run-the-example"], [239, "run-the-example"], [240, "run-the-example"], [241, "run-the-example"], [243, "run-the-example"], [245, "run-the-example"], [246, "run-the-example"], [257, "run-the-example"], [269, "run-the-example"], [270, "run-the-example"], [272, "run-the-example"], [275, "run-the-example"], [289, "run-the-example"], [290, "run-the-example"], [291, "run-the-example"], [291, "id2"], [293, "run-the-example"], [300, "run-the-example"], [301, "run-the-example"], [302, "run-the-example"], [303, "run-the-example"], [304, "run-the-example"], [305, "run-the-example"], [306, "run-the-example"], [307, "run-the-example"], [308, "run-the-example"], [309, "run-the-example"], [313, "run-the-example"], [316, "run-the-example"], [325, "run-the-example"], [331, "run-the-example"]], "Area Callback Tutorial": [[227, "area-callback-tutorial"]], "Example: Crosswalk Spot CAM Light": [[227, "example-crosswalk-spot-cam-light"]], "Initialization": [[227, "initialization"]], "Begin": [[227, "begin"]], "Run": [[227, "run"]], "End": [[227, "end"]], "Running the example without graph nav & recording": [[227, "running-the-example-without-graph-nav-recording"]], "Running the example with graph nav & recording": [[227, "running-the-example-with-graph-nav-recording"]], "Arm and Mobility": [[228, "arm-and-mobility"]], "Constrained Manipulation": [[229, "constrained-manipulation"]], "Constrained Manipulation Example": [[229, "constrained-manipulation-example"]], "Setup Robot and grasp and object": [[229, "setup-robot-and-grasp-and-object"]], "Running the Example": [[229, "running-the-example"], [244, "running-the-example"], [248, "running-the-example"], [250, "running-the-example"], [251, "running-the-example"], [254, "running-the-example"], [256, "running-the-example"], [258, "running-the-example"], [274, "running-the-example"], [276, "running-the-example"], [278, "running-the-example"], [279, "running-the-example"], [280, "running-the-example"], [281, "running-the-example"], [282, "running-the-example"], [283, "running-the-example"], [285, "running-the-example"], [286, "running-the-example"], [287, "running-the-example"], [314, "running-the-example"], [315, "running-the-example"], [323, "running-the-example"], [324, "running-the-example"], [327, "running-the-example"], [330, "running-the-example"], [332, "running-the-example"], [333, "running-the-example"], [334, "running-the-example"], [335, "running-the-example"], [336, "running-the-example"], [337, "running-the-example"]], "Arm Door Command": [[230, "arm-door-command"]], "Force Command": [[231, "force-command"]], "Run the Examples": [[231, "run-the-examples"], [288, "run-the-examples"]], "Arm Freeze Hand in Body / World": [[232, "arm-freeze-hand-in-body-world"]], "Running the example": [[232, "running-the-example"]], "Arm Gaze Command": [[233, "arm-gaze-command"]], "GCODE Drawing": [[234, "gcode-drawing"]], "Drawing with Chalk": [[234, "drawing-with-chalk"]], "Details": [[234, "details"]], "Grasping": [[235, "grasping"]], "Setting Spot Arm grasp state and carry overrides": [[236, "setting-spot-arm-grasp-state-and-carry-overrides"]], "Arm Impedance Command": [[237, "arm-impedance-command"]], "Arm JointMove Command": [[238, "arm-jointmove-command"]], "Running the basic example": [[238, "running-the-basic-example"]], "Running the long trajectory example": [[238, "running-the-long-trajectory-example"]], "Arm Simple": [[239, "arm-simple"]], "Arm Deploy and Stow": [[240, "arm-deploy-and-stow"]], "Arm Trajectory": [[242, "arm-trajectory"]], "Long Trajectory": [[242, "long-trajectory"]], "Run the Basic Example": [[242, "run-the-basic-example"]], "Running the Long Trajectory Example": [[242, "running-the-long-trajectory-example"]], "Walking to an Object": [[243, "walking-to-an-object"]], "Controlling the Arm with a Keyboard": [[244, "controlling-the-arm-with-a-keyboard"]], "Arm and Mobility Follow": [[245, "arm-and-mobility-follow"]], "Auto Return Example": [[246, "auto-return-example"]], "BDDF data download": [[247, "bddf-data-download"]], "Running the Examples": [[247, "running-the-examples"], [255, "running-the-examples"]], "Specifying time spans": [[247, "specifying-time-spans"]], "Basic data download": [[247, "basic-data-download"]], "Operator comments": [[247, "operator-comments"]], "GRPC requests/responses": [[247, "grpc-requests-responses"]], "GUI": [[247, "gui"]], "Cloud Upload Example": [[248, "cloud-upload-example"]], "Install Packages": [[248, "install-packages"], [312, "install-packages"]], "Credentials": [[248, "credentials"]], "GCP": [[248, "gcp"]], "AWS": [[248, "aws"]], "Autowalk Example": [[248, "autowalk-example"]], "Comms image service": [[249, "comms-image-service"]], "How to use": [[249, "how-to-use"]], "Running locally:": [[249, "running-locally"]], "When using a Docker image on CORE I/O:": [[249, "when-using-a-docker-image-on-core-i-o"]], "Comms Testing": [[250, "comms-testing"]], "Running with Docker": [[250, "running-with-docker"], [251, "running-with-docker"]], "CORE I/O GPIO": [[251, "core-i-o-gpio"]], "This Example": [[251, "this-example"]], "GPIO Pins": [[251, "gpio-pins"]], "GPIO Example": [[251, "gpio-example"]], "Data Acquisition Plugin Services": [[252, "data-acquisition-plugin-services"]], "Running the Data Acquisition Example Plugin Services": [[252, "running-the-data-acquisition-example-plugin-services"]], "Point Cloud and Network Compute Bridge Plugins": [[252, "point-cloud-and-network-compute-bridge-plugins"]], "Save File Plugin": [[252, "save-file-plugin"]], "Testing the Data Acquisition Plugin": [[252, "testing-the-data-acquisition-plugin"]], "Communicating with the Data Acquisition Service": [[252, "communicating-with-the-data-acquisition-service"]], "Downloading from the Data Acquisition Store": [[252, "downloading-from-the-data-acquisition-store"]], "Run a Data Acquisition Plugin Service using Docker": [[252, "run-a-data-acquisition-plugin-service-using-docker"]], "Modem Signals": [[253, "modem-signals"]], "Using the Data Buffer service": [[254, "using-the-data-buffer-service"]], "Add an \u2018operator comment\u2019 to the log": [[254, "add-an-operator-comment-to-the-log"]], "Add \u2018blob\u2019 data to the log": [[254, "add-blob-data-to-the-log"]], "Add \u2018protobuf\u2019 data to the log": [[254, "add-protobuf-data-to-the-log"]], "Add an event to the log": [[254, "add-an-event-to-the-log"]], "Using the Robot Data Service": [[255, "using-the-robot-data-service"]], "get_comments.py": [[255, "get-comments-py"]], "get_events.py": [[255, "get-events-py"]], "get_index.py": [[255, "get-index-py"]], "get_pages.py": [[255, "get-pages-py"]], "delete_pages.py": [[255, "delete-pages-py"]], "Time ranges": [[255, "time-ranges"]], "Manipulating Spot Service Configurations in Directory": [[256, "manipulating-spot-service-configurations-in-directory"]], "Disable IR Emission": [[257, "disable-ir-emission"]], "Robot Docking": [[258, "robot-docking"]], "Dock My Robot Example": [[258, "dock-my-robot-example"]], "Setup Robot": [[258, "setup-robot"], [327, "setup-robot"]], "Arm Examples": [[259, "arm-examples"]], "Autonomy and Missions Examples": [[260, "autonomy-and-missions-examples"]], "Basic Service Examples": [[261, "basic-service-examples"]], "Data Acquisition Examples": [[262, "data-acquisition-examples"]], "Joint Control API Examples": [[263, "joint-control-api-examples"]], "Logging and Data Retrieval Examples": [[264, "logging-and-data-retrieval-examples"]], "Orbit Examples": [[265, "orbit-examples"]], "Payload Examples": [[266, "payload-examples"]], "Perception & World Objects Examples": [[267, "perception-world-objects-examples"]], "Robot Behavior and Commands Examples": [[268, "robot-behavior-and-commands-examples"]], "Edit Autowalk": [[269, "edit-autowalk"]], "Creating an E-Stop endpoint": [[270, "creating-an-e-stop-endpoint"]], "GUI Version": [[270, "gui-version"]], "Command-line version without a GUI": [[270, "command-line-version-without-a-gui"]], "Troubleshooting": [[270, "troubleshooting"], [271, "troubleshooting"], [283, "troubleshooting"], [297, "troubleshooting"], [321, "troubleshooting"], [329, "troubleshooting"]], "Spot Extensions Build Script": [[271, "spot-extensions-build-script"]], "Install Dependencies": [[271, "install-dependencies"]], "About generate_extension_data.py": [[271, "about-generate-extension-data-py"]], "Arguments:": [[271, "arguments"], [271, "id1"]], "About build_extension.py": [[271, "about-build-extension-py"]], "Extract Images from Walk File Example": [[272, "extract-images-from-walk-file-example"]], "Arguments": [[272, "arguments"], [329, "arguments"], [329, "id1"]], "Fan Power Commands with the Python SDK": [[273, "fan-power-commands-with-the-python-sdk"]], "Using Fan Commands": [[273, "using-fan-commands"]], "Running The Fan Command Examples": [[273, "running-the-fan-command-examples"]], "General Fan Command Usage": [[273, "general-fan-command-usage"]], "Basic Fan Command Example": [[273, "basic-fan-command-example"]], "Fan Remote Mission Service": [[273, "fan-remote-mission-service"]], "Follow a Fiducial": [[274, "follow-a-fiducial"]], "External AprilTag library": [[274, "external-apriltag-library"]], "E-Stop Endpoint Dependency": [[274, "e-stop-endpoint-dependency"], [325, "e-stop-endpoint-dependency"]], "Run Follow Fiducial Example": [[274, "run-follow-fiducial-example"]], "Robot Movement": [[274, "robot-movement"]], "Stopping Distance": [[274, "stopping-distance"]], "Frame Trajectory Commands": [[275, "frame-trajectory-commands"]], "E-Stop": [[275, "e-stop"], [331, "e-stop"]], "API Example - Visualize Depth in Visual Image": [[276, "api-example-visualize-depth-in-visual-image"]], "Example output": [[276, "example-output"]], "Using the Image Service": [[277, "using-the-image-service"]], "Running the Get-Image Example": [[277, "running-the-get-image-example"]], "Running the Image-Viewer Example": [[277, "running-the-image-viewer-example"]], "Retrieving Mission state": [[278, "retrieving-mission-state"]], "Using the Robot State Service": [[279, "using-the-robot-state-service"]], "Performing Asynchronous State Queries on Spot": [[280, "performing-asynchronous-state-queries-on-spot"]], "Using the World Object Service": [[281, "using-the-world-object-service"]], "GPS Listener": [[282, "gps-listener"]], "Building the Core IO extensions": [[282, "building-the-core-io-extensions"]], "Understanding the Example": [[282, "understanding-the-example"], [286, "understanding-the-example"]], "GPS in Graph Nav": [[282, "gps-in-graph-nav"]], "Graph Nav Anchoring Optimization Example": [[283, "graph-nav-anchoring-optimization-example"]], "Understanding the Example Code": [[283, "understanding-the-example-code"]], "Background on Anchorings and Metric Consistency": [[283, "background-on-anchorings-and-metric-consistency"]], "Anchoring Optimization": [[283, "anchoring-optimization"]], "Step 1: setting up a connection to the robot": [[283, "step-1-setting-up-a-connection-to-the-robot"]], "Step 2: loading and uploading a graph_nav graph and data": [[283, "step-2-loading-and-uploading-a-graph-nav-graph-and-data"]], "Step 3: Defining the optimization problem": [[283, "step-3-defining-the-optimization-problem"]], "Running the optimization and interpreting the results": [[283, "running-the-optimization-and-interpreting-the-results"]], "Other ways of viewing anchorings": [[283, "other-ways-of-viewing-anchorings"]], "GraphNav and Recording Service Command Line Interfaces": [[284, "graphnav-and-recording-service-command-line-interfaces"]], "Example Programs": [[284, "example-programs"]], "Recording Service Command Line": [[284, "recording-service-command-line"]], "Setting up for Recording": [[284, "setting-up-for-recording"]], "How to Run": [[284, "how-to-run"], [284, "id1"]], "Using the Example to Record a Map": [[284, "using-the-example-to-record-a-map"]], "Advanced Usage": [[284, "advanced-usage"]], "GraphNav Service Command Line": [[284, "graphnav-service-command-line"]], "Setting up for Navigation": [[284, "setting-up-for-navigation"]], "Using the Example to Navigate": [[284, "using-the-example-to-navigate"]], "GraphNav Point Cloud Extractor": [[285, "graphnav-point-cloud-extractor"]], "Understanding the Point Cloud Extractor": [[285, "understanding-the-point-cloud-extractor"]], "What is actually in the point cloud?": [[285, "what-is-actually-in-the-point-cloud"]], "GraphNav GPS Viewer": [[286, "graphnav-gps-viewer"]], "GraphNav Map Viewer": [[287, "graphnav-map-viewer"]], "Camera Controls": [[287, "camera-controls"], [334, "camera-controls"]], "Understanding the Map Viewer": [[287, "understanding-the-map-viewer"]], "Gripper Camera Parameter Examples": [[288, "gripper-camera-parameter-examples"]], "Hello Spot": [[289, "hello-spot"]], "Software": [[291, "software"]], "Licensing": [[291, "licensing"]], "Armless Robot Squat": [[291, "armless-robot-squat"]], "Hardware": [[291, "hardware"], [291, "id1"]], "Arm Wiggle": [[291, "arm-wiggle"]], "Using the Log Status Service": [[292, "using-the-log-status-service"]], "Example commands": [[292, "example-commands"]], "Logging Through the API": [[293, "logging-through-the-api"]], "LTE": [[294, "lte"]], "Wifi": [[294, "wifi"]], "Building the CoreIO Extension": [[294, "building-the-coreio-extension"]], "Recommended debugging": [[294, "recommended-debugging"]], "Answering a Mission Question": [[295, "answering-a-mission-question"]], "Start the mission_question_answerer Example": [[295, "start-the-mission-question-answerer-example"], [295, "id1"]], "Example Prompt Node Mission": [[295, "example-prompt-node-mission"]], "Building an Example Prompt Node Mission": [[295, "building-an-example-prompt-node-mission"]], "Replay the Mission": [[295, "replay-the-mission"]], "Mission Recorder": [[296, "mission-recorder"]], "How to Record a Mission": [[296, "how-to-record-a-mission"]], "How to Record a Mission with Additional Fiducials for Localization": [[296, "how-to-record-a-mission-with-additional-fiducials-for-localization"]], "Keyboard Commands": [[296, "keyboard-commands"]], "How to Replay a Mission": [[296, "how-to-replay-a-mission"]], "System Diagram": [[297, "system-diagram"], [321, "system-diagram"]], "Installation": [[297, "installation"], [321, "installation"], [326, "installation"], [338, "installation"]], "Server": [[297, "server"]], "Simple Alert Server Execution": [[297, "simple-alert-server-execution"]], "Robot-independent Execution": [[297, "robot-independent-execution"]], "Docker Execution": [[297, "docker-execution"], [321, "docker-execution"]], "Fire Extinguisher Detector Server": [[298, "fire-extinguisher-detector-server"]], "Build and Export": [[298, "build-and-export"]], "Spot Extension for CORE I/O": [[298, "spot-extension-for-core-i-o"]], "Action Configuration": [[298, "action-configuration"]], "Network Request Callback": [[299, "network-request-callback"], [299, "id1"]], "Anomalies in Orbit": [[300, "anomalies-in-orbit"]], "Understanding Orbit Web API": [[300, "understanding-orbit-web-api"], [301, "understanding-orbit-web-api"], [302, "understanding-orbit-web-api"], [303, "understanding-orbit-web-api"], [304, "understanding-orbit-web-api"], [305, "understanding-orbit-web-api"], [306, "understanding-orbit-web-api"], [307, "understanding-orbit-web-api"], [308, "understanding-orbit-web-api"], [309, "understanding-orbit-web-api"]], "Orbit Backups": [[301, "orbit-backups"]], "Export Run Archives - Mission Data": [[302, "export-run-archives-mission-data"]], "Export Sitewalk Archives - Mission Data": [[303, "export-sitewalk-archives-mission-data"]], "Hello Orbit": [[304, "hello-orbit"]], "Runs Response": [[305, "runs-response"]], "Create, Edit, and Delete Scheduled Missions on Orbit": [[306, "create-edit-and-delete-scheduled-missions-on-orbit"]], "Send robot back to the dock during a mission playback": [[307, "send-robot-back-to-the-dock-during-a-mission-playback"]], "Enable - disable Orbit missions based on weather forcast": [[308, "enable-disable-orbit-missions-based-on-weather-forcast"]], "Hello Webhooks": [[309, "hello-webhooks"]], "Webhook Integrations": [[310, "webhook-integrations"]], "Getting Started": [[310, "getting-started"]], "Example Overview": [[310, "example-overview"]], "Key Vocabulary": [[310, "key-vocabulary"]], "Run the Example Locally": [[310, "run-the-example-locally"]], "Run the Example On Sitehub-Hosted Orbit": [[310, "run-the-example-on-sitehub-hosted-orbit"]], "Run the Example On Cloud Orbit": [[310, "run-the-example-on-cloud-orbit"]], "Allowed Port Ranges": [[310, "allowed-port-ranges"]], "Using the Payload Service": [[311, "using-the-payload-service"]], "Running the Payload Registration Example": [[311, "running-the-payload-registration-example"]], "Running the Attach or Detach Payload Example": [[311, "running-the-attach-or-detach-payload-example"]], "Post Docking Callback Examples": [[312, "post-docking-callback-examples"]], "Run a Callback": [[312, "run-a-callback"]], "Run a Callback using Docker": [[312, "run-a-callback-using-docker"]], "Ray Cast Example": [[313, "ray-cast-example"]], "Recording an Autowalk with a Keyboard": [[314, "recording-an-autowalk-with-a-keyboard"]], "Run and Interact with a RemoteMissionService.": [[315, "run-and-interact-with-a-remotemissionservice"]], "Running without a robot": [[315, "running-without-a-robot"]], "Running with a robot": [[315, "running-with-a-robot"]], "Incorporating Service Customization": [[315, "incorporating-service-customization"]], "Using the example as part of an Autowalk mission": [[315, "using-the-example-as-part-of-an-autowalk-mission"]], "Step one: Start the remote mission server": [[315, "step-one-start-the-remote-mission-server"]], "Step two: Record an Autowalk mission with a callback": [[315, "step-two-record-an-autowalk-mission-with-a-callback"]], "Replaying a Mission": [[316, "replaying-a-mission"]], "Reset Safety Stop Command with the Python SDK": [[317, "reset-safety-stop-command-with-the-python-sdk"]], "Using the Reset Safety Stop Command": [[317, "using-the-reset-safety-stop-command"]], "Running The Reset Safety Stop Examples": [[317, "running-the-reset-safety-stop-examples"]], "General Reset Safety Stop Usage": [[317, "general-reset-safety-stop-usage"]], "Reset Primary Safety Stop Example": [[317, "reset-primary-safety-stop-example"]], "Reset Redundant Safety Stop Example": [[317, "reset-redundant-safety-stop-example"]], "Interacting with a Ricoh Theta Camera": [[318, "interacting-with-a-ricoh-theta-camera"]], "Required Items": [[318, "required-items"], [328, "required-items"]], "Installation Steps": [[318, "installation-steps"], [328, "installation-steps"]], "Install Packages on PC": [[318, "install-packages-on-pc"], [328, "install-packages-on-pc"]], "Test Ricoh Theta": [[318, "test-ricoh-theta"]], "Connect Ricoh Theta to Spot": [[318, "connect-ricoh-theta-to-spot"]], "Run Image Service": [[318, "run-image-service"]], "Ricoh Theta Image Service Configuration": [[318, "ricoh-theta-image-service-configuration"]], "Debugging Tips": [[318, "debugging-tips"], [320, "debugging-tips"]], "Run the Ricoh Theta Image Service using Docker": [[318, "run-the-ricoh-theta-image-service-using-docker"]], "Developer Comments": [[318, "developer-comments"]], "Payload & Service Initialization": [[319, "payload-service-initialization"]], "Service Registration": [[319, "service-registration"]], "Communication Between Client & Service": [[319, "communication-between-client-service"]], "CORE I/O": [[319, "core-i-o"], [320, "core-i-o"]], "Set up": [[319, "set-up"]], "Demo": [[319, "demo"]], "Select values": [[319, "select-values"]], "Register the payload": [[319, "register-the-payload"]], "Start the announce service": [[319, "start-the-announce-service"]], "Register the announce service": [[319, "register-the-announce-service"]], "Access the announce service with a client": [[319, "access-the-announce-service-with-a-client"]], "Demo Script": [[319, "demo-script"]], "Custom Parameter Image Service for a Web Cam": [[320, "custom-parameter-image-service-for-a-web-cam"]], "Example Execution": [[320, "example-execution"], [322, "example-execution"]], "Run the Custom Parameter Image Service using Docker": [[320, "run-the-custom-parameter-image-service-using-docker"]], "Locally": [[320, "locally"]], "SpotCORE (Deprecated)": [[320, "spotcore-deprecated"]], "Controling Custom Parameters in Spot App": [[321, "controling-custom-parameters-in-spot-app"]], "Custom Parameter Data Acquisition": [[322, "custom-parameter-data-acquisition"]], "Handling Service Faults": [[323, "handling-service-faults"]], "Spot CAM Services": [[324, "spot-cam-services"]], "Spot Cam Video Core IO Extension Example": [[324, "spot-cam-video-core-io-extension-example"]], "Running Spot Cam Video Example": [[324, "running-spot-cam-video-example"]], "Set up the action on the tablet": [[324, "set-up-the-action-on-the-tablet"]], "Responding to User Interaction via Light": [[325, "responding-to-user-interaction-via-light"]], "Spot Tensorflow Object Detection": [[326, "spot-tensorflow-object-detection"]], "User Guide": [[326, "user-guide"], [338, "user-guide"]], "Adjusting Robot Stance In Place": [[327, "adjusting-robot-stance-in-place"]], "Change Offset": [[327, "change-offset"]], "Stitch Front Spot Images Together": [[328, "stitch-front-spot-images-together"]], "To execute": [[328, "to-execute"]], "Tester Programs": [[329, "tester-programs"]], "Testing an Image Service": [[329, "testing-an-image-service"]], "Testing a Data Acquisition Plugin": [[329, "testing-a-data-acquisition-plugin"]], "Using the Timesync Service": [[330, "using-the-timesync-service"]], "Upload and Execute Choreography Sequence": [[331, "upload-and-execute-choreography-sequence"]], "Setting user no-go regions for locomotion": [[332, "setting-user-no-go-regions-for-locomotion"]], "Using the Velodyne Point Cloud Service": [[333, "using-the-velodyne-point-cloud-service"]], "Basic Streaming Visualizer for API Messages": [[334, "basic-streaming-visualizer-for-api-messages"]], "Visualized Objects": [[334, "visualized-objects"]], "Controlling the Robot with a Keyboard": [[335, "controlling-the-robot-with-a-keyboard"]], "World Object Mutations": [[336, "world-object-mutations"]], "Using World Object Service with Image Coordinates": [[337, "using-world-object-service-with-image-coordinates"]], "Controlling the Robot with an Xbox Controller": [[338, "controlling-the-robot-with-an-xbox-controller"]], "OS-Specific Dependencies": [[338, "os-specific-dependencies"]], "Installation Instructions": [[338, "installation-instructions"]]}, "indexentries": {"arm_joints_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_joints_handler"]], "arm_playback_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_playback_option"]], "arm_prohibited_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_prohibited_option"]], "arm_required_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.arm_required_option"]], "assume_zero_roll_and_pitch_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.assume_zero_roll_and_pitch_option"]], "body_euler_rpy_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_euler_rpy_angles_handler"]], "body_pitch_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_pitch_handler"]], "body_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_pos_handler"]], "body_quat_w_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_w_handler"]], "body_quat_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_x_handler"]], "body_quat_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_y_handler"]], "body_quat_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quat_z_handler"]], "body_quaternion_wxyz_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quaternion_wxyz_handler"]], "body_quaternion_xyzw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_quaternion_xyzw_handler"]], "body_roll_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_roll_handler"]], "body_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_x_handler"]], "body_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_y_handler"]], "body_yaw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_yaw_handler"]], "body_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.body_z_handler"]], "bosdyn.choreography.client.animation_file_conversion_helpers": [[95, "module-bosdyn.choreography.client.animation_file_conversion_helpers"]], "bpm_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.bpm_option"]], "com_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.com_pos_handler"]], "com_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.com_x_handler"]], "com_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.com_y_handler"]], "com_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.com_z_handler"]], "contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.contact_handler"]], "controls_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.controls_option"]], "custom_gait_cycle_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.custom_gait_cycle_option"]], "description_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.description_option"]], "display_rgb_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.display_rgb_option"]], "el0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.el0_handler"]], "el1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.el1_handler"]], "extendable_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.extendable_option"]], "fl_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_angles_handler"]], "fl_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_contact_handler"]], "fl_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_hx_handler"]], "fl_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_hy_handler"]], "fl_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_kn_handler"]], "fl_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_pos_handler"]], "fl_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_x_handler"]], "fl_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_y_handler"]], "fl_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fl_z_handler"]], "foot_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.foot_pos_handler"]], "fr_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_angles_handler"]], "fr_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_contact_handler"]], "fr_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_hx_handler"]], "fr_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_hy_handler"]], "fr_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_kn_handler"]], "fr_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_pos_handler"]], "fr_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_x_handler"]], "fr_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_y_handler"]], "fr_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.fr_z_handler"]], "frequency_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.frequency_option"]], "gripper_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.gripper_handler"]], "hand_euler_rpy_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_euler_rpy_angles_handler"]], "hand_pitch_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_pitch_handler"]], "hand_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_pos_handler"]], "hand_quat_w_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_w_handler"]], "hand_quat_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_x_handler"]], "hand_quat_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_y_handler"]], "hand_quat_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quat_z_handler"]], "hand_quaternion_wxyz_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quaternion_wxyz_handler"]], "hand_quaternion_xyzw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_quaternion_xyzw_handler"]], "hand_roll_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_roll_handler"]], "hand_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_x_handler"]], "hand_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_y_handler"]], "hand_yaw_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_yaw_handler"]], "hand_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hand_z_handler"]], "hl_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_angles_handler"]], "hl_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_contact_handler"]], "hl_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_hx_handler"]], "hl_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_hy_handler"]], "hl_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_kn_handler"]], "hl_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_pos_handler"]], "hl_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_x_handler"]], "hl_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_y_handler"]], "hl_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hl_z_handler"]], "hr_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_angles_handler"]], "hr_contact_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_contact_handler"]], "hr_hx_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_hx_handler"]], "hr_hy_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_hy_handler"]], "hr_kn_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_kn_handler"]], "hr_pos_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_pos_handler"]], "hr_x_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_x_handler"]], "hr_y_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_y_handler"]], "hr_z_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.hr_z_handler"]], "leg_angles_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.leg_angles_handler"]], "module": [[95, "module-bosdyn.choreography.client.animation_file_conversion_helpers"], [96, "module-bosdyn.choreography.client.animation_file_to_proto"], [97, "module-bosdyn.choreography.client.choreography"], [99, "module-bosdyn.client.area_callback"], [100, "module-bosdyn.client.area_callback_region_handler_base"], [101, "module-bosdyn.client.area_callback_service_runner"], [102, "module-bosdyn.client.area_callback_service_servicer"], [103, "module-bosdyn.client.area_callback_service_utils"], [104, "module-bosdyn.client.arm_surface_contact"], [105, "module-bosdyn.client.async_tasks"], [106, "module-bosdyn.client.auth"], [107, "module-bosdyn.client.auto_return"], [108, "module-bosdyn.client.autowalk"], [109, "module-bosdyn.client.bddf"], [110, "module-bosdyn.client.bddf_download"], [111, "module-bosdyn.client.channel"], [112, "module-bosdyn.client.command_line"], [113, "module-bosdyn.client.common"], [114, "module-bosdyn.client.data_acquisition"], [115, "module-bosdyn.client.data_acquisition_helpers"], [116, "module-bosdyn.client.data_acquisition_plugin"], [117, "module-bosdyn.client.data_acquisition_plugin_service"], [118, "module-bosdyn.client.data_acquisition_store"], [119, "module-bosdyn.client.data_buffer"], [120, "module-bosdyn.client.data_chunk"], [121, "module-bosdyn.client.data_service"], [122, "module-bosdyn.client.directory"], [123, "module-bosdyn.client.directory_registration"], [124, "module-bosdyn.client.docking"], [125, "module-bosdyn.client.door"], [126, "module-bosdyn.client.estop"], [127, "module-bosdyn.client.exceptions"], [128, "module-bosdyn.client.fault"], [129, "module-bosdyn.client.frame_helpers"], [130, "module-bosdyn.client.gps.NMEAParser"], [132, "module-bosdyn.client.gps.aggregator_client"], [133, "module-bosdyn.client.gps.gps_listener"], [134, "module-bosdyn.client.gps.registration_client"], [135, "module-bosdyn.client.graph_nav"], [136, "module-bosdyn.client.gripper_camera_param"], [137, "module-bosdyn.client.image"], [138, "module-bosdyn.client.image_service_helpers"], [139, "module-bosdyn.client.inverse_kinematics"], [140, "module-bosdyn.client.ir_enable_disable"], [141, "module-bosdyn.client.keepalive"], [142, "module-bosdyn.client.lease"], [143, "module-bosdyn.client.lease_resource_hierarchy"], [144, "module-bosdyn.client.lease_validator"], [145, "module-bosdyn.client.license"], [146, "module-bosdyn.client.local_grid"], [147, "module-bosdyn.client.log_status"], [148, "module-bosdyn.client.manipulation_api_client"], [149, "module-bosdyn.client.map_processing"], [150, "module-bosdyn.client.math_helpers"], [151, "module-bosdyn.client.metrics_logging"], [152, "module-bosdyn.client.network_compute_bridge_client"], [153, "module-bosdyn.client.payload"], [154, "module-bosdyn.client.payload_registration"], [155, "module-bosdyn.client.point_cloud"], [156, "module-bosdyn.client.power"], [157, "module-bosdyn.client.processors"], [158, "module-bosdyn.client.ray_cast"], [159, "module-bosdyn.client.recording"], [160, "module-bosdyn.client.robot"], [161, "module-bosdyn.client.robot_command"], [162, "module-bosdyn.client.robot_id"], [163, "module-bosdyn.client.robot_state"], [164, "module-bosdyn.client.sdk"], [165, "module-bosdyn.client.server_util"], [166, "module-bosdyn.client.service_customization_helpers"], [167, "module-bosdyn.client.signals_helpers"], [169, "module-bosdyn.client.spot_cam.audio"], [170, "module-bosdyn.client.spot_cam.compositor"], [171, "module-bosdyn.client.spot_cam.health"], [172, "module-bosdyn.client.spot_cam.lighting"], [173, "module-bosdyn.client.spot_cam.lights_helper"], [174, "module-bosdyn.client.spot_cam.media_log"], [175, "module-bosdyn.client.spot_cam.network"], [176, "module-bosdyn.client.spot_cam.power"], [177, "module-bosdyn.client.spot_cam.ptz"], [178, "module-bosdyn.client.spot_cam.streamquality"], [179, "module-bosdyn.client.spot_cam.version"], [180, "module-bosdyn.client.spot_check"], [181, "module-bosdyn.client.time_sync"], [182, "module-bosdyn.client.token_cache"], [183, "module-bosdyn.client.token_manager"], [184, "module-bosdyn.client.units_helpers"], [185, "module-bosdyn.client.util"], [186, "module-bosdyn.client.world_object"], [189, "module-bosdyn.bddf.base_data_reader"], [190, "module-bosdyn.bddf.block_writer"], [191, "module-bosdyn.bddf.bosdyn"], [192, "module-bosdyn.bddf.common"], [193, "module-bosdyn.bddf.data_reader"], [194, "module-bosdyn.bddf.data_writer"], [195, "module-bosdyn.bddf.file_indexer"], [196, "module-bosdyn.bddf.grpc_proto_reader"], [197, "module-bosdyn.bddf.grpc_reader"], [198, "module-bosdyn.bddf.grpc_service_reader"], [199, "module-bosdyn.bddf.grpc_service_writer"], [200, "module-bosdyn.bddf.message_reader"], [201, "module-bosdyn.bddf.pod_series_reader"], [202, "module-bosdyn.bddf.pod_series_writer"], [203, "module-bosdyn.bddf.protobuf_channel_reader"], [204, "module-bosdyn.bddf.protobuf_reader"], [205, "module-bosdyn.bddf.protobuf_series_writer"], [206, "module-bosdyn.bddf.stream_data_reader"], [207, "module-bosdyn.deprecated"], [208, "module-bosdyn.geometry"], [209, "module-bosdyn.util"], [211, "module-bosdyn.mission.client"], [212, "module-bosdyn.mission.constants"], [213, "module-bosdyn.mission.exceptions"], [214, "module-bosdyn.mission.remote_client"], [215, "module-bosdyn.mission.server_util"], [216, "module-bosdyn.mission.util"], [218, "module-bosdyn.orbit.client"], [219, "module-bosdyn.orbit.exceptions"], [220, "module-bosdyn.orbit.utils"], [222, "module-bosdyn.scout.client"], [223, "module-bosdyn.scout.exceptions"], [224, "module-bosdyn.scout.utils"]], "neutral_start_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.neutral_start_option"]], "no_looping_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.no_looping_option"]], "precise_steps_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.precise_steps_option"]], "precise_timing_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.precise_timing_option"]], "retime_to_integer_slices_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.retime_to_integer_slices_option"]], "sh0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.sh0_handler"]], "sh1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.sh1_handler"]], "start_time_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.start_time_handler"]], "starts_sitting_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.starts_sitting_option"]], "timing_adjustability_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.timing_adjustability_option"]], "track_hand_rt_body_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.track_hand_rt_body_option"]], "track_hand_rt_feet_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.track_hand_rt_feet_option"]], "track_swing_trajectories_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.track_swing_trajectories_option"]], "truncatable_option() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.truncatable_option"]], "wr0_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.wr0_handler"]], "wr1_handler() (in module bosdyn.choreography.client.animation_file_conversion_helpers)": [[95, "bosdyn.choreography.client.animation_file_conversion_helpers.wr1_handler"]], "animation (class in bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.Animation"]], "animationfileformaterror": [[96, "bosdyn.choreography.client.animation_file_to_proto.AnimationFileFormatError"]], "bosdyn.choreography.client.animation_file_to_proto": [[96, "module-bosdyn.choreography.client.animation_file_to_proto"]], "convert_animation_file_to_proto() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.convert_animation_file_to_proto"]], "create_move_info_proto() (bosdyn.choreography.client.animation_file_to_proto.animation method)": [[96, "bosdyn.choreography.client.animation_file_to_proto.Animation.create_move_info_proto"]], "handle_nested_double_value_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.handle_nested_double_value_params"]], "main() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.main"]], "read_and_find_animation_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.read_and_find_animation_params"]], "read_animation_params() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.read_animation_params"]], "set_proto() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.set_proto"]], "write_animation_to_dest() (in module bosdyn.choreography.client.animation_file_to_proto)": [[96, "bosdyn.choreography.client.animation_file_to_proto.write_animation_to_dest"]], "animation_move_prefix (bosdyn.choreography.client.choreography.animationuploadhelper attribute)": [[97, "bosdyn.choreography.client.choreography.AnimationUploadHelper.ANIMATION_MOVE_PREFIX"]], "animationuploadhelper (class in bosdyn.choreography.client.choreography)": [[97, "bosdyn.choreography.client.choreography.AnimationUploadHelper"]], "animationvalidationfailederror": [[97, "bosdyn.choreography.client.choreography.AnimationValidationFailedError"]], "choreographyclient (class in bosdyn.choreography.client.choreography)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient"]], "incompletedata": [[97, "bosdyn.choreography.client.choreography.IncompleteData"]], "invaliduploadedchoreographyerror": [[97, "bosdyn.choreography.client.choreography.InvalidUploadedChoreographyError"]], "leaseerror": [[97, "bosdyn.choreography.client.choreography.LeaseError"]], "norecordedinformation": [[97, "bosdyn.choreography.client.choreography.NoRecordedInformation"]], "recordingbufferfull": [[97, "bosdyn.choreography.client.choreography.RecordingBufferFull"]], "robotcommandissueserror": [[97, "bosdyn.choreography.client.choreography.RobotCommandIssuesError"]], "unknownrecordingsessionid": [[97, "bosdyn.choreography.client.choreography.UnknownRecordingSessionId"]], "bosdyn.choreography.client.choreography": [[97, "module-bosdyn.choreography.client.choreography"]], "build_choreography_command_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_choreography_command_request"]], "build_choreography_time_adjust_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_choreography_time_adjust_request"]], "build_execute_choreography_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_execute_choreography_request"]], "build_modify_choreography_info_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_modify_choreography_info_request"]], "build_save_sequence_request() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_save_sequence_request"]], "build_start_recording_state_request() (bosdyn.choreography.client.choreography.choreographyclient static method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.build_start_recording_state_request"]], "choreography_command() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_command"]], "choreography_command_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_command_async"]], "choreography_log_to_animation_file() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_log_to_animation_file"]], "choreography_time_adjust() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_time_adjust"]], "choreography_time_adjust_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.choreography_time_adjust_async"]], "clear_all_sequence_files() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.clear_all_sequence_files"]], "clear_all_sequence_files_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.clear_all_sequence_files_async"]], "default_service_name (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.default_service_name"]], "delete_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.delete_sequence"]], "delete_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.delete_sequence_async"]], "download_robot_state_log() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.download_robot_state_log"]], "execute_choreography() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.execute_choreography"]], "execute_choreography_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.execute_choreography_async"]], "generate_animation_id() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[97, "bosdyn.choreography.client.choreography.AnimationUploadHelper.generate_animation_id"]], "get_animation() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_animation"]], "get_animation_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_animation_async"]], "get_choreography_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_sequence"]], "get_choreography_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_sequence_async"]], "get_choreography_status() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_status"]], "get_choreography_status_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.get_choreography_status_async"]], "initialize() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[97, "bosdyn.choreography.client.choreography.AnimationUploadHelper.initialize"]], "license_name (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.license_name"]], "list_all_moves() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_moves"]], "list_all_moves_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_moves_async"]], "list_all_sequences() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_sequences"]], "list_all_sequences_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.list_all_sequences_async"]], "load_choreography_sequence_from_binary_file() (in module bosdyn.choreography.client.choreography)": [[97, "bosdyn.choreography.client.choreography.load_choreography_sequence_from_binary_file"]], "load_choreography_sequence_from_txt_file() (in module bosdyn.choreography.client.choreography)": [[97, "bosdyn.choreography.client.choreography.load_choreography_sequence_from_txt_file"]], "modify_choreography_info() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.modify_choreography_info"]], "modify_choreography_info_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.modify_choreography_info_async"]], "save_choreography_sequence_to_file() (in module bosdyn.choreography.client.choreography)": [[97, "bosdyn.choreography.client.choreography.save_choreography_sequence_to_file"]], "save_sequence() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.save_sequence"]], "save_sequence_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.save_sequence_async"]], "service_type (bosdyn.choreography.client.choreography.choreographyclient attribute)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.service_type"]], "start_recording_state() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.start_recording_state"]], "start_recording_state_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.start_recording_state_async"]], "stop_recording_state() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.stop_recording_state"]], "stop_recording_state_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.stop_recording_state_async"]], "timesync_endpoint (bosdyn.choreography.client.choreography.choreographyclient property)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.timesync_endpoint"]], "update_from() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.update_from"]], "upload_animated_move() (bosdyn.choreography.client.choreography.animationuploadhelper method)": [[97, "bosdyn.choreography.client.choreography.AnimationUploadHelper.upload_animated_move"]], "upload_animated_move() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_animated_move"]], "upload_animated_move_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_animated_move_async"]], "upload_choreography() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_choreography"]], "upload_choreography_async() (bosdyn.choreography.client.choreography.choreographyclient method)": [[97, "bosdyn.choreography.client.choreography.ChoreographyClient.upload_choreography_async"]], "areacallbackclient (class in bosdyn.client.area_callback)": [[99, "bosdyn.client.area_callback.AreaCallbackClient"]], "areacallbackresponseerror": [[99, "bosdyn.client.area_callback.AreaCallbackResponseError"]], "expiredendtimeerror": [[99, "bosdyn.client.area_callback.ExpiredEndTimeError"]], "invalidcommandiderror": [[99, "bosdyn.client.area_callback.InvalidCommandIdError"]], "invalidconfigerror": [[99, "bosdyn.client.area_callback.InvalidConfigError"]], "missingleaseresourceserror": [[99, "bosdyn.client.area_callback.MissingLeaseResourcesError"]], "shutdowncallbackfailederror": [[99, "bosdyn.client.area_callback.ShutdownCallbackFailedError"]], "area_callback_information() (bosdyn.client.area_callback.areacallbackclient method)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.area_callback_information"]], "begin_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.begin_callback"]], "begin_control() (bosdyn.client.area_callback.areacallbackclient method)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.begin_control"]], "bosdyn.client.area_callback": [[99, "module-bosdyn.client.area_callback"]], "default_service_name (bosdyn.client.area_callback.areacallbackclient attribute)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.default_service_name"]], "end_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.end_callback"]], "service_type (bosdyn.client.area_callback.areacallbackclient attribute)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.service_type"]], "update_callback() (bosdyn.client.area_callback.areacallbackclient method)": [[99, "bosdyn.client.area_callback.AreaCallbackClient.update_callback"]], "areacallbackregionhandlerbase (class in bosdyn.client.area_callback_region_handler_base)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase"]], "callbackended": [[100, "bosdyn.client.area_callback_region_handler_base.CallbackEnded"]], "callbacktimedouterror": [[100, "bosdyn.client.area_callback_region_handler_base.CallbackTimedOutError"]], "handlererror": [[100, "bosdyn.client.area_callback_region_handler_base.HandlerError"]], "incorrectusage": [[100, "bosdyn.client.area_callback_region_handler_base.IncorrectUsage"]], "pathblocked": [[100, "bosdyn.client.area_callback_region_handler_base.PathBlocked"]], "routechangedresult (class in bosdyn.client.area_callback_region_handler_base)": [[100, "bosdyn.client.area_callback_region_handler_base.RouteChangedResult"]], "area_callback_information (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.area_callback_information"]], "begin() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.begin"]], "block_until_arrived_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_arrived_at_end"]], "block_until_arrived_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_arrived_at_start"]], "block_until_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.block_until_control"]], "bosdyn.client.area_callback_region_handler_base": [[100, "module-bosdyn.client.area_callback_region_handler_base"]], "check() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.check"]], "config (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.config"]], "continue_past_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.continue_past_end"]], "continue_past_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.continue_past_start"]], "control_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.control_at_end"]], "control_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.control_at_start"]], "end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.end"]], "has_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.has_control"]], "internal_begin_complete() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_begin_complete"]], "internal_give_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_give_control"]], "internal_run_wrapper() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_run_wrapper"]], "internal_set_end_time() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_set_end_time"]], "internal_set_stage() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.internal_set_stage"]], "route_changed() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.route_changed"]], "run() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.run"]], "safe_sleep() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.safe_sleep"]], "set_complete() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.set_complete"]], "set_localization_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.set_localization_at_end"]], "stage (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stage"]], "stop_at_end() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stop_at_end"]], "stop_at_start() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.stop_at_start"]], "update_response (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase property)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.update_response"]], "will_get_control() (bosdyn.client.area_callback_region_handler_base.areacallbackregionhandlerbase method)": [[100, "bosdyn.client.area_callback_region_handler_base.AreaCallbackRegionHandlerBase.will_get_control"]], "bosdyn.client.area_callback_service_runner": [[101, "module-bosdyn.client.area_callback_service_runner"]], "run_service() (in module bosdyn.client.area_callback_service_runner)": [[101, "bosdyn.client.area_callback_service_runner.run_service"]], "areacallbackinformation() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.AreaCallbackInformation"]], "areacallbackserviceservicer (class in bosdyn.client.area_callback_service_servicer)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer"]], "begincallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.BeginCallback"]], "begincontrol() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.BeginControl"]], "endcallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.EndCallback"]], "routechange() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.RouteChange"]], "service_type (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer attribute)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.SERVICE_TYPE"]], "shutdown() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.Shutdown"]], "updatecallback() (bosdyn.client.area_callback_service_servicer.areacallbackserviceservicer method)": [[102, "bosdyn.client.area_callback_service_servicer.AreaCallbackServiceServicer.UpdateCallback"]], "bosdyn.client.area_callback_service_servicer": [[102, "module-bosdyn.client.area_callback_service_servicer"]], "areacallbackserviceconfig (class in bosdyn.client.area_callback_service_utils)": [[103, "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig"]], "bosdyn.client.area_callback_service_utils": [[103, "module-bosdyn.client.area_callback_service_utils"]], "handle_service_faults() (in module bosdyn.client.area_callback_service_utils)": [[103, "bosdyn.client.area_callback_service_utils.handle_service_faults"]], "parse_params() (bosdyn.client.area_callback_service_utils.areacallbackserviceconfig method)": [[103, "bosdyn.client.area_callback_service_utils.AreaCallbackServiceConfig.parse_params"]], "armsurfacecontactclient (class in bosdyn.client.arm_surface_contact)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient"]], "arm_surface_contact_command() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.arm_surface_contact_command"]], "arm_surface_contact_command_async() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.arm_surface_contact_command_async"]], "bosdyn.client.arm_surface_contact": [[104, "module-bosdyn.client.arm_surface_contact"]], "default_service_name (bosdyn.client.arm_surface_contact.armsurfacecontactclient attribute)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.default_service_name"]], "service_type (bosdyn.client.arm_surface_contact.armsurfacecontactclient attribute)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.service_type"]], "update_from() (bosdyn.client.arm_surface_contact.armsurfacecontactclient method)": [[104, "bosdyn.client.arm_surface_contact.ArmSurfaceContactClient.update_from"]], "asyncgrpctask (class in bosdyn.client.async_tasks)": [[105, "bosdyn.client.async_tasks.AsyncGRPCTask"]], "asyncperiodicgrpctask (class in bosdyn.client.async_tasks)": [[105, "bosdyn.client.async_tasks.AsyncPeriodicGRPCTask"]], "asyncperiodicquery (class in bosdyn.client.async_tasks)": [[105, "bosdyn.client.async_tasks.AsyncPeriodicQuery"]], "asynctasks (class in bosdyn.client.async_tasks)": [[105, "bosdyn.client.async_tasks.AsyncTasks"]], "add_task() (bosdyn.client.async_tasks.asynctasks method)": [[105, "bosdyn.client.async_tasks.AsyncTasks.add_task"]], "bosdyn.client.async_tasks": [[105, "module-bosdyn.client.async_tasks"]], "proto (bosdyn.client.async_tasks.asyncperiodicquery property)": [[105, "bosdyn.client.async_tasks.AsyncPeriodicQuery.proto"]], "update() (bosdyn.client.async_tasks.asyncgrpctask method)": [[105, "bosdyn.client.async_tasks.AsyncGRPCTask.update"]], "update() (bosdyn.client.async_tasks.asynctasks method)": [[105, "bosdyn.client.async_tasks.AsyncTasks.update"]], "authclient (class in bosdyn.client.auth)": [[106, "bosdyn.client.auth.AuthClient"]], "authresponseerror": [[106, "bosdyn.client.auth.AuthResponseError"]], "invalidloginerror": [[106, "bosdyn.client.auth.InvalidLoginError"]], "invalidtokenerror": [[106, "bosdyn.client.auth.InvalidTokenError"]], "temporarilylockedouterror": [[106, "bosdyn.client.auth.TemporarilyLockedOutError"]], "auth() (bosdyn.client.auth.authclient method)": [[106, "bosdyn.client.auth.AuthClient.auth"]], "auth_async() (bosdyn.client.auth.authclient method)": [[106, "bosdyn.client.auth.AuthClient.auth_async"]], "auth_with_token() (bosdyn.client.auth.authclient method)": [[106, "bosdyn.client.auth.AuthClient.auth_with_token"]], "auth_with_token_async() (bosdyn.client.auth.authclient method)": [[106, "bosdyn.client.auth.AuthClient.auth_with_token_async"]], "bosdyn.client.auth": [[106, "module-bosdyn.client.auth"]], "default_service_name (bosdyn.client.auth.authclient attribute)": [[106, "bosdyn.client.auth.AuthClient.default_service_name"]], "service_type (bosdyn.client.auth.authclient attribute)": [[106, "bosdyn.client.auth.AuthClient.service_type"]], "autoreturnclient (class in bosdyn.client.auto_return)": [[107, "bosdyn.client.auto_return.AutoReturnClient"]], "autoreturnresponseerror": [[107, "bosdyn.client.auto_return.AutoReturnResponseError"]], "invalidparametererror": [[107, "bosdyn.client.auto_return.InvalidParameterError"]], "bosdyn.client.auto_return": [[107, "module-bosdyn.client.auto_return"]], "configure() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.configure"]], "configure_async() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.configure_async"]], "configure_error() (in module bosdyn.client.auto_return)": [[107, "bosdyn.client.auto_return.configure_error"]], "default_service_name (bosdyn.client.auto_return.autoreturnclient attribute)": [[107, "bosdyn.client.auto_return.AutoReturnClient.default_service_name"]], "get_configuration() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.get_configuration"]], "get_configuration_async() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.get_configuration_async"]], "service_type (bosdyn.client.auto_return.autoreturnclient attribute)": [[107, "bosdyn.client.auto_return.AutoReturnClient.service_type"]], "start() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.start"]], "start_async() (bosdyn.client.auto_return.autoreturnclient method)": [[107, "bosdyn.client.auto_return.AutoReturnClient.start_async"]], "start_error() (in module bosdyn.client.auto_return)": [[107, "bosdyn.client.auto_return.start_error"]], "autowalkclient (class in bosdyn.client.autowalk)": [[108, "bosdyn.client.autowalk.AutowalkClient"]], "autowalkresponseerror": [[108, "bosdyn.client.autowalk.AutowalkResponseError"]], "compilationerror": [[108, "bosdyn.client.autowalk.CompilationError"], [211, "bosdyn.mission.client.CompilationError"]], "validationerror": [[108, "bosdyn.client.autowalk.ValidationError"], [211, "bosdyn.mission.client.ValidationError"], [213, "bosdyn.mission.exceptions.ValidationError"]], "bosdyn.client.autowalk": [[108, "module-bosdyn.client.autowalk"]], "compile_autowalk() (bosdyn.client.autowalk.autowalkclient method)": [[108, "bosdyn.client.autowalk.AutowalkClient.compile_autowalk"]], "default_service_name (bosdyn.client.autowalk.autowalkclient attribute)": [[108, "bosdyn.client.autowalk.AutowalkClient.default_service_name"]], "load_autowalk() (bosdyn.client.autowalk.autowalkclient method)": [[108, "bosdyn.client.autowalk.AutowalkClient.load_autowalk"]], "service_type (bosdyn.client.autowalk.autowalkclient attribute)": [[108, "bosdyn.client.autowalk.AutowalkClient.service_type"]], "update_from() (bosdyn.client.autowalk.autowalkclient method)": [[108, "bosdyn.client.autowalk.AutowalkClient.update_from"]], "bosdyn.client.bddf": [[109, "module-bosdyn.client.bddf"]], "bosdyn.client.bddf_download": [[110, "module-bosdyn.client.bddf_download"]], "download_data() (in module bosdyn.client.bddf_download)": [[110, "bosdyn.client.bddf_download.download_data"]], "main() (in module bosdyn.client.bddf_download)": [[110, "bosdyn.client.bddf_download.main"]], "refreshingaccesstokenauthmetadataplugin (class in bosdyn.client.channel)": [[111, "bosdyn.client.channel.RefreshingAccessTokenAuthMetadataPlugin"]], "bosdyn.client.channel": [[111, "module-bosdyn.client.channel"]], "create_insecure_channel() (in module bosdyn.client.channel)": [[111, "bosdyn.client.channel.create_insecure_channel"]], "create_secure_channel() (in module bosdyn.client.channel)": [[111, "bosdyn.client.channel.create_secure_channel"]], "create_secure_channel_creds() (in module bosdyn.client.channel)": [[111, "bosdyn.client.channel.create_secure_channel_creds"]], "generate_channel_options() (in module bosdyn.client.channel)": [[111, "bosdyn.client.channel.generate_channel_options"]], "translate_exception() (in module bosdyn.client.channel)": [[111, "bosdyn.client.channel.translate_exception"]], "becomeestopcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.BecomeEstopCommand"]], "command (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.Command"]], "dataacquisitioncommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataAcquisitionCommand"]], "dataacquisitiongetlivedatacommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand"]], "dataacquisitionrequestcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataAcquisitionRequestCommand"]], "dataacquisitionservicecommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataAcquisitionServiceCommand"]], "dataacquisitionstatuscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataAcquisitionStatusCommand"]], "databuffercommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataBufferCommands"]], "dataservicecommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DataServiceCommands"]], "directorycommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DirectoryCommands"]], "directorygetcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DirectoryGetCommand"]], "directorylistcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DirectoryListCommand"]], "directoryregistercommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DirectoryRegisterCommand"]], "directoryunregistercommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.DirectoryUnregisterCommand"]], "estopcommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.EstopCommands"]], "experimentlogcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.ExperimentLogCommand"]], "faultcommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.FaultCommands"]], "faultshowcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.FaultShowCommand"]], "faultwatchcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.FaultWatchCommand"]], "fullstatecommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.FullStateCommand"]], "getactivelogstatusescommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetActiveLogStatusesCommand"]], "getdatabuffercommentscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetDataBufferCommentsCommand"]], "getdatabuffereventscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetDataBufferEventsCommand"]], "getdatabuffereventscommentscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand"]], "getdatabufferstatuscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetDataBufferStatusCommand"]], "getestopconfigcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetEstopConfigCommand"]], "getestopstatuscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetEstopStatusCommand"]], "getimagecommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetImageCommand"]], "getlocalgridscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetLocalGridsCommand"]], "getlogcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.GetLogCommand"]], "hardwareconfigurationcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.HardwareConfigurationCommand"]], "hostcomputeripcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.HostComputerIPCommand"]], "imagecommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.ImageCommands"]], "keepalivecommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.KeepaliveCommand"]], "keepalivegetstatuscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.KeepaliveGetStatusCommand"]], "keepaliveremovepoliciescommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.KeepaliveRemovePoliciesCommand"]], "leasecommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.LeaseCommands"]], "leaselistcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.LeaseListCommand"]], "licensecommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.LicenseCommand"]], "listimagesourcescommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.ListImageSourcesCommand"]], "listlocalgridtypescommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.ListLocalGridTypesCommand"]], "localgridcommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.LocalGridCommands"]], "logstatuscommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.LogStatusCommands"]], "metricscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.MetricsCommand"]], "name (bosdyn.client.command_line.becomeestopcommand attribute)": [[112, "bosdyn.client.command_line.BecomeEstopCommand.NAME"]], "name (bosdyn.client.command_line.command attribute)": [[112, "bosdyn.client.command_line.Command.NAME"]], "name (bosdyn.client.command_line.dataacquisitioncommand attribute)": [[112, "bosdyn.client.command_line.DataAcquisitionCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitiongetlivedatacommand attribute)": [[112, "bosdyn.client.command_line.DataAcquisitionGetLiveDataCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionrequestcommand attribute)": [[112, "bosdyn.client.command_line.DataAcquisitionRequestCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionservicecommand attribute)": [[112, "bosdyn.client.command_line.DataAcquisitionServiceCommand.NAME"]], "name (bosdyn.client.command_line.dataacquisitionstatuscommand attribute)": [[112, "bosdyn.client.command_line.DataAcquisitionStatusCommand.NAME"]], "name (bosdyn.client.command_line.databuffercommands attribute)": [[112, "bosdyn.client.command_line.DataBufferCommands.NAME"]], "name (bosdyn.client.command_line.dataservicecommands attribute)": [[112, "bosdyn.client.command_line.DataServiceCommands.NAME"]], "name (bosdyn.client.command_line.directorycommands attribute)": [[112, "bosdyn.client.command_line.DirectoryCommands.NAME"]], "name (bosdyn.client.command_line.directorygetcommand attribute)": [[112, "bosdyn.client.command_line.DirectoryGetCommand.NAME"]], "name (bosdyn.client.command_line.directorylistcommand attribute)": [[112, "bosdyn.client.command_line.DirectoryListCommand.NAME"]], "name (bosdyn.client.command_line.directoryregistercommand attribute)": [[112, "bosdyn.client.command_line.DirectoryRegisterCommand.NAME"]], "name (bosdyn.client.command_line.directoryunregistercommand attribute)": [[112, "bosdyn.client.command_line.DirectoryUnregisterCommand.NAME"]], "name (bosdyn.client.command_line.estopcommands attribute)": [[112, "bosdyn.client.command_line.EstopCommands.NAME"]], "name (bosdyn.client.command_line.experimentlogcommand attribute)": [[112, "bosdyn.client.command_line.ExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.faultcommands attribute)": [[112, "bosdyn.client.command_line.FaultCommands.NAME"]], "name (bosdyn.client.command_line.faultshowcommand attribute)": [[112, "bosdyn.client.command_line.FaultShowCommand.NAME"]], "name (bosdyn.client.command_line.faultwatchcommand attribute)": [[112, "bosdyn.client.command_line.FaultWatchCommand.NAME"]], "name (bosdyn.client.command_line.fullstatecommand attribute)": [[112, "bosdyn.client.command_line.FullStateCommand.NAME"]], "name (bosdyn.client.command_line.getactivelogstatusescommand attribute)": [[112, "bosdyn.client.command_line.GetActiveLogStatusesCommand.NAME"]], "name (bosdyn.client.command_line.getdatabuffercommentscommand attribute)": [[112, "bosdyn.client.command_line.GetDataBufferCommentsCommand.NAME"]], "name (bosdyn.client.command_line.getdatabuffereventscommand attribute)": [[112, "bosdyn.client.command_line.GetDataBufferEventsCommand.NAME"]], "name (bosdyn.client.command_line.getdatabufferstatuscommand attribute)": [[112, "bosdyn.client.command_line.GetDataBufferStatusCommand.NAME"]], "name (bosdyn.client.command_line.getestopconfigcommand attribute)": [[112, "bosdyn.client.command_line.GetEstopConfigCommand.NAME"]], "name (bosdyn.client.command_line.getestopstatuscommand attribute)": [[112, "bosdyn.client.command_line.GetEstopStatusCommand.NAME"]], "name (bosdyn.client.command_line.getimagecommand attribute)": [[112, "bosdyn.client.command_line.GetImageCommand.NAME"]], "name (bosdyn.client.command_line.getlocalgridscommand attribute)": [[112, "bosdyn.client.command_line.GetLocalGridsCommand.NAME"]], "name (bosdyn.client.command_line.getlogcommand attribute)": [[112, "bosdyn.client.command_line.GetLogCommand.NAME"]], "name (bosdyn.client.command_line.hardwareconfigurationcommand attribute)": [[112, "bosdyn.client.command_line.HardwareConfigurationCommand.NAME"]], "name (bosdyn.client.command_line.hostcomputeripcommand attribute)": [[112, "bosdyn.client.command_line.HostComputerIPCommand.NAME"]], "name (bosdyn.client.command_line.imagecommands attribute)": [[112, "bosdyn.client.command_line.ImageCommands.NAME"]], "name (bosdyn.client.command_line.keepalivecommand attribute)": [[112, "bosdyn.client.command_line.KeepaliveCommand.NAME"]], "name (bosdyn.client.command_line.keepalivegetstatuscommand attribute)": [[112, "bosdyn.client.command_line.KeepaliveGetStatusCommand.NAME"]], "name (bosdyn.client.command_line.keepaliveremovepoliciescommand attribute)": [[112, "bosdyn.client.command_line.KeepaliveRemovePoliciesCommand.NAME"]], "name (bosdyn.client.command_line.leasecommands attribute)": [[112, "bosdyn.client.command_line.LeaseCommands.NAME"]], "name (bosdyn.client.command_line.leaselistcommand attribute)": [[112, "bosdyn.client.command_line.LeaseListCommand.NAME"]], "name (bosdyn.client.command_line.licensecommand attribute)": [[112, "bosdyn.client.command_line.LicenseCommand.NAME"]], "name (bosdyn.client.command_line.listimagesourcescommand attribute)": [[112, "bosdyn.client.command_line.ListImageSourcesCommand.NAME"]], "name (bosdyn.client.command_line.listlocalgridtypescommand attribute)": [[112, "bosdyn.client.command_line.ListLocalGridTypesCommand.NAME"]], "name (bosdyn.client.command_line.localgridcommands attribute)": [[112, "bosdyn.client.command_line.LocalGridCommands.NAME"]], "name (bosdyn.client.command_line.logstatuscommands attribute)": [[112, "bosdyn.client.command_line.LogStatusCommands.NAME"]], "name (bosdyn.client.command_line.metricscommand attribute)": [[112, "bosdyn.client.command_line.MetricsCommand.NAME"]], "name (bosdyn.client.command_line.operatorcommentcommand attribute)": [[112, "bosdyn.client.command_line.OperatorCommentCommand.NAME"]], "name (bosdyn.client.command_line.payloadcommands attribute)": [[112, "bosdyn.client.command_line.PayloadCommands.NAME"]], "name (bosdyn.client.command_line.payloadlistcommand attribute)": [[112, "bosdyn.client.command_line.PayloadListCommand.NAME"]], "name (bosdyn.client.command_line.payloadregistercommand attribute)": [[112, "bosdyn.client.command_line.PayloadRegisterCommand.NAME"]], "name (bosdyn.client.command_line.powercommand attribute)": [[112, "bosdyn.client.command_line.PowerCommand.NAME"]], "name (bosdyn.client.command_line.powerpayloadscommand attribute)": [[112, "bosdyn.client.command_line.PowerPayloadsCommand.NAME"]], "name (bosdyn.client.command_line.powerrobotcommand attribute)": [[112, "bosdyn.client.command_line.PowerRobotCommand.NAME"]], "name (bosdyn.client.command_line.powerwifiradiocommand attribute)": [[112, "bosdyn.client.command_line.PowerWifiRadioCommand.NAME"]], "name (bosdyn.client.command_line.robotidcommand attribute)": [[112, "bosdyn.client.command_line.RobotIdCommand.NAME"]], "name (bosdyn.client.command_line.robotmodel attribute)": [[112, "bosdyn.client.command_line.RobotModel.NAME"]], "name (bosdyn.client.command_line.robotstatecommands attribute)": [[112, "bosdyn.client.command_line.RobotStateCommands.NAME"]], "name (bosdyn.client.command_line.startcontinuousexperimentlogcommand attribute)": [[112, "bosdyn.client.command_line.StartContinuousExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.startretrologcommand attribute)": [[112, "bosdyn.client.command_line.StartRetroLogCommand.NAME"]], "name (bosdyn.client.command_line.starttimedexperimentlogcommand attribute)": [[112, "bosdyn.client.command_line.StartTimedExperimentLogCommand.NAME"]], "name (bosdyn.client.command_line.terminatelogcommand attribute)": [[112, "bosdyn.client.command_line.TerminateLogCommand.NAME"]], "name (bosdyn.client.command_line.textmsgcommand attribute)": [[112, "bosdyn.client.command_line.TextMsgCommand.NAME"]], "name (bosdyn.client.command_line.timesynccommand attribute)": [[112, "bosdyn.client.command_line.TimeSyncCommand.NAME"]], "need_authentication (bosdyn.client.command_line.command attribute)": [[112, "bosdyn.client.command_line.Command.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.hostcomputeripcommand attribute)": [[112, "bosdyn.client.command_line.HostComputerIPCommand.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.logstatuscommands attribute)": [[112, "bosdyn.client.command_line.LogStatusCommands.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.robotidcommand attribute)": [[112, "bosdyn.client.command_line.RobotIdCommand.NEED_AUTHENTICATION"]], "need_authentication (bosdyn.client.command_line.robotmodel attribute)": [[112, "bosdyn.client.command_line.RobotModel.NEED_AUTHENTICATION"]], "oldbecomeestopcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.OldBecomeEstopCommand"]], "operatorcommentcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.OperatorCommentCommand"]], "payloadcommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PayloadCommands"]], "payloadlistcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PayloadListCommand"]], "payloadregistercommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PayloadRegisterCommand"]], "powercommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PowerCommand"]], "powerpayloadscommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PowerPayloadsCommand"]], "powerrobotcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PowerRobotCommand"]], "powerwifiradiocommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.PowerWifiRadioCommand"]], "robotidcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.RobotIdCommand"]], "robotmodel (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.RobotModel"]], "robotstatecommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.RobotStateCommands"]], "startcontinuousexperimentlogcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.StartContinuousExperimentLogCommand"]], "startretrologcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.StartRetroLogCommand"]], "starttimedexperimentlogcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.StartTimedExperimentLogCommand"]], "subcommands (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.Subcommands"]], "terminatelogcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.TerminateLogCommand"]], "textmsgcommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.TextMsgCommand"]], "timesynccommand (class in bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.TimeSyncCommand"]], "bosdyn.client.command_line": [[112, "module-bosdyn.client.command_line"]], "handle_keyboard_interruption() (bosdyn.client.command_line.startcontinuousexperimentlogcommand static method)": [[112, "bosdyn.client.command_line.StartContinuousExperimentLogCommand.handle_keyboard_interruption"]], "lease_details() (in module bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.lease_details"]], "main() (in module bosdyn.client.command_line)": [[112, "bosdyn.client.command_line.main"]], "pretty_print() (bosdyn.client.command_line.getdatabuffercommentscommand method)": [[112, "bosdyn.client.command_line.GetDataBufferCommentsCommand.pretty_print"]], "pretty_print() (bosdyn.client.command_line.getdatabuffereventscommand method)": [[112, "bosdyn.client.command_line.GetDataBufferEventsCommand.pretty_print"]], "pretty_print() (bosdyn.client.command_line.getdatabuffereventscommentscommand method)": [[112, "bosdyn.client.command_line.GetDataBufferEventsCommentsCommand.pretty_print"]], "run() (bosdyn.client.command_line.command method)": [[112, "bosdyn.client.command_line.Command.run"]], "run() (bosdyn.client.command_line.oldbecomeestopcommand method)": [[112, "bosdyn.client.command_line.OldBecomeEstopCommand.run"]], "baseclient (class in bosdyn.client.common)": [[113, "bosdyn.client.common.BaseClient"]], "futurewrapper (class in bosdyn.client.common)": [[113, "bosdyn.client.common.FutureWrapper"]], "add_done_callback() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.add_done_callback"]], "bosdyn.client.common": [[113, "module-bosdyn.client.common"]], "call() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.call"]], "call_async() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.call_async"]], "call_async_streaming() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.call_async_streaming"]], "cancel() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.cancel"]], "cancelled() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.cancelled"]], "channel (bosdyn.client.common.baseclient property)": [[113, "bosdyn.client.common.BaseClient.channel"]], "chunk_message() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.chunk_message"]], "common_header_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.common_header_errors"]], "common_lease_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.common_lease_errors"]], "common_license_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.common_license_errors"]], "custom_params_error() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.custom_params_error"]], "done() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.done"]], "error_factory() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.error_factory"]], "error_pair() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.error_pair"]], "exception() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.exception"]], "get_self_ip() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.get_self_ip"]], "handle_common_header_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_common_header_errors"]], "handle_custom_params_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_custom_params_errors"]], "handle_lease_use_result_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_lease_use_result_errors"]], "handle_license_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_license_errors"]], "handle_license_errors_if_present() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_license_errors_if_present"]], "handle_response() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.handle_response"]], "handle_response_streaming() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.handle_response_streaming"]], "handle_unset_status_error() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.handle_unset_status_error"]], "maybe_raise() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.maybe_raise"]], "print_response() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.print_response"]], "process_kwargs() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.process_kwargs"]], "request_trim_for_log() (bosdyn.client.common.baseclient static method)": [[113, "bosdyn.client.common.BaseClient.request_trim_for_log"]], "response_trim_for_log() (bosdyn.client.common.baseclient static method)": [[113, "bosdyn.client.common.BaseClient.response_trim_for_log"]], "result() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.result"]], "running() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.running"]], "streaming_common_header_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.streaming_common_header_errors"]], "streaming_common_lease_errors() (in module bosdyn.client.common)": [[113, "bosdyn.client.common.streaming_common_lease_errors"]], "traceback() (bosdyn.client.common.futurewrapper method)": [[113, "bosdyn.client.common.FutureWrapper.traceback"]], "update_from() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.update_from"]], "update_request_iterator() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.update_request_iterator"]], "update_response_iterator() (bosdyn.client.common.baseclient method)": [[113, "bosdyn.client.common.BaseClient.update_response_iterator"]], "cancellationfailederror": [[114, "bosdyn.client.data_acquisition.CancellationFailedError"]], "dataacquisitionclient (class in bosdyn.client.data_acquisition)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient"]], "dataacquisitionresponseerror": [[114, "bosdyn.client.data_acquisition.DataAcquisitionResponseError"]], "requestiddoesnotexisterror": [[114, "bosdyn.client.data_acquisition.RequestIdDoesNotExistError"], [147, "bosdyn.client.log_status.RequestIdDoesNotExistError"]], "unknowncapturetypeerror": [[114, "bosdyn.client.data_acquisition.UnknownCaptureTypeError"]], "acquire_data() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data"]], "acquire_data_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_async"]], "acquire_data_error() (in module bosdyn.client.data_acquisition)": [[114, "bosdyn.client.data_acquisition.acquire_data_error"]], "acquire_data_from_request() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_from_request"]], "acquire_data_from_request_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.acquire_data_from_request_async"]], "bosdyn.client.data_acquisition": [[114, "module-bosdyn.client.data_acquisition"]], "cancel_acquisition() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.cancel_acquisition"]], "cancel_acquisition_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.cancel_acquisition_async"]], "default_service_name (bosdyn.client.data_acquisition.dataacquisitionclient attribute)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.default_service_name"]], "get_live_data() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_live_data"]], "get_live_data_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_live_data_async"]], "get_request_id() (in module bosdyn.client.data_acquisition)": [[114, "bosdyn.client.data_acquisition.get_request_id"]], "get_service_info() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_service_info"]], "get_service_info_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_service_info_async"]], "get_status() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_status"]], "get_status_async() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.get_status_async"]], "make_acquire_data_request() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.make_acquire_data_request"]], "metadata_to_proto() (in module bosdyn.client.data_acquisition)": [[114, "bosdyn.client.data_acquisition.metadata_to_proto"]], "service_type (bosdyn.client.data_acquisition.dataacquisitionclient attribute)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.service_type"]], "update_from() (bosdyn.client.data_acquisition.dataacquisitionclient method)": [[114, "bosdyn.client.data_acquisition.DataAcquisitionClient.update_from"]], "acquire_and_process_request() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.acquire_and_process_request"]], "bosdyn.client.data_acquisition_helpers": [[115, "module-bosdyn.client.data_acquisition_helpers"]], "cancel_acquisition_request() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.cancel_acquisition_request"]], "clean_filename() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.clean_filename"]], "download_data_rest() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.download_data_REST"]], "issue_acquire_data_request() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.issue_acquire_data_request"]], "make_time_query_params() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.make_time_query_params"]], "make_time_query_params_from_group_name() (in module bosdyn.client.data_acquisition_helpers)": [[115, "bosdyn.client.data_acquisition_helpers.make_time_query_params_from_group_name"]], "dataacquisitionpluginclient (class in bosdyn.client.data_acquisition_plugin)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient"]], "acquire_plugin_data() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.acquire_plugin_data"]], "acquire_plugin_data_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.acquire_plugin_data_async"]], "bosdyn.client.data_acquisition_plugin": [[116, "module-bosdyn.client.data_acquisition_plugin"]], "cancel_acquisition() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.cancel_acquisition"]], "cancel_acquisition_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.cancel_acquisition_async"]], "default_service_name (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient attribute)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.default_service_name"]], "get_live_data() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_live_data"]], "get_live_data_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_live_data_async"]], "get_service_info() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_service_info"]], "get_service_info_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_service_info_async"]], "get_status() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_status"]], "get_status_async() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.get_status_async"]], "service_type (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient attribute)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.service_type"]], "update_from() (bosdyn.client.data_acquisition_plugin.dataacquisitionpluginclient method)": [[116, "bosdyn.client.data_acquisition_plugin.DataAcquisitionPluginClient.update_from"]], "acquireplugindata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.AcquirePluginData"]], "cancelacquisition() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.CancelAcquisition"]], "dataacquisitionpluginservice (class in bosdyn.client.data_acquisition_plugin_service)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService"]], "dataacquisitionstorehelper (class in bosdyn.client.data_acquisition_plugin_service)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper"]], "getlivedata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetLiveData"]], "getserviceinfo() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetServiceInfo"]], "getstatus() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.GetStatus"]], "requestcancellederror": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestCancelledError"]], "requestmanager (class in bosdyn.client.data_acquisition_plugin_service)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager"]], "requeststate (class in bosdyn.client.data_acquisition_plugin_service)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState"]], "acquire_response_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.acquire_response_fn"]], "add_errors() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.add_errors"]], "add_request() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.add_request"]], "add_saved() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.add_saved"]], "bosdyn.client.data_acquisition_plugin_service": [[117, "module-bosdyn.client.data_acquisition_plugin_service"]], "cancel_check() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.cancel_check"]], "cancel_check() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.cancel_check"]], "cancel_interval (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.cancel_interval"]], "capabilities (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.capabilities"]], "cleanup_requests() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.cleanup_requests"]], "data_collect_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.data_collect_fn"]], "data_id_future_pairs (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.data_id_future_pairs"]], "executor (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.executor"]], "get_request_state() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.get_request_state"]], "get_status_proto() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.get_status_proto"]], "has_data_errors() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.has_data_errors"]], "is_cancelled() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.is_cancelled"]], "knonerror (bosdyn.client.data_acquisition_plugin_service.requeststate attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.kNonError"]], "live_response_fn (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.live_response_fn"]], "logger (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.logger"]], "make_error() (in module bosdyn.client.data_acquisition_plugin_service)": [[117, "bosdyn.client.data_acquisition_plugin_service.make_error"]], "mark_request_cancelled() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.mark_request_cancelled"]], "mark_request_finished() (bosdyn.client.data_acquisition_plugin_service.requestmanager method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestManager.mark_request_finished"]], "request_manager (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.request_manager"]], "robot (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.robot"]], "service_type (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.service_type"]], "set_complete_if_no_error() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.set_complete_if_no_error"]], "set_status() (bosdyn.client.data_acquisition_plugin_service.requeststate method)": [[117, "bosdyn.client.data_acquisition_plugin_service.RequestState.set_status"]], "state (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.state"]], "store_client (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.store_client"]], "store_client (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper attribute)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_client"]], "store_data() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_data"]], "store_data_as_chunks() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_data_as_chunks"]], "store_file() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_file"]], "store_image() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_image"]], "store_metadata() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.store_metadata"]], "validate_params() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionpluginservice method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionPluginService.validate_params"]], "wait_for_stores_complete() (bosdyn.client.data_acquisition_plugin_service.dataacquisitionstorehelper method)": [[117, "bosdyn.client.data_acquisition_plugin_service.DataAcquisitionStoreHelper.wait_for_stores_complete"]], "dataacquisitionstoreclient (class in bosdyn.client.data_acquisition_store)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient"]], "bosdyn.client.data_acquisition_store": [[118, "module-bosdyn.client.data_acquisition_store"]], "default_service_name (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient attribute)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.default_service_name"]], "list_capture_actions() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_capture_actions"]], "list_capture_actions_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_capture_actions_async"]], "list_stored_alertdata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_alertdata"]], "list_stored_alertdata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_alertdata_async"]], "list_stored_data() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_data"]], "list_stored_data_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_data_async"]], "list_stored_images() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_images"]], "list_stored_images_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_images_async"]], "list_stored_metadata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_metadata"]], "list_stored_metadata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.list_stored_metadata_async"]], "query_max_capture_id() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_max_capture_id"]], "query_max_capture_id_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_max_capture_id_async"]], "query_stored_captures() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_stored_captures"]], "query_stored_captures_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.query_stored_captures_async"]], "service_type (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient attribute)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.service_type"]], "store_alertdata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_alertdata"]], "store_alertdata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_alertdata_async"]], "store_data() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data"]], "store_data_as_chunks() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data_as_chunks"]], "store_data_as_chunks_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data_as_chunks_async"]], "store_data_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_data_async"]], "store_file() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_file"]], "store_file_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_file_async"]], "store_image() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_image"]], "store_image_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_image_async"]], "store_metadata() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_metadata"]], "store_metadata_async() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.store_metadata_async"]], "update_from() (bosdyn.client.data_acquisition_store.dataacquisitionstoreclient method)": [[118, "bosdyn.client.data_acquisition_store.DataAcquisitionStoreClient.update_from"]], "databufferclient (class in bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.DataBufferClient"]], "invalidargument": [[119, "bosdyn.client.data_buffer.InvalidArgument"], [121, "bosdyn.client.data_service.InvalidArgument"]], "logginghandler (class in bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.LoggingHandler"]], "add_blob() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_blob"]], "add_blob_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_blob_async"]], "add_events() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_events"]], "add_events_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_events_async"]], "add_operator_comment() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_operator_comment"]], "add_operator_comment_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_operator_comment_async"]], "add_protobuf() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_protobuf"]], "add_protobuf_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_protobuf_async"]], "add_signal_tick() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_signal_tick"]], "add_signal_tick_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_signal_tick_async"]], "add_text_messages() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_text_messages"]], "add_text_messages_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.add_text_messages_async"]], "bosdyn.client.data_buffer": [[119, "module-bosdyn.client.data_buffer"]], "close() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.close"]], "default_service_name (bosdyn.client.data_buffer.databufferclient attribute)": [[119, "bosdyn.client.data_buffer.DataBufferClient.default_service_name"]], "emit() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.emit"]], "fallback_log() (bosdyn.client.data_buffer.logginghandler static method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.fallback_log"]], "flush() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.flush"]], "is_not_rpc() (in module bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.is_not_rpc"]], "is_not_text_log() (in module bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.is_not_text_log"]], "is_thread_alive() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.is_thread_alive"]], "log_event() (in module bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.log_event"]], "make_parameter() (in module bosdyn.client.data_buffer)": [[119, "bosdyn.client.data_buffer.make_parameter"]], "now_in_robot_basis() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.now_in_robot_basis"]], "record_level_to_proto_level() (bosdyn.client.data_buffer.logginghandler static method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.record_level_to_proto_level"]], "record_to_msg() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.record_to_msg"]], "register_signal_schema() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.register_signal_schema"]], "register_signal_schema_async() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.register_signal_schema_async"]], "restart() (bosdyn.client.data_buffer.logginghandler method)": [[119, "bosdyn.client.data_buffer.LoggingHandler.restart"]], "service_type (bosdyn.client.data_buffer.databufferclient attribute)": [[119, "bosdyn.client.data_buffer.DataBufferClient.service_type"]], "update_from() (bosdyn.client.data_buffer.databufferclient method)": [[119, "bosdyn.client.data_buffer.DataBufferClient.update_from"]], "bosdyn.client.data_chunk": [[120, "module-bosdyn.client.data_chunk"]], "chunk_message() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.chunk_message"]], "chunk_serialized() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.chunk_serialized"]], "parse_from_chunks() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.parse_from_chunks"]], "serialized_from_chunks() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.serialized_from_chunks"]], "serialized_from_messages() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.serialized_from_messages"]], "serialized_from_strings() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.serialized_from_strings"]], "split_serialized() (in module bosdyn.client.data_chunk)": [[120, "bosdyn.client.data_chunk.split_serialized"]], "dataserviceclient (class in bosdyn.client.data_service)": [[121, "bosdyn.client.data_service.DataServiceClient"]], "bosdyn.client.data_service": [[121, "module-bosdyn.client.data_service"]], "default_service_name (bosdyn.client.data_service.dataserviceclient attribute)": [[121, "bosdyn.client.data_service.DataServiceClient.default_service_name"]], "delete_data_pages() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.delete_data_pages"]], "delete_data_pages_async() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.delete_data_pages_async"]], "get_data_buffer_status() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_buffer_status"]], "get_data_buffer_status_async() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_buffer_status_async"]], "get_data_index() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_index"]], "get_data_index_async() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_index_async"]], "get_data_pages() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_pages"]], "get_data_pages_async() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_data_pages_async"]], "get_events_comments() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_events_comments"]], "get_events_comments_async() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.get_events_comments_async"]], "service_type (bosdyn.client.data_service.dataserviceclient attribute)": [[121, "bosdyn.client.data_service.DataServiceClient.service_type"]], "update_from() (bosdyn.client.data_service.dataserviceclient method)": [[121, "bosdyn.client.data_service.DataServiceClient.update_from"]], "directoryclient (class in bosdyn.client.directory)": [[122, "bosdyn.client.directory.DirectoryClient"]], "directoryresponseerror": [[122, "bosdyn.client.directory.DirectoryResponseError"]], "nonexistentserviceerror": [[122, "bosdyn.client.directory.NonexistentServiceError"]], "bosdyn.client.directory": [[122, "module-bosdyn.client.directory"]], "default_service_name (bosdyn.client.directory.directoryclient attribute)": [[122, "bosdyn.client.directory.DirectoryClient.default_service_name"]], "get_entry() (bosdyn.client.directory.directoryclient method)": [[122, "bosdyn.client.directory.DirectoryClient.get_entry"]], "get_entry_async() (bosdyn.client.directory.directoryclient method)": [[122, "bosdyn.client.directory.DirectoryClient.get_entry_async"]], "list() (bosdyn.client.directory.directoryclient method)": [[122, "bosdyn.client.directory.DirectoryClient.list"]], "list_async() (bosdyn.client.directory.directoryclient method)": [[122, "bosdyn.client.directory.DirectoryClient.list_async"]], "service_type (bosdyn.client.directory.directoryclient attribute)": [[122, "bosdyn.client.directory.DirectoryClient.service_type"]], "directoryregistrationclient (class in bosdyn.client.directory_registration)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient"]], "directoryregistrationkeepalive (class in bosdyn.client.directory_registration)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive"]], "directoryregistrationresponseerror": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationResponseError"]], "servicealreadyexistserror": [[123, "bosdyn.client.directory_registration.ServiceAlreadyExistsError"]], "servicedoesnotexisterror": [[123, "bosdyn.client.directory_registration.ServiceDoesNotExistError"]], "bosdyn.client.directory_registration": [[123, "module-bosdyn.client.directory_registration"]], "default_service_name (bosdyn.client.directory_registration.directoryregistrationclient attribute)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient.default_service_name"]], "is_alive() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.is_alive"]], "register() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient.register"]], "reset_service_registration() (in module bosdyn.client.directory_registration)": [[123, "bosdyn.client.directory_registration.reset_service_registration"]], "service_type (bosdyn.client.directory_registration.directoryregistrationclient attribute)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient.service_type"]], "shutdown() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.shutdown"]], "start() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.start"]], "unregister() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient.unregister"]], "unregister() (bosdyn.client.directory_registration.directoryregistrationkeepalive method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationKeepAlive.unregister"]], "update() (bosdyn.client.directory_registration.directoryregistrationclient method)": [[123, "bosdyn.client.directory_registration.DirectoryRegistrationClient.update"]], "dockingclient (class in bosdyn.client.docking)": [[124, "bosdyn.client.docking.DockingClient"]], "blocking_dock_robot() (in module bosdyn.client.docking)": [[124, "bosdyn.client.docking.blocking_dock_robot"]], "blocking_go_to_prep_pose() (in module bosdyn.client.docking)": [[124, "bosdyn.client.docking.blocking_go_to_prep_pose"]], "blocking_undock() (in module bosdyn.client.docking)": [[124, "bosdyn.client.docking.blocking_undock"]], "bosdyn.client.docking": [[124, "module-bosdyn.client.docking"]], "default_service_name (bosdyn.client.docking.dockingclient attribute)": [[124, "bosdyn.client.docking.DockingClient.default_service_name"]], "docking_command() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command"]], "docking_command_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_async"]], "docking_command_feedback() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_feedback"]], "docking_command_feedback_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_feedback_async"]], "docking_command_feedback_full() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_feedback_full"]], "docking_command_feedback_full_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_feedback_full_async"]], "docking_command_full() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_full"]], "docking_command_full_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.docking_command_full_async"]], "get_dock_id() (in module bosdyn.client.docking)": [[124, "bosdyn.client.docking.get_dock_id"]], "get_docking_config() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.get_docking_config"]], "get_docking_config_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.get_docking_config_async"]], "get_docking_state() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.get_docking_state"]], "get_docking_state_async() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.get_docking_state_async"]], "service_type (bosdyn.client.docking.dockingclient attribute)": [[124, "bosdyn.client.docking.DockingClient.service_type"]], "update_from() (bosdyn.client.docking.dockingclient method)": [[124, "bosdyn.client.docking.DockingClient.update_from"]], "doorclient (class in bosdyn.client.door)": [[125, "bosdyn.client.door.DoorClient"]], "bosdyn.client.door": [[125, "module-bosdyn.client.door"]], "default_service_name (bosdyn.client.door.doorclient attribute)": [[125, "bosdyn.client.door.DoorClient.default_service_name"]], "open_door() (bosdyn.client.door.doorclient method)": [[125, "bosdyn.client.door.DoorClient.open_door"]], "open_door_async() (bosdyn.client.door.doorclient method)": [[125, "bosdyn.client.door.DoorClient.open_door_async"]], "open_door_feedback() (bosdyn.client.door.doorclient method)": [[125, "bosdyn.client.door.DoorClient.open_door_feedback"]], "open_door_feedback_async() (bosdyn.client.door.doorclient method)": [[125, "bosdyn.client.door.DoorClient.open_door_feedback_async"]], "service_type (bosdyn.client.door.doorclient attribute)": [[125, "bosdyn.client.door.DoorClient.service_type"]], "update_from() (bosdyn.client.door.doorclient method)": [[125, "bosdyn.client.door.DoorClient.update_from"]], "configmismatcherror": [[126, "bosdyn.client.estop.ConfigMismatchError"]], "disabled (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[126, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.DISABLED"]], "error (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[126, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.ERROR"]], "estop_level_cut (bosdyn.client.estop.stoplevel attribute)": [[126, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_CUT"]], "estop_level_none (bosdyn.client.estop.stoplevel attribute)": [[126, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_NONE"]], "estop_level_settle_then_cut (bosdyn.client.estop.stoplevel attribute)": [[126, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_SETTLE_THEN_CUT"]], "estop_level_unknown (bosdyn.client.estop.stoplevel attribute)": [[126, "bosdyn.client.estop.StopLevel.ESTOP_LEVEL_UNKNOWN"]], "endpointmismatcherror": [[126, "bosdyn.client.estop.EndpointMismatchError"]], "endpointunknownerror": [[126, "bosdyn.client.estop.EndpointUnknownError"]], "estopclient (class in bosdyn.client.estop)": [[126, "bosdyn.client.estop.EstopClient"]], "estopendpoint (class in bosdyn.client.estop)": [[126, "bosdyn.client.estop.EstopEndpoint"]], "estopkeepalive (class in bosdyn.client.estop)": [[126, "bosdyn.client.estop.EstopKeepAlive"]], "estopkeepalive.keepalivestatus (class in bosdyn.client.estop)": [[126, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus"]], "estopresponseerror": [[126, "bosdyn.client.estop.EstopResponseError"]], "incorrectchallengeresponseerror": [[126, "bosdyn.client.estop.IncorrectChallengeResponseError"]], "invalidendpointerror": [[126, "bosdyn.client.estop.InvalidEndpointError"]], "invalididerror": [[126, "bosdyn.client.estop.InvalidIdError"]], "motorsonerror": [[126, "bosdyn.client.estop.MotorsOnError"]], "ok (bosdyn.client.estop.estopkeepalive.keepalivestatus attribute)": [[126, "bosdyn.client.estop.EstopKeepAlive.KeepAliveStatus.OK"]], "required_role (bosdyn.client.estop.estopendpoint attribute)": [[126, "bosdyn.client.estop.EstopEndpoint.REQUIRED_ROLE"]], "stoplevel (class in bosdyn.client.estop)": [[126, "bosdyn.client.estop.StopLevel"]], "allow() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.allow"]], "allow() (bosdyn.client.estop.estopkeepalive method)": [[126, "bosdyn.client.estop.EstopKeepAlive.allow"]], "allow_async() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.allow_async"]], "bosdyn.client.estop": [[126, "module-bosdyn.client.estop"]], "check_in() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.check_in"]], "check_in_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.check_in_async"]], "check_in_at_level() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.check_in_at_level"]], "check_in_at_level_async() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.check_in_at_level_async"]], "client (bosdyn.client.estop.estopkeepalive property)": [[126, "bosdyn.client.estop.EstopKeepAlive.client"]], "default_service_name (bosdyn.client.estop.estopclient attribute)": [[126, "bosdyn.client.estop.EstopClient.default_service_name"]], "deregister() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.deregister"]], "deregister() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.deregister"]], "deregister_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.deregister_async"]], "deregister_async() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.deregister_async"]], "endpoint (bosdyn.client.estop.estopkeepalive property)": [[126, "bosdyn.client.estop.EstopKeepAlive.endpoint"]], "force_simple_setup() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.force_simple_setup"]], "from_proto() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.from_proto"]], "get_challenge() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.get_challenge"]], "get_config() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.get_config"]], "get_config_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.get_config_async"]], "get_status() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.get_status"]], "get_status_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.get_status_async"]], "is_estopped() (in module bosdyn.client.estop)": [[126, "bosdyn.client.estop.is_estopped"]], "last_set_level (bosdyn.client.estop.estopendpoint property)": [[126, "bosdyn.client.estop.EstopEndpoint.last_set_level"]], "last_set_level (bosdyn.client.estop.estopkeepalive property)": [[126, "bosdyn.client.estop.EstopKeepAlive.last_set_level"]], "logger (bosdyn.client.estop.estopkeepalive property)": [[126, "bosdyn.client.estop.EstopKeepAlive.logger"]], "register() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.register"]], "register() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.register"]], "register_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.register_async"]], "response_from_challenge() (in module bosdyn.client.estop)": [[126, "bosdyn.client.estop.response_from_challenge"]], "service_type (bosdyn.client.estop.estopclient attribute)": [[126, "bosdyn.client.estop.EstopClient.service_type"]], "set_challenge() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.set_challenge"]], "set_config() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.set_config"]], "set_config_async() (bosdyn.client.estop.estopclient method)": [[126, "bosdyn.client.estop.EstopClient.set_config_async"]], "settle_then_cut() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.settle_then_cut"]], "settle_then_cut() (bosdyn.client.estop.estopkeepalive method)": [[126, "bosdyn.client.estop.EstopKeepAlive.settle_then_cut"]], "settle_then_cut_async() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.settle_then_cut_async"]], "shutdown() (bosdyn.client.estop.estopkeepalive method)": [[126, "bosdyn.client.estop.EstopKeepAlive.shutdown"]], "stop() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.stop"]], "stop() (bosdyn.client.estop.estopkeepalive method)": [[126, "bosdyn.client.estop.EstopKeepAlive.stop"]], "stop_async() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.stop_async"]], "to_proto() (bosdyn.client.estop.estopendpoint method)": [[126, "bosdyn.client.estop.EstopEndpoint.to_proto"]], "unique_id (bosdyn.client.estop.estopendpoint property)": [[126, "bosdyn.client.estop.EstopEndpoint.unique_id"]], "clientcancelledoperationerror": [[127, "bosdyn.client.exceptions.ClientCancelledOperationError"]], "customparamerror": [[127, "bosdyn.client.exceptions.CustomParamError"]], "error": [[127, "bosdyn.client.exceptions.Error"], [129, "bosdyn.client.frame_helpers.Error"], [142, "bosdyn.client.lease.Error"], [161, "bosdyn.client.robot_command.Error"], [213, "bosdyn.mission.exceptions.Error"], [214, "bosdyn.mission.remote_client.Error"], [216, "bosdyn.mission.util.Error"], [219, "bosdyn.orbit.exceptions.Error"]], "internalservererror": [[127, "bosdyn.client.exceptions.InternalServerError"]], "invalidclientcertificateerror": [[127, "bosdyn.client.exceptions.InvalidClientCertificateError"]], "invalidrequesterror": [[127, "bosdyn.client.exceptions.InvalidRequestError"], [158, "bosdyn.client.ray_cast.InvalidRequestError"]], "leaseuseerror": [[127, "bosdyn.client.exceptions.LeaseUseError"]], "licenseerror": [[127, "bosdyn.client.exceptions.LicenseError"]], "nonexistentauthorityerror": [[127, "bosdyn.client.exceptions.NonexistentAuthorityError"]], "notfounderror": [[127, "bosdyn.client.exceptions.NotFoundError"]], "permissiondeniederror": [[127, "bosdyn.client.exceptions.PermissionDeniedError"]], "persistentrpcerror": [[127, "bosdyn.client.exceptions.PersistentRpcError"]], "proxyconnectionerror": [[127, "bosdyn.client.exceptions.ProxyConnectionError"]], "responseerror": [[127, "bosdyn.client.exceptions.ResponseError"]], "responsetoolargeerror": [[127, "bosdyn.client.exceptions.ResponseTooLargeError"]], "retryablerpcerror": [[127, "bosdyn.client.exceptions.RetryableRpcError"]], "retryableunavailableerror": [[127, "bosdyn.client.exceptions.RetryableUnavailableError"]], "rpcerror": [[127, "bosdyn.client.exceptions.RpcError"]], "servererror": [[127, "bosdyn.client.exceptions.ServerError"]], "servicefailedduringexecutionerror": [[127, "bosdyn.client.exceptions.ServiceFailedDuringExecutionError"]], "serviceunavailableerror": [[127, "bosdyn.client.exceptions.ServiceUnavailableError"]], "timesyncrequired": [[127, "bosdyn.client.exceptions.TimeSyncRequired"]], "timedouterror": [[127, "bosdyn.client.exceptions.TimedOutError"], [181, "bosdyn.client.time_sync.TimedOutError"]], "toomanyrequestserror": [[127, "bosdyn.client.exceptions.TooManyRequestsError"]], "transientfailureerror": [[127, "bosdyn.client.exceptions.TransientFailureError"]], "unabletoconnecttoroboterror": [[127, "bosdyn.client.exceptions.UnableToConnectToRobotError"]], "unauthenticatederror": [[127, "bosdyn.client.exceptions.UnauthenticatedError"]], "unimplementederror": [[127, "bosdyn.client.exceptions.UnimplementedError"]], "unknowndnsnameerror": [[127, "bosdyn.client.exceptions.UnknownDnsNameError"]], "unsetstatuserror": [[127, "bosdyn.client.exceptions.UnsetStatusError"]], "bosdyn.client.exceptions": [[127, "module-bosdyn.client.exceptions"]], "faultclient (class in bosdyn.client.fault)": [[128, "bosdyn.client.fault.FaultClient"]], "faultresponseerror": [[128, "bosdyn.client.fault.FaultResponseError"]], "servicefaultalreadyexistserror": [[128, "bosdyn.client.fault.ServiceFaultAlreadyExistsError"]], "servicefaultdoesnotexisterror": [[128, "bosdyn.client.fault.ServiceFaultDoesNotExistError"]], "bosdyn.client.fault": [[128, "module-bosdyn.client.fault"]], "clear_service_fault() (bosdyn.client.fault.faultclient method)": [[128, "bosdyn.client.fault.FaultClient.clear_service_fault"]], "clear_service_fault_async() (bosdyn.client.fault.faultclient method)": [[128, "bosdyn.client.fault.FaultClient.clear_service_fault_async"]], "default_service_name (bosdyn.client.fault.faultclient attribute)": [[128, "bosdyn.client.fault.FaultClient.default_service_name"]], "service_type (bosdyn.client.fault.faultclient attribute)": [[128, "bosdyn.client.fault.FaultClient.service_type"]], "trigger_service_fault() (bosdyn.client.fault.faultclient method)": [[128, "bosdyn.client.fault.FaultClient.trigger_service_fault"]], "trigger_service_fault_async() (bosdyn.client.fault.faultclient method)": [[128, "bosdyn.client.fault.FaultClient.trigger_service_fault_async"]], "childframeintree": [[129, "bosdyn.client.frame_helpers.ChildFrameInTree"]], "generatetreeerror": [[129, "bosdyn.client.frame_helpers.GenerateTreeError"]], "validateframetreecycleerror": [[129, "bosdyn.client.frame_helpers.ValidateFrameTreeCycleError"]], "validateframetreedisjointerror": [[129, "bosdyn.client.frame_helpers.ValidateFrameTreeDisjointError"]], "validateframetreeerror": [[129, "bosdyn.client.frame_helpers.ValidateFrameTreeError"]], "validateframetreeunknownframeerror": [[129, "bosdyn.client.frame_helpers.ValidateFrameTreeUnknownFrameError"]], "add_edge_to_tree() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.add_edge_to_tree"]], "bosdyn.client.frame_helpers": [[129, "module-bosdyn.client.frame_helpers"]], "express_se2_velocity_in_new_frame() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.express_se2_velocity_in_new_frame"]], "express_se3_velocity_in_new_frame() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.express_se3_velocity_in_new_frame"]], "get_a_tform_b() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.get_a_tform_b"]], "get_frame_names() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.get_frame_names"]], "get_odom_tform_body() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.get_odom_tform_body"]], "get_se2_a_tform_b() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.get_se2_a_tform_b"]], "get_vision_tform_body() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.get_vision_tform_body"]], "is_gravity_aligned_frame_name() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.is_gravity_aligned_frame_name"]], "validate_frame_tree_snapshot() (in module bosdyn.client.frame_helpers)": [[129, "bosdyn.client.frame_helpers.validate_frame_tree_snapshot"]], "log_throttle_time (bosdyn.client.gps.nmeaparser.nmeaparser attribute)": [[130, "bosdyn.client.gps.NMEAParser.NMEAParser.LOG_THROTTLE_TIME"]], "nmeaparser (class in bosdyn.client.gps.nmeaparser)": [[130, "bosdyn.client.gps.NMEAParser.NMEAParser"]], "bosdyn.client.gps.nmeaparser": [[130, "module-bosdyn.client.gps.NMEAParser"]], "nmea_message_group_to_gps_data_point() (bosdyn.client.gps.nmeaparser.nmeaparser method)": [[130, "bosdyn.client.gps.NMEAParser.NMEAParser.nmea_message_group_to_gps_data_point"]], "parse() (bosdyn.client.gps.nmeaparser.nmeaparser method)": [[130, "bosdyn.client.gps.NMEAParser.NMEAParser.parse"]], "aggregatorclient (class in bosdyn.client.gps.aggregator_client)": [[132, "bosdyn.client.gps.aggregator_client.AggregatorClient"]], "bosdyn.client.gps.aggregator_client": [[132, "module-bosdyn.client.gps.aggregator_client"]], "default_service_name (bosdyn.client.gps.aggregator_client.aggregatorclient attribute)": [[132, "bosdyn.client.gps.aggregator_client.AggregatorClient.default_service_name"]], "new_gps_data() (bosdyn.client.gps.aggregator_client.aggregatorclient method)": [[132, "bosdyn.client.gps.aggregator_client.AggregatorClient.new_gps_data"]], "new_gps_data_async() (bosdyn.client.gps.aggregator_client.aggregatorclient method)": [[132, "bosdyn.client.gps.aggregator_client.AggregatorClient.new_gps_data_async"]], "service_type (bosdyn.client.gps.aggregator_client.aggregatorclient attribute)": [[132, "bosdyn.client.gps.aggregator_client.AggregatorClient.service_type"]], "gpslistener (class in bosdyn.client.gps.gps_listener)": [[133, "bosdyn.client.gps.gps_listener.GpsListener"]], "log_throttle_time (bosdyn.client.gps.gps_listener.nmeastreamreader attribute)": [[133, "bosdyn.client.gps.gps_listener.NMEAStreamReader.LOG_THROTTLE_TIME"]], "nmeastreamreader (class in bosdyn.client.gps.gps_listener)": [[133, "bosdyn.client.gps.gps_listener.NMEAStreamReader"]], "bosdyn.client.gps.gps_listener": [[133, "module-bosdyn.client.gps.gps_listener"]], "read_data() (bosdyn.client.gps.gps_listener.nmeastreamreader method)": [[133, "bosdyn.client.gps.gps_listener.NMEAStreamReader.read_data"]], "run() (bosdyn.client.gps.gps_listener.gpslistener method)": [[133, "bosdyn.client.gps.gps_listener.GpsListener.run"]], "registrationclient (class in bosdyn.client.gps.registration_client)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient"]], "bosdyn.client.gps.registration_client": [[134, "module-bosdyn.client.gps.registration_client"]], "default_service_name (bosdyn.client.gps.registration_client.registrationclient attribute)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.default_service_name"]], "get_location() (bosdyn.client.gps.registration_client.registrationclient method)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.get_location"]], "get_location_async() (bosdyn.client.gps.registration_client.registrationclient method)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.get_location_async"]], "reset_registration() (bosdyn.client.gps.registration_client.registrationclient method)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.reset_registration"]], "reset_registration_async() (bosdyn.client.gps.registration_client.registrationclient method)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.reset_registration_async"]], "service_type (bosdyn.client.gps.registration_client.registrationclient attribute)": [[134, "bosdyn.client.gps.registration_client.RegistrationClient.service_type"]], "areacallbackmaperror": [[135, "bosdyn.client.graph_nav.AreaCallbackMapError"]], "cannotmodifymapduringrecordingerror": [[135, "bosdyn.client.graph_nav.CannotModifyMapDuringRecordingError"]], "commandexpirederror": [[135, "bosdyn.client.graph_nav.CommandExpiredError"]], "constraintfaulterror": [[135, "bosdyn.client.graph_nav.ConstraintFaultError"]], "featuredeserterror": [[135, "bosdyn.client.graph_nav.FeatureDesertError"]], "graphnavclient (class in bosdyn.client.graph_nav)": [[135, "bosdyn.client.graph_nav.GraphNavClient"]], "graphnavserviceresponseerror": [[135, "bosdyn.client.graph_nav.GraphNavServiceResponseError"]], "incompatiblesensorserror": [[135, "bosdyn.client.graph_nav.IncompatibleSensorsError"]], "invalidedgeerror": [[135, "bosdyn.client.graph_nav.InvalidEdgeError"]], "invalidgpserror": [[135, "bosdyn.client.graph_nav.InvalidGPSError"]], "invalidgrapherror": [[135, "bosdyn.client.graph_nav.InvalidGraphError"], [149, "bosdyn.client.map_processing.InvalidGraphError"]], "invalidposeerror": [[135, "bosdyn.client.graph_nav.InvalidPoseError"]], "isrecordingerror": [[135, "bosdyn.client.graph_nav.IsRecordingError"]], "maptoolargelicenseerror": [[135, "bosdyn.client.graph_nav.MapTooLargeLicenseError"], [159, "bosdyn.client.recording.MapTooLargeLicenseError"]], "noanchoringerror": [[135, "bosdyn.client.graph_nav.NoAnchoringError"]], "nopatherror": [[135, "bosdyn.client.graph_nav.NoPathError"]], "notimesyncerror": [[135, "bosdyn.client.graph_nav.NoTimeSyncError"], [161, "bosdyn.client.robot_command.NoTimeSyncError"]], "requestabortederror": [[135, "bosdyn.client.graph_nav.RequestAbortedError"]], "requestfailederror": [[135, "bosdyn.client.graph_nav.RequestFailedError"]], "robotfaultederror": [[135, "bosdyn.client.graph_nav.RobotFaultedError"]], "robotimpairederror": [[135, "bosdyn.client.graph_nav.RobotImpairedError"], [159, "bosdyn.client.recording.RobotImpairedError"]], "robotlosterror": [[135, "bosdyn.client.graph_nav.RobotLostError"]], "robotnotlocalizedtorouteerror": [[135, "bosdyn.client.graph_nav.RobotNotLocalizedToRouteError"]], "robotstateerror": [[135, "bosdyn.client.graph_nav.RobotStateError"]], "robotstuckerror": [[135, "bosdyn.client.graph_nav.RobotStuckError"]], "routeerror": [[135, "bosdyn.client.graph_nav.RouteError"]], "routenavigationerror": [[135, "bosdyn.client.graph_nav.RouteNavigationError"]], "routenotupdatingerror": [[135, "bosdyn.client.graph_nav.RouteNotUpdatingError"]], "timeerror": [[135, "bosdyn.client.graph_nav.TimeError"]], "toodistanterror": [[135, "bosdyn.client.graph_nav.TooDistantError"], [161, "bosdyn.client.robot_command.TooDistantError"]], "unknownmapinformationerror": [[135, "bosdyn.client.graph_nav.UnknownMapInformationError"]], "unknownrouteelementserror": [[135, "bosdyn.client.graph_nav.UnknownRouteElementsError"]], "unknownwaypointerror": [[135, "bosdyn.client.graph_nav.UnknownWaypointError"], [159, "bosdyn.client.recording.UnknownWaypointError"]], "unkownrouteelementserror": [[135, "bosdyn.client.graph_nav.UnkownRouteElementsError"]], "unrecognizedcommanderror": [[135, "bosdyn.client.graph_nav.UnrecognizedCommandError"]], "unrecongizedcommanderror": [[135, "bosdyn.client.graph_nav.UnrecongizedCommandError"]], "uploadgrapherror": [[135, "bosdyn.client.graph_nav.UploadGraphError"]], "uploadwaypointsnapshoterror": [[135, "bosdyn.client.graph_nav.UploadWaypointSnapshotError"]], "bosdyn.client.graph_nav": [[135, "module-bosdyn.client.graph_nav"]], "build_route() (bosdyn.client.graph_nav.graphnavclient static method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.build_route"]], "clear_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.clear_graph"]], "clear_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.clear_graph_async"]], "default_service_name (bosdyn.client.graph_nav.graphnavclient attribute)": [[135, "bosdyn.client.graph_nav.GraphNavClient.default_service_name"]], "download_edge_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.download_edge_snapshot"]], "download_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.download_graph"]], "download_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.download_graph_async"]], "download_waypoint_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.download_waypoint_snapshot"]], "generate_travel_params() (bosdyn.client.graph_nav.graphnavclient static method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.generate_travel_params"]], "get_localization_state() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.get_localization_state"]], "get_localization_state_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.get_localization_state_async"]], "navigate_route() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_route"]], "navigate_route_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_async"]], "navigate_route_full() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_full"]], "navigate_route_full_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_route_full_async"]], "navigate_to() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to"]], "navigate_to_anchor() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_anchor"]], "navigate_to_anchor_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_anchor_async"]], "navigate_to_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_async"]], "navigate_to_full() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_full"]], "navigate_to_full_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigate_to_full_async"]], "navigation_feedback() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigation_feedback"]], "navigation_feedback_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.navigation_feedback_async"]], "service_type (bosdyn.client.graph_nav.graphnavclient attribute)": [[135, "bosdyn.client.graph_nav.GraphNavClient.service_type"]], "set_localization() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.set_localization"]], "set_localization_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.set_localization_async"]], "set_localization_async_full_response() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.set_localization_async_full_response"]], "set_localization_full_response() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.set_localization_full_response"]], "update_from() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.update_from"]], "upload_edge_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.upload_edge_snapshot"]], "upload_graph() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.upload_graph"]], "upload_graph_async() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.upload_graph_async"]], "upload_waypoint_snapshot() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.upload_waypoint_snapshot"]], "write_graph_and_snapshots() (bosdyn.client.graph_nav.graphnavclient method)": [[135, "bosdyn.client.graph_nav.GraphNavClient.write_graph_and_snapshots"]], "grippercameraparamclient (class in bosdyn.client.gripper_camera_param)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient"]], "bosdyn.client.gripper_camera_param": [[136, "module-bosdyn.client.gripper_camera_param"]], "default_service_name (bosdyn.client.gripper_camera_param.grippercameraparamclient attribute)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.default_service_name"]], "get_camera_params() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.get_camera_params"]], "get_camera_params_async() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.get_camera_params_async"]], "service_type (bosdyn.client.gripper_camera_param.grippercameraparamclient attribute)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.service_type"]], "set_camera_params() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.set_camera_params"]], "set_camera_params_async() (bosdyn.client.gripper_camera_param.grippercameraparamclient method)": [[136, "bosdyn.client.gripper_camera_param.GripperCameraParamClient.set_camera_params_async"]], "imageclient (class in bosdyn.client.image)": [[137, "bosdyn.client.image.ImageClient"]], "imagedataerror": [[137, "bosdyn.client.image.ImageDataError"]], "imageresponseerror": [[137, "bosdyn.client.image.ImageResponseError"]], "sourcedataerror": [[137, "bosdyn.client.image.SourceDataError"], [155, "bosdyn.client.point_cloud.SourceDataError"]], "unknownimagesourceerror": [[137, "bosdyn.client.image.UnknownImageSourceError"]], "unsupportedimageformatrequestederror": [[137, "bosdyn.client.image.UnsupportedImageFormatRequestedError"]], "unsupportedpixelformatrequestederror": [[137, "bosdyn.client.image.UnsupportedPixelFormatRequestedError"]], "unsupportedresizeratiorequestederror": [[137, "bosdyn.client.image.UnsupportedResizeRatioRequestedError"]], "bosdyn.client.image": [[137, "module-bosdyn.client.image"]], "build_image_request() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.build_image_request"]], "default_service_name (bosdyn.client.image.imageclient attribute)": [[137, "bosdyn.client.image.ImageClient.default_service_name"]], "depth_image_to_pointcloud() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.depth_image_to_pointcloud"]], "get_image() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.get_image"]], "get_image_async() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.get_image_async"]], "get_image_from_sources() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.get_image_from_sources"]], "get_image_from_sources_async() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.get_image_from_sources_async"]], "list_image_sources() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.list_image_sources"]], "list_image_sources_async() (bosdyn.client.image.imageclient method)": [[137, "bosdyn.client.image.ImageClient.list_image_sources_async"]], "pixel_to_camera_space() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.pixel_to_camera_space"]], "save_images_as_files() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.save_images_as_files"]], "service_type (bosdyn.client.image.imageclient attribute)": [[137, "bosdyn.client.image.ImageClient.service_type"]], "write_image_data() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.write_image_data"]], "write_pgm_or_ppm() (in module bosdyn.client.image)": [[137, "bosdyn.client.image.write_pgm_or_ppm"]], "camerabaseimageservicer (class in bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.CameraBaseImageServicer"]], "camerainterface (class in bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.CameraInterface"]], "getimage() (bosdyn.client.image_service_helpers.camerabaseimageservicer method)": [[138, "bosdyn.client.image_service_helpers.CameraBaseImageServicer.GetImage"]], "imagecapturethread (class in bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread"]], "listimagesources() (bosdyn.client.image_service_helpers.camerabaseimageservicer method)": [[138, "bosdyn.client.image_service_helpers.CameraBaseImageServicer.ListImageSources"]], "threadcaptureoutput (class in bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.ThreadCaptureOutput"]], "visualimagesource (class in bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource"]], "blocking_capture() (bosdyn.client.image_service_helpers.camerainterface method)": [[138, "bosdyn.client.image_service_helpers.CameraInterface.blocking_capture"]], "bosdyn.client.image_service_helpers": [[138, "module-bosdyn.client.image_service_helpers"]], "clear_fault() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.clear_fault"]], "convert_rgb_to_grayscale() (in module bosdyn.client.image_service_helpers)": [[138, "bosdyn.client.image_service_helpers.convert_RGB_to_grayscale"]], "create_capture_thread() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.create_capture_thread"]], "get_image_and_timestamp() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.get_image_and_timestamp"]], "get_latest_captured_image() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread.get_latest_captured_image"]], "image_decode() (bosdyn.client.image_service_helpers.camerainterface method)": [[138, "bosdyn.client.image_service_helpers.CameraInterface.image_decode"]], "image_decode_with_error_checking() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.image_decode_with_error_checking"]], "initialize_faults() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.initialize_faults"]], "make_capture_parameters() (bosdyn.client.image_service_helpers.visualimagesource static method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.make_capture_parameters"]], "make_image_source() (bosdyn.client.image_service_helpers.visualimagesource static method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.make_image_source"]], "maybe_update_thread() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread.maybe_update_thread"]], "set_last_captured_image() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread.set_last_captured_image"]], "set_logger() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.set_logger"]], "start_capturing() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread.start_capturing"]], "stop_capturing() (bosdyn.client.image_service_helpers.imagecapturethread method)": [[138, "bosdyn.client.image_service_helpers.ImageCaptureThread.stop_capturing"]], "stop_capturing() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.stop_capturing"]], "trigger_fault() (bosdyn.client.image_service_helpers.visualimagesource method)": [[138, "bosdyn.client.image_service_helpers.VisualImageSource.trigger_fault"]], "inversekinematicsclient (class in bosdyn.client.inverse_kinematics)": [[139, "bosdyn.client.inverse_kinematics.InverseKinematicsClient"]], "bosdyn.client.inverse_kinematics": [[139, "module-bosdyn.client.inverse_kinematics"]], "default_service_name (bosdyn.client.inverse_kinematics.inversekinematicsclient attribute)": [[139, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.default_service_name"]], "inverse_kinematics() (bosdyn.client.inverse_kinematics.inversekinematicsclient method)": [[139, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.inverse_kinematics"]], "inverse_kinematics_async() (bosdyn.client.inverse_kinematics.inversekinematicsclient method)": [[139, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.inverse_kinematics_async"]], "service_type (bosdyn.client.inverse_kinematics.inversekinematicsclient attribute)": [[139, "bosdyn.client.inverse_kinematics.InverseKinematicsClient.service_type"]], "irenabledisableserviceclient (class in bosdyn.client.ir_enable_disable)": [[140, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient"]], "bosdyn.client.ir_enable_disable": [[140, "module-bosdyn.client.ir_enable_disable"]], "default_service_name (bosdyn.client.ir_enable_disable.irenabledisableserviceclient attribute)": [[140, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.default_service_name"]], "service_type (bosdyn.client.ir_enable_disable.irenabledisableserviceclient attribute)": [[140, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.service_type"]], "set_ir_enabled() (bosdyn.client.ir_enable_disable.irenabledisableserviceclient method)": [[140, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.set_ir_enabled"]], "set_ir_enabled_async() (bosdyn.client.ir_enable_disable.irenabledisableserviceclient method)": [[140, "bosdyn.client.ir_enable_disable.IREnableDisableServiceClient.set_ir_enabled_async"]], "invalidleaseerror": [[141, "bosdyn.client.keepalive.InvalidLeaseError"], [142, "bosdyn.client.lease.InvalidLeaseError"]], "invalidpolicyerror": [[141, "bosdyn.client.keepalive.InvalidPolicyError"]], "keepaliveclient (class in bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.KeepaliveClient"]], "keepaliveresponseerror": [[141, "bosdyn.client.keepalive.KeepaliveResponseError"]], "policy (class in bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.Policy"]], "policykeepalive (class in bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.PolicyKeepalive"]], "add_associated_lease() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_associated_lease"]], "add_auto_return_action() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_auto_return_action"]], "add_controlled_motors_off_action() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_controlled_motors_off_action"]], "add_immediate_robot_off_action() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_immediate_robot_off_action"]], "add_lease_stale_action() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_lease_stale_action"]], "add_record_event_action() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.add_record_event_action"]], "bosdyn.client.keepalive": [[141, "module-bosdyn.client.keepalive"]], "check_in() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.check_in"]], "check_in_async() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.check_in_async"]], "check_in_error() (in module bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.check_in_error"]], "default_service_name (bosdyn.client.keepalive.keepaliveclient attribute)": [[141, "bosdyn.client.keepalive.KeepaliveClient.default_service_name"]], "get_status() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.get_status"]], "get_status_async() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.get_status_async"]], "modify_policy() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.modify_policy"]], "modify_policy_async() (bosdyn.client.keepalive.keepaliveclient method)": [[141, "bosdyn.client.keepalive.KeepaliveClient.modify_policy_async"]], "modify_policy_error() (in module bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.modify_policy_error"]], "name (bosdyn.client.keepalive.policy property)": [[141, "bosdyn.client.keepalive.Policy.name"]], "remove_all_policies() (in module bosdyn.client.keepalive)": [[141, "bosdyn.client.keepalive.remove_all_policies"]], "remove_policy() (bosdyn.client.keepalive.policykeepalive method)": [[141, "bosdyn.client.keepalive.PolicyKeepalive.remove_policy"]], "service_type (bosdyn.client.keepalive.keepaliveclient attribute)": [[141, "bosdyn.client.keepalive.KeepaliveClient.service_type"]], "shortest_action_delay() (bosdyn.client.keepalive.policy method)": [[141, "bosdyn.client.keepalive.Policy.shortest_action_delay"]], "shutdown() (bosdyn.client.keepalive.policykeepalive method)": [[141, "bosdyn.client.keepalive.PolicyKeepalive.shutdown"]], "start() (bosdyn.client.keepalive.policykeepalive method)": [[141, "bosdyn.client.keepalive.PolicyKeepalive.start"]], "different_epochs (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.DIFFERENT_EPOCHS"]], "different_resources (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.DIFFERENT_RESOURCES"]], "displacedleaseerror": [[142, "bosdyn.client.lease.DisplacedLeaseError"]], "invalidresourceerror": [[142, "bosdyn.client.lease.InvalidResourceError"]], "lease (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.Lease"]], "lease.compareresult (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.Lease.CompareResult"]], "leaseclient (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseClient"]], "leasekeepalive (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseKeepAlive"]], "leasenotownedbywallet": [[142, "bosdyn.client.lease.LeaseNotOwnedByWallet"]], "leaseresponseerror": [[142, "bosdyn.client.lease.LeaseResponseError"]], "leasestate (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseState"]], "leasestate.status (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseState.Status"]], "leasewallet (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseWallet"]], "leasewalletrequestprocessor (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseWalletRequestProcessor"]], "leasewalletresponseprocessor (class in bosdyn.client.lease)": [[142, "bosdyn.client.lease.LeaseWalletResponseProcessor"]], "newer (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.NEWER"]], "not_managed (bosdyn.client.lease.leasestate.status attribute)": [[142, "bosdyn.client.lease.LeaseState.Status.NOT_MANAGED"]], "nosuchlease": [[142, "bosdyn.client.lease.NoSuchLease"]], "notactiveleaseerror": [[142, "bosdyn.client.lease.NotActiveLeaseError"]], "notauthoritativeserviceerror": [[142, "bosdyn.client.lease.NotAuthoritativeServiceError"]], "older (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.OLDER"]], "other_owner (bosdyn.client.lease.leasestate.status attribute)": [[142, "bosdyn.client.lease.LeaseState.Status.OTHER_OWNER"]], "revoked (bosdyn.client.lease.leasestate.status attribute)": [[142, "bosdyn.client.lease.LeaseState.Status.REVOKED"]], "resourcealreadyclaimederror": [[142, "bosdyn.client.lease.ResourceAlreadyClaimedError"]], "revokedleaseerror": [[142, "bosdyn.client.lease.RevokedLeaseError"]], "same (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.SAME"]], "self_owner (bosdyn.client.lease.leasestate.status attribute)": [[142, "bosdyn.client.lease.LeaseState.Status.SELF_OWNER"]], "status_not_managed (bosdyn.client.lease.leasestate attribute)": [[142, "bosdyn.client.lease.LeaseState.STATUS_NOT_MANAGED"]], "status_other_owner (bosdyn.client.lease.leasestate attribute)": [[142, "bosdyn.client.lease.LeaseState.STATUS_OTHER_OWNER"]], "status_revoked (bosdyn.client.lease.leasestate attribute)": [[142, "bosdyn.client.lease.LeaseState.STATUS_REVOKED"]], "status_self_owner (bosdyn.client.lease.leasestate attribute)": [[142, "bosdyn.client.lease.LeaseState.STATUS_SELF_OWNER"]], "status_unowned (bosdyn.client.lease.leasestate attribute)": [[142, "bosdyn.client.lease.LeaseState.STATUS_UNOWNED"]], "sub_lease (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.SUB_LEASE"]], "super_lease (bosdyn.client.lease.lease.compareresult attribute)": [[142, "bosdyn.client.lease.Lease.CompareResult.SUPER_LEASE"]], "unowned (bosdyn.client.lease.leasestate.status attribute)": [[142, "bosdyn.client.lease.LeaseState.Status.UNOWNED"]], "unmanagedresourceerror": [[142, "bosdyn.client.lease.UnmanagedResourceError"]], "wrongepocherror": [[142, "bosdyn.client.lease.WrongEpochError"]], "acquire() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.acquire"]], "acquire_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.acquire_async"]], "add() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.add"]], "add_lease_wallet_processors() (in module bosdyn.client.lease)": [[142, "bosdyn.client.lease.add_lease_wallet_processors"]], "advance() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.advance"]], "bosdyn.client.lease": [[142, "module-bosdyn.client.lease"]], "compare() (bosdyn.client.lease.lease method)": [[142, "bosdyn.client.lease.Lease.compare"]], "compare_result_to_lease_use_result_status() (bosdyn.client.lease.lease static method)": [[142, "bosdyn.client.lease.Lease.compare_result_to_lease_use_result_status"]], "create_newer() (bosdyn.client.lease.lease method)": [[142, "bosdyn.client.lease.Lease.create_newer"]], "create_newer() (bosdyn.client.lease.leasestate method)": [[142, "bosdyn.client.lease.LeaseState.create_newer"]], "create_sublease() (bosdyn.client.lease.lease method)": [[142, "bosdyn.client.lease.Lease.create_sublease"]], "default_service_name (bosdyn.client.lease.leaseclient attribute)": [[142, "bosdyn.client.lease.LeaseClient.default_service_name"]], "get_lease() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.get_lease"]], "get_lease_state() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.get_lease_state"]], "get_lease_state() (bosdyn.client.lease.leasewalletrequestprocessor static method)": [[142, "bosdyn.client.lease.LeaseWalletRequestProcessor.get_lease_state"]], "is_alive() (bosdyn.client.lease.leasekeepalive method)": [[142, "bosdyn.client.lease.LeaseKeepAlive.is_alive"]], "is_valid_lease() (bosdyn.client.lease.lease method)": [[142, "bosdyn.client.lease.Lease.is_valid_lease"]], "is_valid_proto() (bosdyn.client.lease.lease static method)": [[142, "bosdyn.client.lease.Lease.is_valid_proto"]], "lease_wallet (bosdyn.client.lease.leasekeepalive property)": [[142, "bosdyn.client.lease.LeaseKeepAlive.lease_wallet"]], "list_leases() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.list_leases"]], "list_leases_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.list_leases_async"]], "list_leases_full() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.list_leases_full"]], "list_leases_full_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.list_leases_full_async"]], "mutate() (bosdyn.client.lease.leasewalletrequestprocessor method)": [[142, "bosdyn.client.lease.LeaseWalletRequestProcessor.mutate"]], "mutate() (bosdyn.client.lease.leasewalletresponseprocessor method)": [[142, "bosdyn.client.lease.LeaseWalletResponseProcessor.mutate"]], "on_lease_use_result() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.on_lease_use_result"]], "remove() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.remove"]], "retain_lease() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.retain_lease"]], "retain_lease_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.retain_lease_async"]], "return_lease() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.return_lease"]], "return_lease_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.return_lease_async"]], "service_type (bosdyn.client.lease.leaseclient attribute)": [[142, "bosdyn.client.lease.LeaseClient.service_type"]], "set_client_name() (bosdyn.client.lease.leasewallet method)": [[142, "bosdyn.client.lease.LeaseWallet.set_client_name"]], "shutdown() (bosdyn.client.lease.leasekeepalive method)": [[142, "bosdyn.client.lease.LeaseKeepAlive.shutdown"]], "take() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.take"]], "take_async() (bosdyn.client.lease.leaseclient method)": [[142, "bosdyn.client.lease.LeaseClient.take_async"]], "test_active_lease() (in module bosdyn.client.lease)": [[142, "bosdyn.client.lease.test_active_lease"]], "update_from_lease_use_result() (bosdyn.client.lease.leasestate method)": [[142, "bosdyn.client.lease.LeaseState.update_from_lease_use_result"]], "wait_until_done() (bosdyn.client.lease.leasekeepalive method)": [[142, "bosdyn.client.lease.LeaseKeepAlive.wait_until_done"]], "resourcehierarchy (class in bosdyn.client.lease_resource_hierarchy)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy"]], "bosdyn.client.lease_resource_hierarchy": [[143, "module-bosdyn.client.lease_resource_hierarchy"]], "get_hierarchy() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_hierarchy"]], "get_resource() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_resource"]], "get_resource_tree() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.get_resource_tree"]], "has_resource() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.has_resource"]], "has_sub_resources() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.has_sub_resources"]], "leaf_resources() (bosdyn.client.lease_resource_hierarchy.resourcehierarchy method)": [[143, "bosdyn.client.lease_resource_hierarchy.ResourceHierarchy.leaf_resources"]], "leasevalidator (class in bosdyn.client.lease_validator)": [[144, "bosdyn.client.lease_validator.LeaseValidator"]], "leasevalidatorresponseprocessor (class in bosdyn.client.lease_validator)": [[144, "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor"]], "bosdyn.client.lease_validator": [[144, "module-bosdyn.client.lease_validator"]], "get_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[144, "bosdyn.client.lease_validator.LeaseValidator.get_active_lease"]], "mutate() (bosdyn.client.lease_validator.leasevalidatorresponseprocessor method)": [[144, "bosdyn.client.lease_validator.LeaseValidatorResponseProcessor.mutate"]], "test_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[144, "bosdyn.client.lease_validator.LeaseValidator.test_active_lease"]], "test_and_set_active_lease() (bosdyn.client.lease_validator.leasevalidator method)": [[144, "bosdyn.client.lease_validator.LeaseValidator.test_and_set_active_lease"]], "licenseclient (class in bosdyn.client.license)": [[145, "bosdyn.client.license.LicenseClient"]], "bosdyn.client.license": [[145, "module-bosdyn.client.license"]], "default_service_name (bosdyn.client.license.licenseclient attribute)": [[145, "bosdyn.client.license.LicenseClient.default_service_name"]], "get_feature_enabled() (bosdyn.client.license.licenseclient method)": [[145, "bosdyn.client.license.LicenseClient.get_feature_enabled"]], "get_license_info() (bosdyn.client.license.licenseclient method)": [[145, "bosdyn.client.license.LicenseClient.get_license_info"]], "service_type (bosdyn.client.license.licenseclient attribute)": [[145, "bosdyn.client.license.LicenseClient.service_type"]], "localgridclient (class in bosdyn.client.local_grid)": [[146, "bosdyn.client.local_grid.LocalGridClient"]], "bosdyn.client.local_grid": [[146, "module-bosdyn.client.local_grid"]], "default_service_name (bosdyn.client.local_grid.localgridclient attribute)": [[146, "bosdyn.client.local_grid.LocalGridClient.default_service_name"]], "get_local_grid_types() (bosdyn.client.local_grid.localgridclient method)": [[146, "bosdyn.client.local_grid.LocalGridClient.get_local_grid_types"]], "get_local_grid_types_async() (bosdyn.client.local_grid.localgridclient method)": [[146, "bosdyn.client.local_grid.LocalGridClient.get_local_grid_types_async"]], "get_local_grids() (bosdyn.client.local_grid.localgridclient method)": [[146, "bosdyn.client.local_grid.LocalGridClient.get_local_grids"]], "get_local_grids_async() (bosdyn.client.local_grid.localgridclient method)": [[146, "bosdyn.client.local_grid.LocalGridClient.get_local_grids_async"]], "service_type (bosdyn.client.local_grid.localgridclient attribute)": [[146, "bosdyn.client.local_grid.LocalGridClient.service_type"]], "concurrencylimitreachederror": [[147, "bosdyn.client.log_status.ConcurrencyLimitReachedError"]], "experimentalreadyrunningerror": [[147, "bosdyn.client.log_status.ExperimentAlreadyRunningError"]], "inactivelogerror": [[147, "bosdyn.client.log_status.InactiveLogError"]], "logstatusclient (class in bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.LogStatusClient"]], "logstatusresponseerror": [[147, "bosdyn.client.log_status.LogStatusResponseError"]], "bosdyn.client.log_status": [[147, "module-bosdyn.client.log_status"]], "default_service_name (bosdyn.client.log_status.logstatusclient attribute)": [[147, "bosdyn.client.log_status.LogStatusClient.default_service_name"]], "get_active_log_statuses() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.get_active_log_statuses"]], "get_active_log_statuses_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.get_active_log_statuses_async"]], "get_active_log_statuses_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.get_active_log_statuses_error"]], "get_log_status() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.get_log_status"]], "get_log_status_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.get_log_status_async"]], "get_log_status_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.get_log_status_error"]], "service_type (bosdyn.client.log_status.logstatusclient attribute)": [[147, "bosdyn.client.log_status.LogStatusClient.service_type"]], "start_experiment_log() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.start_experiment_log"]], "start_experiment_log_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.start_experiment_log_async"]], "start_experiment_log_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.start_experiment_log_error"]], "start_retro_log() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.start_retro_log"]], "start_retro_log_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.start_retro_log_async"]], "start_retro_log_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.start_retro_log_error"]], "terminate_log() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.terminate_log"]], "terminate_log_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.terminate_log_async"]], "terminate_log_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.terminate_log_error"]], "update_experiment() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.update_experiment"]], "update_experiment_async() (bosdyn.client.log_status.logstatusclient method)": [[147, "bosdyn.client.log_status.LogStatusClient.update_experiment_async"]], "update_experiment_log_error() (in module bosdyn.client.log_status)": [[147, "bosdyn.client.log_status.update_experiment_log_error"]], "manipulationapiclient (class in bosdyn.client.manipulation_api_client)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient"]], "bosdyn.client.manipulation_api_client": [[148, "module-bosdyn.client.manipulation_api_client"]], "default_service_name (bosdyn.client.manipulation_api_client.manipulationapiclient attribute)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.default_service_name"]], "grasp_override_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.grasp_override_command"]], "grasp_override_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.grasp_override_command_async"]], "manipulation_api_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_command"]], "manipulation_api_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_command_async"]], "manipulation_api_feedback_command() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_feedback_command"]], "manipulation_api_feedback_command_async() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.manipulation_api_feedback_command_async"]], "service_type (bosdyn.client.manipulation_api_client.manipulationapiclient attribute)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.service_type"]], "update_from() (bosdyn.client.manipulation_api_client.manipulationapiclient method)": [[148, "bosdyn.client.manipulation_api_client.ManipulationApiClient.update_from"]], "constraintviolationerror": [[149, "bosdyn.client.map_processing.ConstraintViolationError"]], "invalidgravityalignmenterror": [[149, "bosdyn.client.map_processing.InvalidGravityAlignmentError"]], "invalidhintserror": [[149, "bosdyn.client.map_processing.InvalidHintsError"]], "invalidparamserror": [[149, "bosdyn.client.map_processing.InvalidParamsError"]], "mapmodifiederror": [[149, "bosdyn.client.map_processing.MapModifiedError"]], "mapprocessingserviceclient (class in bosdyn.client.map_processing)": [[149, "bosdyn.client.map_processing.MapProcessingServiceClient"]], "mapprocessingserviceresponseerror": [[149, "bosdyn.client.map_processing.MapProcessingServiceResponseError"]], "maxiterationserror": [[149, "bosdyn.client.map_processing.MaxIterationsError"]], "maxtimeerror": [[149, "bosdyn.client.map_processing.MaxTimeError"]], "missingsnapshotserror": [[149, "bosdyn.client.map_processing.MissingSnapshotsError"]], "optimizationfailureerror": [[149, "bosdyn.client.map_processing.OptimizationFailureError"]], "bosdyn.client.map_processing": [[149, "module-bosdyn.client.map_processing"]], "default_service_name (bosdyn.client.map_processing.mapprocessingserviceclient attribute)": [[149, "bosdyn.client.map_processing.MapProcessingServiceClient.default_service_name"]], "process_anchoring() (bosdyn.client.map_processing.mapprocessingserviceclient method)": [[149, "bosdyn.client.map_processing.MapProcessingServiceClient.process_anchoring"]], "process_topology() (bosdyn.client.map_processing.mapprocessingserviceclient method)": [[149, "bosdyn.client.map_processing.MapProcessingServiceClient.process_topology"]], "service_type (bosdyn.client.map_processing.mapprocessingserviceclient attribute)": [[149, "bosdyn.client.map_processing.MapProcessingServiceClient.service_type"]], "quat (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.Quat"]], "se2pose (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.SE2Pose"]], "se2velocity (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.SE2Velocity"]], "se3pose (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.SE3Pose"]], "se3velocity (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.SE3Velocity"]], "vec2 (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.Vec2"]], "vec3 (class in bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.Vec3"]], "angle_diff() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.angle_diff"]], "angle_diff_degrees() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.angle_diff_degrees"]], "angular (bosdyn.client.math_helpers.se2velocity property)": [[150, "bosdyn.client.math_helpers.SE2Velocity.angular"]], "angular (bosdyn.client.math_helpers.se3velocity property)": [[150, "bosdyn.client.math_helpers.SE3Velocity.angular"]], "bosdyn.client.math_helpers": [[150, "module-bosdyn.client.math_helpers"]], "closest_yaw_only_quaternion() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.closest_yaw_only_quaternion"]], "conj() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.conj"]], "cross() (bosdyn.client.math_helpers.vec2 method)": [[150, "bosdyn.client.math_helpers.Vec2.cross"]], "cross() (bosdyn.client.math_helpers.vec3 method)": [[150, "bosdyn.client.math_helpers.Vec3.cross"]], "dot() (bosdyn.client.math_helpers.vec2 method)": [[150, "bosdyn.client.math_helpers.Vec2.dot"]], "dot() (bosdyn.client.math_helpers.vec3 method)": [[150, "bosdyn.client.math_helpers.Vec3.dot"]], "flatten() (bosdyn.client.math_helpers.se2pose static method)": [[150, "bosdyn.client.math_helpers.SE2Pose.flatten"]], "from_identity() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.from_identity"]], "from_matrix() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_matrix"]], "from_matrix() (bosdyn.client.math_helpers.se2pose static method)": [[150, "bosdyn.client.math_helpers.SE2Pose.from_matrix"]], "from_matrix() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.from_matrix"]], "from_numpy() (bosdyn.client.math_helpers.vec3 static method)": [[150, "bosdyn.client.math_helpers.Vec3.from_numpy"]], "from_obj() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se2pose static method)": [[150, "bosdyn.client.math_helpers.SE2Pose.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se2velocity static method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.from_obj"]], "from_obj() (bosdyn.client.math_helpers.se3velocity static method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.from_obj"]], "from_pitch() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_pitch"]], "from_proto() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se2pose static method)": [[150, "bosdyn.client.math_helpers.SE2Pose.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se2velocity static method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.from_proto"]], "from_proto() (bosdyn.client.math_helpers.se3velocity static method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.from_proto"]], "from_proto() (bosdyn.client.math_helpers.vec2 static method)": [[150, "bosdyn.client.math_helpers.Vec2.from_proto"]], "from_proto() (bosdyn.client.math_helpers.vec3 static method)": [[150, "bosdyn.client.math_helpers.Vec3.from_proto"]], "from_roll() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_roll"]], "from_se2() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.from_se2"]], "from_two_vectors() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_two_vectors"]], "from_vector() (bosdyn.client.math_helpers.se2velocity static method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.from_vector"]], "from_vector() (bosdyn.client.math_helpers.se3velocity static method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.from_vector"]], "from_yaw() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.from_yaw"]], "get_closest_se2_transform() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.get_closest_se2_transform"]], "get_closest_se3_transform() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.get_closest_se3_transform"]], "get_translation() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.get_translation"]], "interp() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.interp"]], "inverse() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.inverse"]], "inverse() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.inverse"]], "inverse() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.inverse"]], "is_within_threshold() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.is_within_threshold"]], "length() (bosdyn.client.math_helpers.vec2 method)": [[150, "bosdyn.client.math_helpers.Vec2.length"]], "length() (bosdyn.client.math_helpers.vec3 method)": [[150, "bosdyn.client.math_helpers.Vec3.length"]], "linear (bosdyn.client.math_helpers.se2velocity property)": [[150, "bosdyn.client.math_helpers.SE2Velocity.linear"]], "linear (bosdyn.client.math_helpers.se3velocity property)": [[150, "bosdyn.client.math_helpers.SE3Velocity.linear"]], "mult() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.mult"]], "mult() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.mult"]], "mult() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.mult"]], "normalize() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.normalize"]], "pose_to_xyz_yaw() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.pose_to_xyz_yaw"]], "position (bosdyn.client.math_helpers.se2pose property)": [[150, "bosdyn.client.math_helpers.SE2Pose.position"]], "position (bosdyn.client.math_helpers.se3pose property)": [[150, "bosdyn.client.math_helpers.SE3Pose.position"]], "quat_to_eulerzyx() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.quat_to_eulerZYX"]], "recenter_angle() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.recenter_angle"]], "recenter_angle_mod() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.recenter_angle_mod"]], "recenter_value_mod() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.recenter_value_mod"]], "rotation (bosdyn.client.math_helpers.se3pose property)": [[150, "bosdyn.client.math_helpers.SE3Pose.rotation"]], "skew_matrix_2d() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.skew_matrix_2d"]], "skew_matrix_3d() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.skew_matrix_3d"]], "slerp() (bosdyn.client.math_helpers.quat static method)": [[150, "bosdyn.client.math_helpers.Quat.slerp"]], "to_adjoint_matrix() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.to_adjoint_matrix"]], "to_adjoint_matrix() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.to_adjoint_matrix"]], "to_axis_angle() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_axis_angle"]], "to_matrix() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_matrix"]], "to_matrix() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.to_matrix"]], "to_matrix() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.to_matrix"]], "to_numpy() (bosdyn.client.math_helpers.vec3 method)": [[150, "bosdyn.client.math_helpers.Vec3.to_numpy"]], "to_obj() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se2velocity method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.to_obj"]], "to_obj() (bosdyn.client.math_helpers.se3velocity method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.to_obj"]], "to_pitch() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_pitch"]], "to_proto() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se2velocity method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.to_proto"]], "to_proto() (bosdyn.client.math_helpers.se3velocity method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.to_proto"]], "to_proto() (bosdyn.client.math_helpers.vec2 method)": [[150, "bosdyn.client.math_helpers.Vec2.to_proto"]], "to_proto() (bosdyn.client.math_helpers.vec3 method)": [[150, "bosdyn.client.math_helpers.Vec3.to_proto"]], "to_roll() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_roll"]], "to_rot_matrix() (bosdyn.client.math_helpers.se2pose method)": [[150, "bosdyn.client.math_helpers.SE2Pose.to_rot_matrix"]], "to_vector() (bosdyn.client.math_helpers.se2velocity method)": [[150, "bosdyn.client.math_helpers.SE2Velocity.to_vector"]], "to_vector() (bosdyn.client.math_helpers.se3velocity method)": [[150, "bosdyn.client.math_helpers.SE3Velocity.to_vector"]], "to_yaw() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.to_yaw"]], "transform_cloud() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.transform_cloud"]], "transform_cloud_from_matrix() (bosdyn.client.math_helpers.se3pose static method)": [[150, "bosdyn.client.math_helpers.SE3Pose.transform_cloud_from_matrix"]], "transform_point() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.transform_point"]], "transform_point() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.transform_point"]], "transform_se2velocity() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.transform_se2velocity"]], "transform_se3velocity() (in module bosdyn.client.math_helpers)": [[150, "bosdyn.client.math_helpers.transform_se3velocity"]], "transform_vec3() (bosdyn.client.math_helpers.quat method)": [[150, "bosdyn.client.math_helpers.Quat.transform_vec3"]], "transform_vec3() (bosdyn.client.math_helpers.se3pose method)": [[150, "bosdyn.client.math_helpers.SE3Pose.transform_vec3"]], "metricsloggingclient (class in bosdyn.client.metrics_logging)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient"]], "missingkeyserror": [[151, "bosdyn.client.metrics_logging.MissingKeysError"]], "unabletooptouterror": [[151, "bosdyn.client.metrics_logging.UnableToOptOutError"]], "bosdyn.client.metrics_logging": [[151, "module-bosdyn.client.metrics_logging"]], "default_service_name (bosdyn.client.metrics_logging.metricsloggingclient attribute)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.default_service_name"]], "get_absolute_metric_snapshot() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_absolute_metric_snapshot"]], "get_absolute_metric_snapshot_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_absolute_metric_snapshot_async"]], "get_metrics() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_metrics"]], "get_metrics_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_metrics_async"]], "get_store_sequence_range() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_store_sequence_range"]], "get_store_sequence_range_async() (bosdyn.client.metrics_logging.metricsloggingclient method)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.get_store_sequence_range_async"]], "make_parameter_update() (in module bosdyn.client.metrics_logging)": [[151, "bosdyn.client.metrics_logging.make_parameter_update"]], "service_type (bosdyn.client.metrics_logging.metricsloggingclient attribute)": [[151, "bosdyn.client.metrics_logging.MetricsLoggingClient.service_type"]], "externalservererror": [[152, "bosdyn.client.network_compute_bridge_client.ExternalServerError"]], "externalservicenotfounderror": [[152, "bosdyn.client.network_compute_bridge_client.ExternalServiceNotFoundError"]], "networkcomputeanalysisfailederror": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeAnalysisFailedError"]], "networkcomputebridgeclient (class in bosdyn.client.network_compute_bridge_client)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient"]], "networkcomputerotationerror": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeRotationError"]], "bosdyn.client.network_compute_bridge_client": [[152, "module-bosdyn.client.network_compute_bridge_client"]], "default_service_name (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient attribute)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.default_service_name"]], "list_available_models() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models"]], "list_available_models_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_async"]], "list_available_models_command() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_command"]], "list_available_models_command_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.list_available_models_command_async"]], "network_compute_bridge_command() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.network_compute_bridge_command"]], "network_compute_bridge_command_async() (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient method)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.network_compute_bridge_command_async"]], "service_type (bosdyn.client.network_compute_bridge_client.networkcomputebridgeclient attribute)": [[152, "bosdyn.client.network_compute_bridge_client.NetworkComputeBridgeClient.service_type"]], "payloadclient (class in bosdyn.client.payload)": [[153, "bosdyn.client.payload.PayloadClient"]], "bosdyn.client.payload": [[153, "module-bosdyn.client.payload"]], "default_service_name (bosdyn.client.payload.payloadclient attribute)": [[153, "bosdyn.client.payload.PayloadClient.default_service_name"]], "list_payloads() (bosdyn.client.payload.payloadclient method)": [[153, "bosdyn.client.payload.PayloadClient.list_payloads"]], "list_payloads_async() (bosdyn.client.payload.payloadclient method)": [[153, "bosdyn.client.payload.PayloadClient.list_payloads_async"]], "service_type (bosdyn.client.payload.payloadclient attribute)": [[153, "bosdyn.client.payload.PayloadClient.service_type"]], "invalidpayloadcredentialserror": [[154, "bosdyn.client.payload_registration.InvalidPayloadCredentialsError"]], "payloadalreadyexistserror": [[154, "bosdyn.client.payload_registration.PayloadAlreadyExistsError"]], "payloaddoesnotexisterror": [[154, "bosdyn.client.payload_registration.PayloadDoesNotExistError"]], "payloadnotauthorizederror": [[154, "bosdyn.client.payload_registration.PayloadNotAuthorizedError"]], "payloadregistrationclient (class in bosdyn.client.payload_registration)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient"]], "payloadregistrationkeepalive (class in bosdyn.client.payload_registration)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive"]], "payloadregistrationresponseerror": [[154, "bosdyn.client.payload_registration.PayloadRegistrationResponseError"]], "attach_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.attach_payload"]], "attach_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.attach_payload_async"]], "bosdyn.client.payload_registration": [[154, "module-bosdyn.client.payload_registration"]], "default_service_name (bosdyn.client.payload_registration.payloadregistrationclient attribute)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.default_service_name"]], "detach_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.detach_payload"]], "detach_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.detach_payload_async"]], "get_payload_auth_token() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.get_payload_auth_token"]], "is_alive() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.is_alive"]], "register_payload() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.register_payload"]], "register_payload_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.register_payload_async"]], "service_type (bosdyn.client.payload_registration.payloadregistrationclient attribute)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.service_type"]], "shutdown() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.shutdown"]], "start() (bosdyn.client.payload_registration.payloadregistrationkeepalive method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationKeepAlive.start"]], "update_payload_version() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.update_payload_version"]], "update_payload_version_async() (bosdyn.client.payload_registration.payloadregistrationclient method)": [[154, "bosdyn.client.payload_registration.PayloadRegistrationClient.update_payload_version_async"]], "pointcloudclient (class in bosdyn.client.point_cloud)": [[155, "bosdyn.client.point_cloud.PointCloudClient"]], "pointclouddataerror": [[155, "bosdyn.client.point_cloud.PointCloudDataError"]], "pointcloudresponseerror": [[155, "bosdyn.client.point_cloud.PointCloudResponseError"]], "unknownpointcloudsourceerror": [[155, "bosdyn.client.point_cloud.UnknownPointCloudSourceError"]], "bosdyn.client.point_cloud": [[155, "module-bosdyn.client.point_cloud"]], "build_pc_request() (in module bosdyn.client.point_cloud)": [[155, "bosdyn.client.point_cloud.build_pc_request"]], "default_service_name (bosdyn.client.point_cloud.pointcloudclient attribute)": [[155, "bosdyn.client.point_cloud.PointCloudClient.default_service_name"]], "get_point_cloud() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud"]], "get_point_cloud_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_async"]], "get_point_cloud_from_sources() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_from_sources"]], "get_point_cloud_from_sources_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.get_point_cloud_from_sources_async"]], "list_point_cloud_sources() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.list_point_cloud_sources"]], "list_point_cloud_sources_async() (bosdyn.client.point_cloud.pointcloudclient method)": [[155, "bosdyn.client.point_cloud.PointCloudClient.list_point_cloud_sources_async"]], "service_type (bosdyn.client.point_cloud.pointcloudclient attribute)": [[155, "bosdyn.client.point_cloud.PointCloudClient.service_type"]], "batterymissingerror": [[156, "bosdyn.client.power.BatteryMissingError"]], "commandinprogresserror": [[156, "bosdyn.client.power.CommandInProgressError"]], "commandtimedouterror": [[156, "bosdyn.client.power.CommandTimedOutError"], [161, "bosdyn.client.robot_command.CommandTimedOutError"]], "estoppederror": [[156, "bosdyn.client.power.EstoppedError"]], "fancontroltemperatureerror": [[156, "bosdyn.client.power.FanControlTemperatureError"]], "faultederror": [[156, "bosdyn.client.power.FaultedError"]], "keepalivemotorsofferror": [[156, "bosdyn.client.power.KeepaliveMotorsOffError"]], "overriddenerror": [[156, "bosdyn.client.power.OverriddenError"]], "powerclient (class in bosdyn.client.power)": [[156, "bosdyn.client.power.PowerClient"]], "powererror": [[156, "bosdyn.client.power.PowerError"]], "powerresponseerror": [[156, "bosdyn.client.power.PowerResponseError"]], "safetystopfailederror": [[156, "bosdyn.client.power.SafetyStopFailedError"]], "safetystopincompatiblehardwareerror": [[156, "bosdyn.client.power.SafetyStopIncompatibleHardwareError"]], "safetystopunknownstoptypeerror": [[156, "bosdyn.client.power.SafetyStopUnknownStopTypeError"]], "shorepowerconnectederror": [[156, "bosdyn.client.power.ShorePowerConnectedError"]], "bosdyn.client.power": [[156, "module-bosdyn.client.power"]], "default_service_name (bosdyn.client.power.powerclient attribute)": [[156, "bosdyn.client.power.PowerClient.default_service_name"]], "fan_power_command() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.fan_power_command"]], "fan_power_command_async() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.fan_power_command_async"]], "fan_power_command_feedback() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.fan_power_command_feedback"]], "fan_power_command_feedback_async() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.fan_power_command_feedback_async"]], "is_powered_on() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.is_powered_on"]], "power_command() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.power_command"]], "power_command_async() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.power_command_async"]], "power_command_feedback() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.power_command_feedback"]], "power_command_feedback_async() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.power_command_feedback_async"]], "power_cycle_robot() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_cycle_robot"]], "power_off() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_off"]], "power_off_motors() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_off_motors"]], "power_off_payload_ports() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_off_payload_ports"]], "power_off_robot() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_off_robot"]], "power_off_wifi_radio() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_off_wifi_radio"]], "power_on() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_on"]], "power_on_motors() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_on_motors"]], "power_on_payload_ports() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_on_payload_ports"]], "power_on_wifi_radio() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.power_on_wifi_radio"]], "reset_safety_stop() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.reset_safety_stop"]], "reset_safety_stop_async() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.reset_safety_stop_async"]], "safe_power_cycle_robot() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.safe_power_cycle_robot"]], "safe_power_off() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.safe_power_off"]], "safe_power_off_motors() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.safe_power_off_motors"]], "safe_power_off_robot() (in module bosdyn.client.power)": [[156, "bosdyn.client.power.safe_power_off_robot"]], "service_type (bosdyn.client.power.powerclient attribute)": [[156, "bosdyn.client.power.PowerClient.service_type"]], "update_from() (bosdyn.client.power.powerclient method)": [[156, "bosdyn.client.power.PowerClient.update_from"]], "addrequestheader (class in bosdyn.client.processors)": [[157, "bosdyn.client.processors.AddRequestHeader"]], "bosdyn.client.processors": [[157, "module-bosdyn.client.processors"]], "mutate() (bosdyn.client.processors.addrequestheader method)": [[157, "bosdyn.client.processors.AddRequestHeader.mutate"]], "invalidintersectiontypeerror": [[158, "bosdyn.client.ray_cast.InvalidIntersectionTypeError"]], "raycastclient (class in bosdyn.client.ray_cast)": [[158, "bosdyn.client.ray_cast.RayCastClient"]], "raycastresponseerror": [[158, "bosdyn.client.ray_cast.RayCastResponseError"]], "unknownframeerror": [[158, "bosdyn.client.ray_cast.UnknownFrameError"], [161, "bosdyn.client.robot_command.UnknownFrameError"]], "bosdyn.client.ray_cast": [[158, "module-bosdyn.client.ray_cast"]], "default_authority (bosdyn.client.ray_cast.raycastclient attribute)": [[158, "bosdyn.client.ray_cast.RayCastClient.default_authority"]], "default_service_name (bosdyn.client.ray_cast.raycastclient attribute)": [[158, "bosdyn.client.ray_cast.RayCastClient.default_service_name"]], "raycast() (bosdyn.client.ray_cast.raycastclient method)": [[158, "bosdyn.client.ray_cast.RayCastClient.raycast"]], "raycast_async() (bosdyn.client.ray_cast.raycastclient method)": [[158, "bosdyn.client.ray_cast.RayCastClient.raycast_async"]], "service_type (bosdyn.client.ray_cast.raycastclient attribute)": [[158, "bosdyn.client.ray_cast.RayCastClient.service_type"]], "circle_region (bosdyn.client.recording.waypointregion attribute)": [[159, "bosdyn.client.recording.WaypointRegion.CIRCLE_REGION"]], "couldnotcreatewaypointerror": [[159, "bosdyn.client.recording.CouldNotCreateWaypointError"]], "default_region (bosdyn.client.recording.waypointregion attribute)": [[159, "bosdyn.client.recording.WaypointRegion.DEFAULT_REGION"]], "empty_region (bosdyn.client.recording.waypointregion attribute)": [[159, "bosdyn.client.recording.WaypointRegion.EMPTY_REGION"]], "edgeexistserror": [[159, "bosdyn.client.recording.EdgeExistsError"]], "edgemissingtransformerror": [[159, "bosdyn.client.recording.EdgeMissingTransformError"]], "fiducialposeerror": [[159, "bosdyn.client.recording.FiducialPoseError"]], "followingrouteerror": [[159, "bosdyn.client.recording.FollowingRouteError"]], "graphnavrecordingserviceclient (class in bosdyn.client.recording)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient"]], "missingfiducialserror": [[159, "bosdyn.client.recording.MissingFiducialsError"]], "notlocalizedtoenderror": [[159, "bosdyn.client.recording.NotLocalizedToEndError"]], "notlocalizedtoexistingmaperror": [[159, "bosdyn.client.recording.NotLocalizedToExistingMapError"]], "notreadyyeterror": [[159, "bosdyn.client.recording.NotReadyYetError"]], "notrecordingerror": [[159, "bosdyn.client.recording.NotRecordingError"]], "recordingserviceresponseerror": [[159, "bosdyn.client.recording.RecordingServiceResponseError"]], "remotecloudfailurenodataerror": [[159, "bosdyn.client.recording.RemoteCloudFailureNoDataError"]], "remotecloudfailurenotindirectoryerror": [[159, "bosdyn.client.recording.RemoteCloudFailureNotInDirectoryError"]], "toofarfromexistingmaperror": [[159, "bosdyn.client.recording.TooFarFromExistingMapError"]], "waypointregion (class in bosdyn.client.recording)": [[159, "bosdyn.client.recording.WaypointRegion"]], "bosdyn.client.recording": [[159, "module-bosdyn.client.recording"]], "create_edge() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_edge"]], "create_edge_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_edge_async"]], "create_waypoint() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_waypoint"]], "create_waypoint_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.create_waypoint_async"]], "default_service_name (bosdyn.client.recording.graphnavrecordingserviceclient attribute)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.default_service_name"]], "get_record_status() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.get_record_status"]], "get_record_status_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.get_record_status_async"]], "make_client_metadata() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_client_metadata"]], "make_edge() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_edge"]], "make_edge_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_edge_environment"]], "make_recording_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_recording_environment"]], "make_waypoint_environment() (bosdyn.client.recording.graphnavrecordingserviceclient static method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.make_waypoint_environment"]], "service_type (bosdyn.client.recording.graphnavrecordingserviceclient attribute)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.service_type"]], "set_recording_environment() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.set_recording_environment"]], "set_recording_environment_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.set_recording_environment_async"]], "start_recording() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording"]], "start_recording_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_async"]], "start_recording_full() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_full"]], "start_recording_full_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.start_recording_full_async"]], "stop_recording() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.stop_recording"]], "stop_recording_async() (bosdyn.client.recording.graphnavrecordingserviceclient method)": [[159, "bosdyn.client.recording.GraphNavRecordingServiceClient.stop_recording_async"]], "robot (class in bosdyn.client.robot)": [[160, "bosdyn.client.robot.Robot"]], "roboterror": [[160, "bosdyn.client.robot.RobotError"]], "unregisteredserviceerror": [[160, "bosdyn.client.robot.UnregisteredServiceError"]], "unregisteredservicenameerror": [[160, "bosdyn.client.robot.UnregisteredServiceNameError"]], "unregisteredservicetypeerror": [[160, "bosdyn.client.robot.UnregisteredServiceTypeError"]], "authenticate() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.authenticate"]], "authenticate_from_cache() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.authenticate_from_cache"]], "authenticate_from_payload_credentials() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.authenticate_from_payload_credentials"]], "authenticate_with_token() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.authenticate_with_token"]], "bosdyn.client.robot": [[160, "module-bosdyn.client.robot"]], "ensure_channel() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.ensure_channel"]], "ensure_client() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.ensure_client"]], "ensure_secure_channel() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.ensure_secure_channel"]], "get_cached_hardware_hardware_configuration() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.get_cached_hardware_hardware_configuration"]], "get_cached_robot_id() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.get_cached_robot_id"]], "get_cached_usernames() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.get_cached_usernames"]], "get_frame_tree_snapshot() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.get_frame_tree_snapshot"]], "get_id() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.get_id"]], "has_arm() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.has_arm"]], "host (bosdyn.client.robot.robot property)": [[160, "bosdyn.client.robot.Robot.host"]], "is_estopped() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.is_estopped"]], "is_powered_on() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.is_powered_on"]], "list_services() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.list_services"]], "log_event() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.log_event"]], "operator_comment() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.operator_comment"]], "power_off() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.power_off"]], "power_on() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.power_on"]], "register_payload_and_authenticate() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.register_payload_and_authenticate"]], "setup_token_cache() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.setup_token_cache"]], "shutdown() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.shutdown"]], "start_time_sync() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.start_time_sync"]], "stop_time_sync() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.stop_time_sync"]], "sync_with_directory() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.sync_with_directory"]], "sync_with_services_list() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.sync_with_services_list"]], "time_sec() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.time_sec"]], "time_sync (bosdyn.client.robot.robot property)": [[160, "bosdyn.client.robot.Robot.time_sync"]], "update_from() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.update_from"]], "update_secure_channel_port() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.update_secure_channel_port"]], "update_user_token() (bosdyn.client.robot.robot method)": [[160, "bosdyn.client.robot.Robot.update_user_token"]], "behaviorfaulterror": [[161, "bosdyn.client.robot_command.BehaviorFaultError"]], "commandfailederror": [[161, "bosdyn.client.robot_command.CommandFailedError"]], "commandfailederrorwithfeedback": [[161, "bosdyn.client.robot_command.CommandFailedErrorWithFeedback"]], "dockederror": [[161, "bosdyn.client.robot_command.DockedError"]], "expirederror": [[161, "bosdyn.client.robot_command.ExpiredError"]], "notclearederror": [[161, "bosdyn.client.robot_command.NotClearedError"]], "notpoweredonerror": [[161, "bosdyn.client.robot_command.NotPoweredOnError"]], "robotcommandbuilder (class in bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder"]], "robotcommandclient (class in bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.RobotCommandClient"]], "robotcommandresponseerror": [[161, "bosdyn.client.robot_command.RobotCommandResponseError"]], "robotcommandstreamingclient (class in bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.RobotCommandStreamingClient"]], "unsupportederror": [[161, "bosdyn.client.robot_command.UnsupportedError"]], "arm_carry_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_carry_command"]], "arm_cartesian_move_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_cartesian_move_helper"]], "arm_gaze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_gaze_command"]], "arm_joint_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_command"]], "arm_joint_freeze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_freeze_command"]], "arm_joint_move_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_joint_move_helper"]], "arm_pose_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_pose_command"]], "arm_pose_command_from_pose() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_pose_command_from_pose"]], "arm_ready_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_ready_command"]], "arm_stow_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_stow_command"]], "arm_wrench_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.arm_wrench_command"]], "battery_change_pose_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.battery_change_pose_command"]], "block_for_trajectory_cmd() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.block_for_trajectory_cmd"]], "block_until_arm_arrives() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.block_until_arm_arrives"]], "blocking_command() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.blocking_command"]], "blocking_selfright() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.blocking_selfright"]], "blocking_sit() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.blocking_sit"]], "blocking_stand() (in module bosdyn.client.robot_command)": [[161, "bosdyn.client.robot_command.blocking_stand"]], "body_pose() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.body_pose"]], "bosdyn.client.robot_command": [[161, "module-bosdyn.client.robot_command"]], "build_body_external_forces() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.build_body_external_forces"]], "build_synchro_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.build_synchro_command"]], "claw_gripper_close_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_close_command"]], "claw_gripper_command_helper() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_command_helper"]], "claw_gripper_open_angle_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_angle_command"]], "claw_gripper_open_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_command"]], "claw_gripper_open_fraction_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.claw_gripper_open_fraction_command"]], "clear_behavior_fault() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.clear_behavior_fault"]], "clear_behavior_fault_async() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.clear_behavior_fault_async"]], "constrained_manipulation_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.constrained_manipulation_command"]], "create_arm_joint_trajectory_point() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.create_arm_joint_trajectory_point"]], "default_service_name (bosdyn.client.robot_command.robotcommandclient attribute)": [[161, "bosdyn.client.robot_command.RobotCommandClient.default_service_name"]], "default_service_name (bosdyn.client.robot_command.robotcommandstreamingclient attribute)": [[161, "bosdyn.client.robot_command.RobotCommandStreamingClient.default_service_name"]], "follow_arm_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.follow_arm_command"]], "freeze_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.freeze_command"]], "joint_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.joint_command"]], "mobility_params() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.mobility_params"]], "payload_estimation_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.payload_estimation_command"]], "robot_command() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.robot_command"]], "robot_command_async() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.robot_command_async"]], "robot_command_feedback() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.robot_command_feedback"]], "robot_command_feedback_async() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.robot_command_feedback_async"]], "safe_power_off_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.safe_power_off_command"]], "selfright_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.selfright_command"]], "send_joint_control_commands() (bosdyn.client.robot_command.robotcommandstreamingclient method)": [[161, "bosdyn.client.robot_command.RobotCommandStreamingClient.send_joint_control_commands"]], "service_type (bosdyn.client.robot_command.robotcommandclient attribute)": [[161, "bosdyn.client.robot_command.RobotCommandClient.service_type"]], "service_type (bosdyn.client.robot_command.robotcommandstreamingclient attribute)": [[161, "bosdyn.client.robot_command.RobotCommandStreamingClient.service_type"]], "stance_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.stance_command"]], "stop_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.stop_command"]], "synchro_se2_trajectory_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_se2_trajectory_command"]], "synchro_se2_trajectory_point_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_se2_trajectory_point_command"]], "synchro_sit_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_sit_command"]], "synchro_stand_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_stand_command"]], "synchro_trajectory_command_in_body_frame() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_trajectory_command_in_body_frame"]], "synchro_velocity_command() (bosdyn.client.robot_command.robotcommandbuilder static method)": [[161, "bosdyn.client.robot_command.RobotCommandBuilder.synchro_velocity_command"]], "timesync_endpoint (bosdyn.client.robot_command.robotcommandclient property)": [[161, "bosdyn.client.robot_command.RobotCommandClient.timesync_endpoint"]], "update_from() (bosdyn.client.robot_command.robotcommandclient method)": [[161, "bosdyn.client.robot_command.RobotCommandClient.update_from"]], "robotidclient (class in bosdyn.client.robot_id)": [[162, "bosdyn.client.robot_id.RobotIdClient"]], "bosdyn.client.robot_id": [[162, "module-bosdyn.client.robot_id"]], "create_strict_version() (in module bosdyn.client.robot_id)": [[162, "bosdyn.client.robot_id.create_strict_version"]], "default_service_name (bosdyn.client.robot_id.robotidclient attribute)": [[162, "bosdyn.client.robot_id.RobotIdClient.default_service_name"]], "get_id() (bosdyn.client.robot_id.robotidclient method)": [[162, "bosdyn.client.robot_id.RobotIdClient.get_id"]], "get_id_async() (bosdyn.client.robot_id.robotidclient method)": [[162, "bosdyn.client.robot_id.RobotIdClient.get_id_async"]], "service_type (bosdyn.client.robot_id.robotidclient attribute)": [[162, "bosdyn.client.robot_id.RobotIdClient.service_type"]], "version_tuple() (in module bosdyn.client.robot_id)": [[162, "bosdyn.client.robot_id.version_tuple"]], "robotstateclient (class in bosdyn.client.robot_state)": [[163, "bosdyn.client.robot_state.RobotStateClient"]], "robotstatestreamingclient (class in bosdyn.client.robot_state)": [[163, "bosdyn.client.robot_state.RobotStateStreamingClient"]], "bosdyn.client.robot_state": [[163, "module-bosdyn.client.robot_state"]], "default_service_name (bosdyn.client.robot_state.robotstateclient attribute)": [[163, "bosdyn.client.robot_state.RobotStateClient.default_service_name"]], "default_service_name (bosdyn.client.robot_state.robotstatestreamingclient attribute)": [[163, "bosdyn.client.robot_state.RobotStateStreamingClient.default_service_name"]], "get_hardware_config_with_link_info() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_hardware_config_with_link_info"]], "get_robot_hardware_configuration() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_hardware_configuration"]], "get_robot_hardware_configuration_async() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_hardware_configuration_async"]], "get_robot_link_model() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_link_model"]], "get_robot_link_model_async() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_link_model_async"]], "get_robot_metrics() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_metrics"]], "get_robot_metrics_async() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_metrics_async"]], "get_robot_state() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_state"]], "get_robot_state_async() (bosdyn.client.robot_state.robotstateclient method)": [[163, "bosdyn.client.robot_state.RobotStateClient.get_robot_state_async"]], "get_robot_state_stream() (bosdyn.client.robot_state.robotstatestreamingclient method)": [[163, "bosdyn.client.robot_state.RobotStateStreamingClient.get_robot_state_stream"]], "has_arm() (in module bosdyn.client.robot_state)": [[163, "bosdyn.client.robot_state.has_arm"]], "service_type (bosdyn.client.robot_state.robotstateclient attribute)": [[163, "bosdyn.client.robot_state.RobotStateClient.service_type"]], "service_type (bosdyn.client.robot_state.robotstatestreamingclient attribute)": [[163, "bosdyn.client.robot_state.RobotStateStreamingClient.service_type"]], "sdk (class in bosdyn.client.sdk)": [[164, "bosdyn.client.sdk.Sdk"]], "sdkerror": [[164, "bosdyn.client.sdk.SdkError"]], "unabletoloadapptokenerror": [[164, "bosdyn.client.sdk.UnableToLoadAppTokenError"]], "unsetapptokenerror": [[164, "bosdyn.client.sdk.UnsetAppTokenError"]], "bosdyn.client.sdk": [[164, "module-bosdyn.client.sdk"]], "clear_robots() (bosdyn.client.sdk.sdk method)": [[164, "bosdyn.client.sdk.Sdk.clear_robots"]], "create_robot() (bosdyn.client.sdk.sdk method)": [[164, "bosdyn.client.sdk.Sdk.create_robot"]], "create_standard_sdk() (in module bosdyn.client.sdk)": [[164, "bosdyn.client.sdk.create_standard_sdk"]], "decode_token() (in module bosdyn.client.sdk)": [[164, "bosdyn.client.sdk.decode_token"]], "generate_client_name() (in module bosdyn.client.sdk)": [[164, "bosdyn.client.sdk.generate_client_name"]], "load_robot_cert() (bosdyn.client.sdk.sdk method)": [[164, "bosdyn.client.sdk.Sdk.load_robot_cert"]], "log_token_time_remaining() (in module bosdyn.client.sdk)": [[164, "bosdyn.client.sdk.log_token_time_remaining"]], "register_service_client() (bosdyn.client.sdk.sdk method)": [[164, "bosdyn.client.sdk.Sdk.register_service_client"]], "set_max_message_length() (bosdyn.client.sdk.sdk method)": [[164, "bosdyn.client.sdk.Sdk.set_max_message_length"]], "grpcservicerunner (class in bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.GrpcServiceRunner"]], "responsecontext (class in bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.ResponseContext"]], "bosdyn.client.server_util": [[165, "module-bosdyn.client.server_util"]], "get_bytes_field_allowlist() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.get_bytes_field_allowlist"]], "populate_response_header() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.populate_response_header"]], "run_until_interrupt() (bosdyn.client.server_util.grpcservicerunner method)": [[165, "bosdyn.client.server_util.GrpcServiceRunner.run_until_interrupt"]], "stop() (bosdyn.client.server_util.grpcservicerunner method)": [[165, "bosdyn.client.server_util.GrpcServiceRunner.stop"]], "strip_get_image_response() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_get_image_response"]], "strip_image_response() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_image_response"]], "strip_large_bytes_fields() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_large_bytes_fields"]], "strip_local_grid_responses() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_local_grid_responses"]], "strip_record_data_blob() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_record_data_blob"]], "strip_record_signal_tick() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_record_signal_tick"]], "strip_store_data_request() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_store_data_request"]], "strip_store_image_request() (in module bosdyn.client.server_util)": [[165, "bosdyn.client.server_util.strip_store_image_request"]], "invalidcustomparamspecerror": [[166, "bosdyn.client.service_customization_helpers.InvalidCustomParamSpecError"]], "invalidcustomparamvalueerror": [[166, "bosdyn.client.service_customization_helpers.InvalidCustomParamValueError"]], "bool_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.bool_spec_to_default"]], "bosdyn.client.service_customization_helpers": [[166, "module-bosdyn.client.service_customization_helpers"]], "check_types_match() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.check_types_match"]], "create_value_validator() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.create_value_validator"]], "custom_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.custom_param_coerce_to"]], "custom_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.custom_spec_to_default"]], "dict_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.dict_param_coerce_to"]], "dict_params_to_dict() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.dict_params_to_dict"]], "dict_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.dict_spec_to_default"]], "double_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.double_param_coerce_to"]], "double_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.double_spec_to_default"]], "int_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.int_param_coerce_to"]], "int_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.int_spec_to_default"]], "list_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.list_param_coerce_to"]], "list_params_to_list() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.list_params_to_list"]], "list_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.list_spec_to_default"]], "make_bool_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_bool_param_spec"]], "make_custom_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_custom_param_spec"]], "make_dict_child_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_dict_child_spec"]], "make_dict_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_dict_param_spec"]], "make_double_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_double_param_spec"]], "make_int64_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_int64_param_spec"]], "make_list_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_list_param_spec"]], "make_one_of_child_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_one_of_child_spec"]], "make_one_of_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_one_of_param_spec"]], "make_region_of_interest_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_region_of_interest_param_spec"]], "make_roi_service_and_source() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_roi_service_and_source"]], "make_string_param_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_string_param_spec"]], "make_user_interface_info() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.make_user_interface_info"]], "one_of_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.one_of_param_coerce_to"]], "one_of_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.one_of_spec_to_default"]], "oneof_param_to_dict() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.oneof_param_to_dict"]], "roi_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.roi_param_coerce_to"]], "roi_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.roi_spec_to_default"]], "string_param_coerce_to() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.string_param_coerce_to"]], "string_spec_to_default() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.string_spec_to_default"]], "validate_dict_spec() (in module bosdyn.client.service_customization_helpers)": [[166, "bosdyn.client.service_customization_helpers.validate_dict_spec"]], "bosdyn.client.signals_helpers": [[167, "module-bosdyn.client.signals_helpers"]], "build_capability_live_data() (in module bosdyn.client.signals_helpers)": [[167, "bosdyn.client.signals_helpers.build_capability_live_data"]], "build_live_data_response() (in module bosdyn.client.signals_helpers)": [[167, "bosdyn.client.signals_helpers.build_live_data_response"]], "build_max_alert_spec() (in module bosdyn.client.signals_helpers)": [[167, "bosdyn.client.signals_helpers.build_max_alert_spec"]], "build_simple_signal() (in module bosdyn.client.signals_helpers)": [[167, "bosdyn.client.signals_helpers.build_simple_signal"]], "get_data() (in module bosdyn.client.signals_helpers)": [[167, "bosdyn.client.signals_helpers.get_data"]], "audioclient (class in bosdyn.client.spot_cam.audio)": [[169, "bosdyn.client.spot_cam.audio.AudioClient"]], "bosdyn.client.spot_cam.audio": [[169, "module-bosdyn.client.spot_cam.audio"]], "default_service_name (bosdyn.client.spot_cam.audio.audioclient attribute)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.default_service_name"]], "delete_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.delete_sound"]], "delete_sound_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.delete_sound_async"]], "get_audio_capture_channel() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_channel"]], "get_audio_capture_channel_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_channel_async"]], "get_audio_capture_gain() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_gain"]], "get_audio_capture_gain_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_audio_capture_gain_async"]], "get_volume() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_volume"]], "get_volume_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.get_volume_async"]], "list_sounds() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.list_sounds"]], "list_sounds_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.list_sounds_async"]], "load_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.load_sound"]], "play_sound() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.play_sound"]], "play_sound_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.play_sound_async"]], "service_type (bosdyn.client.spot_cam.audio.audioclient attribute)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.service_type"]], "set_audio_capture_channel() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_channel"]], "set_audio_capture_channel_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_channel_async"]], "set_audio_capture_gain() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_gain"]], "set_audio_capture_gain_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_audio_capture_gain_async"]], "set_volume() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_volume"]], "set_volume_async() (bosdyn.client.spot_cam.audio.audioclient method)": [[169, "bosdyn.client.spot_cam.audio.AudioClient.set_volume_async"]], "compositorclient (class in bosdyn.client.spot_cam.compositor)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient"]], "bosdyn.client.spot_cam.compositor": [[170, "module-bosdyn.client.spot_cam.compositor"]], "default_service_name (bosdyn.client.spot_cam.compositor.compositorclient attribute)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.default_service_name"]], "get_ir_colormap() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_colormap"]], "get_ir_colormap_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_colormap_async"]], "get_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_meter_overlay"]], "get_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_ir_meter_overlay_async"]], "get_screen() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_screen"]], "get_screen_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_screen_async"]], "get_visible_cameras() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_visible_cameras"]], "get_visible_cameras_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.get_visible_cameras_async"]], "list_screens() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.list_screens"]], "list_screens_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.list_screens_async"]], "service_type (bosdyn.client.spot_cam.compositor.compositorclient attribute)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.service_type"]], "set_ir_colormap() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_colormap"]], "set_ir_colormap_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_colormap_async"]], "set_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_meter_overlay"]], "set_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_ir_meter_overlay_async"]], "set_multi_ir_meter_overlay() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_multi_ir_meter_overlay"]], "set_multi_ir_meter_overlay_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_multi_ir_meter_overlay_async"]], "set_screen() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_screen"]], "set_screen_async() (bosdyn.client.spot_cam.compositor.compositorclient method)": [[170, "bosdyn.client.spot_cam.compositor.CompositorClient.set_screen_async"]], "healthclient (class in bosdyn.client.spot_cam.health)": [[171, "bosdyn.client.spot_cam.health.HealthClient"]], "bosdyn.client.spot_cam.health": [[171, "module-bosdyn.client.spot_cam.health"]], "clear_bit_events() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.clear_bit_events"]], "clear_bit_events_async() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.clear_bit_events_async"]], "default_service_name (bosdyn.client.spot_cam.health.healthclient attribute)": [[171, "bosdyn.client.spot_cam.health.HealthClient.default_service_name"]], "get_bit_status() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_bit_status"]], "get_bit_status_async() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_bit_status_async"]], "get_system_log() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_system_log"]], "get_system_log_async() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_system_log_async"]], "get_temperature() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_temperature"]], "get_temperature_async() (bosdyn.client.spot_cam.health.healthclient method)": [[171, "bosdyn.client.spot_cam.health.HealthClient.get_temperature_async"]], "service_type (bosdyn.client.spot_cam.health.healthclient attribute)": [[171, "bosdyn.client.spot_cam.health.HealthClient.service_type"]], "lightingclient (class in bosdyn.client.spot_cam.lighting)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient"]], "bosdyn.client.spot_cam.lighting": [[172, "module-bosdyn.client.spot_cam.lighting"]], "default_service_name (bosdyn.client.spot_cam.lighting.lightingclient attribute)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.default_service_name"]], "get_led_brightness() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.get_led_brightness"]], "get_led_brightness_async() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.get_led_brightness_async"]], "service_type (bosdyn.client.spot_cam.lighting.lightingclient attribute)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.service_type"]], "set_led_brightness() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.set_led_brightness"]], "set_led_brightness_async() (bosdyn.client.spot_cam.lighting.lightingclient method)": [[172, "bosdyn.client.spot_cam.lighting.LightingClient.set_led_brightness_async"]], "lightshelper (class in bosdyn.client.spot_cam.lights_helper)": [[173, "bosdyn.client.spot_cam.lights_helper.LightsHelper"]], "bosdyn.client.spot_cam.lights_helper": [[173, "module-bosdyn.client.spot_cam.lights_helper"]], "set_lights_with_freq_and_brightness() (in module bosdyn.client.spot_cam.lights_helper)": [[173, "bosdyn.client.spot_cam.lights_helper.set_lights_with_freq_and_brightness"]], "medialogclient (class in bosdyn.client.spot_cam.media_log)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient"]], "bosdyn.client.spot_cam.media_log": [[174, "module-bosdyn.client.spot_cam.media_log"]], "default_service_name (bosdyn.client.spot_cam.media_log.medialogclient attribute)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.default_service_name"]], "delete() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.delete"]], "delete_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.delete_async"]], "enable_debug() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.enable_debug"]], "enable_debug_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.enable_debug_async"]], "get_status() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.get_status"]], "get_status_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.get_status_async"]], "list_cameras() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_cameras"]], "list_cameras_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_cameras_async"]], "list_logpoints() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.list_logpoints"]], "retrieve() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.retrieve"]], "retrieve_raw_data() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.retrieve_raw_data"]], "service_type (bosdyn.client.spot_cam.media_log.medialogclient attribute)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.service_type"]], "set_passphrase() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.set_passphrase"]], "set_passphrase_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.set_passphrase_async"]], "store() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.store"]], "store_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.store_async"]], "tag() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.tag"]], "tag_async() (bosdyn.client.spot_cam.media_log.medialogclient method)": [[174, "bosdyn.client.spot_cam.media_log.MediaLogClient.tag_async"]], "networkclient (class in bosdyn.client.spot_cam.network)": [[175, "bosdyn.client.spot_cam.network.NetworkClient"]], "bosdyn.client.spot_cam.network": [[175, "module-bosdyn.client.spot_cam.network"]], "default_service_name (bosdyn.client.spot_cam.network.networkclient attribute)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.default_service_name"]], "get_ice_configuration() (bosdyn.client.spot_cam.network.networkclient method)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.get_ice_configuration"]], "get_ice_configuration_async() (bosdyn.client.spot_cam.network.networkclient method)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.get_ice_configuration_async"]], "service_type (bosdyn.client.spot_cam.network.networkclient attribute)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.service_type"]], "set_ice_configuration() (bosdyn.client.spot_cam.network.networkclient method)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.set_ice_configuration"]], "set_ice_configuration_async() (bosdyn.client.spot_cam.network.networkclient method)": [[175, "bosdyn.client.spot_cam.network.NetworkClient.set_ice_configuration_async"]], "powerclient (class in bosdyn.client.spot_cam.power)": [[176, "bosdyn.client.spot_cam.power.PowerClient"]], "bosdyn.client.spot_cam.power": [[176, "module-bosdyn.client.spot_cam.power"]], "cycle_power() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.cycle_power"]], "cycle_power_async() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.cycle_power_async"]], "default_service_name (bosdyn.client.spot_cam.power.powerclient attribute)": [[176, "bosdyn.client.spot_cam.power.PowerClient.default_service_name"]], "get_power_status() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.get_power_status"]], "get_power_status_async() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.get_power_status_async"]], "service_type (bosdyn.client.spot_cam.power.powerclient attribute)": [[176, "bosdyn.client.spot_cam.power.PowerClient.service_type"]], "set_power_status() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.set_power_status"]], "set_power_status_async() (bosdyn.client.spot_cam.power.powerclient method)": [[176, "bosdyn.client.spot_cam.power.PowerClient.set_power_status_async"]], "ptzclient (class in bosdyn.client.spot_cam.ptz)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient"]], "bosdyn.client.spot_cam.ptz": [[177, "module-bosdyn.client.spot_cam.ptz"]], "default_service_name (bosdyn.client.spot_cam.ptz.ptzclient attribute)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.default_service_name"]], "get_ptz_focus_state() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_focus_state"]], "get_ptz_focus_state_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_focus_state_async"]], "get_ptz_position() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_position"]], "get_ptz_position_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_position_async"]], "get_ptz_velocity() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_velocity"]], "get_ptz_velocity_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.get_ptz_velocity_async"]], "initialize_lens() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.initialize_lens"]], "initialize_lens_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.initialize_lens_async"]], "list_ptz() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.list_ptz"]], "list_ptz_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.list_ptz_async"]], "service_type (bosdyn.client.spot_cam.ptz.ptzclient attribute)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.service_type"]], "set_ptz_focus_state() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_focus_state"]], "set_ptz_focus_state_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_focus_state_async"]], "set_ptz_position() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_position"]], "set_ptz_position_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_position_async"]], "set_ptz_velocity() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_velocity"]], "set_ptz_velocity_async() (bosdyn.client.spot_cam.ptz.ptzclient method)": [[177, "bosdyn.client.spot_cam.ptz.PtzClient.set_ptz_velocity_async"]], "shift_pan_angle() (in module bosdyn.client.spot_cam.ptz)": [[177, "bosdyn.client.spot_cam.ptz.shift_pan_angle"]], "streamqualityclient (class in bosdyn.client.spot_cam.streamquality)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient"]], "bosdyn.client.spot_cam.streamquality": [[178, "module-bosdyn.client.spot_cam.streamquality"]], "default_service_name (bosdyn.client.spot_cam.streamquality.streamqualityclient attribute)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.default_service_name"]], "enable_congestion_control() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.enable_congestion_control"]], "enable_congestion_control_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.enable_congestion_control_async"]], "get_stream_params() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.get_stream_params"]], "get_stream_params_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.get_stream_params_async"]], "service_type (bosdyn.client.spot_cam.streamquality.streamqualityclient attribute)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.service_type"]], "set_stream_params() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.set_stream_params"]], "set_stream_params_async() (bosdyn.client.spot_cam.streamquality.streamqualityclient method)": [[178, "bosdyn.client.spot_cam.streamquality.StreamQualityClient.set_stream_params_async"]], "versionclient (class in bosdyn.client.spot_cam.version)": [[179, "bosdyn.client.spot_cam.version.VersionClient"]], "bosdyn.client.spot_cam.version": [[179, "module-bosdyn.client.spot_cam.version"]], "default_service_name (bosdyn.client.spot_cam.version.versionclient attribute)": [[179, "bosdyn.client.spot_cam.version.VersionClient.default_service_name"]], "get_software_version() (bosdyn.client.spot_cam.version.versionclient method)": [[179, "bosdyn.client.spot_cam.version.VersionClient.get_software_version"]], "get_software_version_async() (bosdyn.client.spot_cam.version.versionclient method)": [[179, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_async"]], "get_software_version_full() (bosdyn.client.spot_cam.version.versionclient method)": [[179, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_full"]], "get_software_version_full_async() (bosdyn.client.spot_cam.version.versionclient method)": [[179, "bosdyn.client.spot_cam.version.VersionClient.get_software_version_full_async"]], "service_type (bosdyn.client.spot_cam.version.versionclient attribute)": [[179, "bosdyn.client.spot_cam.version.VersionClient.service_type"]], "cameracalibrationcalibrationerror": [[180, "bosdyn.client.spot_check.CameraCalibrationCalibrationError"]], "cameracalibrationinternalerror": [[180, "bosdyn.client.spot_check.CameraCalibrationInternalError"]], "cameracalibrationpowererror": [[180, "bosdyn.client.spot_check.CameraCalibrationPowerError"]], "cameracalibrationresponseerror": [[180, "bosdyn.client.spot_check.CameraCalibrationResponseError"]], "cameracalibrationrobotcommanderror": [[180, "bosdyn.client.spot_check.CameraCalibrationRobotCommandError"]], "cameracalibrationtargetnotcenterederror": [[180, "bosdyn.client.spot_check.CameraCalibrationTargetNotCenteredError"]], "cameracalibrationtimedouterror": [[180, "bosdyn.client.spot_check.CameraCalibrationTimedOutError"]], "cameracalibrationusercancelederror": [[180, "bosdyn.client.spot_check.CameraCalibrationUserCanceledError"]], "cameraspotcheckfeedbackerror": [[180, "bosdyn.client.spot_check.CameraSpotCheckFeedbackError"]], "cameraspotchecktimedouterror": [[180, "bosdyn.client.spot_check.CameraSpotCheckTimedOutError"]], "spotcheckcameratimeouterror": [[180, "bosdyn.client.spot_check.SpotCheckCameraTimeoutError"]], "spotcheckclient (class in bosdyn.client.spot_check)": [[180, "bosdyn.client.spot_check.SpotCheckClient"]], "spotcheckendstoptimeouterror": [[180, "bosdyn.client.spot_check.SpotCheckEndstopTimeoutError"]], "spotcheckerror": [[180, "bosdyn.client.spot_check.SpotCheckError"]], "spotcheckgroundcheckerror": [[180, "bosdyn.client.spot_check.SpotCheckGroundCheckError"]], "spotcheckimucheckerror": [[180, "bosdyn.client.spot_check.SpotCheckImuCheckError"]], "spotcheckloadcelltimeouterror": [[180, "bosdyn.client.spot_check.SpotCheckLoadcellTimeoutError"]], "spotchecknotsittingerror": [[180, "bosdyn.client.spot_check.SpotCheckNotSittingError"]], "spotcheckpoweronfailure": [[180, "bosdyn.client.spot_check.SpotCheckPowerOnFailure"]], "spotcheckresponseerror": [[180, "bosdyn.client.spot_check.SpotCheckResponseError"]], "spotcheckstandfailureerror": [[180, "bosdyn.client.spot_check.SpotCheckStandFailureError"]], "spotchecktimedouterror": [[180, "bosdyn.client.spot_check.SpotCheckTimedOutError"]], "spotcheckunexpectedpowerchangeerror": [[180, "bosdyn.client.spot_check.SpotCheckUnexpectedPowerChangeError"]], "bosdyn.client.spot_check": [[180, "module-bosdyn.client.spot_check"]], "camera_calibration_command() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_command"]], "camera_calibration_command_async() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_command_async"]], "camera_calibration_feedback() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_feedback"]], "camera_calibration_feedback_async() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.camera_calibration_feedback_async"]], "default_service_name (bosdyn.client.spot_check.spotcheckclient attribute)": [[180, "bosdyn.client.spot_check.SpotCheckClient.default_service_name"]], "run_camera_calibration() (in module bosdyn.client.spot_check)": [[180, "bosdyn.client.spot_check.run_camera_calibration"]], "run_spot_check() (in module bosdyn.client.spot_check)": [[180, "bosdyn.client.spot_check.run_spot_check"]], "service_type (bosdyn.client.spot_check.spotcheckclient attribute)": [[180, "bosdyn.client.spot_check.SpotCheckClient.service_type"]], "spot_check_command() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.spot_check_command"]], "spot_check_command_async() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.spot_check_command_async"]], "spot_check_feedback() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.spot_check_feedback"]], "spot_check_feedback_async() (bosdyn.client.spot_check.spotcheckclient method)": [[180, "bosdyn.client.spot_check.SpotCheckClient.spot_check_feedback_async"]], "default_time_sync_interval_sec (bosdyn.client.time_sync.timesyncthread attribute)": [[181, "bosdyn.client.time_sync.TimeSyncThread.DEFAULT_TIME_SYNC_INTERVAL_SEC"]], "inactivethreaderror": [[181, "bosdyn.client.time_sync.InactiveThreadError"]], "notestablishederror": [[181, "bosdyn.client.time_sync.NotEstablishedError"]], "time_sync_service_not_ready_interval_sec (bosdyn.client.time_sync.timesyncthread attribute)": [[181, "bosdyn.client.time_sync.TimeSyncThread.TIME_SYNC_SERVICE_NOT_READY_INTERVAL_SEC"]], "timesyncclient (class in bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.TimeSyncClient"]], "timesyncendpoint (class in bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint"]], "timesyncerror": [[181, "bosdyn.client.time_sync.TimeSyncError"]], "timesyncthread (class in bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.TimeSyncThread"]], "bosdyn.client.time_sync": [[181, "module-bosdyn.client.time_sync"]], "clock_identifier (bosdyn.client.time_sync.timesyncendpoint property)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.clock_identifier"]], "clock_skew (bosdyn.client.time_sync.timesyncendpoint property)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.clock_skew"]], "default_service_name (bosdyn.client.time_sync.timesyncclient attribute)": [[181, "bosdyn.client.time_sync.TimeSyncClient.default_service_name"]], "endpoint (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.endpoint"]], "establish_timesync() (bosdyn.client.time_sync.timesyncendpoint method)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.establish_timesync"]], "get_new_estimate() (bosdyn.client.time_sync.timesyncendpoint method)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.get_new_estimate"]], "get_robot_clock_skew() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.get_robot_clock_skew"]], "get_robot_time_converter() (bosdyn.client.time_sync.timesyncendpoint method)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.get_robot_time_converter"]], "get_robot_time_converter() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.get_robot_time_converter"]], "get_time_sync_update() (bosdyn.client.time_sync.timesyncclient method)": [[181, "bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update"]], "get_time_sync_update_async() (bosdyn.client.time_sync.timesyncclient method)": [[181, "bosdyn.client.time_sync.TimeSyncClient.get_time_sync_update_async"]], "has_established_time_sync (bosdyn.client.time_sync.timesyncendpoint property)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.has_established_time_sync"]], "has_established_time_sync (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.has_established_time_sync"]], "response (bosdyn.client.time_sync.timesyncendpoint property)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.response"]], "robot_time_range_from_datetimes() (in module bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.robot_time_range_from_datetimes"]], "robot_time_range_from_nanoseconds() (in module bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.robot_time_range_from_nanoseconds"]], "robot_timestamp_from_local_secs() (bosdyn.client.time_sync.timesyncendpoint method)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.robot_timestamp_from_local_secs"]], "robot_timestamp_from_local_secs() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.robot_timestamp_from_local_secs"]], "round_trip_time (bosdyn.client.time_sync.timesyncendpoint property)": [[181, "bosdyn.client.time_sync.TimeSyncEndpoint.round_trip_time"]], "service_type (bosdyn.client.time_sync.timesyncclient attribute)": [[181, "bosdyn.client.time_sync.TimeSyncClient.service_type"]], "should_exit (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.should_exit"]], "start() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.start"]], "stop() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.stop"]], "stopped (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.stopped"]], "thread_exception (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.thread_exception"]], "time_sync_interval_sec (bosdyn.client.time_sync.timesyncthread property)": [[181, "bosdyn.client.time_sync.TimeSyncThread.time_sync_interval_sec"]], "timespec_to_robot_timespan() (in module bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.timespec_to_robot_timespan"]], "update_time_filter() (in module bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.update_time_filter"]], "update_timestamp_filter() (in module bosdyn.client.time_sync)": [[181, "bosdyn.client.time_sync.update_timestamp_filter"]], "wait_for_sync() (bosdyn.client.time_sync.timesyncthread method)": [[181, "bosdyn.client.time_sync.TimeSyncThread.wait_for_sync"]], "clearfailederror": [[182, "bosdyn.client.token_cache.ClearFailedError"]], "notincacheerror": [[182, "bosdyn.client.token_cache.NotInCacheError"]], "tokencache (class in bosdyn.client.token_cache)": [[182, "bosdyn.client.token_cache.TokenCache"]], "tokencacheerror": [[182, "bosdyn.client.token_cache.TokenCacheError"]], "tokencachefilesystem (class in bosdyn.client.token_cache)": [[182, "bosdyn.client.token_cache.TokenCacheFilesystem"]], "writefailederror": [[182, "bosdyn.client.token_cache.WriteFailedError"]], "atomic_file_write() (in module bosdyn.client.token_cache)": [[182, "bosdyn.client.token_cache.atomic_file_write"]], "bosdyn.client.token_cache": [[182, "module-bosdyn.client.token_cache"]], "clear() (bosdyn.client.token_cache.tokencache method)": [[182, "bosdyn.client.token_cache.TokenCache.clear"]], "clear() (bosdyn.client.token_cache.tokencachefilesystem method)": [[182, "bosdyn.client.token_cache.TokenCacheFilesystem.clear"]], "match() (bosdyn.client.token_cache.tokencache method)": [[182, "bosdyn.client.token_cache.TokenCache.match"]], "match() (bosdyn.client.token_cache.tokencachefilesystem method)": [[182, "bosdyn.client.token_cache.TokenCacheFilesystem.match"]], "read() (bosdyn.client.token_cache.tokencache method)": [[182, "bosdyn.client.token_cache.TokenCache.read"]], "read() (bosdyn.client.token_cache.tokencachefilesystem method)": [[182, "bosdyn.client.token_cache.TokenCacheFilesystem.read"]], "write() (bosdyn.client.token_cache.tokencache method)": [[182, "bosdyn.client.token_cache.TokenCache.write"]], "write() (bosdyn.client.token_cache.tokencachefilesystem method)": [[182, "bosdyn.client.token_cache.TokenCacheFilesystem.write"]], "tokenmanager (class in bosdyn.client.token_manager)": [[183, "bosdyn.client.token_manager.TokenManager"]], "bosdyn.client.token_manager": [[183, "module-bosdyn.client.token_manager"]], "is_alive() (bosdyn.client.token_manager.tokenmanager method)": [[183, "bosdyn.client.token_manager.TokenManager.is_alive"]], "stop() (bosdyn.client.token_manager.tokenmanager method)": [[183, "bosdyn.client.token_manager.TokenManager.stop"]], "update() (bosdyn.client.token_manager.tokenmanager method)": [[183, "bosdyn.client.token_manager.TokenManager.update"]], "bosdyn.client.units_helpers": [[184, "module-bosdyn.client.units_helpers"]], "units_to_string() (in module bosdyn.client.units_helpers)": [[184, "bosdyn.client.units_helpers.units_to_string"]], "deduploggingmessages (class in bosdyn.client.util)": [[185, "bosdyn.client.util.DedupLoggingMessages"]], "grpcservicerunner (class in bosdyn.client.util)": [[185, "bosdyn.client.util.GrpcServiceRunner"]], "add_base_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_base_arguments"]], "add_common_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_common_arguments"]], "add_credentials_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_credentials_arguments"]], "add_payload_credentials_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_payload_credentials_arguments"]], "add_payload_credentials_file_argument() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_payload_credentials_file_argument"]], "add_service_endpoint_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_service_endpoint_arguments"]], "add_service_hosting_arguments() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.add_service_hosting_arguments"]], "authenticate() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.authenticate"]], "bosdyn.client.util": [[185, "module-bosdyn.client.util"]], "cli_auth() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.cli_auth"]], "cli_login_prompt() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.cli_login_prompt"]], "does_dedup_filter_exist() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.does_dedup_filter_exist"]], "filter() (bosdyn.client.util.deduploggingmessages method)": [[185, "bosdyn.client.util.DedupLoggingMessages.filter"]], "get_guid_and_secret() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.get_guid_and_secret"]], "get_logger() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.get_logger"]], "read_or_create_payload_credentials() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.read_or_create_payload_credentials"]], "read_payload_credentials() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.read_payload_credentials"]], "run_until_interrupt() (bosdyn.client.util.grpcservicerunner method)": [[185, "bosdyn.client.util.GrpcServiceRunner.run_until_interrupt"]], "safe_pb_enum_to_string() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.safe_pb_enum_to_string"]], "setup_logging() (in module bosdyn.client.util)": [[185, "bosdyn.client.util.setup_logging"]], "stop() (bosdyn.client.util.grpcservicerunner method)": [[185, "bosdyn.client.util.GrpcServiceRunner.stop"]], "worldobjectclient (class in bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.WorldObjectClient"]], "bosdyn.client.world_object": [[186, "module-bosdyn.client.world_object"]], "default_service_name (bosdyn.client.world_object.worldobjectclient attribute)": [[186, "bosdyn.client.world_object.WorldObjectClient.default_service_name"]], "draw_oriented_bounding_box() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.draw_oriented_bounding_box"]], "draw_sphere() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.draw_sphere"]], "list_world_objects() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.list_world_objects"]], "list_world_objects_async() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.list_world_objects_async"]], "make_add_world_object_req() (in module bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.make_add_world_object_req"]], "make_change_world_object_req() (in module bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.make_change_world_object_req"]], "make_delete_world_object_req() (in module bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.make_delete_world_object_req"]], "mutate_world_objects() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.mutate_world_objects"]], "mutate_world_objects_async() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.mutate_world_objects_async"]], "send_add_mutation_requests() (in module bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.send_add_mutation_requests"]], "send_delete_mutation_requests() (in module bosdyn.client.world_object)": [[186, "bosdyn.client.world_object.send_delete_mutation_requests"]], "service_type (bosdyn.client.world_object.worldobjectclient attribute)": [[186, "bosdyn.client.world_object.WorldObjectClient.service_type"]], "timesync_endpoint (bosdyn.client.world_object.worldobjectclient property)": [[186, "bosdyn.client.world_object.WorldObjectClient.timesync_endpoint"]], "update_from() (bosdyn.client.world_object.worldobjectclient method)": [[186, "bosdyn.client.world_object.WorldObjectClient.update_from"]], "basedatareader (class in bosdyn.bddf.base_data_reader)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader"]], "annotations (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.annotations"]], "bosdyn.bddf.base_data_reader": [[189, "module-bosdyn.bddf.base_data_reader"]], "checksum (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.checksum"]], "file_descriptor (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.file_descriptor"]], "file_index (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.file_index"]], "filename (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.filename"]], "read_checksum (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.read_checksum"]], "series_spec_to_index() (bosdyn.bddf.base_data_reader.basedatareader method)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.series_spec_to_index"]], "version (bosdyn.bddf.base_data_reader.basedatareader property)": [[189, "bosdyn.bddf.base_data_reader.BaseDataReader.version"]], "blockwriter (class in bosdyn.bddf.block_writer)": [[190, "bosdyn.bddf.block_writer.BlockWriter"]], "bosdyn.bddf.block_writer": [[190, "module-bosdyn.bddf.block_writer"]], "close() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.close"]], "closed (bosdyn.bddf.block_writer.blockwriter property)": [[190, "bosdyn.bddf.block_writer.BlockWriter.closed"]], "tell() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.tell"]], "write_data_block() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.write_data_block"]], "write_descriptor_block() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.write_descriptor_block"]], "write_file_end() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.write_file_end"]], "write_header() (bosdyn.bddf.block_writer.blockwriter method)": [[190, "bosdyn.bddf.block_writer.BlockWriter.write_header"]], "channel (bosdyn.bddf.bosdyn.messagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.MessageChannel.CHANNEL"]], "channel (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.TypedMessageChannel.CHANNEL"]], "grpcrequests (class in bosdyn.bddf.bosdyn)": [[191, "bosdyn.bddf.bosdyn.GrpcRequests"]], "grpcresponses (class in bosdyn.bddf.bosdyn)": [[191, "bosdyn.bddf.bosdyn.GrpcResponses"]], "keys (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcRequests.KEYS"]], "keys (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcResponses.KEYS"]], "keys (bosdyn.bddf.bosdyn.messagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.MessageChannel.KEYS"]], "keys (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.TypedMessageChannel.KEYS"]], "message_type (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcRequests.MESSAGE_TYPE"]], "message_type (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcResponses.MESSAGE_TYPE"]], "message_type (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.TypedMessageChannel.MESSAGE_TYPE"]], "messagechannel (class in bosdyn.bddf.bosdyn)": [[191, "bosdyn.bddf.bosdyn.MessageChannel"]], "series_type (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcRequests.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcResponses.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.messagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.MessageChannel.SERIES_TYPE"]], "series_type (bosdyn.bddf.bosdyn.typedmessagechannel attribute)": [[191, "bosdyn.bddf.bosdyn.TypedMessageChannel.SERIES_TYPE"]], "service_name (bosdyn.bddf.bosdyn.grpcrequests attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcRequests.SERVICE_NAME"]], "service_name (bosdyn.bddf.bosdyn.grpcresponses attribute)": [[191, "bosdyn.bddf.bosdyn.GrpcResponses.SERVICE_NAME"]], "typedmessagechannel (class in bosdyn.bddf.bosdyn)": [[191, "bosdyn.bddf.bosdyn.TypedMessageChannel"]], "bosdyn.bddf.bosdyn": [[191, "module-bosdyn.bddf.bosdyn"]], "addserieserror": [[192, "bosdyn.bddf.common.AddSeriesError"]], "checksumerror": [[192, "bosdyn.bddf.common.ChecksumError"]], "dataerror": [[192, "bosdyn.bddf.common.DataError"]], "dataformaterror": [[192, "bosdyn.bddf.common.DataFormatError"]], "keys (bosdyn.bddf.common.seriesidentifier attribute)": [[192, "bosdyn.bddf.common.SeriesIdentifier.KEYS"]], "parseerror": [[192, "bosdyn.bddf.common.ParseError"]], "series_type (bosdyn.bddf.common.seriesidentifier attribute)": [[192, "bosdyn.bddf.common.SeriesIdentifier.SERIES_TYPE"]], "seriesidentifier (class in bosdyn.bddf.common)": [[192, "bosdyn.bddf.common.SeriesIdentifier"]], "seriesnotuniqueerror": [[192, "bosdyn.bddf.common.SeriesNotUniqueError"]], "bosdyn.bddf.common": [[192, "module-bosdyn.bddf.common"]], "datareader (class in bosdyn.bddf.data_reader)": [[193, "bosdyn.bddf.data_reader.DataReader"]], "bosdyn.bddf.data_reader": [[193, "module-bosdyn.bddf.data_reader"]], "num_data_blocks() (bosdyn.bddf.data_reader.datareader method)": [[193, "bosdyn.bddf.data_reader.DataReader.num_data_blocks"]], "read() (bosdyn.bddf.data_reader.datareader method)": [[193, "bosdyn.bddf.data_reader.DataReader.read"]], "series_block_index() (bosdyn.bddf.data_reader.datareader method)": [[193, "bosdyn.bddf.data_reader.DataReader.series_block_index"]], "series_descriptor() (bosdyn.bddf.data_reader.datareader method)": [[193, "bosdyn.bddf.data_reader.DataReader.series_descriptor"]], "total_bytes() (bosdyn.bddf.data_reader.datareader method)": [[193, "bosdyn.bddf.data_reader.DataReader.total_bytes"]], "datawriter (class in bosdyn.bddf.data_writer)": [[194, "bosdyn.bddf.data_writer.DataWriter"]], "add_message_series() (bosdyn.bddf.data_writer.datawriter method)": [[194, "bosdyn.bddf.data_writer.DataWriter.add_message_series"]], "add_pod_series() (bosdyn.bddf.data_writer.datawriter method)": [[194, "bosdyn.bddf.data_writer.DataWriter.add_pod_series"]], "add_series() (bosdyn.bddf.data_writer.datawriter method)": [[194, "bosdyn.bddf.data_writer.DataWriter.add_series"]], "bosdyn.bddf.data_writer": [[194, "module-bosdyn.bddf.data_writer"]], "file_index (bosdyn.bddf.data_writer.datawriter property)": [[194, "bosdyn.bddf.data_writer.DataWriter.file_index"]], "run_on_close() (bosdyn.bddf.data_writer.datawriter method)": [[194, "bosdyn.bddf.data_writer.DataWriter.run_on_close"]], "write_data() (bosdyn.bddf.data_writer.datawriter method)": [[194, "bosdyn.bddf.data_writer.DataWriter.write_data"]], "fileindexer (class in bosdyn.bddf.file_indexer)": [[195, "bosdyn.bddf.file_indexer.FileIndexer"]], "add_series() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.add_series"]], "add_series_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.add_series_descriptor"]], "bosdyn.bddf.file_indexer": [[195, "module-bosdyn.bddf.file_indexer"]], "descriptor_index (bosdyn.bddf.file_indexer.fileindexer property)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.descriptor_index"]], "file_index (bosdyn.bddf.file_indexer.fileindexer property)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.file_index"]], "index_data_block() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.index_data_block"]], "make_data_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.make_data_descriptor"]], "series_block_indexes (bosdyn.bddf.file_indexer.fileindexer property)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.series_block_indexes"]], "series_descriptor() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.series_descriptor"]], "series_identifier_to_hash() (bosdyn.bddf.file_indexer.fileindexer static method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.series_identifier_to_hash"]], "write_index() (bosdyn.bddf.file_indexer.fileindexer method)": [[195, "bosdyn.bddf.file_indexer.FileIndexer.write_index"]], "grpcprotoreader (class in bosdyn.bddf.grpc_proto_reader)": [[196, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader"]], "bosdyn.bddf.grpc_proto_reader": [[196, "module-bosdyn.bddf.grpc_proto_reader"]], "get_message() (bosdyn.bddf.grpc_proto_reader.grpcprotoreader method)": [[196, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader.get_message"]], "num_messages (bosdyn.bddf.grpc_proto_reader.grpcprotoreader property)": [[196, "bosdyn.bddf.grpc_proto_reader.GrpcProtoReader.num_messages"]], "grpcreader (class in bosdyn.bddf.grpc_reader)": [[197, "bosdyn.bddf.grpc_reader.GrpcReader"]], "bosdyn.bddf.grpc_reader": [[197, "module-bosdyn.bddf.grpc_reader"]], "data_reader (bosdyn.bddf.grpc_reader.grpcreader property)": [[197, "bosdyn.bddf.grpc_reader.GrpcReader.data_reader"]], "get_message() (bosdyn.bddf.grpc_reader.grpcreader method)": [[197, "bosdyn.bddf.grpc_reader.GrpcReader.get_message"]], "get_proto_reader() (bosdyn.bddf.grpc_reader.grpcreader method)": [[197, "bosdyn.bddf.grpc_reader.GrpcReader.get_proto_reader"]], "grpcservicereader (class in bosdyn.bddf.grpc_service_reader)": [[198, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader"]], "add_proto_reader() (bosdyn.bddf.grpc_service_reader.grpcservicereader method)": [[198, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.add_proto_reader"]], "bosdyn.bddf.grpc_service_reader": [[198, "module-bosdyn.bddf.grpc_service_reader"]], "data_reader (bosdyn.bddf.grpc_service_reader.grpcservicereader property)": [[198, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.data_reader"]], "get_proto_reader() (bosdyn.bddf.grpc_service_reader.grpcservicereader method)": [[198, "bosdyn.bddf.grpc_service_reader.GrpcServiceReader.get_proto_reader"]], "grpcservicewriter (class in bosdyn.bddf.grpc_service_writer)": [[199, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter"]], "bosdyn.bddf.grpc_service_writer": [[199, "module-bosdyn.bddf.grpc_service_writer"]], "log_request() (bosdyn.bddf.grpc_service_writer.grpcservicewriter method)": [[199, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter.log_request"]], "log_response() (bosdyn.bddf.grpc_service_writer.grpcservicewriter method)": [[199, "bosdyn.bddf.grpc_service_writer.GrpcServiceWriter.log_response"]], "messagereader (class in bosdyn.bddf.message_reader)": [[200, "bosdyn.bddf.message_reader.MessageReader"]], "bosdyn.bddf.message_reader": [[200, "module-bosdyn.bddf.message_reader"]], "channel_name_to_series_decriptor (bosdyn.bddf.message_reader.messagereader property)": [[200, "bosdyn.bddf.message_reader.MessageReader.channel_name_to_series_decriptor"]], "channel_name_to_series_descriptor (bosdyn.bddf.message_reader.messagereader property)": [[200, "bosdyn.bddf.message_reader.MessageReader.channel_name_to_series_descriptor"]], "data_reader (bosdyn.bddf.message_reader.messagereader property)": [[200, "bosdyn.bddf.message_reader.MessageReader.data_reader"]], "get_blob() (bosdyn.bddf.message_reader.messagereader method)": [[200, "bosdyn.bddf.message_reader.MessageReader.get_blob"]], "series_index() (bosdyn.bddf.message_reader.messagereader method)": [[200, "bosdyn.bddf.message_reader.MessageReader.series_index"]], "series_index_to_descriptor() (bosdyn.bddf.message_reader.messagereader method)": [[200, "bosdyn.bddf.message_reader.MessageReader.series_index_to_descriptor"]], "podseriesreader (class in bosdyn.bddf.pod_series_reader)": [[201, "bosdyn.bddf.pod_series_reader.PodSeriesReader"]], "bosdyn.bddf.pod_series_reader": [[201, "module-bosdyn.bddf.pod_series_reader"]], "num_data_blocks (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[201, "bosdyn.bddf.pod_series_reader.PodSeriesReader.num_data_blocks"]], "pod_type (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[201, "bosdyn.bddf.pod_series_reader.PodSeriesReader.pod_type"]], "read_samples() (bosdyn.bddf.pod_series_reader.podseriesreader method)": [[201, "bosdyn.bddf.pod_series_reader.PodSeriesReader.read_samples"]], "series_descriptor (bosdyn.bddf.pod_series_reader.podseriesreader property)": [[201, "bosdyn.bddf.pod_series_reader.PodSeriesReader.series_descriptor"]], "podserieswriter (class in bosdyn.bddf.pod_series_writer)": [[202, "bosdyn.bddf.pod_series_writer.PodSeriesWriter"]], "bosdyn.bddf.pod_series_writer": [[202, "module-bosdyn.bddf.pod_series_writer"]], "finish_block() (bosdyn.bddf.pod_series_writer.podserieswriter method)": [[202, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.finish_block"]], "series_spec (bosdyn.bddf.pod_series_writer.podserieswriter property)": [[202, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.series_spec"]], "series_type (bosdyn.bddf.pod_series_writer.podserieswriter property)": [[202, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.series_type"]], "write() (bosdyn.bddf.pod_series_writer.podserieswriter method)": [[202, "bosdyn.bddf.pod_series_writer.PodSeriesWriter.write"]], "protobufchannelreader (class in bosdyn.bddf.protobuf_channel_reader)": [[203, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader"]], "protobufchannelreader.iterator (class in bosdyn.bddf.protobuf_channel_reader)": [[203, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.Iterator"]], "bosdyn.bddf.protobuf_channel_reader": [[203, "module-bosdyn.bddf.protobuf_channel_reader"]], "get_message() (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader method)": [[203, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.get_message"]], "num_messages (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader property)": [[203, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.num_messages"]], "series_descriptor (bosdyn.bddf.protobuf_channel_reader.protobufchannelreader property)": [[203, "bosdyn.bddf.protobuf_channel_reader.ProtobufChannelReader.series_descriptor"]], "protobufreader (class in bosdyn.bddf.protobuf_reader)": [[204, "bosdyn.bddf.protobuf_reader.ProtobufReader"]], "bosdyn.bddf.protobuf_reader": [[204, "module-bosdyn.bddf.protobuf_reader"]], "get_message() (bosdyn.bddf.protobuf_reader.protobufreader method)": [[204, "bosdyn.bddf.protobuf_reader.ProtobufReader.get_message"]], "protobufserieswriter (class in bosdyn.bddf.protobuf_series_writer)": [[205, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter"]], "bosdyn.bddf.protobuf_series_writer": [[205, "module-bosdyn.bddf.protobuf_series_writer"]], "series_spec (bosdyn.bddf.protobuf_series_writer.protobufserieswriter property)": [[205, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.series_spec"]], "series_type (bosdyn.bddf.protobuf_series_writer.protobufserieswriter property)": [[205, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.series_type"]], "write() (bosdyn.bddf.protobuf_series_writer.protobufserieswriter method)": [[205, "bosdyn.bddf.protobuf_series_writer.ProtobufSeriesWriter.write"]], "streamdatareader (class in bosdyn.bddf.stream_data_reader)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader"]], "bosdyn.bddf.stream_data_reader": [[206, "module-bosdyn.bddf.stream_data_reader"]], "eof (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.eof"]], "read_checksum (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_checksum"]], "read_data_block() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_data_block"]], "read_next_block() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.read_next_block"]], "series_block_index() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_block_index"]], "series_block_indexes (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_block_indexes"]], "series_descriptor() (bosdyn.bddf.stream_data_reader.streamdatareader method)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.series_descriptor"]], "stream_file_index (bosdyn.bddf.stream_data_reader.streamdatareader property)": [[206, "bosdyn.bddf.stream_data_reader.StreamDataReader.stream_file_index"]], "bosdyn.deprecated": [[207, "module-bosdyn.deprecated"]], "moved_to() (in module bosdyn.deprecated)": [[207, "bosdyn.deprecated.moved_to"]], "renamed_to() (in module bosdyn.deprecated)": [[207, "bosdyn.deprecated.renamed_to"]], "eulerzxy (class in bosdyn.geometry)": [[208, "bosdyn.geometry.EulerZXY"]], "bosdyn.geometry": [[208, "module-bosdyn.geometry"]], "to_euler_zxy() (in module bosdyn.geometry)": [[208, "bosdyn.geometry.to_euler_zxy"]], "to_quaternion() (bosdyn.geometry.eulerzxy method)": [[208, "bosdyn.geometry.EulerZXY.to_quaternion"]], "datetimeparseerror": [[209, "bosdyn.util.DatetimeParseError"]], "robottimeconverter (class in bosdyn.util)": [[209, "bosdyn.util.RobotTimeConverter"]], "bosdyn.util": [[209, "module-bosdyn.util"]], "convert_timestamp_from_local_to_robot() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.convert_timestamp_from_local_to_robot"]], "distance_str() (in module bosdyn.util)": [[209, "bosdyn.util.distance_str"]], "duration_str() (in module bosdyn.util)": [[209, "bosdyn.util.duration_str"]], "duration_to_seconds() (in module bosdyn.util)": [[209, "bosdyn.util.duration_to_seconds"]], "format_metric() (in module bosdyn.util)": [[209, "bosdyn.util.format_metric"]], "local_seconds_from_robot_timestamp() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.local_seconds_from_robot_timestamp"]], "now_nsec() (in module bosdyn.util)": [[209, "bosdyn.util.now_nsec"]], "now_sec() (in module bosdyn.util)": [[209, "bosdyn.util.now_sec"]], "now_timestamp() (in module bosdyn.util)": [[209, "bosdyn.util.now_timestamp"]], "nsec_to_sec() (in module bosdyn.util)": [[209, "bosdyn.util.nsec_to_sec"]], "nsec_to_timestamp() (in module bosdyn.util)": [[209, "bosdyn.util.nsec_to_timestamp"]], "parse_datetime() (in module bosdyn.util)": [[209, "bosdyn.util.parse_datetime"]], "parse_timespan() (in module bosdyn.util)": [[209, "bosdyn.util.parse_timespan"]], "robot_seconds_from_local_seconds() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.robot_seconds_from_local_seconds"]], "robot_timestamp_from_local() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local"]], "robot_timestamp_from_local_nsecs() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local_nsecs"]], "robot_timestamp_from_local_secs() (bosdyn.util.robottimeconverter method)": [[209, "bosdyn.util.RobotTimeConverter.robot_timestamp_from_local_secs"]], "sec_to_nsec() (in module bosdyn.util)": [[209, "bosdyn.util.sec_to_nsec"]], "seconds_to_duration() (in module bosdyn.util)": [[209, "bosdyn.util.seconds_to_duration"]], "seconds_to_timestamp() (in module bosdyn.util)": [[209, "bosdyn.util.seconds_to_timestamp"]], "secs_to_hms() (in module bosdyn.util)": [[209, "bosdyn.util.secs_to_hms"]], "set_clock_source() (in module bosdyn.util)": [[209, "bosdyn.util.set_clock_source"]], "set_timestamp_from_datetime() (in module bosdyn.util)": [[209, "bosdyn.util.set_timestamp_from_datetime"]], "set_timestamp_from_now() (in module bosdyn.util)": [[209, "bosdyn.util.set_timestamp_from_now"]], "set_timestamp_from_nsec() (in module bosdyn.util)": [[209, "bosdyn.util.set_timestamp_from_nsec"]], "timestamp_str() (in module bosdyn.util)": [[209, "bosdyn.util.timestamp_str"]], "timestamp_to_datetime() (in module bosdyn.util)": [[209, "bosdyn.util.timestamp_to_datetime"]], "timestamp_to_nsec() (in module bosdyn.util)": [[209, "bosdyn.util.timestamp_to_nsec"]], "timestamp_to_sec() (in module bosdyn.util)": [[209, "bosdyn.util.timestamp_to_sec"]], "customparamserror": [[211, "bosdyn.mission.client.CustomParamsError"]], "incompatibleanswer": [[211, "bosdyn.mission.client.IncompatibleAnswer"]], "invalidanswercode": [[211, "bosdyn.mission.client.InvalidAnswerCode"]], "invalidquestionid": [[211, "bosdyn.mission.client.InvalidQuestionId"]], "missionclient (class in bosdyn.mission.client)": [[211, "bosdyn.mission.client.MissionClient"]], "missionresponseerror": [[211, "bosdyn.mission.client.MissionResponseError"]], "nomissionerror": [[211, "bosdyn.mission.client.NoMissionError"]], "nomissionplayingerror": [[211, "bosdyn.mission.client.NoMissionPlayingError"]], "questionalreadyanswered": [[211, "bosdyn.mission.client.QuestionAlreadyAnswered"]], "answer_question() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.answer_question"]], "answer_question_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.answer_question_async"]], "bosdyn.mission.client": [[211, "module-bosdyn.mission.client"]], "default_service_name (bosdyn.mission.client.missionclient attribute)": [[211, "bosdyn.mission.client.MissionClient.default_service_name"]], "get_info() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_info"]], "get_info_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_info_async"]], "get_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_mission"]], "get_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_mission_async"]], "get_state() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_state"]], "get_state_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.get_state_async"]], "load_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.load_mission"]], "load_mission_as_chunks() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.load_mission_as_chunks"]], "load_mission_as_chunks2() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.load_mission_as_chunks2"]], "load_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.load_mission_async"]], "pause_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.pause_mission"]], "pause_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.pause_mission_async"]], "play_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.play_mission"]], "play_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.play_mission_async"]], "restart_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.restart_mission"]], "restart_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.restart_mission_async"]], "service_type (bosdyn.mission.client.missionclient attribute)": [[211, "bosdyn.mission.client.MissionClient.service_type"]], "stop_mission() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.stop_mission"]], "stop_mission_async() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.stop_mission_async"]], "timesync_endpoint (bosdyn.mission.client.missionclient property)": [[211, "bosdyn.mission.client.MissionClient.timesync_endpoint"]], "update_from() (bosdyn.mission.client.missionclient method)": [[211, "bosdyn.mission.client.MissionClient.update_from"]], "error (bosdyn.mission.constants.result attribute)": [[212, "bosdyn.mission.constants.Result.ERROR"]], "failure (bosdyn.mission.constants.result attribute)": [[212, "bosdyn.mission.constants.Result.FAILURE"]], "running (bosdyn.mission.constants.result attribute)": [[212, "bosdyn.mission.constants.Result.RUNNING"]], "result (class in bosdyn.mission.constants)": [[212, "bosdyn.mission.constants.Result"]], "success (bosdyn.mission.constants.result attribute)": [[212, "bosdyn.mission.constants.Result.SUCCESS"]], "bosdyn.mission.constants": [[212, "module-bosdyn.mission.constants"]], "compileerror": [[213, "bosdyn.mission.exceptions.CompileError"]], "inaccessibleparametererror": [[213, "bosdyn.mission.exceptions.InaccessibleParameterError"]], "messageoverrideerror": [[213, "bosdyn.mission.exceptions.MessageOverrideError"]], "missingparametererror": [[213, "bosdyn.mission.exceptions.MissingParameterError"]], "nodeunreferenceableerror": [[213, "bosdyn.mission.exceptions.NodeUnreferenceableError"]], "unknowntype": [[213, "bosdyn.mission.exceptions.UnknownType"]], "bosdyn.mission.exceptions": [[213, "module-bosdyn.mission.exceptions"]], "get_node_details() (bosdyn.mission.exceptions.compileerror method)": [[213, "bosdyn.mission.exceptions.CompileError.get_node_details"]], "node_impl() (bosdyn.mission.exceptions.compileerror method)": [[213, "bosdyn.mission.exceptions.CompileError.node_impl"]], "node_name() (bosdyn.mission.exceptions.compileerror method)": [[213, "bosdyn.mission.exceptions.CompileError.node_name"]], "invalidsessionid": [[214, "bosdyn.mission.remote_client.InvalidSessionId"]], "missinginputs": [[214, "bosdyn.mission.remote_client.MissingInputs"]], "missingleases": [[214, "bosdyn.mission.remote_client.MissingLeases"]], "remoteclient (class in bosdyn.mission.remote_client)": [[214, "bosdyn.mission.remote_client.RemoteClient"]], "bosdyn.mission.remote_client": [[214, "module-bosdyn.mission.remote_client"]], "default_service_name (bosdyn.mission.remote_client.remoteclient attribute)": [[214, "bosdyn.mission.remote_client.RemoteClient.default_service_name"]], "establish_session() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.establish_session"]], "establish_session_async() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.establish_session_async"]], "get_service_info() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.get_service_info"]], "get_service_info_async() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.get_service_info_async"]], "service_type (bosdyn.mission.remote_client.remoteclient attribute)": [[214, "bosdyn.mission.remote_client.RemoteClient.service_type"]], "stop() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.stop"]], "stop_async() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.stop_async"]], "teardown_session() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.teardown_session"]], "teardown_session_async() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.teardown_session_async"]], "tick() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.tick"]], "tick_async() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.tick_async"]], "tree_status_from_tick_status() (in module bosdyn.mission.remote_client)": [[214, "bosdyn.mission.remote_client.tree_status_from_tick_status"]], "update_from() (bosdyn.mission.remote_client.remoteclient method)": [[214, "bosdyn.mission.remote_client.RemoteClient.update_from"]], "responsecontext (class in bosdyn.mission.server_util)": [[215, "bosdyn.mission.server_util.ResponseContext"]], "bosdyn.mission.server_util": [[215, "module-bosdyn.mission.server_util"]], "invalidconversion": [[216, "bosdyn.mission.util.InvalidConversion"]], "resultfromproto (class in bosdyn.mission.util)": [[216, "bosdyn.mission.util.ResultFromProto"]], "bosdyn.mission.util": [[216, "module-bosdyn.mission.util"]], "create_value() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.create_value"]], "define_blackboard() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.define_blackboard"]], "field_desc_to_pb_type() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.field_desc_to_pb_type"]], "get_value_from_constant_value_message() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.get_value_from_constant_value_message"]], "get_value_from_value_message() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.get_value_from_value_message"]], "is_string_identifier() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.is_string_identifier"]], "most_restrictive_travel_params() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.most_restrictive_travel_params"]], "node_spec_to_short_string() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.node_spec_to_short_string"]], "one_line_str() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.one_line_str"]], "proto_enum_to_result_constant() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.proto_enum_to_result_constant"]], "proto_from_results (bosdyn.mission.util.resultfromproto attribute)": [[216, "bosdyn.mission.util.ResultFromProto.proto_from_results"]], "proto_from_tuple() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.proto_from_tuple"]], "python_type_to_pb_type() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.python_type_to_pb_type"]], "python_var_to_value() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.python_var_to_value"]], "result_constant_to_proto_enum() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.result_constant_to_proto_enum"]], "results_from_proto (bosdyn.mission.util.resultfromproto attribute)": [[216, "bosdyn.mission.util.ResultFromProto.results_from_proto"]], "safe_pb_type_to_string() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.safe_pb_type_to_string"]], "set_blackboard() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.set_blackboard"]], "severity_to_log_level() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.severity_to_log_level"]], "tree_to_string() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.tree_to_string"]], "type_to_field_name() (in module bosdyn.mission.util)": [[216, "bosdyn.mission.util.type_to_field_name"]], "client (class in bosdyn.orbit.client)": [[218, "bosdyn.orbit.client.Client"]], "authenticate_with_api_token() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.authenticate_with_api_token"]], "bosdyn.orbit.client": [[218, "module-bosdyn.orbit.client"]], "create_client() (in module bosdyn.orbit.client)": [[218, "bosdyn.orbit.client.create_client"]], "delete_backup() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_backup"]], "delete_calendar_event() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_calendar_event"]], "delete_resource() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_resource"]], "delete_robot() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_robot"]], "delete_site_walk() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_site_walk"]], "delete_webhook() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.delete_webhook"]], "get_calendar() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_calendar"]], "get_image() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_image"]], "get_image_response() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_image_response"]], "get_resource() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_resource"]], "get_robot_by_hostname() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_robot_by_hostname"]], "get_robot_info() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_robot_info"]], "get_robots() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_robots"]], "get_run_archives_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_archives_by_id"]], "get_run_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_by_id"]], "get_run_capture_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_capture_by_id"]], "get_run_captures() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_captures"]], "get_run_event_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_event_by_id"]], "get_run_events() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_run_events"]], "get_runs() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_runs"]], "get_site_dock_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_dock_by_id"]], "get_site_docks() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_docks"]], "get_site_element_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_element_by_id"]], "get_site_elements() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_elements"]], "get_site_walk_archive_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_walk_archive_by_id"]], "get_site_walk_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_walk_by_id"]], "get_site_walks() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_site_walks"]], "get_system_time() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_system_time"]], "get_version() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_version"]], "get_webhook() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_webhook"]], "get_webhook_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.get_webhook_by_id"]], "patch_anomaly_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.patch_anomaly_by_id"]], "patch_bulk_close_anomalies() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.patch_bulk_close_anomalies"]], "patch_resource() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.patch_resource"]], "post_backup_task() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_backup_task"]], "post_calendar_event() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_calendar_event"]], "post_calendar_event_disable_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_calendar_event_disable_by_id"]], "post_calendar_event_enable_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_calendar_event_enable_by_id"]], "post_calendar_events_disable_all() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_calendar_events_disable_all"]], "post_calendar_events_enable_all() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_calendar_events_enable_all"]], "post_dispatch_mission_to_robot() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_dispatch_mission_to_robot"]], "post_export_as_walk() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_export_as_walk"]], "post_import_from_walk() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_import_from_walk"]], "post_resource() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_resource"]], "post_return_to_dock_mission() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_return_to_dock_mission"]], "post_robot() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_robot"]], "post_site_dock() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_site_dock"]], "post_site_element() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_site_element"]], "post_site_walk() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_site_walk"]], "post_webhook() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_webhook"]], "post_webhook_by_id() (bosdyn.orbit.client.client method)": [[218, "bosdyn.orbit.client.Client.post_webhook_by_id"]], "unauthenticatedclienterror": [[219, "bosdyn.orbit.exceptions.UnauthenticatedClientError"]], "webhooksignatureverificationerror": [[219, "bosdyn.orbit.exceptions.WebhookSignatureVerificationError"]], "bosdyn.orbit.exceptions": [[219, "module-bosdyn.orbit.exceptions"]], "bosdyn.orbit.utils": [[220, "module-bosdyn.orbit.utils"]], "data_capture_url_from_run_capture_resources() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.data_capture_url_from_run_capture_resources"]], "data_capture_urls_from_run_events() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.data_capture_urls_from_run_events"]], "datetime_from_isostring() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.datetime_from_isostring"]], "get_action_names_from_run_events() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_action_names_from_run_events"]], "get_api_token() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_api_token"]], "get_latest_created_at_for_run_captures() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_created_at_for_run_captures"]], "get_latest_created_at_for_run_events() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_created_at_for_run_events"]], "get_latest_end_time_for_runs() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_end_time_for_runs"]], "get_latest_run_capture_resources() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_run_capture_resources"]], "get_latest_run_in_progress() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_run_in_progress"]], "get_latest_run_resource() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.get_latest_run_resource"]], "print_json_response() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.print_json_response"]], "validate_webhook_payload() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.validate_webhook_payload"]], "write_image() (in module bosdyn.orbit.utils)": [[220, "bosdyn.orbit.utils.write_image"]], "scoutclient (class in bosdyn.scout.client)": [[222, "bosdyn.scout.client.ScoutClient"]], "authenticate_with_api_token() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.authenticate_with_api_token"]], "authenticate_with_password() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.authenticate_with_password"]], "bosdyn.scout.client": [[222, "module-bosdyn.scout.client"]], "create_scout_client() (in module bosdyn.scout.client)": [[222, "bosdyn.scout.client.create_scout_client"]], "delete_calendar_event() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.delete_calendar_event"]], "delete_resource() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.delete_resource"]], "delete_robot() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.delete_robot"]], "delete_site_walk() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.delete_site_walk"]], "delete_webhook() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.delete_webhook"]], "get_calendar() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_calendar"]], "get_image() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_image"]], "get_image_response() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_image_response"]], "get_resource() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_resource"]], "get_robot_by_hostname() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_robot_by_hostname"]], "get_robot_info() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_robot_info"]], "get_robots() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_robots"]], "get_run_archives_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_archives_by_id"]], "get_run_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_by_id"]], "get_run_capture_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_capture_by_id"]], "get_run_captures() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_captures"]], "get_run_event_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_event_by_id"]], "get_run_events() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_run_events"]], "get_runs() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_runs"]], "get_scout_system_time() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_scout_system_time"]], "get_scout_version() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_scout_version"]], "get_site_dock_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_dock_by_id"]], "get_site_docks() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_docks"]], "get_site_element_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_element_by_id"]], "get_site_elements() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_elements"]], "get_site_walk_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_walk_by_id"]], "get_site_walks() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_site_walks"]], "get_webhook() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_webhook"]], "get_webhook_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.get_webhook_by_id"]], "post_calendar_event() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_calendar_event"]], "post_calendar_event_disable_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_calendar_event_disable_by_id"]], "post_calendar_event_enable_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_calendar_event_enable_by_id"]], "post_calendar_events_disable_all() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_calendar_events_disable_all"]], "post_calendar_events_enable_all() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_calendar_events_enable_all"]], "post_dispatch_mission_to_robot() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_dispatch_mission_to_robot"]], "post_export_as_walk() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_export_as_walk"]], "post_import_from_walk() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_import_from_walk"]], "post_resource() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_resource"]], "post_return_to_dock_mission() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_return_to_dock_mission"]], "post_robot() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_robot"]], "post_site_dock() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_site_dock"]], "post_site_element() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_site_element"]], "post_site_walk() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_site_walk"]], "post_webhook() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_webhook"]], "post_webhook_by_id() (bosdyn.scout.client.scoutclient method)": [[222, "bosdyn.scout.client.ScoutClient.post_webhook_by_id"]], "bosdyn.scout.exceptions": [[223, "module-bosdyn.scout.exceptions"]], "bosdyn.scout.utils": [[224, "module-bosdyn.scout.utils"]], "data_capture_url_from_run_capture_resources() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.data_capture_url_from_run_capture_resources"]], "data_capture_urls_from_run_events() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.data_capture_urls_from_run_events"]], "get_credentials() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_credentials"]], "get_latest_created_at_for_run_captures() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_created_at_for_run_captures"]], "get_latest_created_at_for_run_events() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_created_at_for_run_events"]], "get_latest_end_time_for_runs() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_end_time_for_runs"]], "get_latest_run_capture_resources() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_run_capture_resources"]], "get_latest_run_in_progress() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_run_in_progress"]], "get_latest_run_resource() (in module bosdyn.scout.utils)": [[224, "bosdyn.scout.utils.get_latest_run_resource"]]}})
                                                                                                                                                                                                                                              \ No newline at end of file
                                                                                                                                                                                                                                              diff --git a/docs/orbit/docs.html b/docs/orbit/docs.html
                                                                                                                                                                                                                                              index e6790e2f7..4ebc74d76 100644
                                                                                                                                                                                                                                              --- a/docs/orbit/docs.html
                                                                                                                                                                                                                                              +++ b/docs/orbit/docs.html
                                                                                                                                                                                                                                              @@ -21278,14 +21278,12 @@
                                                                                                                                                                                                                                                                       u = { type: "text", value: "".concat(t, "\n") };
                                                                                                                                                                                                                                                                     if (0 === o) {
                                                                                                                                                                                                                                                                       var s = v(
                                                                                                                                                                                                                                              -                          l
                                                                                                                                                                                                                                              -                            .slice(p + 1, h)
                                                                                                                                                                                                                                              -                            .concat(
                                                                                                                                                                                                                                              -                              A({
                                                                                                                                                                                                                                              -                                children: [u],
                                                                                                                                                                                                                                              -                                className: e.properties.className,
                                                                                                                                                                                                                                              -                              })
                                                                                                                                                                                                                                              -                            ),
                                                                                                                                                                                                                                              +                          l.slice(p + 1, h).concat(
                                                                                                                                                                                                                                              +                            A({
                                                                                                                                                                                                                                              +                              children: [u],
                                                                                                                                                                                                                                              +                              className: e.properties.className,
                                                                                                                                                                                                                                              +                            })
                                                                                                                                                                                                                                              +                          ),
                                                                                                                                                                                                                                                                         i
                                                                                                                                                                                                                                                                       );
                                                                                                                                                                                                                                                                       f.push(s);
                                                                                                                                                                                                                                              @@ -81498,2120 +81496,2783 @@
                                                                                                                                                                                                                                                     window.onload = () => {
                                                                                                                                                                                                                                                       window.ui = SwaggerUIBundle({
                                                                                                                                                                                                                                                         spec: {
                                                                                                                                                                                                                                              -                "openapi": "3.0.1",
                                                                                                                                                                                                                                              -                "info": {
                                                                                                                                                                                                                                              -                  "title": "Orbit Web API",
                                                                                                                                                                                                                                              -                  "description": "The Orbit web API provides access to a variety of resources through RESTful http endpoints.",
                                                                                                                                                                                                                                              -                  "version": "4.0.0"
                                                                                                                                                                                                                                              +            openapi: "3.0.1",
                                                                                                                                                                                                                                              +            info: {
                                                                                                                                                                                                                                              +              title: "Orbit Web API",
                                                                                                                                                                                                                                              +              description:
                                                                                                                                                                                                                                              +                "The Orbit web API provides access to a variety of resources through RESTful http endpoints.",
                                                                                                                                                                                                                                              +              version: "4.1.0",
                                                                                                                                                                                                                                              +            },
                                                                                                                                                                                                                                              +            servers: [
                                                                                                                                                                                                                                              +              {
                                                                                                                                                                                                                                              +                url: "/api/v0",
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +            ],
                                                                                                                                                                                                                                              +            paths: {
                                                                                                                                                                                                                                              +              "/login": {
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Warning: This endpoint is deprecated. Use  /api_token/authenticate endpoint instead!",
                                                                                                                                                                                                                                              +                  deprecated: true,
                                                                                                                                                                                                                                              +                  tags: ["Authentication"],
                                                                                                                                                                                                                                              +                  summary: "Authenticates with username and password.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information to post a login request.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            username: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The username for the Orbit instance.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            password: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The password for the Orbit instance.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                              +                        },
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Successfully logged into the Orbit instance.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    401: {
                                                                                                                                                                                                                                              +                      description: "Unauthorized Request response.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    429: {
                                                                                                                                                                                                                                              +                      description: "Too Many Requests response.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Failed to log into the Orbit instance.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                              -                "servers": [
                                                                                                                                                                                                                                              -                  {
                                                                                                                                                                                                                                              -                    "url": "/api/v0"
                                                                                                                                                                                                                                              -                  }
                                                                                                                                                                                                                                              -                ],
                                                                                                                                                                                                                                              -                "paths": {
                                                                                                                                                                                                                                              -                  "/login": {
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "description": "Warning: This endpoint is deprecated. Use  /api_token/authenticate endpoint instead!",
                                                                                                                                                                                                                                              -                      "deprecated": true,
                                                                                                                                                                                                                                              -                      "tags": ["Authentication"],
                                                                                                                                                                                                                                              -                      "summary": "Authenticates with username and password.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information to post a login request.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "object",
                                                                                                                                                                                                                                              -                              "properties": {
                                                                                                                                                                                                                                              -                                "username": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The username for the Orbit instance."
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/api_token/authenticate": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Authentication"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Authenticates the API token that is provided in the request header. Obtain an API token from the Orbit instance and add it to the request header in the form of {'Authorization': 'Bearer ' + }",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Successfully authenticated using the provided API Token in the request header.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    400: {
                                                                                                                                                                                                                                              +                      description: "Bad Request response.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    401: {
                                                                                                                                                                                                                                              +                      description: "Unauthorized Request response.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/calendar/schedule": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Returns calendar events on the specified Orbit instance.",
                                                                                                                                                                                                                                              +                  description: "A list of active calendar events.",
                                                                                                                                                                                                                                              +                  tags: ["Calendar"],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Fetched list of active calendar events.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              activeEvents: {
                                                                                                                                                                                                                                              +                                type: "array",
                                                                                                                                                                                                                                              +                                items: {
                                                                                                                                                                                                                                              +                                  $ref: "#/components/schemas/Schedule",
                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                              -                                "password": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The password for the Orbit instance."
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully logged into the Orbit instance."
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Failed to get a list of active calendar events.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Calendar"],
                                                                                                                                                                                                                                              +                  summary: "Create a calendar event to play a mission.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description:
                                                                                                                                                                                                                                              +                      "Information of a new calendar event to add to Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          $ref: "#/components/schemas/Schedule",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "401": {
                                                                                                                                                                                                                                              -                          "description": "Unauthorized Request response."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successful operation",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/calendar/schedule/{eventid}": {
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Calendar"],
                                                                                                                                                                                                                                              +                  summary: "Removes the specified calendar event.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "eventid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of the calendar event",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Calendar event deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete calendar event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/calendar/disable-enable": {
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Calendar"],
                                                                                                                                                                                                                                              +                  summary: "Disable/enable mission scheduled on Orbit.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description:
                                                                                                                                                                                                                                              +                      "Information on disable reason and eventId (optional).",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            disableReason: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The reason for disabling the mission. Enables the mission if left empty.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            eventId: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "(Optional) The eventId of the specific scheduled mission. Do not use this field if all scheduled missions are targets.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "429": {
                                                                                                                                                                                                                                              -                          "description": "Too Many Requests response."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Successfully completed the disable/enable request.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Failed to complete the disable/enable request.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/runs/{runUuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieve a run by its uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              +                  tags: ["Runs"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runUuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "A run's uuid",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Fetched run details.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/Run",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to log into the Orbit instance."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Failed to get run details.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/api_token/authenticate": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Authentication"],
                                                                                                                                                                                                                                              -                      "summary": "Authenticates the API token that is provided in the request header. Obtain an API token from the Orbit instance and add it to the request header in the form of {'Authorization': 'Bearer ' + }",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully authenticated using the provided API Token in the request header."
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/runs/": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Query a collection of runs.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Returns a list of run resources based on the provided query parameters. A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              +                  tags: ["Runs"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "startTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs with a start_time greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "endTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs with a start_time less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "modifiedAt",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs with a modified_at time greater than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missions",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only include runs performing one of the provided missions. The value should be a single or a comma-separated list of mission names.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "array",
                                                                                                                                                                                                                                              +                        items: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "400": {
                                                                                                                                                                                                                                              -                          "description": "Bad Request response."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robots",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only include runs performed by the provided robots. The value should be a single or a comma-separated list of robot hostnames.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "array",
                                                                                                                                                                                                                                              +                        items: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "401": {
                                                                                                                                                                                                                                              -                          "description": "Unauthorized Request response."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  },
                                                                                                                                                                                                                                              -                  "/calendar/disable-enable": {
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["Calendar"],
                                                                                                                                                                                                                                              -                      "summary": "Disable/enable mission scheduled on Orbit.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information on disable reason and eventId (optional).",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "object",
                                                                                                                                                                                                                                              -                              "properties": {
                                                                                                                                                                                                                                              -                                "disableReason": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The reason for disabling the mission. Enables the mission if left empty."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "types",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only include runs of this type. The value can be either 0 or 1 corresponding to mission and teleoperation respectively.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "array",
                                                                                                                                                                                                                                              +                        items: {
                                                                                                                                                                                                                                              +                          enum: [0, 1],
                                                                                                                                                                                                                                              +                        },
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotHostname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs performed by a robot with this hostname",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotNickname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs performed by a robot with this nickname.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotSerial",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include runs performed by a robot with this serial.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "limit",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only return a number of runs up to this value.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "integer",
                                                                                                                                                                                                                                              +                        default: 20,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "offset",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Skip this number of runs before returning.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "integer",
                                                                                                                                                                                                                                              +                        default: 0,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "orderBy",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Criteria for ordering results.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        default: "newest",
                                                                                                                                                                                                                                              +                        enum: [
                                                                                                                                                                                                                                              +                          "robots",
                                                                                                                                                                                                                                              +                          "missions",
                                                                                                                                                                                                                                              +                          "missionStatus",
                                                                                                                                                                                                                                              +                          "newest",
                                                                                                                                                                                                                                              +                          "oldest",
                                                                                                                                                                                                                                              +                          "mission",
                                                                                                                                                                                                                                              +                          "sessions",
                                                                                                                                                                                                                                              +                          "lastRunStartTime",
                                                                                                                                                                                                                                              +                        ],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "format",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The data format of the response. Set format to csv to download a csv file of summary run stats. By default, format is set to json which returns run_resources.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        default: "json",
                                                                                                                                                                                                                                              +                        enum: ["json", "csv"],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Fetched run resource.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              limit: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              offset: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              total: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              resources: {
                                                                                                                                                                                                                                              +                                type: "array",
                                                                                                                                                                                                                                              +                                items: {
                                                                                                                                                                                                                                              +                                  $ref: "#/components/schemas/Run",
                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                              -                                "eventId": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "(Optional) The eventId of the specific scheduled mission. Do not use this field if all scheduled missions are targets."
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully completed the disable/enable request."
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Failed to get run details.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/run_events/": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieve a collection of run events.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Returns a list of run events which match the provided query parameters. A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              +                  tags: ["Run Events"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runUuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events which occurred during the run with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "actionUuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events which represent playback of actions with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "elementId",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events which represent playback of a SiteElement with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotHostname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events performed by a robot with this hostname",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotNickname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events performed by a robot with this nickname.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotSerial",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events performed by a robot with this serial.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missionName",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events which occurred during playback of a mission with this name.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "excludeNonAlerts",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "If true, only include run_events that generated an alert.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "boolean",
                                                                                                                                                                                                                                              +                        default: false,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "startTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events with a time greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "endTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events with a time less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "startCreatedAt",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events with a created_at greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "endCreatedAt",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_events with a created_at less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "limit",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only return a number of resources up to this value.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "integer",
                                                                                                                                                                                                                                              +                        default: 20,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "orderBy",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Criteria for ordering results.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        enum: ["time", "-time", "created_at", "-created_at"],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Run Events were fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              limit: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              offset: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              total: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              resources: {
                                                                                                                                                                                                                                              +                                type: "array",
                                                                                                                                                                                                                                              +                                items: {
                                                                                                                                                                                                                                              +                                  $ref: "#/components/schemas/RunEvent",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to complete the disable/enable request."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/calendar/schedule": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Returns calendar events on the specified Orbit instance.",
                                                                                                                                                                                                                                              -                      "description": "A list of active calendar events.",
                                                                                                                                                                                                                                              -                      "tags": ["Calendar"],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Fetched list of active calendar events.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "activeEvents": {
                                                                                                                                                                                                                                              -                                    "type": "array",
                                                                                                                                                                                                                                              -                                    "items": {
                                                                                                                                                                                                                                              -                                      "$ref": "#/components/schemas/Schedule"
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/run_events/{runEventUuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieves a single run event resource by uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              +                  tags: ["Run Events"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runEventUuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of run",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Run Event was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/RunEvent",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to get a list of active calendar events."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["Calendar"],
                                                                                                                                                                                                                                              -                      "summary": "Create a calendar event to play a mission.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a new calendar event to add to Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "$ref": "#/components/schemas/Schedule"
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/run_captures/": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieve a collection of run captures.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Returns a list of run captures which match the provided query parameters. A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              +                  tags: ["Run Captures"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runEventUuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures which occurred during the run event with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "actionUuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures from playbacks of an action with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "actionName",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures from playbacks of an action with this name.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotHostname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures from a robot with this hostname",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotNickname",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures from a robot with this nickname.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotSerial",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures from a robot with this serial.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missionName",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures which occurred during playback of a mission with this name.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "startCreatedAt",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures with a created_at greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "endCreatedAt",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Include run_captures with a created_at less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "limit",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only return a number of resources up to this value.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "integer",
                                                                                                                                                                                                                                              +                        default: 20,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "orderBy",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Criteria for ordering results.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        enum: ["time", "-time", "created_at", "-created_at"],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Run Captures were fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              limit: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              offset: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              total: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              resources: {
                                                                                                                                                                                                                                              +                                type: "array",
                                                                                                                                                                                                                                              +                                items: {
                                                                                                                                                                                                                                              +                                  $ref: "#/components/schemas/RunCapture",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successful operation"
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/calendar/schedule/{eventid}": {
                                                                                                                                                                                                                                              -                    "delete": {
                                                                                                                                                                                                                                              -                      "tags": ["Calendar"],
                                                                                                                                                                                                                                              -                      "summary": "Removes the specified calendar event.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "eventid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of the calendar event",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Calendar event deleted successfully."
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/run_captures/{runCaptureUuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieves a single run capture resource by uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              +                  tags: ["Run Captures"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runCaptureUuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of run capture",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Run Capture was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/RunCapture",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not delete calendar event."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/runs/{runUuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieve a run by its uuid.",
                                                                                                                                                                                                                                              -                      "description": "A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              -                      "tags": ["Runs"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runUuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "A run's uuid",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Fetched run details.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/Run"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/run_archives/{runId}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Downloads a zip file containing a run's data.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "All run events, images, and metadata for the given run are packaged into a zip file and downloaded upon this request. The result is similar to what can be downloaded from the tablet after mission execution.",
                                                                                                                                                                                                                                              +                  tags: ["Run Archives"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of run",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "File generated.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/zip": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "string",
                                                                                                                                                                                                                                              +                            format: "binary",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to get run details."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not generate file.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/runs/": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Query a collection of runs.",
                                                                                                                                                                                                                                              -                      "description": "Returns a list of run resources based on the provided query parameters. A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              -                      "tags": ["Runs"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "startTime",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs with a start_time greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/runs/facets/actions/{missionName}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a list of action descriptions which match query params.",
                                                                                                                                                                                                                                              +                  tags: ["Run Facets"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missionName",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "The name of the mission",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Action facets delivered.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              type: "object",
                                                                                                                                                                                                                                              +                              properties: {
                                                                                                                                                                                                                                              +                                id: {
                                                                                                                                                                                                                                              +                                  type: "string",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                name: {
                                                                                                                                                                                                                                              +                                  type: "string",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                channels: {
                                                                                                                                                                                                                                              +                                  type: "array",
                                                                                                                                                                                                                                              +                                  items: {
                                                                                                                                                                                                                                              +                                    type: "string",
                                                                                                                                                                                                                                              +                                  },
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "endTime",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs with a start_time less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/runs/facets/robots": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Run Facets"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a list of robot descriptions which match query params.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Robot facets delivered.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              type: "object",
                                                                                                                                                                                                                                              +                              properties: {
                                                                                                                                                                                                                                              +                                robot_hostname: {
                                                                                                                                                                                                                                              +                                  type: "string",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                robot_serial: {
                                                                                                                                                                                                                                              +                                  type: "string",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                robot_nickname: {
                                                                                                                                                                                                                                              +                                  type: "string",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "modifiedAt",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs with a modified_at time greater than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/runs/facets/missions": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Run Facets"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a list of every unique mission which produced a run.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Mission facets delivered.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              type: "object",
                                                                                                                                                                                                                                              +                              properties: {
                                                                                                                                                                                                                                              +                                limit: {
                                                                                                                                                                                                                                              +                                  type: "integer",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                offset: {
                                                                                                                                                                                                                                              +                                  type: "integer",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                total: {
                                                                                                                                                                                                                                              +                                  type: "integer",
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                                resources: {
                                                                                                                                                                                                                                              +                                  type: "array",
                                                                                                                                                                                                                                              +                                  items: {
                                                                                                                                                                                                                                              +                                    type: "object",
                                                                                                                                                                                                                                              +                                    properties: {
                                                                                                                                                                                                                                              +                                      missionName: {
                                                                                                                                                                                                                                              +                                        type: "string",
                                                                                                                                                                                                                                              +                                      },
                                                                                                                                                                                                                                              +                                      sessionCount: {
                                                                                                                                                                                                                                              +                                        type: "integer",
                                                                                                                                                                                                                                              +                                      },
                                                                                                                                                                                                                                              +                                      lastRunStartTime: {
                                                                                                                                                                                                                                              +                                        type: "string",
                                                                                                                                                                                                                                              +                                      },
                                                                                                                                                                                                                                              +                                    },
                                                                                                                                                                                                                                              +                                  },
                                                                                                                                                                                                                                              +                                },
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missions",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only include runs performing one of the provided missions. The value should be a single or a comma-separated list of mission names.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "array",
                                                                                                                                                                                                                                              -                            "items": {
                                                                                                                                                                                                                                              -                              "type": "string"
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_walks/": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieve a collection of all SiteWalks on Orbit.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Returns the entire list of SiteWalks currently on Orbit",
                                                                                                                                                                                                                                              +                  tags: ["SiteWalks"],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "A list of SiteWalks was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/SiteWalk",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robots",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only include runs performed by the provided robots. The value should be a single or a comma-separated list of robot hostnames.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "array",
                                                                                                                                                                                                                                              -                            "items": {
                                                                                                                                                                                                                                              -                              "type": "string"
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_walks/{uuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieves a single SiteWalk resource by uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation.",
                                                                                                                                                                                                                                              +                  tags: ["SiteWalks"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of SiteWalk",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "A SiteWalk was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteWalk",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "types",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only include runs of this type. The value can be either 0 or 1 corresponding to mission and teleoperation respectively.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "array",
                                                                                                                                                                                                                                              -                            "items": {
                                                                                                                                                                                                                                              -                              "enum": [0, 1]
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["SiteWalks"],
                                                                                                                                                                                                                                              +                  summary: "Removes the specified SiteWalk.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of SiteWalk",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "SiteWalk deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete SiteWalk.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_walks": {
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["SiteWalks"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Adds a new SiteWalk to Orbit. It also updates a pre-existing SiteWalk using the associated UUID.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a new SiteWalk in Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "array",
                                                                                                                                                                                                                                              +                          items: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteWalk",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotHostname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs performed by a robot with this hostname",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successful operation",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteWalk",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotNickname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs performed by a robot with this nickname.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_elements/{uuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieves a single SiteElement resource by uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteElement describes what a robot should do and where to do it.",
                                                                                                                                                                                                                                              +                  tags: ["SiteElements"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of SiteElement",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "A SiteElement was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteElement",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotSerial",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include runs performed by a robot with this serial.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_elements": {
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["SiteElements"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Adds a new SiteElement to Orbit. It also updates a pre-existing SiteElement using the associated UUID.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a new SiteElement in Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "array",
                                                                                                                                                                                                                                              +                          items: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteElement",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "limit",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only return a number of runs up to this value.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "integer",
                                                                                                                                                                                                                                              -                            "default": 20
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successful operation",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/SiteElement",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "offset",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Skip this number of runs before returning.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "integer",
                                                                                                                                                                                                                                              -                            "default": 0
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_docks/{uuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieves a single SiteDock resource by uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteDock is a representation of robot's docking station.",
                                                                                                                                                                                                                                              +                  tags: ["SiteDocks"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of SiteDock",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "A SiteDock was fetched.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteDock",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "orderBy",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Criteria for ordering results.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "default": "newest",
                                                                                                                                                                                                                                              -                            "enum": [
                                                                                                                                                                                                                                              -                              "robots",
                                                                                                                                                                                                                                              -                              "missions",
                                                                                                                                                                                                                                              -                              "missionStatus",
                                                                                                                                                                                                                                              -                              "newest",
                                                                                                                                                                                                                                              -                              "oldest",
                                                                                                                                                                                                                                              -                              "mission",
                                                                                                                                                                                                                                              -                              "sessions",
                                                                                                                                                                                                                                              -                              "lastRunStartTime"
                                                                                                                                                                                                                                              -                            ]
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Something went wrong.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/site_docks": {
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["SiteDocks"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Adds a new SiteDock to Orbit. It also updates a pre-existing SiteDock using the associated UUID.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a new SiteDock in Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "array",
                                                                                                                                                                                                                                              +                          items: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/SiteDock",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "format",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "The data format of the response. Set format to csv to download a csv file of summary run stats. By default, format is set to json which returns run_resources.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "default": "json",
                                                                                                                                                                                                                                              -                            "enum": ["json", "csv"]
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Fetched run resource.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "limit": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "offset": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "total": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "resources": {
                                                                                                                                                                                                                                              -                                    "type": "array",
                                                                                                                                                                                                                                              -                                    "items": {
                                                                                                                                                                                                                                              -                                      "$ref": "#/components/schemas/Run"
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successful operation",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/SiteDock",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to get run details."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/run_events/": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieve a collection of run events.",
                                                                                                                                                                                                                                              -                      "description": "Returns a list of run events which match the provided query parameters. A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Events"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runUuid",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events which occurred during the run with this uuid.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/robots": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Robots"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a complete list of robot information on Orbit. This includes which robot is assigned to each slot.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successfully retrieved robots.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/Robot",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "actionUuid",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events which represent playback of actions with this uuid.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Robots"],
                                                                                                                                                                                                                                              +                  summary: "Adds a new robot to Orbit.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a robot in Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            hostname: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The hostname where the robot can be reached.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            nickname: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description: "A descriptive label for the robot.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            username: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The username that Orbit is connected to the robot with.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            password: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The password of the account Orbit will use to connect to the robot.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "elementId",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events which represent playback of a SiteElement with this uuid.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotHostname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events performed by a robot with this hostname",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotNickname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events performed by a robot with this nickname.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotSerial",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events performed by a robot with this serial.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missionName",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events which occurred during playback of a mission with this name.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "excludeNonAlerts",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "If true, only include run_events that generated an alert.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "boolean",
                                                                                                                                                                                                                                              -                            "default": false
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "startTime",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events with a time greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "endTime",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events with a time less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "startCreatedAt",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events with a created_at greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "endCreatedAt",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_events with a created_at less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "limit",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only return a number of resources up to this value.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "integer",
                                                                                                                                                                                                                                              -                            "default": 20
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "orderBy",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Criteria for ordering results.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "enum": ["time", "-time", "created_at", "-created_at"]
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Run Events were fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "limit": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "offset": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "total": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "resources": {
                                                                                                                                                                                                                                              -                                    "type": "array",
                                                                                                                                                                                                                                              -                                    "items": {
                                                                                                                                                                                                                                              -                                      "$ref": "#/components/schemas/RunEvent"
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  },
                                                                                                                                                                                                                                              -                  "/run_events/{runEventUuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a single run event resource by uuid.",
                                                                                                                                                                                                                                              -                      "description": "A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Events"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runEventUuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of run",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Run Event was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/RunEvent"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  },
                                                                                                                                                                                                                                              -                  "/run_captures/": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieve a collection of run captures.",
                                                                                                                                                                                                                                              -                      "description": "Returns a list of run captures which match the provided query parameters. A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Captures"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runEventUuid",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures which occurred during the run event with this uuid.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "actionUuid",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures from playbacks of an action with this uuid.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "actionName",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures from playbacks of an action with this name.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotHostname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures from a robot with this hostname",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotNickname",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures from a robot with this nickname.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotSerial",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures from a robot with this serial.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missionName",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures which occurred during playback of a mission with this name.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "startCreatedAt",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures with a created_at greater than or equal to this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "endCreatedAt",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Include run_captures with a created_at less than this value. The value should be in isostring format. For e.g: '2023-06-05T19:29:35.066Z' ",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "format": "date-time"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "limit",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Only return a number of resources up to this value.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "integer",
                                                                                                                                                                                                                                              -                            "default": 20
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "orderBy",
                                                                                                                                                                                                                                              -                          "in": "query",
                                                                                                                                                                                                                                              -                          "description": "Criteria for ordering results.",
                                                                                                                                                                                                                                              -                          "required": false,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string",
                                                                                                                                                                                                                                              -                            "enum": ["time", "-time", "created_at", "-created_at"]
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Run Captures were fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "limit": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "offset": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "total": {
                                                                                                                                                                                                                                              -                                    "type": "integer"
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "resources": {
                                                                                                                                                                                                                                              -                                    "type": "array",
                                                                                                                                                                                                                                              -                                    "items": {
                                                                                                                                                                                                                                              -                                      "$ref": "#/components/schemas/RunCapture"
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  },
                                                                                                                                                                                                                                              -                  "/run_captures/{runCaptureUuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a single run capture resource by uuid.",
                                                                                                                                                                                                                                              -                      "description": "A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Captures"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runCaptureUuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of run capture",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Run Capture was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/RunCapture"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/run_archives/{runId}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Downloads a zip file containing a run's data.",
                                                                                                                                                                                                                                              -                      "description": "All run events, images, and metadata for the given run are packaged into a zip file and downloaded upon this request. The result is similar to what can be downloaded from the tablet after mission execution.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Archives"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "runId",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of run",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "File generated.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/zip": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "string",
                                                                                                                                                                                                                                              -                                "format": "binary"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successful operation",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              robotIndex: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                                description:
                                                                                                                                                                                                                                              +                                  "The index to which the added robot was assigned.",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not generate file."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/runs/facets/actions/{missionName}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a list of action descriptions which match query params.",
                                                                                                                                                                                                                                              -                      "tags": ["Run Facets"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missionName",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "The name of the mission",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Action facets delivered.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "type": "object",
                                                                                                                                                                                                                                              -                                  "properties": {
                                                                                                                                                                                                                                              -                                    "id": {
                                                                                                                                                                                                                                              -                                      "type": "string"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "name": {
                                                                                                                                                                                                                                              -                                      "type": "string"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "channels": {
                                                                                                                                                                                                                                              -                                      "type": "array",
                                                                                                                                                                                                                                              -                                      "items": {
                                                                                                                                                                                                                                              -                                        "type": "string"
                                                                                                                                                                                                                                              -                                      }
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/robots/{robotHostname}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Robots"],
                                                                                                                                                                                                                                              +                  summary: "Retrieves information about a single robot.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotHostname",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Hostname of the robot. This should match the hostname field of the robot resource.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Robot retrieved successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/Robot",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    404: {
                                                                                                                                                                                                                                              +                      description: "Could not find robot",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not fetch robot due to server error.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/runs/facets/robots": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Run Facets"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a list of robot descriptions which match query params.",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Robot facets delivered.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "type": "object",
                                                                                                                                                                                                                                              -                                  "properties": {
                                                                                                                                                                                                                                              -                                    "robot_hostname": {
                                                                                                                                                                                                                                              -                                      "type": "string"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "robot_serial": {
                                                                                                                                                                                                                                              -                                      "type": "string"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "robot_nickname": {
                                                                                                                                                                                                                                              -                                      "type": "string"
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Robots"],
                                                                                                                                                                                                                                              +                  summary: "Removes the specified robot.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "robotHostname",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Hostname of the robot. This should match the hostname field of the robot resource.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Robot deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete robot.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/runs/facets/missions": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Run Facets"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a list of every unique mission which produced a run.",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Mission facets delivered.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "type": "object",
                                                                                                                                                                                                                                              -                                  "properties": {
                                                                                                                                                                                                                                              -                                    "limit": {
                                                                                                                                                                                                                                              -                                      "type": "integer"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "offset": {
                                                                                                                                                                                                                                              -                                      "type": "integer"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "total": {
                                                                                                                                                                                                                                              -                                      "type": "integer"
                                                                                                                                                                                                                                              -                                    },
                                                                                                                                                                                                                                              -                                    "resources": {
                                                                                                                                                                                                                                              -                                      "type": "array",
                                                                                                                                                                                                                                              -                                      "items": {
                                                                                                                                                                                                                                              -                                        "type": "object",
                                                                                                                                                                                                                                              -                                        "properties": {
                                                                                                                                                                                                                                              -                                          "missionName": {
                                                                                                                                                                                                                                              -                                            "type": "string"
                                                                                                                                                                                                                                              -                                          },
                                                                                                                                                                                                                                              -                                          "sessionCount": {
                                                                                                                                                                                                                                              -                                            "type": "integer"
                                                                                                                                                                                                                                              -                                          },
                                                                                                                                                                                                                                              -                                          "lastRunStartTime": {
                                                                                                                                                                                                                                              -                                            "type": "string"
                                                                                                                                                                                                                                              -                                          }
                                                                                                                                                                                                                                              -                                        }
                                                                                                                                                                                                                                              -                                      }
                                                                                                                                                                                                                                              -                                    }
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/webhooks": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Webhooks"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a complete list of registered webhooks on Orbit.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successfully retrieved list of webhooks.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/Webhook",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not fetch webhooks.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_walks/": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieve a collection of all SiteWalks on Orbit.",
                                                                                                                                                                                                                                              -                      "description": "Returns the entire list of SiteWalks currently on Orbit",
                                                                                                                                                                                                                                              -                      "tags": ["SiteWalks"],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "A list of SiteWalks was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/SiteWalk"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Webhooks"],
                                                                                                                                                                                                                                              +                  summary: "Adds a new webhook to Orbit.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a new webhook on Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            url: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description: "The url of the webhook.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            enabled: {
                                                                                                                                                                                                                                              +                              type: "boolean",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "Determines whether or not to send the data to url from the webhook.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            events: {
                                                                                                                                                                                                                                              +                              type: "object",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            validateTlsCert: {
                                                                                                                                                                                                                                              +                              type: "boolean",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "Whether or not to validate TLS certificate.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            secret: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The secret required to update the webhook (32 bit hex string).",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_walks/{uuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a single SiteWalk resource by uuid.",
                                                                                                                                                                                                                                              -                      "description": "A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation.",
                                                                                                                                                                                                                                              -                      "tags": ["SiteWalks"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of SiteWalk",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "A SiteWalk was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteWalk"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successfully created a webhook.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/Webhook",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "delete": {
                                                                                                                                                                                                                                              -                      "tags": ["SiteWalks"],
                                                                                                                                                                                                                                              -                      "summary": "Removes the specified SiteWalk.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of SiteWalk",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "SiteWalk deleted successfully."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not delete SiteWalk."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_walks": {
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["SiteWalks"],
                                                                                                                                                                                                                                              -                      "summary": "Adds a new SiteWalk to Orbit. It also updates a pre-existing SiteWalk using the associated UUID.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a new SiteWalk in Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "array",
                                                                                                                                                                                                                                              -                              "items": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteWalk"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/webhooks/{uuid}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  summary: "Retrieve a webhook by its uuid.",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A single webhook registered webhook identified by the unique id.",
                                                                                                                                                                                                                                              +                  tags: ["Webhooks"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "A webhook's uuid",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Fetched webhook details.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/Webhook",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successful operation",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteWalk"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Failed to get webhook details.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_elements/{uuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a single SiteElement resource by uuid.",
                                                                                                                                                                                                                                              -                      "description": "A SiteElement describes what a robot should do and where to do it.",
                                                                                                                                                                                                                                              -                      "tags": ["SiteElements"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of SiteElement",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "A SiteElement was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteElement"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Webhooks"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "A webhook's uuid",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  summary: "Updates a specific webhook on Orbit.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description:
                                                                                                                                                                                                                                              +                      "Information to update for a specific webhook on Orbit.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            url: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description: "The url of the webhook.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            enabled: {
                                                                                                                                                                                                                                              +                              type: "boolean",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "Determines whether or not to send the data to url from the webhook.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            events: {
                                                                                                                                                                                                                                              +                              type: "object",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            validateTlsCert: {
                                                                                                                                                                                                                                              +                              type: "boolean",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "Whether or not to validate TLS certificate.",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            secret: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              description:
                                                                                                                                                                                                                                              +                                "The secret required to update the webhook (32 bit hex string).",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_elements": {
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["SiteElements"],
                                                                                                                                                                                                                                              -                      "summary": "Adds a new SiteElement to Orbit. It also updates a pre-existing SiteElement using the associated UUID.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a new SiteElement in Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "array",
                                                                                                                                                                                                                                              -                              "items": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteElement"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successfully updated a specific webhook.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/Webhook",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successful operation",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/SiteElement"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_docks/{uuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a single SiteDock resource by uuid.",
                                                                                                                                                                                                                                              -                      "description": "A SiteDock is a representation of robot's docking station.",
                                                                                                                                                                                                                                              -                      "tags": ["SiteDocks"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of SiteDock",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "A SiteDock was fetched.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteDock"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Something went wrong."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Webhooks"],
                                                                                                                                                                                                                                              +                  summary: "Removes the specified webhook.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "A webhook's uuid",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Webhook deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete a webhook.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/site_docks": {
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["SiteDocks"],
                                                                                                                                                                                                                                              -                      "summary": "Adds a new SiteDock to Orbit. It also updates a pre-existing SiteDock using the associated UUID.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a new SiteDock in Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "array",
                                                                                                                                                                                                                                              -                              "items": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/SiteDock"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/missions": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              +                  deprecated: true,
                                                                                                                                                                                                                                              +                  tags: ["Missions"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Retrieves a complete list of mission information on Orbit.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Successfully retrieved missions.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/Mission",
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successful operation",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/SiteDock"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not fetch missions.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/robots": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Robots"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a complete list of robot information on Orbit. This includes which robot is assigned to each slot.",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully retrieved robots.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/Robot"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/missions/{missionId}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              +                  deprecated: true,
                                                                                                                                                                                                                                              +                  tags: ["Missions"],
                                                                                                                                                                                                                                              +                  summary: "Retrieves information about a single mission.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missionId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "ID of the mission. This should match the uuid field of the mission resource.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["Robots"],
                                                                                                                                                                                                                                              -                      "summary": "Adds a new robot to Orbit.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a robot in Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "object",
                                                                                                                                                                                                                                              -                              "properties": {
                                                                                                                                                                                                                                              -                                "hostname": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The hostname where the robot can be reached."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "nickname": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "A descriptive label for the robot."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "username": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The username that Orbit is connected to the robot with."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "password": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The password of the account Orbit will use to connect to the robot."
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Mission retrieved successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/Mission",
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successful operation",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "robotIndex": {
                                                                                                                                                                                                                                              -                                    "type": "integer",
                                                                                                                                                                                                                                              -                                    "description": "The index to which the added robot was assigned."
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  },
                                                                                                                                                                                                                                              -                  "/robots/{robotHostname}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Robots"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves information about a single robot.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotHostname",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "Hostname of the robot. This should match the hostname field of the robot resource.",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Robot retrieved successfully.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/Robot"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "404": {
                                                                                                                                                                                                                                              -                          "description": "Could not find robot"
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not fetch robot due to server error."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "delete": {
                                                                                                                                                                                                                                              -                      "tags": ["Robots"],
                                                                                                                                                                                                                                              -                      "summary": "Removes the specified robot.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "robotHostname",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "Hostname of the robot. This should match the hostname field of the robot resource.",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Robot deleted successfully."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not delete robot."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not fetch mission.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/webhooks": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "tags": ["Webhook"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a complete list of registered webhooks on Orbit.",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully retrieved list of webhooks.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/Webhook"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not fetch webhooks."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["Webhook"],
                                                                                                                                                                                                                                              -                      "summary": "Adds a new webhook to Orbit.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information of a new webhook on Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "object",
                                                                                                                                                                                                                                              -                              "properties": {
                                                                                                                                                                                                                                              -                                "url": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The url of the webhook."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "enabled": {
                                                                                                                                                                                                                                              -                                  "type": "boolean",
                                                                                                                                                                                                                                              -                                  "description": "Determines whether or not to send the data to url from the webhook."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "events": {
                                                                                                                                                                                                                                              -                                  "type": "object",
                                                                                                                                                                                                                                              -                                  "description": "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "validateTlsCert": {
                                                                                                                                                                                                                                              -                                  "type": "boolean",
                                                                                                                                                                                                                                              -                                  "description": "Whether or not to validate TLS certificate."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "secret": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The secret required to update the webhook (32 bit hex string)."
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              +                  deprecated: true,
                                                                                                                                                                                                                                              +                  tags: ["Missions"],
                                                                                                                                                                                                                                              +                  summary: "Removes the specified mission.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "missionId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "ID of the mission. This should match the uuid field of the mission resource.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully created a webhook.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/Webhook"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Mission deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete mission.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/webhooks/{uuid}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "summary": "Retrieve a webhook by its uuid.",
                                                                                                                                                                                                                                              -                      "description": "A single webhook registered webhook identified by the unique id.",
                                                                                                                                                                                                                                              -                      "tags": ["Webhook"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "A webhook's uuid",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Fetched webhook details.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/Webhook"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Failed to get webhook details."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/anomalies": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  description: "Get a paginated array of Anomalies.",
                                                                                                                                                                                                                                              +                  tags: ["Anomalies"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "uuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Include Anomalies with this uuid.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "post": {
                                                                                                                                                                                                                                              -                      "tags": ["Webhook"],
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "A webhook's uuid",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "summary": "Updates a specific webhook on Orbit.",
                                                                                                                                                                                                                                              -                      "requestBody": {
                                                                                                                                                                                                                                              -                        "description": "Information to update for a specific webhook on Orbit.",
                                                                                                                                                                                                                                              -                        "content": {
                                                                                                                                                                                                                                              -                          "application/json": {
                                                                                                                                                                                                                                              -                            "schema": {
                                                                                                                                                                                                                                              -                              "type": "object",
                                                                                                                                                                                                                                              -                              "properties": {
                                                                                                                                                                                                                                              -                                "url": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The url of the webhook."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "enabled": {
                                                                                                                                                                                                                                              -                                  "type": "boolean",
                                                                                                                                                                                                                                              -                                  "description": "Determines whether or not to send the data to url from the webhook."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "events": {
                                                                                                                                                                                                                                              -                                  "type": "object",
                                                                                                                                                                                                                                              -                                  "description": "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types."
                                                                                                                                                                                                                                              -                                },
                                                                                                                                                                                                                                              -                                "validateTlsCert": {
                                                                                                                                                                                                                                              -                                  "type": "boolean",
                                                                                                                                                                                                                                              -                                  "description": "Whether or not to validate TLS certificate."
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runEventUuid",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "runEventUuids",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "status",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        enum: ["open", "closed"],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "startTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "endTime",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        format: "date-time",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "limit",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Only return a number of resources up to this value.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "integer",
                                                                                                                                                                                                                                              +                        default: 20,
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "orderBy",
                                                                                                                                                                                                                                              +                      in: "query",
                                                                                                                                                                                                                                              +                      description: "Criteria for ordering results.",
                                                                                                                                                                                                                                              +                      required: false,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                        enum: [
                                                                                                                                                                                                                                              +                          "time",
                                                                                                                                                                                                                                              +                          "-time",
                                                                                                                                                                                                                                              +                          "created_at",
                                                                                                                                                                                                                                              +                          "-created_at",
                                                                                                                                                                                                                                              +                          "status_modified_at",
                                                                                                                                                                                                                                              +                          "-status_modified_at",
                                                                                                                                                                                                                                              +                        ],
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Anomalies retrieved successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              resources: {
                                                                                                                                                                                                                                              +                                type: "array",
                                                                                                                                                                                                                                              +                                items: {
                                                                                                                                                                                                                                              +                                  $ref: "#/components/schemas/Anomaly",
                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                              -                                "secret": {
                                                                                                                                                                                                                                              -                                  "type": "string",
                                                                                                                                                                                                                                              -                                  "description": "The secret required to update the webhook (32 bit hex string)."
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              total: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              limit: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              offset: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "required": true
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully updated a specific webhook.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/Webhook"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "delete": {
                                                                                                                                                                                                                                              -                      "tags": ["Webhook"],
                                                                                                                                                                                                                                              -                      "summary": "Removes the specified webhook.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "uuid",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "A webhook's uuid",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Webhook deleted successfully."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not delete a webhook."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/missions": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "description": "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              -                      "deprecated": true,
                                                                                                                                                                                                                                              -                      "tags": ["Missions"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves a complete list of mission information on Orbit.",
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Successfully retrieved missions.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "type": "array",
                                                                                                                                                                                                                                              -                                "items": {
                                                                                                                                                                                                                                              -                                  "$ref": "#/components/schemas/Mission"
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                patch: {
                                                                                                                                                                                                                                              +                  description: "Bulk close Anomalies by Element ID.",
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Anomalies"],
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Bulk updates to apply to multiple Anomalies.",
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            command: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              enum: ["close"],
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                            elementIds: {
                                                                                                                                                                                                                                              +                              type: "array",
                                                                                                                                                                                                                                              +                              items: {
                                                                                                                                                                                                                                              +                                type: "string",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not fetch missions."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "/missions/{missionId}": {
                                                                                                                                                                                                                                              -                    "get": {
                                                                                                                                                                                                                                              -                      "description": "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              -                      "deprecated": true,
                                                                                                                                                                                                                                              -                      "tags": ["Missions"],
                                                                                                                                                                                                                                              -                      "summary": "Retrieves information about a single mission.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missionId",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of the mission. This should match the uuid field of the mission resource.",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Mission retrieved successfully.",
                                                                                                                                                                                                                                              -                          "content": {
                                                                                                                                                                                                                                              -                            "application/json": {
                                                                                                                                                                                                                                              -                              "schema": {
                                                                                                                                                                                                                                              -                                "$ref": "#/components/schemas/Mission"
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not fetch mission."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Anomalies updated successfully.",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "delete": {
                                                                                                                                                                                                                                              -                      "description": "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              -                      "deprecated": true,
                                                                                                                                                                                                                                              -                      "tags": ["Missions"],
                                                                                                                                                                                                                                              -                      "summary": "Removes the specified mission.",
                                                                                                                                                                                                                                              -                      "parameters": [
                                                                                                                                                                                                                                              -                        {
                                                                                                                                                                                                                                              -                          "name": "missionId",
                                                                                                                                                                                                                                              -                          "in": "path",
                                                                                                                                                                                                                                              -                          "description": "ID of the mission. This should match the uuid field of the mission resource.",
                                                                                                                                                                                                                                              -                          "required": true,
                                                                                                                                                                                                                                              -                          "schema": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      ],
                                                                                                                                                                                                                                              -                      "responses": {
                                                                                                                                                                                                                                              -                        "200": {
                                                                                                                                                                                                                                              -                          "description": "Mission deleted successfully."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "500": {
                                                                                                                                                                                                                                              -                          "description": "Could not delete mission."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  }
                                                                                                                                                                                                                                              -                },
                                                                                                                                                                                                                                              -                "components": {
                                                                                                                                                                                                                                              -                  "securitySchemes": {
                                                                                                                                                                                                                                              -                    "Authorization": {
                                                                                                                                                                                                                                              -                      "type": "apiKey",
                                                                                                                                                                                                                                              -                      "description": " Obtain an API token from the Orbit instance and add it to the request header in the form of 'Bearer API TOKEN'.",
                                                                                                                                                                                                                                              -                      "in": "header",
                                                                                                                                                                                                                                              -                      "name": "Authorization"
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                              -                  "schemas": {
                                                                                                                                                                                                                                              -                    "Schedule": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A schedule describes when and how often a robot should execute an autonomous mission.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "eventMetadata": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "properties": {
                                                                                                                                                                                                                                              -                            "name": {
                                                                                                                                                                                                                                              -                              "type": "string",
                                                                                                                                                                                                                                              -                              "description": "The name of the calendar event."
                                                                                                                                                                                                                                              -                            },
                                                                                                                                                                                                                                              -                            "modificationTimeMs": {
                                                                                                                                                                                                                                              -                              "type": "integer",
                                                                                                                                                                                                                                              -                              "description": "The time this event was last modified in milliseconds since epoch."
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/anomalies/{anomalyId}": {
                                                                                                                                                                                                                                              +                patch: {
                                                                                                                                                                                                                                              +                  description: "Update an Anomaly.",
                                                                                                                                                                                                                                              +                  security: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      Authorization: [],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  tags: ["Anomalies"],
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "anomalyId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of the Anomaly.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Updates to apply to the Anomaly.",
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          type: "object",
                                                                                                                                                                                                                                              +                          properties: {
                                                                                                                                                                                                                                              +                            status: {
                                                                                                                                                                                                                                              +                              type: "string",
                                                                                                                                                                                                                                              +                              enum: ["open", "closed"],
                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                              -                            "modificationUser": {
                                                                                                                                                                                                                                              -                              "type": "string",
                                                                                                                                                                                                                                              -                              "description": "The user name that modified the event."
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                                                         },
                                                                                                                                                                                                                                              -                          "description": "Metadata for the calendar event."
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "agent": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "properties": {
                                                                                                                                                                                                                                              -                            "nickname": {
                                                                                                                                                                                                                                              -                              "type": "string",
                                                                                                                                                                                                                                              -                              "description": "The nickname of the robot for this event."
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Anomaly updated successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            $ref: "#/components/schemas/Anomaly",
                                                                                                                                                                                                                                                                         },
                                                                                                                                                                                                                                              -                          "description": "Information about the agent(robot) for the calendar event."
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "task": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "properties": {
                                                                                                                                                                                                                                              -                            "missionId": {
                                                                                                                                                                                                                                              -                              "type": "string",
                                                                                                                                                                                                                                              -                              "description": "The ID associated with the mission for this event."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/backup_tasks": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Backup Tasks"],
                                                                                                                                                                                                                                              +                  summary: "Retrieves a list of backup tasks.",
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Backup tasks retrieved successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "array",
                                                                                                                                                                                                                                              +                            items: {
                                                                                                                                                                                                                                              +                              $ref: "#/components/schemas/BackupTask",
                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                              -                            "forceAcquireEstop": {
                                                                                                                                                                                                                                              -                              "type": "boolean",
                                                                                                                                                                                                                                              -                              "description": "Determines whether Orbit should forcibly acquire Estop authority."
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                                                         },
                                                                                                                                                                                                                                              -                          "description": "Information about the agent(robot) for the calendar event."
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "schedule": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "properties": {
                                                                                                                                                                                                                                              -                            "timeMs": {
                                                                                                                                                                                                                                              -                              "type": "integer",
                                                                                                                                                                                                                                              -                              "description": "The first kick off time in milliseconds since epoch for this calendar event."
                                                                                                                                                                                                                                              -                            },
                                                                                                                                                                                                                                              -                            "repeatMs": {
                                                                                                                                                                                                                                              -                              "type": "integer",
                                                                                                                                                                                                                                              -                              "description": "The interval time between runs in milliseconds for this calendar event."
                                                                                                                                                                                                                                              -                            },
                                                                                                                                                                                                                                              -                            "blackouts": {
                                                                                                                                                                                                                                              -                              "type": "array",
                                                                                                                                                                                                                                              -                              "description": "The list of blackout times where this event should not occur.",
                                                                                                                                                                                                                                              -                              "items": {
                                                                                                                                                                                                                                              -                                "type": "object",
                                                                                                                                                                                                                                              -                                "properties": {
                                                                                                                                                                                                                                              -                                  "startMs": {
                                                                                                                                                                                                                                              -                                    "type": "integer",
                                                                                                                                                                                                                                              -                                    "description": "The start time in milliseconds since epoch for this blackout."
                                                                                                                                                                                                                                              -                                  },
                                                                                                                                                                                                                                              -                                  "endMs": {
                                                                                                                                                                                                                                              -                                    "type": "integer",
                                                                                                                                                                                                                                              -                                    "description": "The end time in milliseconds since epoch for this blackout."
                                                                                                                                                                                                                                              -                                  }
                                                                                                                                                                                                                                              -                                }
                                                                                                                                                                                                                                              -                              }
                                                                                                                                                                                                                                              -                            }
                                                                                                                                                                                                                                              -                          },
                                                                                                                                                                                                                                              -                          "description": "Information about the agent(robot) for the calendar event."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "Robot": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A Robot is a data structure representing a robot that is used to execute autonomous operations.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "robotIndex": {
                                                                                                                                                                                                                                              -                          "type": "integer",
                                                                                                                                                                                                                                              -                          "description": "The index at which this robot is registered. This is a number between 0 and the max for your Orbit server (typically 32)."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "hostname": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The hostname where the robot can be reached."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "nickname": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A descriptive label for the robot."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "username": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The username that Orbit is connected to the robot with."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not fetch backup tasks.",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "Run": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "actionCount": {
                                                                                                                                                                                                                                              -                          "type": "integer"
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "pendingActionCount": {
                                                                                                                                                                                                                                              -                          "type": "integer"
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A unique identifier for this run."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "runType": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Whether the run was of a mission or teleoperation.",
                                                                                                                                                                                                                                              -                          "enum": ["teleop", "mission"]
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "startTime": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When this run started.",
                                                                                                                                                                                                                                              -                          "format": "date-time"
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "endTime": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When this run completed.",
                                                                                                                                                                                                                                              -                          "format": "date-time"
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotHostname": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The hostname of the robot being operated."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotSerial": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The serial of the robot being operated."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotNickname": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The nickname of the robot being operated."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "operatorId": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The username of the driver."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "missionStatus": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The status of the mission this run played."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "missionName": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name of the mission this run played."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotSoftwareMajorVersion": {
                                                                                                                                                                                                                                              -                          "type": "integer",
                                                                                                                                                                                                                                              -                          "description": "The robot software major version during operation."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotSoftwareMinorVersion": {
                                                                                                                                                                                                                                              -                          "type": "integer",
                                                                                                                                                                                                                                              -                          "description": "The robot software minor version during operation."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "robotSoftwarePatchVersion": {
                                                                                                                                                                                                                                              -                          "type": "integer",
                                                                                                                                                                                                                                              -                          "description": "The robot software patch version during operation."
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                post: {
                                                                                                                                                                                                                                              +                  tags: ["Backup Tasks"],
                                                                                                                                                                                                                                              +                  summary: "Creates a new backup task.",
                                                                                                                                                                                                                                              +                  requestBody: {
                                                                                                                                                                                                                                              +                    description: "Information of a new backup task.",
                                                                                                                                                                                                                                              +                    content: {
                                                                                                                                                                                                                                              +                      "application/json": {
                                                                                                                                                                                                                                              +                        schema: {
                                                                                                                                                                                                                                              +                          $ref: "#/components/schemas/BackupParameters",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "robotSoftwareGitHash": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The version hash of the robot software used during operation."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "RunEvent": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A unique identifier for this run event."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "runUuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The unique identifier for the run in which this event took place."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "time": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "format": "date-time",
                                                                                                                                                                                                                                              -                          "description": "When this event took place on robot."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "createdAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When this event was stored in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionName": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name of the action which this event represents."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionRunArchiveFileUrl": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The path to the event's data and metadata archive."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "error": {
                                                                                                                                                                                                                                              -                          "type": "integer",
                                                                                                                                                                                                                                              -                          "description": "The error code for an error which occured during this event."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionUuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A unique identifier for the action this event represents."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "missionName": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name of the mission during which this event took place."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "metadataFileUrl": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The path to the metadata.json file for this event."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "eventType": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "enum": ["daq", "screenshot"],
                                                                                                                                                                                                                                              -                          "description": "The type of run event this is. Could be an action execution (daq) or a user triggered screenshot."
                                                                                                                                                                                                                                              +                    required: true,
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Backup task created successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/json": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              data: {
                                                                                                                                                                                                                                              +                                $ref: "#/components/schemas/BackupTask",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "dataCaptures": {
                                                                                                                                                                                                                                              -                          "type": "array",
                                                                                                                                                                                                                                              -                          "items": {
                                                                                                                                                                                                                                              -                            "$ref": "#/components/schemas/RunCapture"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "RunCapture": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "time": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "format": "date-time",
                                                                                                                                                                                                                                              -                          "description": "The time at which this result was captured."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A unique identifier for this result."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "runEventUuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The unique identifier for the run event during which this result was captured."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "dataUrl": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The path to the file holding this result's data."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "createdAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the result was stored in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "keyResults": {
                                                                                                                                                                                                                                              -                          "type": "array",
                                                                                                                                                                                                                                              -                          "description": "A collection of key value pairs summarizing this result.",
                                                                                                                                                                                                                                              -                          "items": {
                                                                                                                                                                                                                                              -                            "type": "object"
                                                                                                                                                                                                                                              -                          }
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "channelName": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name of the action channel which produced this result."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionChannelRunFlagUuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A unique identifier for a flag on this data."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not create backup task.",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "SiteWalk": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Unique identifier for the SiteWalk."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "name": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name for the SiteWalk."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "siteElementIds": {
                                                                                                                                                                                                                                              -                          "type": "array",
                                                                                                                                                                                                                                              -                          "items": {
                                                                                                                                                                                                                                              -                            "type": "string"
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              "/backups/{taskId}": {
                                                                                                                                                                                                                                              +                get: {
                                                                                                                                                                                                                                              +                  tags: ["Backups"],
                                                                                                                                                                                                                                              +                  summary: "Retrieves a backup tar file given a task ID.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "taskId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of the backup task.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Backup retrieved successfully.",
                                                                                                                                                                                                                                              +                      content: {
                                                                                                                                                                                                                                              +                        "application/x-tar": {
                                                                                                                                                                                                                                              +                          schema: {
                                                                                                                                                                                                                                              +                            type: "string",
                                                                                                                                                                                                                                              +                            format: "binary",
                                                                                                                                                                                                                                                                         },
                                                                                                                                                                                                                                              -                          "description": "References to elements in this walk in the order they will be visited."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "globalParameters": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Parameters that apply to the entire mission."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "siteDockIds": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "References to docks to be used by this walk."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "createdAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteWalk was stored in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "modifiedAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteWalk was modified in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "siteElementMetadata": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Metadata for each SiteElement references in SiteElement_ids."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "targetFailureBehavior": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Default behavior if a robot fails to navigate to a given position."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionFailureBehavior": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Default behavior if a robot fails to perform an action."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "preferRecordedRoutes": {
                                                                                                                                                                                                                                              -                          "type": "boolean",
                                                                                                                                                                                                                                              -                          "description": "Whether or not to take shortcuts."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "batteryMonitor": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Default behavior for leaving and returning to dock based on the robot battery charge."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "travelParams": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Travel params common to the entire SiteWalk."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "entityParams": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Entity params used by all elements."
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "skipDockingAfterCompletion": {
                                                                                                                                                                                                                                              -                          "type": "boolean",
                                                                                                                                                                                                                                              -                          "description": "Whether or not to dock after executing all actions."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "SiteElement": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A SiteElement describes what a robot should do and where to do it.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Unique identifier for the SiteElement."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "name": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The name for the SiteElement."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "waypointId": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The location of the element."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "waypointMaxDistance": {
                                                                                                                                                                                                                                              -                          "type": "number",
                                                                                                                                                                                                                                              -                          "description": "The maximum distance [meters] that defines when we have reached the element waypoint."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "waypointMaxYaw": {
                                                                                                                                                                                                                                              -                          "type": "number",
                                                                                                                                                                                                                                              -                          "description": "The maximum yaw [radians] that defines when we have reached the element waypoint."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "action": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Action performed at target destination."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "targetFailureBehavior": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Default behavior if a robot fails to navigate to a given position."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionFailureBehavior": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Default behavior if a robot fails to perform an action."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionDuration": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "The maximum time spent performing the action."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "relocalize": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "Whether the robot should relocalize at the target."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "actionWrapper": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "What the robot should do prior to and during an action."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "createdAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteElement was stored in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "modifiedAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteElement was modified in Orbit."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not retrieve backup.",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "SiteDock": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A SiteDock is a representation of robot's docking station.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Unique identifier for the SiteDock."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "name": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The fiducial number of the dock."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "dockedWaypointId": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The waypoint where the dock is located."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "targetPrepPose": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "When it is time for the robot to dock, it will approach this target before issuing docking commands. "
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "createdAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteDock was stored in Orbit."
                                                                                                                                                                                                                                              -                        },
                                                                                                                                                                                                                                              -                        "modifiedAt": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When the SiteDock was modified in Orbit."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                delete: {
                                                                                                                                                                                                                                              +                  tags: ["Backups"],
                                                                                                                                                                                                                                              +                  summary:
                                                                                                                                                                                                                                              +                    "Deletes a backup tar file from the Orbit instance given a task ID.",
                                                                                                                                                                                                                                              +                  parameters: [
                                                                                                                                                                                                                                              +                    {
                                                                                                                                                                                                                                              +                      name: "taskId",
                                                                                                                                                                                                                                              +                      in: "path",
                                                                                                                                                                                                                                              +                      description: "ID of the backup task.",
                                                                                                                                                                                                                                              +                      required: true,
                                                                                                                                                                                                                                              +                      schema: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  ],
                                                                                                                                                                                                                                              +                  responses: {
                                                                                                                                                                                                                                              +                    200: {
                                                                                                                                                                                                                                              +                      description: "Backup deleted successfully.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    500: {
                                                                                                                                                                                                                                              +                      description: "Could not delete backup.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +            },
                                                                                                                                                                                                                                              +            components: {
                                                                                                                                                                                                                                              +              securitySchemes: {
                                                                                                                                                                                                                                              +                Authorization: {
                                                                                                                                                                                                                                              +                  type: "apiKey",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    " Obtain an API token from the Orbit instance and add it to the request header in the form of 'Bearer API TOKEN'.",
                                                                                                                                                                                                                                              +                  in: "header",
                                                                                                                                                                                                                                              +                  name: "Authorization",
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +              },
                                                                                                                                                                                                                                              +              schemas: {
                                                                                                                                                                                                                                              +                Anomaly: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "An anomaly/alert detected by a Spot mission element",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The unique identifier for the anomaly.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    time: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "Webhook": {
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "description": "A Webhook is a mechanism by which Orbit sends real-time data from robot operation to any subscribed external systems.",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Unique identifier for the webhook instance."
                                                                                                                                                                                                                                              +                    elementId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    assetId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    name: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    severity: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    title: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    source: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    runUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    runEventUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    status: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      enum: ["open", "closed"],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    statusModifiedAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    statusModifiedBy: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                Schedule: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A schedule describes when and how often a robot should execute an autonomous mission.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    eventMetadata: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      properties: {
                                                                                                                                                                                                                                              +                        name: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                              +                          description: "The name of the calendar event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "url": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The url of the webhook instance."
                                                                                                                                                                                                                                              +                        modificationTimeMs: {
                                                                                                                                                                                                                                              +                          type: "integer",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The time this event was last modified in milliseconds since epoch.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "enabled": {
                                                                                                                                                                                                                                              -                          "type": "boolean",
                                                                                                                                                                                                                                              -                          "description": "Determines whether or not to send the data to url from the webhook."
                                                                                                                                                                                                                                              +                        modificationUser: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                              +                          description: "The user name that modified the event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "archived": {
                                                                                                                                                                                                                                              -                          "type": "boolean",
                                                                                                                                                                                                                                              -                          "description": "Determines whether or not the webhook is archived."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                      description: "Metadata for the calendar event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    agent: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      properties: {
                                                                                                                                                                                                                                              +                        nickname: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The nickname of the robot for this event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "events": {
                                                                                                                                                                                                                                              -                          "type": "object",
                                                                                                                                                                                                                                              -                          "description": "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types."
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Information about the agent(robot) for the calendar event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    task: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      properties: {
                                                                                                                                                                                                                                              +                        missionId: {
                                                                                                                                                                                                                                              +                          type: "string",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The ID associated with the mission for this event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "validateTlsCert": {
                                                                                                                                                                                                                                              -                          "type": "boolean",
                                                                                                                                                                                                                                              -                          "description": "Whether or not to validate TLS certificate."
                                                                                                                                                                                                                                              +                        forceAcquireEstop: {
                                                                                                                                                                                                                                              +                          type: "boolean",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "Determines whether Orbit should forcibly acquire Estop authority.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "secret": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The secret required to update the webhook (32 bit hex string)."
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Information about the agent(robot) for the calendar event.",
                                                                                                                                                                                                                                                                   },
                                                                                                                                                                                                                                              -                    "Mission": {
                                                                                                                                                                                                                                              -                      "description": "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              -                      "deprecated": true,
                                                                                                                                                                                                                                              -                      "type": "object",
                                                                                                                                                                                                                                              -                      "properties": {
                                                                                                                                                                                                                                              -                        "uuid": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "Orbit's unique id for this mission. Use this as a parameter for operations like scheduling missions."
                                                                                                                                                                                                                                              +                    schedule: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      properties: {
                                                                                                                                                                                                                                              +                        timeMs: {
                                                                                                                                                                                                                                              +                          type: "integer",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The first kick off time in milliseconds since epoch for this calendar event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "mission_id": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "The mission id from the robot when this mission was uploaded to Orbit."
                                                                                                                                                                                                                                              +                        repeatMs: {
                                                                                                                                                                                                                                              +                          type: "integer",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The interval time between runs in milliseconds for this calendar event.",
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "name": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "A descriptive label for the mission."
                                                                                                                                                                                                                                              +                        blackouts: {
                                                                                                                                                                                                                                              +                          type: "array",
                                                                                                                                                                                                                                              +                          description:
                                                                                                                                                                                                                                              +                            "The list of blackout times where this event should not occur.",
                                                                                                                                                                                                                                              +                          items: {
                                                                                                                                                                                                                                              +                            type: "object",
                                                                                                                                                                                                                                              +                            properties: {
                                                                                                                                                                                                                                              +                              startMs: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                                description:
                                                                                                                                                                                                                                              +                                  "The start time in milliseconds since epoch for this blackout.",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                              endMs: {
                                                                                                                                                                                                                                              +                                type: "integer",
                                                                                                                                                                                                                                              +                                description:
                                                                                                                                                                                                                                              +                                  "The end time in milliseconds since epoch for this blackout.",
                                                                                                                                                                                                                                              +                              },
                                                                                                                                                                                                                                              +                            },
                                                                                                                                                                                                                                              +                          },
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                              -                        "saved_at": {
                                                                                                                                                                                                                                              -                          "type": "string",
                                                                                                                                                                                                                                              -                          "description": "When this mission was saved.",
                                                                                                                                                                                                                                              -                          "format": "date-time"
                                                                                                                                                                                                                                              -                        }
                                                                                                                                                                                                                                              -                      }
                                                                                                                                                                                                                                              -                    }
                                                                                                                                                                                                                                              -                  }
                                                                                                                                                                                                                                              -                }
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Information about the agent(robot) for the calendar event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                Robot: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A Robot is a data structure representing a robot that is used to execute autonomous operations.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    robotIndex: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The index at which this robot is registered. This is a number between 0 and the max for your Orbit server (typically 32).",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    hostname: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The hostname where the robot can be reached.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    nickname: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "A descriptive label for the robot.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    username: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The username that Orbit is connected to the robot with.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                Run: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A Run represents a period of robot operation. Both teleoperation and autonomous operations are represented as Runs.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    actionCount: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    pendingActionCount: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "A unique identifier for this run.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    runType: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Whether the run was of a mission or teleoperation.",
                                                                                                                                                                                                                                              +                      enum: ["teleop", "mission"],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    startTime: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When this run started.",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    endTime: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When this run completed.",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotHostname: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The hostname of the robot being operated.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotSerial: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The serial of the robot being operated.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotNickname: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The nickname of the robot being operated.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    operatorId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The username of the driver.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    missionStatus: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The status of the mission this run played.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    missionName: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The name of the mission this run played.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotSoftwareMajorVersion: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The robot software major version during operation.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotSoftwareMinorVersion: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The robot software minor version during operation.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotSoftwarePatchVersion: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The robot software patch version during operation.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    robotSoftwareGitHash: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The version hash of the robot software used during operation.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                RunEvent: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A RunEvent represents the output of an action executed during a Run. It contains all the RunCaptures associated with the action.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "A unique identifier for this run event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    runUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The unique identifier for the run in which this event took place.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    time: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                      description: "When this event took place on robot.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When this event was stored in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionName: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The name of the action which this event represents.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionRunArchiveFileUrl: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The path to the event's data and metadata archive.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    error: {
                                                                                                                                                                                                                                              +                      type: "integer",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The error code for an error which occured during this event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "A unique identifier for the action this event represents.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    missionName: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The name of the mission during which this event took place.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    metadataFileUrl: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The path to the metadata.json file for this event.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    eventType: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      enum: ["daq", "screenshot"],
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The type of run event this is. Could be an action execution (daq) or a user triggered screenshot.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    dataCaptures: {
                                                                                                                                                                                                                                              +                      type: "array",
                                                                                                                                                                                                                                              +                      items: {
                                                                                                                                                                                                                                              +                        $ref: "#/components/schemas/RunCapture",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                RunCapture: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A RunCapture describes a data point captured during a particular RunEvent.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    time: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The time at which this result was captured.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "A unique identifier for this result.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    runEventUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The unique identifier for the run event during which this result was captured.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    dataUrl: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The path to the file holding this result's data.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the result was stored in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    keyResults: {
                                                                                                                                                                                                                                              +                      type: "array",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "A collection of key value pairs summarizing this result.",
                                                                                                                                                                                                                                              +                      items: {
                                                                                                                                                                                                                                              +                        type: "object",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    channelName: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The name of the action channel which produced this result.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionChannelRunFlagUuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "A unique identifier for a flag on this data.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                SiteWalk: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "Unique identifier for the SiteWalk.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    name: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The name for the SiteWalk.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    siteElementIds: {
                                                                                                                                                                                                                                              +                      type: "array",
                                                                                                                                                                                                                                              +                      items: {
                                                                                                                                                                                                                                              +                        type: "string",
                                                                                                                                                                                                                                              +                      },
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "References to elements in this walk in the order they will be visited.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    globalParameters: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Parameters that apply to the entire mission.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    siteDockIds: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "References to docks to be used by this walk.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the SiteWalk was stored in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    modifiedAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the SiteWalk was modified in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    siteElementMetadata: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Metadata for each SiteElement references in SiteElement_ids.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    targetFailureBehavior: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Default behavior if a robot fails to navigate to a given position.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionFailureBehavior: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Default behavior if a robot fails to perform an action.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    preferRecordedRoutes: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description: "Whether or not to take shortcuts.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    batteryMonitor: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Default behavior for leaving and returning to dock based on the robot battery charge.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    travelParams: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Travel params common to the entire SiteWalk.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    entityParams: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description: "Entity params used by all elements.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    skipDockingAfterCompletion: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Whether or not to dock after executing all actions.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                SiteElement: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteElement describes what a robot should do and where to do it.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "Unique identifier for the SiteElement.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    name: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The name for the SiteElement.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    waypointId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The location of the element.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    waypointMaxDistance: {
                                                                                                                                                                                                                                              +                      type: "number",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The maximum distance [meters] that defines when we have reached the element waypoint.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    waypointMaxYaw: {
                                                                                                                                                                                                                                              +                      type: "number",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The maximum yaw [radians] that defines when we have reached the element waypoint.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    action: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description: "Action performed at target destination.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    targetFailureBehavior: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Default behavior if a robot fails to navigate to a given position.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionFailureBehavior: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Default behavior if a robot fails to perform an action.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionDuration: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The maximum time spent performing the action.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    relocalize: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Whether the robot should relocalize at the target.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    actionWrapper: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "What the robot should do prior to and during an action.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the SiteElement was stored in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    modifiedAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "When the SiteElement was modified in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                SiteDock: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A SiteDock is a representation of robot's docking station.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "Unique identifier for the SiteDock.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    name: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The fiducial number of the dock.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    dockedWaypointId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The waypoint where the dock is located.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    targetPrepPose: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "When it is time for the robot to dock, it will approach this target before issuing docking commands. ",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    createdAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the SiteDock was stored in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    modifiedAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When the SiteDock was modified in Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                Webhook: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A Webhook is a mechanism by which Orbit sends real-time data from robot operation to any subscribed external systems.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Unique identifier for the webhook instance.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    url: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The url of the webhook instance.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    enabled: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Determines whether or not to send the data to url from the webhook.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    archived: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Determines whether or not the webhook is archived.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    events: {
                                                                                                                                                                                                                                              +                      type: "object",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The list that contains what type of events would trigger sending the data to url. These can also be defined as payload types.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    validateTlsCert: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Whether or not to validate TLS certificate.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    secret: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The secret required to update the webhook (32 bit hex string).",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                BackupTask: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "A BackupTask is a data structure representing a backup task of the Orbit instance. It can include mission data and/or inspection data captures based on BackupParameters.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    taskId: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The unique identifier for this backup task.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    startedAt: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When this backup task was started.",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    status: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The status of the backup task.",
                                                                                                                                                                                                                                              +                      enum: [
                                                                                                                                                                                                                                              +                        "Starting",
                                                                                                                                                                                                                                              +                        "Creating database dump",
                                                                                                                                                                                                                                              +                        "Creating zip file",
                                                                                                                                                                                                                                              +                        "Completed",
                                                                                                                                                                                                                                              +                        "Error",
                                                                                                                                                                                                                                              +                        "Cancelled",
                                                                                                                                                                                                                                              +                      ],
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    filename: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "The filename of the backup.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    size: {
                                                                                                                                                                                                                                              +                      type: "number",
                                                                                                                                                                                                                                              +                      description: "The size of the backup in bytes.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    error: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The error message if the backup task failed.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    params: {
                                                                                                                                                                                                                                              +                      $ref: "#/components/schemas/BackupParameters",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                BackupParameters: {
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Parameters used to define the type of backup task. Determines whether to include missions and/or inspection data captures in the backup.",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    includeMissions: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Specifies whether to include missions in the backup. When enabled, this will include all mission data, as well as associated robot map data and site maps.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    includeCaptures: {
                                                                                                                                                                                                                                              +                      type: "boolean",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Specifies whether to include inspection data captures in the backup.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                              +                Mission: {
                                                                                                                                                                                                                                              +                  description:
                                                                                                                                                                                                                                              +                    "Warning: This endpoint is deprecated. Use SiteWalk instead!",
                                                                                                                                                                                                                                              +                  deprecated: true,
                                                                                                                                                                                                                                              +                  type: "object",
                                                                                                                                                                                                                                              +                  properties: {
                                                                                                                                                                                                                                              +                    uuid: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "Orbit's unique id for this mission. Use this as a parameter for operations like scheduling missions.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    mission_id: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description:
                                                                                                                                                                                                                                              +                        "The mission id from the robot when this mission was uploaded to Orbit.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    name: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "A descriptive label for the mission.",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                    saved_at: {
                                                                                                                                                                                                                                              +                      type: "string",
                                                                                                                                                                                                                                              +                      description: "When this mission was saved.",
                                                                                                                                                                                                                                              +                      format: "date-time",
                                                                                                                                                                                                                                              +                    },
                                                                                                                                                                                                                                              +                  },
                                                                                                                                                                                                                                              +                },
                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                              +            },
                                                                                                                                                                                                                                              +          },
                                                                                                                                                                                                                                                         dom_id: "#swagger-ui",
                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                     };
                                                                                                                                                                                                                                              diff --git a/docs/payload/configuring_payload_software.md b/docs/payload/configuring_payload_software.md
                                                                                                                                                                                                                                              index cb80d4ad0..22ae4d872 100644
                                                                                                                                                                                                                                              --- a/docs/payload/configuring_payload_software.md
                                                                                                                                                                                                                                              +++ b/docs/payload/configuring_payload_software.md
                                                                                                                                                                                                                                              @@ -145,11 +145,12 @@ The rear ethernet port can be configured to a user-desired IP address via the we
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Payload devices should use the following network configurations:
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              - - Spot CORE I/O and Spot EAP 2: 192.168.50.5 (default from Boston Dynamics).
                                                                                                                                                                                                                                              - - Spot CAM: 192.168.50.6 (default from Boston Dynamics).
                                                                                                                                                                                                                                              - - Fluke SV600: 192.168.50.8 (default from Fluke).
                                                                                                                                                                                                                                              - - Netmask: 255.255.255.0.
                                                                                                                                                                                                                                              - - Default gateway will be set to 192.168.50.3.
                                                                                                                                                                                                                                              +- Spot CORE I/O and Spot EAP 2: 192.168.50.5 (default from Boston Dynamics).
                                                                                                                                                                                                                                              +- Spot CAM: 192.168.50.6 (default from Boston Dynamics).
                                                                                                                                                                                                                                              +- Fluke SV600: 192.168.50.8 (default from Fluke).
                                                                                                                                                                                                                                              +- Rajant ES1 Radio: 192.168.50.9 (default from Boston Dynamics).
                                                                                                                                                                                                                                              +- Netmask: 255.255.255.0.
                                                                                                                                                                                                                                              +- Default gateway will be set to 192.168.50.3.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Ports actively in use and reserved for other payloads can only be used once. For example, attempting to use port 192.168.50.6 for both an attached Spot CAM and another custom payload will cause both payloads to fail.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              diff --git a/docs/payload/coreio_documentation.md b/docs/payload/coreio_documentation.md
                                                                                                                                                                                                                                              index f128d79aa..e25b1504b 100644
                                                                                                                                                                                                                                              --- a/docs/payload/coreio_documentation.md
                                                                                                                                                                                                                                              +++ b/docs/payload/coreio_documentation.md
                                                                                                                                                                                                                                              @@ -181,7 +181,7 @@ In table form:
                                                                                                                                                                                                                                               | 10         | GND               | GND            | GND          | GND          |
                                                                                                                                                                                                                                               | 11         |                   |                | GND          | GND          |
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -All loop backs must ensure continuity to like-named loop back connections i.e. jumpered. 
                                                                                                                                                                                                                                              +All loop backs must ensure continuity to like-named loop back connections i.e. jumpered.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               The easiest way to control the voltage output pins in CN3 and CN4 is through the GPIO page in the web server. At this time, PWM control has not yet been built into the web server.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              @@ -215,7 +215,7 @@ Example of a Docker Compose file that provides voltage output control:
                                                                                                                                                                                                                                               version: "3.5"
                                                                                                                                                                                                                                               services:
                                                                                                                                                                                                                                                 gpio_container:
                                                                                                                                                                                                                                              -    image: ubuntu:18.04
                                                                                                                                                                                                                                              +    image: ubuntu:20.04
                                                                                                                                                                                                                                                   restart: unless-stopped
                                                                                                                                                                                                                                                   volumes:
                                                                                                                                                                                                                                                     - /dev:/dev
                                                                                                                                                                                                                                              diff --git a/docs/payload/docker_containers.md b/docs/payload/docker_containers.md
                                                                                                                                                                                                                                              index 0d6196f0b..2c5b7676a 100644
                                                                                                                                                                                                                                              --- a/docs/payload/docker_containers.md
                                                                                                                                                                                                                                              +++ b/docs/payload/docker_containers.md
                                                                                                                                                                                                                                              @@ -19,7 +19,7 @@ The purpose of computation payloads is to run custom software applications on th
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               1. Implement and test application in a development environment, such as a development computer. In this case, the development computer connected to Spot's WiFi acts as the computation payload for the robot. Testing in the development environment allows for quick iterations and updating of the application code.
                                                                                                                                                                                                                                               2. Dockerize the application and test the docker image with the application on the development environment. The change in this step compared to the previous one is to run the application inside a docker container, rather than on the host OS of the development environment. This step verifies that the application works correctly in a containerized environment, and it acts as a stepping stone to the final step below. The section [Create Docker Images](#create-docker-images) described how to create and test the docker images in the local development environment.
                                                                                                                                                                                                                                              -3. If targetting the CORE I/O payload, combine all docker containers with a docker-compose configuration file and package everything into a Spot Extension, as described in the [Manage Payload Software in CORE I/O](#manage-payload-software-in-core-i-o) section.
                                                                                                                                                                                                                                              +3. If targeting the CORE I/O payload, combine all docker containers with a docker-compose configuration file and package everything into a Spot Extension, as described in the [Manage Payload Software in CORE I/O](#manage-payload-software-in-core-i-o) section.
                                                                                                                                                                                                                                               4. Deploy and manage the Spot Extension in the CORE I/O payload (also described in the section linked above). Running the dockerized application on a computation payload attached to Spot removes the need for WiFi connectivity between Spot and a stationary computation environment, improving Spot's autonomy.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               To manage the docker images on any other compute payload, please refer to the [Command-line Configuration](#command-line-configuration) section.
                                                                                                                                                                                                                                              @@ -28,7 +28,6 @@ Multiple Spot SDK examples support dockerization and running as docker container
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               - [Data Acquisition Plugins](../../python/examples/data_acquisition_service/README.md)
                                                                                                                                                                                                                                               - [Ricoh Theta](../../python/examples/ricoh_theta/README.md)
                                                                                                                                                                                                                                              -- [Spot Detect and Follow](../../python/examples/spot_detect_and_follow/README.md)
                                                                                                                                                                                                                                               - [Custom Parameter Web Cam Image Service](../../python/examples/service_customization/custom_parameter_image_server/README.md)
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ## Installing Docker Engine
                                                                                                                                                                                                                                              @@ -43,7 +42,12 @@ After implementing and testing the application on the development environment, t
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               The `Dockerfile` files in the SDK examples contain instructions to create x86/AMD-based Ubuntu docker images. On top of `Dockerfile` files, SDK examples also contain `Dockerfile.l4t` for creating ARM-based Ubuntu docker images for the CORE I/O payloads.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -When writing Dockerfiles for images targeted for the CORE I/O, if using [Nvidia Docker images](https://catalog.ngc.nvidia.com/containers?filters=&orderBy=scoreDESC&query=l4t) as a base, ensure that the tag matches the version of Jetpack running on the CORE I/O. As of 3.3.0, the CORE I/O is running JetPack 4.6.1 (L4T R32.7.1).
                                                                                                                                                                                                                                              +When writing Dockerfiles for images targeted for the CORE I/O, if using [Nvidia Docker images](https://catalog.ngc.nvidia.com/containers?filters=&orderBy=scoreDESC&query=l4t) as a base, ensure that the tag matches the version of Jetpack running on the CORE I/O:
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +| CORE I/O Version     | JetPack Version             |
                                                                                                                                                                                                                                              +| -------------------- | --------------------------- |
                                                                                                                                                                                                                                              +| >= 4.0.0             | JetPack 5.1.2 (L4T R35.4.1) |
                                                                                                                                                                                                                                              +| >= 3.3.0 and < 4.0.0 | JetPack 4.6.1 (L4T R32.7.1) |
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               **Note:** OpenCV is commonly used for processing image data on the CORE I/O. By Default, most installations of OpenCV do not have CUDA support. Nvidia's [l4t-ml](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml) container provides a version of OpenCV with CUDA support built-in, but is also fairly large. To build a more lightweight container with CUDA support in OpenCV, follow the instructions provided [here](https://github.com/dusty-nv/jetson-containers/blob/93c5b397f8daeeb9218ba49acefc23f4ad19965f/Dockerfile.opencv), replacing `BASE_IMAGE` and `OPENCV_VERSION` with the desired versions (see above).
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              @@ -159,7 +163,12 @@ An Extension is a set of docker images configured with a docker-compose yaml con
                                                                                                                                                                                                                                               - Udev rules file to install in the CORE I/O OS if the Extension is associated with a hardware payload to be attached to CORE I/O.
                                                                                                                                                                                                                                               - Other files needed by the software or the udev rules included in the Extension
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -The name of the spx file represents the name of the extension.
                                                                                                                                                                                                                                              +If populated, the `extension_name` field in `manifest.json` represents the name of the extension. Otherwise, the name of the spx file represents the name of the extension. The name of the extension is subject to the following restrictions:
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +- Can only contain letters (a-z, A-Z), numbers (0-9), hyphens (-), and underscores (\_)
                                                                                                                                                                                                                                              +- Cannot contain the special strings, `coreio` and `mission_control`
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +Please note that these restrictions do not apply to the Extension filename when `extension_name` is populated.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ##### Manifest file
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              @@ -170,6 +179,7 @@ The `manifest.json` file is the Extension parameterization file with the followi
                                                                                                                                                                                                                                               - icon: Name of the file included in the extension that should be used as the icon for the extension
                                                                                                                                                                                                                                               - udev_rules: Name of the udev file included in the extension that contains the updated udev rules to install in host OS
                                                                                                                                                                                                                                               - images: Optional list of tgz file names included in the extension that represent the docker images to load for running the extension. Parameter is omitted if the images are available from a public location, such as dockerhub.
                                                                                                                                                                                                                                              +- extension_name: Name of the extension, subject to the restrictions in [Extension Structure](#extension-structure)
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ##### Docker Images
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              @@ -177,7 +187,7 @@ The docker images listed in the `images` field of the `manifest.json` file also
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ##### Docker Compose YAML configuration file
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -The `docker-compose.yml` file contains instructions for managing the docker images in the Extension. The “docker-compose” tool is an industry standard to support the management of multiple pieces of software packaged together.
                                                                                                                                                                                                                                              +The `docker-compose.yml` file contains instructions for managing the docker images in the Extension. The “docker-compose” tool is an industry standard to support the management of multiple pieces of software packaged together. As of 4.1.0, the `journald` logging driver is supported for Extensions and its usage is strongly recommended. because it enables developers to retrieve logs for containers that are no longer running, even after a power cycle. If no logging driver is specified in the `docker-compose.yml` file, the Extension uses the `journald` logging driver.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ##### Other files
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              diff --git a/docs/payload/guidelines_for_robust_payload_design.md b/docs/payload/guidelines_for_robust_payload_design.md
                                                                                                                                                                                                                                              index ed969802a..08780fc1d 100644
                                                                                                                                                                                                                                              --- a/docs/payload/guidelines_for_robust_payload_design.md
                                                                                                                                                                                                                                              +++ b/docs/payload/guidelines_for_robust_payload_design.md
                                                                                                                                                                                                                                              @@ -10,7 +10,6 @@ Development Kit License (20191101-BDSDK-SL).
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot is designed for industrial use. The payload designer should assume the robot might fall on its side while walking or sustain forces from its industrial environments.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Crash protection
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot is covered in a dual crash protection material that has an outer layer of polycarbonate-blend plastic and an inner layer of foam. The outer layer provides durability and helps to diffuse point loads from the environment across its surface area.
                                                                                                                                                                                                                                              @@ -19,24 +18,20 @@ Payloads should include a crash structure to protect sensitive components from c
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               For impact protection, Boston Dynamics recommends that payload designers consider sculpted cross-linked polyethylene foam as a protection material. This type of machinable foam can be shaped easily and is durable without external covering.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Shock loads
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               In crashes onto hard surfaces, shocks of up to 180 g can be experienced by the robot’s body and hence payloads connected to it.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               While not required to interface with the robot, payload developers who want to produce robust hardware should target this value or higher. Boston Dynamics recommends paying particular attention to electrical connections such as board-to-board interconnects and heavy components soldered to PCBAs.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Ingress protection
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot is designed to operate indoors and outdoors. The robot is sealed to IP54 ensuring that it is protected from dust and splashing water. Spot robot payloads should also conform to this standard to ensure the same indoor and outdoor capability.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## External cabling
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               If a payload includes external cables, care must be taken to ensure a robust and survivable cable management system for the robot’s dynamic environment. When possible, external cables should be avoided. All external cables should be tied down tightly to minimize any exposed loops or connectors to avoid getting pinched or caught on the environment.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Designing for edge-case leg interference
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               When the robot is unpowered, the robot’s legs may move into the designated design space above the robot, as shown in this illustration:
                                                                                                                                                                                                                                              @@ -45,13 +40,12 @@ When the robot is unpowered, the robot’s legs may move into the designated des
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               While robot control software attempts to avoid putting the legs in these areas, a robust payload must assume potential contact with the legs and should protect the payload accordingly.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Enabling self-righting
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot can usually right itself upon command when it falls. However, certain payload geometries can interfere with the self-righting behavior and prevent the robot from righting itself. In order to maintain the self-righting capability, a payload developer should seek further guidance from Boston Dynamics.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                               [config-image1]: images/payload1.png
                                                                                                                                                                                                                                               [config-image2]: images/payload2.png
                                                                                                                                                                                                                                               [config-image3]: images/payload3.png
                                                                                                                                                                                                                                              @@ -60,23 +54,17 @@ Spot can usually right itself upon command when it falls. However, certain paylo
                                                                                                                                                                                                                                               [config-image6]: images/config-image6.png
                                                                                                                                                                                                                                               [config-image7]: images/payload7.png
                                                                                                                                                                                                                                               [config-image8]: images/payload8.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [elec-image1]: images/elec-image1.png
                                                                                                                                                                                                                                               [elec-image2]: images/elec-image2.png
                                                                                                                                                                                                                                               [elec-image3]: images/elec-image3.png
                                                                                                                                                                                                                                               [guidelines-image1]: images/guidelines-image1.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [mech-image1]: images/mech-image1.png
                                                                                                                                                                                                                                               [mech-image2]: images/mech-image2.png
                                                                                                                                                                                                                                               [mech-image3]: images/mech-image3.png
                                                                                                                                                                                                                                               [mech-image4]: images/mech-image4.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [rails-image1]: images/rails-image1.png
                                                                                                                                                                                                                                               [rails-image2]: images/rails-image2.png
                                                                                                                                                                                                                                               [rails-image3]: images/rails3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [payload-top]: Readme.md "Developing and managing Spot payloads"
                                                                                                                                                                                                                                               [configuration]: payload_configuration_requirements.md "Payload configuration requirements"
                                                                                                                                                                                                                                               [mechanical]: mechanical_interfaces.md "Mechanical interfaces"
                                                                                                                                                                                                                                              diff --git a/docs/payload/mechanical_interfaces.md b/docs/payload/mechanical_interfaces.md
                                                                                                                                                                                                                                              index 5e922cde0..98890135d 100644
                                                                                                                                                                                                                                              --- a/docs/payload/mechanical_interfaces.md
                                                                                                                                                                                                                                              +++ b/docs/payload/mechanical_interfaces.md
                                                                                                                                                                                                                                              @@ -8,42 +8,32 @@ Development Kit License (20191101-BDSDK-SL).
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               # Mechanical Interfaces
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               Payloads should be designed to interface correctly with a cable connector and mount to the top of Spot. Detailed CAD is available on the Support Center at https://support.bostondynamics.com/s/article/Defeatured-Spot-CAD-Models.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Cable and connector interface
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Boston Dynamics provides a fully shielded, over-molded DB25 cable to make the connection between Spot’s payload ports and payloads. Payloads designed for the robot should have an interface for this cabling to maintain IP54 ingress protection.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Correct orientation of DB25 relative to front of robot
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![port detail][mech-image1]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Keepout dimensions in mm
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Boston Dynamics provides robust, environmentally sealed payload cables. A payload must ensure that the necessary keepout regions are compatible with the DB25 overmold on these cables.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![port keepout][mech-image2]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Sealing gland geometry in mm
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Payloads should incorporate a small ridge around the DB25 connector. This ridge should be about 3mm tall and of 21mm by 63mm. Corner radius is 5mm. The ridge presses into a foam gasket on the cable side to create a seal.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![port sealing gland][mech-image3]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![port sealing gland side view][mech-image4]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                               [config-image1]: images/payload1.png
                                                                                                                                                                                                                                               [config-image2]: images/payload2.png
                                                                                                                                                                                                                                               [config-image3]: images/payload3.png
                                                                                                                                                                                                                                              @@ -52,22 +42,17 @@ Payloads should incorporate a small ridge around the DB25 connector. This ridge
                                                                                                                                                                                                                                               [config-image6]: images/config-image6.png
                                                                                                                                                                                                                                               [config-image7]: images/payload7.png
                                                                                                                                                                                                                                               [config-image8]: images/payload8.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [elec-image1]: images/elec-image1.png
                                                                                                                                                                                                                                               [elec-image2]: images/elec-image2.png
                                                                                                                                                                                                                                               [elec-image3]: images/elec-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [guidelines-image1]: images/guidelines-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [mech-image1]: images/mech-image1.png
                                                                                                                                                                                                                                               [mech-image2]: images/mech-image2.png
                                                                                                                                                                                                                                               [mech-image3]: images/mech-image3.png
                                                                                                                                                                                                                                               [mech-image4]: images/mech-image4.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [rails-image1]: images/rails-image1.png
                                                                                                                                                                                                                                               [rails-image2]: images/rails-image2.png
                                                                                                                                                                                                                                               [rails-image3]: images/rails-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [payload-top]: Readme.md "Developing and managing Spot payloads"
                                                                                                                                                                                                                                               [configuration]: payload_configuration_requirements.md "Payload configuration requirements"
                                                                                                                                                                                                                                               [mechanical]: mechanical_interfaces.md "Mechanical interfaces"
                                                                                                                                                                                                                                              diff --git a/docs/payload/payload_configuration_requirements.md b/docs/payload/payload_configuration_requirements.md
                                                                                                                                                                                                                                              index a62745068..0b68ebc73 100644
                                                                                                                                                                                                                                              --- a/docs/payload/payload_configuration_requirements.md
                                                                                                                                                                                                                                              +++ b/docs/payload/payload_configuration_requirements.md
                                                                                                                                                                                                                                              @@ -10,89 +10,64 @@ Development Kit License (20191101-BDSDK-SL).
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot can be configured to carry up to two payloads. The following describes considerations for designing payloads. If designing a payload to be used in conjunction with other payloads, you must keep the total weight of all payloads under 14 kg. A urdf model of the robot and its geometry can be found [here](../../files/spot_base_urdf.zip).
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload ports
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot comes with two payload ports that provide power, communication, time-synchronization, and safety system integration.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![robot ports][config-image1]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               NOTE: Robot will not work without a cap or payload attached to each port.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload width
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               The maximum recommended width for a body-mounted payload is 190mm. Wider payloads will result in reduced overall mobility and significant interference with the legs. Payload designers should avoid interference with the robot’s legs as shown above by avoiding the areas immediately adjacent to the robot's hips.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Designers should include a scallop or elevate the payload enough to create clearance around this section, shown in pink. A 3D STEP model of Spot’s back including payload mounting area detail is available upon request. We recommend that payload developers request and study this model.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![payload width][config-image2]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload length
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Do not overhang the front or rear of the robot as this will reduce maneuverability. In special cases the software can be modified to support larger extents, but we recommend staying inside the given design space.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![payload clearance][config-image3]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload height
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               The height of the payload impacts the robot’s ability to self-right and increases the height of the center of mass. Keep the center of mass low, as the robot may not self-right if top-heavy.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![top clearance][config-image4]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload weight
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot can support 14 kg total combined capacity distributed over the top of the robot. This total payload capacity must include all payloads. Spot can better handle payload mass if the combined center of mass lies between the front and rear hips. Spot will be more agile and less likely to fall if the total payload mass is centered on the middle of the robot.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload leg Interference
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Spot’s legs have a very wide range of motion as shown below. When the robot climbs stairs, transitions from sit to stand, and self-rights, the knees may rise above the top plane of the robot where payloads may be mounted. Even with following these guidelines, robot legs might come in contact with a payload. This is considered normal, and payloads should be designed robustly to withstand occasional contact with legs.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Isometric and top views of robot legs ROM
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![leg clearance][config-image5]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ![leg clearance][config-image6]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               The robot’s legs can extend above and over the robot’s back.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               Note: A 3D Step model of the robot’s body including typical leg swing areas is available on the Support Center at https://support.bostondynamics.com/s/article/Defeatured-Spot-CAD-Models.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload clearance with robot arm
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![arm clearance][config-image7]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ### Payload under arm clearance
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ![arm clearance][config-image8]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               NOTE: The Spot Arm weighs 8 kg. Total combined payload weight should be within the 14 kg maximum payload limit.
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                               [config-image1]: images/payload1.png
                                                                                                                                                                                                                                               [config-image2]: images/payload2.png
                                                                                                                                                                                                                                               [config-image3]: images/payload3.png
                                                                                                                                                                                                                                              @@ -101,22 +76,17 @@ NOTE: The Spot Arm weighs 8 kg. Total combined payload weight should be within t
                                                                                                                                                                                                                                               [config-image6]: images/config-image6.png
                                                                                                                                                                                                                                               [config-image7]: images/payload7.png
                                                                                                                                                                                                                                               [config-image8]: images/payload8.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [elec-image1]: images/elec-image1.png
                                                                                                                                                                                                                                               [elec-image2]: images/elec-image2.png
                                                                                                                                                                                                                                               [elec-image3]: images/elec-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [guidelines-image1]: images/elec-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [mech-image1]: images/mech-image1.png
                                                                                                                                                                                                                                               [mech-image2]: images/mech-image2.png
                                                                                                                                                                                                                                               [mech-image3]: images/mech-image3.png
                                                                                                                                                                                                                                               [mech-image4]: images/mech-image4.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [rails-image1]: images/rails-image1.png
                                                                                                                                                                                                                                               [rails-image2]: images/rails-image2.png
                                                                                                                                                                                                                                               [rails-image3]: images/rails-image3.png
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               [payload-top]: Readme.md
                                                                                                                                                                                                                                               [configuration]: payload_configuration_requirements.md#1
                                                                                                                                                                                                                                               [mechanical]: mechanical_interfaces.md
                                                                                                                                                                                                                                              diff --git a/docs/payload/robot_electrical_interface.md b/docs/payload/robot_electrical_interface.md
                                                                                                                                                                                                                                              index 4319379f3..c3ad650ad 100644
                                                                                                                                                                                                                                              --- a/docs/payload/robot_electrical_interface.md
                                                                                                                                                                                                                                              +++ b/docs/payload/robot_electrical_interface.md
                                                                                                                                                                                                                                              @@ -14,56 +14,44 @@ Robot presents DB25 socket
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                               ![db25 connector][elec-image1]
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                               ## Payload port pinouts by category
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -| Category | Pins | Specifications |
                                                                                                                                                                                                                                              -| -------- | ---- | -------------- |
                                                                                                                                                                                                                                              -| Power |	12, 13, 24, 25 |	Voltage supply range: 35-59V
                                                                                                                                                                                                                                              Absolute Maximum Voltage: 72V
                                                                                                                                                                                                                                              Max current: 3A/pin
                                                                                                                                                                                                                                              Max power: 150W/port
                                                                                                                                                                                                                                              Bulk capacitance: 150uF/port -| Communication | 1-4, 7, 14-17 | Ethernet: 1000Base-T
                                                                                                                                                                                                                                              PPS Accuracy: 5ppm
                                                                                                                                                                                                                                              PPS Frequency: 1Hz -| Safety Loops | 5 to 18, 6 to 19, 8 to 20, 11 to 23 | Payload power interlock
                                                                                                                                                                                                                                              Motor power interlock
                                                                                                                                                                                                                                              Extra interlock loop (do not remove)
                                                                                                                                                                                                                                              Extra interlock loop (do not remove) - - - - - +| Category | Pins | Specifications | +| ------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| Power | 12, 13, 24, 25 | Voltage supply range: 35-59V
                                                                                                                                                                                                                                              Absolute Maximum Voltage: 72V
                                                                                                                                                                                                                                              Max current: 3A/pin
                                                                                                                                                                                                                                              Max power: 150W/port
                                                                                                                                                                                                                                              Bulk capacitance: 150uF/port | +| Communication | 1-4, 7, 14-17 | Ethernet: 1000Base-T
                                                                                                                                                                                                                                              PPS Accuracy: 5ppm
                                                                                                                                                                                                                                              PPS Frequency: 1Hz | +| Safety Loops | 5 to 18, 6 to 19, 8 to 20, 11 to 23 | Payload power interlock
                                                                                                                                                                                                                                              Motor power interlock
                                                                                                                                                                                                                                              Extra interlock loop (do not remove)
                                                                                                                                                                                                                                              Extra interlock loop (do not remove) | ## Payload port PIN specifications - -| Pin # | Name | Description | -| ----- | ---- | ----------- | -| 1 | ETH0_D_N | Ethernet Pair D negative -| 2 | ETH0_D_P | Ethernet Pair D Positive -| 3 | ETH0_B_N | Ethernet Pair B negative -| 4 | ETH0_B_P | Ethernet Pair B Positive -| 5 | PL_SAFETY_O | Payload power enabled when continuity is established between this pin and pin 18 -| 6 | MP_SAFETY_O | Robot motor power enabled when continuity is established between this pin and pin 19 -| 7 | PPS | Pulse-Per-Second signal referenced to payload ground -| 8 | EXTRA_SAFETY_A | Extra loop back. When designing a payload make sure to jumper to pin 20 -| 9 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. -| 10 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. -| 11 | EXTRA_SAFETY_B | Extra loop back. When designing a payload make sure to jumper to pin 23 -| 12 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. -| 13 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. -| 14 | ETH0_C_N | Ethernet Pair C negative -| 15 | ETH0_C_P | Ethernet Pair C Positive -| 16 | ETH0_A_N | Ethernet Pair A negative -| 17 | ETH0_A_P | Ethernet Pair A Positive -| 18 | PL_SAFETY_IN | Payload power enabled when continuity is established between this pin and pin 5 -| 19 | MP_SAFETY_IN | Robot motor power enabled when continuity is established between this pin and pin 6 -| 20 | EXTRA_SAFETY_A | Extra loop back. When designing a payload make sure to jumper to pin 8 -| 21 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. -| 22 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. -| 23 | EXTRA_SAFETY_B | Extra loop back. When designing a payload make sure to jumper to pin 11 -| 24 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. -| 25 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. -MH1, MH2 | P_GND | Connector Shell and Mounting Hardware is connected to payload ground - - - - +| Pin # | Name | Description | +| -------- | -------------- | ------------------------------------------------------------------------------------- | +| 1 | ETH0_D_N | Ethernet Pair D negative | +| 2 | ETH0_D_P | Ethernet Pair D Positive | +| 3 | ETH0_B_N | Ethernet Pair B negative | +| 4 | ETH0_B_P | Ethernet Pair B Positive | +| 5 | PL_SAFETY_O | Payload power enabled when continuity is established between this pin and pin 18 | +| 6 | MP_SAFETY_O | Robot motor power enabled when continuity is established between this pin and pin 19 | +| 7 | PPS | Pulse-Per-Second signal referenced to payload ground | +| 8 | EXTRA_SAFETY_A | Extra loop back. When designing a payload make sure to jumper to pin 20 | +| 9 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. | +| 10 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. | +| 11 | EXTRA_SAFETY_B | Extra loop back. When designing a payload make sure to jumper to pin 23 | +| 12 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. | +| 13 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. | +| 14 | ETH0_C_N | Ethernet Pair C negative | +| 15 | ETH0_C_P | Ethernet Pair C Positive | +| 16 | ETH0_A_N | Ethernet Pair A negative | +| 17 | ETH0_A_P | Ethernet Pair A Positive | +| 18 | PL_SAFETY_IN | Payload power enabled when continuity is established between this pin and pin 5 | +| 19 | MP_SAFETY_IN | Robot motor power enabled when continuity is established between this pin and pin 6 | +| 20 | EXTRA_SAFETY_A | Extra loop back. When designing a payload make sure to jumper to pin 8 | +| 21 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. | +| 22 | P_GND | Ground Reference for the payload. Each pin supports 3A of return current. | +| 23 | EXTRA_SAFETY_B | Extra loop back. When designing a payload make sure to jumper to pin 11 | +| 24 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. | +| 25 | PWR | Unregulated payload power from robot battery. Each pin supports 3A of supply current. | +| MH1, MH2 | P_GND | Connector Shell and Mounting Hardware is connected to payload ground | ## Payload power requirements @@ -77,21 +65,16 @@ Payload power is enabled when pins 5 (PL_SAFETY_O) and 18 (PL_SAFETY_IN) are sho The robot includes a current limiting circuit that will disable power to the payload in the event of an unintended current spike. The average power for each payload connector must not exceed 150W. The resettable current limiting circuit in the robot will disable payload power if the total current for both payloads combined exceeds a limit ranging from 9-13A. If an overcurrent event occurs and payload power is disabled, the current limiting circuit can be reset by cycling robot power using the power button. - ## Motor power safety The payload interface contains a safety interlock connection that allows the payload to disable motor power to all motors in the robot. All payloads must therefore ensure continuity between pins 6 (MP_SAFETY_O) and 19 (MP_SAFETY_IN); pins 5 (PL_SAFETY_IN) and 18 (PL_SAFETY_O); pins 8 (EXTRA_SAFETY_A) and 20 (EXTRA_SAFETY_A); as well as pins 11 (EXTRA_SAFETY_B) and 23 (EXTRA_SAFETY_B) at all times for the robot to operate. If electrical continuity between these pins is interrupted, the robot will immediately disable power specific systems. If the robot is standing, this will cause the robot to fall to the ground, or cause payloads to power off. - ![payload electrical][elec-image2] - - ### Payload port requirements The robot's payload caps include circuitry that completes the circuit between the pins involved in this system. If there is no payload present, the cap(s) must be installed to allow the robot to function. If the caps are removed or become loose during operation, the robot will immediately disable motor power and sit down. - ## Robot Communication and pulse-per-second (PPS) The payload connector includes pins to provide 1000Base-T Ethernet for connectivity to the payload. The robot also provides a Pulse Per Second (PPS) signal to the payloads via pin 7 (PPS) referenced to P_GND as shown below. @@ -100,15 +83,13 @@ This signal operates at 1Hz with 5ppm accuracy. The payload can use this signal Payloads must include a pull-up resistor to the appropriate logic voltage to accommodate the open collector output circuit as shown below, with a maximum current of 10mA. The pull-up resistor value must consider the series resistance on the robot (shown in the schematic below) to ensure adequate logic-low and logic-high signaling. - ![onboard PPS][elec-image3] - + [rails-image1]: images/rails-image1.png [rails-image2]: images/rails-image2.png [rails-image3]: images/rails3.png - [config-image1]: images/payload1.png [config-image2]: images/payload2.png [config-image3]: images/payload3.png @@ -117,7 +98,6 @@ Payloads must include a pull-up resistor to the appropriate logic voltage to acc [config-image6]: images/config-image6.png [config-image7]: images/payload7.png [config-image8]: images/payload8.png - [elec-image1]: images/elec-image1.png [elec-image2]: images/elec-image2.png [elec-image3]: images/elec-image3.png @@ -126,7 +106,6 @@ Payloads must include a pull-up resistor to the appropriate logic voltage to acc [mech-image2]: images/mech-image2.png [mech-image3]: images/mech-image3.png [mech-image4]: images/mech-image4.png - [payload-top]: Readme.md "Developing and managing Spot payloads" [configuration]: payload_configuration_requirements.md "Payload configuration requirements" [mechanical]: mechanical_interfaces.md "Mechanical interfaces" diff --git a/docs/payload/robot_mounting_rails.md b/docs/payload/robot_mounting_rails.md index 68021ec2b..30717395e 100644 --- a/docs/payload/robot_mounting_rails.md +++ b/docs/payload/robot_mounting_rails.md @@ -10,25 +10,21 @@ Development Kit License (20191101-BDSDK-SL). Aluminum payload rails are located along the left and right edges of the body and provide a secure means of mounting payloads to Spot. The rails accept T-slot nuts such as Misumi HNTR5-5. Ensure that mounting screws do not project more than 6.3mm below the top surface of the mounting rail and that T-slot nuts are fully supported along each edge. - ![max screw extent][rails-image1] If precise and repeatable payload positioning is required, a single 4mm diameter pin can be added at any of six locations where the rail bolts to the robot chassis. The pin should project 5.0 +/- 0.25mm below the mounting surface of the rail and be spaced 8mm from the T-slot center-line. - ![mounting rail keying pin][rails-image2] - ## Spot dimensions and reference points ![dimensions and reference points][rails-image3] - + [rails-image1]: images/rails-image1.png [rails-image2]: images/rails-image2.png [rails-image3]: images/rails3.png - [config-image1]: images/payload1.png [config-image2]: images/payload2.png [config-image3]: images/payload3.png @@ -37,7 +33,6 @@ If precise and repeatable payload positioning is required, a single 4mm diameter [config-image6]: images/config-image6.png [config-image7]: images/payload7.png [config-image8]: images/payload8.png - [elec-image1]: images/elec-image1.png [elec-image2]: images/elec-image2.png [elec-image3]: images/elec-image3.png @@ -46,7 +41,6 @@ If precise and repeatable payload positioning is required, a single 4mm diameter [mech-image2]: images/mech-image2.png [mech-image3]: images/mech-image3.png [mech-image4]: images/mech-image4.png - [payload-top]: Readme.md "Developing and managing Spot payloads" [configuration]: payload_configuration_requirements.md "Payload configuration requirements" [mechanical]: mechanical_interfaces.md "Mechanical interfaces" diff --git a/docs/payload/spot_core_cockpit.md b/docs/payload/spot_core_cockpit.md index 477b80c59..026d6dd5f 100644 --- a/docs/payload/spot_core_cockpit.md +++ b/docs/payload/spot_core_cockpit.md @@ -10,9 +10,10 @@ Development Kit License (20191101-BDSDK-SL). Cockpit is an interactive Linux server admin interface, licensed under: GNU LGPL version 2.1. More details can be found at https://cockpit-project.org/. -We have installed this tool **on** the Spot CORE to make system management a little bit easier for developers and end users. +We have installed this tool **on** the Spot CORE to make system management a little bit easier for developers and end users. ## Prerequisites + - Spot CORE must be powered on. - Spot CORE should be connected to the robot with a working Ethernet connection. @@ -20,10 +21,9 @@ We have installed this tool **on** the Spot CORE to make system management a lit This document will quickly cover the recommended features for Spot CORE users. Cockpit is readily available on forwarded port 21443. In the future, a direct link will be provided on the Admin Console Spot CORE Payloads page. To access this port through the robot, use the following address: https://INSERT_ROBOT_IP:21443/. If a PC is connected to the robot over WiFi, go to https://192.168.80.3:21443/. Click "Advanced" and "Proceed ..." to reach the login page. - ![login](./images/cockpit/login.png) -Log in using your standard Spot CORE account username & password credentials. Ensure you select "Reuse my password for privileged tasks". This will be required in order to adjust network settings for example. +Log in using your standard Spot CORE account username & password credentials. Ensure you select "Reuse my password for privileged tasks". This will be required in order to adjust network settings for example. The landing page gives you an "Overview" of the Spot CORE. Notice near the top right corner there is a "Restart" option which is very handy if the Spot CORE is in a remote location. IMPORTANT NOTE: Do not adjust system time if you are using the Spot CORE EAP with the Velodyne LiDAR VLP-16. @@ -37,11 +37,13 @@ See additional instructions below to specifically cover how to use the following - [Services](#services) ## Terminal + Jumping down to the bottom option, take a quick look at the Cockpit Terminal page which will be used in the following examples. ![login](./images/cockpit/terminal.png) ### Check Spot CORE Software Version + Our support team may ask you what Spot CORE version you are running. This information can be found on the registered payload page of the admin console or the settings page of the tablet app. This information can also be found with more detail by running the following command on the Spot CORE. An example is included below using the Cockpit Terminal. ``` @@ -51,11 +53,13 @@ cat /etc/spotcore-release ![login](./images/cockpit/terminal_check_release.png) ## Networking -The Networking page will likely be the most frequently used interface for Spot CORE users. The default base image for the release 2.1.0 or later Spot CORE now uses NetworkManager for configuring network settings which provides a clean interface with Cockpit. + +The Networking page will likely be the most frequently used interface for Spot CORE users. The default base image for the release 2.1.0 or later Spot CORE now uses NetworkManager for configuring network settings which provides a clean interface with Cockpit. ![login](./images/cockpit/networking.png) ### Spot CORE WiFi Network Settings + Below is the recommended procedure for release 2.1.0 or later of how to connect Spot CORE to the internet with a WiFi adapter. 1. Insert Ubuntu 18.04 compatible USB WiFi adapter. @@ -75,7 +79,9 @@ nmcli d # List interface names. nmcli r wifi on # Turn WiFi radio on. nmcli d wifi list # List available WiFi networks. ``` + From the listed wireless access points, replace the capitalized letters of the command below with your desired WiFi network and password. + ``` sudo nmcli d wifi connect "MY_WIFI" password "MY_PASSWORD" ``` @@ -87,7 +93,7 @@ A successful connection will appear as follows. ![login](./images/cockpit/terminal_wifi_connected.png) -However, to test the internet connection, attempt a ping to `google.com`. Press Crtl + C to exit. +However, to test the internet connection, attempt a ping to `google.com`. Press Ctrl + C to exit. ![login](./images/cockpit/terminal_wifi_ping_fails.png) @@ -104,28 +110,30 @@ In order to connect to the internet, remove the IPv4 default route of enp2s0. Se **IMPORTANT NOTES:** 1. By default, Boston Dynamics has included 2 pre-defined Routes which will route outbound communication from the Spot CORE to the explicitly defined gateways, Spot's Access Point `192.168.80.0` and Spot's Ethernet port `10.0.0.0`, rather than the default gateway. -1. These routes are only required if the default gateway is removed for internet access. +1. These routes are only required if the default gateway is removed for internet access. 1. The route to `10.0.0.0` is only valid if the user has not adjusted the Ethernet network settings on the robot admin console. 1. To access the internet, remove the default gateway (the third field) under Addresses as pictured below and Apply these changes. Instead of routing all traffic to the robot, we will instead route to the internet. 1. Making the above change may affect Boston Dynamics integrations or Customer integrations. Adjust additional network settings if necessary. ![login](./images/cockpit/networking_enp2s0_no_gateway.png) -Without the gateway, attempt to ping `google.com` from the terminal again. Press Crtl + C to exit. +Without the gateway, attempt to ping `google.com` from the terminal again. Press Ctrl + C to exit. ![login](./images/cockpit/terminal_ping_works.png) -Ping requests work! The Spot CORE can now reach the internet. Notice in the routing table after command `ip route`, the only default route is the new WiFi adapter. +Ping requests work! The Spot CORE can now reach the internet. Notice in the routing table after command `ip route`, the only default route is the new WiFi adapter. ## Docker Containers + This is a minimal interface to manage docker containers running on the Spot CORE. Boston Dynamics recommends using Portainer for docker management instead with instructions available [here](./docker_containers.md). Unfortunately, the Cockpit Docker Containers application does not allow local docker image .tar uploads at this time. ![login](./images/cockpit/docker.png) ## Services + The Services and Logs pages are helpful. The Boston Dynamics `velodyne_service` runs by default on all Spot COREs. This service performs two mains tasks: -1. Communicates with the Velodyne LiDAR VLP-16 model for enhanced Spot autonomy. +1. Communicates with the Velodyne LiDAR VLP-16 model for enhanced Spot autonomy. 1. Provides automatic payload registration. If you are running into Spot CORE LiDAR or Payload registration problems, please [reach out to Support](https://support.bostondynamics.com/s/contactsupport) with log files. Log files are easily retrievable using the Cockpit interface as follows: @@ -138,19 +146,22 @@ And select the `velodyne_service`. ![login](./images/cockpit/services_velodyne.png) -On this page, notice the service is properly running and registered. A similar search process can be performed on the Logs page for more detailed information. +On this page, notice the service is properly running and registered. A similar search process can be performed on the Logs page for more detailed information. ![login](./images/cockpit/logs_velodyne.png) -Note: you can also use the terminal to access system service status and logs. +Note: you can also use the terminal to access system service status and logs. ```bash systemctl status velodyne_service ``` -or + +or + ```bash journalctl -f -u velodyne_service ``` ## Additional Cockpit Documentation + Clicking `? Help` in the top right corner of the Cockpit interface will lead you to documentation about the [Web Console](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_systems_using_the_rhel_8_web_console/index) or the specific page itself. diff --git a/docs/payload/spot_core_vnc.md b/docs/payload/spot_core_vnc.md index 07993149f..2e2ad3bc9 100644 --- a/docs/payload/spot_core_vnc.md +++ b/docs/payload/spot_core_vnc.md @@ -7,40 +7,49 @@ Development Kit License (20191101-BDSDK-SL). --> # Spot CORE VNC + VNC allows users to launch and interact with graphical applications on remote machines. This document details how to set up TigerVNC on the Spot CORE. We will also use the GNOME desktop environment, port forwarding, and systemd .service files in the content below. ## Overview -Spot CORE now comes preconfigured with TigerVNC. The following sections outline the steps necessary for enabling the service before use. + +Spot CORE now comes preconfigured with TigerVNC. The following sections outline the steps necessary for enabling the service before use. - [TigerVNC Server Enable](#tigervnc-server-enable) - [TigerVNC Viewer](#tigervnc-viewer) -- [TigerVNC Server Installation](#tigervnc-server-installation) +- [TigerVNC Server Installation](#tigervnc-server-installation) - Not required if the Spot CORE is on any software version greater than 2.0.1. ## TigerVNC Server Enable + First, access a terminal on the Spot CORE. To do this, you can either log in to Cockpit at https://192.168.80.3:21443 and go to the Terminal tab, or you can connect through the command line: + ``` ssh -p 20022 spot@192.168.80.3 ``` ### Create a VNC password + A default password "password" will be created for you. This password is used to access the VNC session from a client, after which you need to log in with the standard username and password for the Spot CORE. You may also choose to create a new VNC password with the following command (a view-only password is not required): + ``` vncpasswd ``` Enable and start the service on the desired port. + ``` sudo systemctl enable vncserver@15100 # Enable service with the desired port. sudo systemctl start vncserver@15100 # Start service. systemctl status vncserver@15100 # Check the service is running. ``` + In the example commands above, the vncserver port number used is 21000 (5900 + **15100**). See [start vncserver](#start-vncserver) for more information. ## TigerVNC Viewer + Perform the following steps on the PC to start the VNC connection. ### Install vncviewer @@ -48,17 +57,21 @@ Perform the following steps on the PC to start the VNC connection. Install vncviewer for 64-bit Windows by downloading `vncviewer64-1.10.1.exe` from [here](https://github.com/TigerVNC/tigervnc/releases). Install tigervnc-viewer on Ubuntu using apt: + ``` sudo apt install tigervnc-viewer ``` -### Start vncviewer +### Start vncviewer + We need to create a secure connection using an SSH tunnel first. The below command assumes the user is connected to Spot's access point. Don't forget to change the ip address or port number if required. To run this ssh session in the background without executing any commands, add ` -fN` arguments to the end of the command. + ``` ssh -4 -p 20022 spot@192.168.80.3 -L 21000:127.0.0.1:21000 ``` Start VNC Viewer and pass the IP address and port number. + ``` vncviewer localhost:21000 ``` @@ -66,10 +79,13 @@ vncviewer localhost:21000 After entering the password set using `vncpasswd` earlier, a GNOME desktop environment should now be available. ## TigerVNC Server Installation + This section is not required if the Spot CORE is on any software version greater than or equal to 2.3.0. ### Install software + Install software required for the TigerVNC server on the Spot CORE using apt: + ``` sudo apt install tigervnc-standalone-server tigervnc-common tigervnc-xorg-extension tigervnc-viewer ``` @@ -77,7 +93,9 @@ sudo apt install tigervnc-standalone-server tigervnc-common tigervnc-xorg-extens If the user has not set up a VNC password, please see the earlier instructions on how to [create a vnc password](#create-a-vnc-password). ### Prepare vncserver + To configure the GNOME desktop, create a xstartup file in `~/.vnc/xstartup` and add the following contents. + ``` #!/bin/sh [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup @@ -88,7 +106,8 @@ dbus-launch --exit-with-session gnome-session & To enable permissions for remote sessions (such as VNC) to edit certain system settings, create the following files in `/etc/polkit-1/localauthority/50-local.d/`: -*10-network-manager.pkla* +_10-network-manager.pkla_ + ``` [Let user spot modify system settings for network] Identity=unix-user:spot @@ -99,7 +118,8 @@ ResultActive=yes ``` -*46-user-admin.pkla* +_46-user-admin.pkla_ + ``` [control center administration] Identity=unix-user:* @@ -112,27 +132,32 @@ ResultActive=yes ### Start vncserver TigerVNC listens to ports 5900+. The default port is 5901 (5900 + **1**), which can be started using the following command. + ``` vncserver :1 ``` In order to specify a different port, such as 21000, run vncserver with the number equal to 21000 - 5900 = **15100**. + ``` vncserver :15100 ``` Use `-list` to see the previously started vnc servers. + ``` vncserver -list ``` Use the below command to stop the previously started vnc servers. + ``` vncserver -kill :1 vncserver -kill :15100 ``` ### Enable vncserver on boot + In order for vncserver to automatically run on Spot CORE whenever Spot is turned on, use a systemd .service file. Create a service file named `vncserver@.service` and add the following contents. This file can take a port number as an argument. ``` @@ -154,13 +179,15 @@ ExecStop=/bin/su -l spot -c "/usr/bin/vncserver -kill :%i" WantedBy=multi-user.target ``` -Copy the file to /etc/systemd/system/ and start the service. Change the port number as desired. +Copy the file to /etc/systemd/system/ and start the service. Change the port number as desired. + ``` -sudo cp vncserver@.service /etc/systemd/system/ +sudo cp vncserver@.service /etc/systemd/system/ sudo systemctl daemon-reload # Reloads all systemd services. ``` ## Useful TigerVNC Resources + - [TigerVNC tutorial (primary resource used to create this document).](https://www.tecmint.com/install-and-configure-vnc-server-on-ubuntu/) - [How to handle port forwarding with TigerVNC.](http://danielhnyk.cz/setting-vnc-remote-access-port-forwarding/) - [How to use systemd.service files.](https://www.freedesktop.org/software/systemd/man/systemd.service.html) diff --git a/docs/protos/README.md b/docs/protos/README.md index 82057e854..35da3840f 100644 --- a/docs/protos/README.md +++ b/docs/protos/README.md @@ -16,5 +16,5 @@ The Spot API lets applications control Spot, read sensor information, and integr ## Contents -* [Style Guide](style_guide.md) -* [Proto Reference Guide](../../protos/bosdyn/api/README) \ No newline at end of file +- [Style Guide](style_guide.md) +- [Proto Reference Guide](../../protos/bosdyn/api/README) diff --git a/docs/protos/style_guide.md b/docs/protos/style_guide.md index 54a16bb85..aea596ac0 100644 --- a/docs/protos/style_guide.md +++ b/docs/protos/style_guide.md @@ -14,15 +14,15 @@ The protobuf messages and service definitions are the primary interface definiti **Follow [Google protobuf style guide](https://developers.google.com/protocol-buffers/docs/style)**. Their style guide is very thin, our APIs support it, with a few exceptions. -* Line lengths shall be 100 characters. -* Indentation shall be 4 spaces. +- Line lengths shall be 100 characters. +- Indentation shall be 4 spaces. **Use “Service” suffix for service definitions**. This makes it easier in generated code to disambiguate service names from message names. **Use RequestHeader and ResponseHeader as first fields in requests and responses**. This gives a consistent way to collect timing information, common errors such as bad input, and other common handling techniques. Libraries for different languages exists to simplify handling these. **Follow common error approach**. gRPC errors are used for transport-level issues such as networking problems or bad authorization tokens - which means service implementations almost always want to return gRPC Status OK. Internal service issues - like preconditions not being set - should use `INTERNAL_SERVER_ERROR` in the common ResponseHeader with optional error text string. Incorrectly formed request messages which are due to client programming errors should use `INVALID_REQUEST` in the common ResponseHeader with optional error text string. All other response statuses should use a separate error code specific to the particular RPC call, outside the common header. An error message may optionally be reported along with this call-specific error code, but the enum should be detailed enough that the error message need never be parsed in code. The `message` field in the common header should never be set to describe call-specific errors. - + **Times are represented with google.protobuf.Timestamp, and are all in “robot time”.** All timestamps are in the robot’s wall clock basis, and use the Timestamp object to represent the time. A separate TimeSync service exists to keep clients and robot in sync on time. **Durations are represented with google.protobuf.Duration.** Using the Duration type explicitly specifies that the field is a time duration. @@ -43,11 +43,11 @@ In these cases, use the Feedback RPC pattern as demonstrated by the PowerService **Packages**. In addition to the Google style guide, we have a few additional guidelines for the "package" directive: -* Packages are all lowercase. -* Each package level should be one word. -* A .proto file's package declaration should match its relative path in the protos/ subdirectory. This is so the Python module namespace agrees with languages that obey the package directive. -* Flatter is better. For example, prefer bosdyn.api.spot over bosdyn.api.robot.spot. -* Consider creating a new package for messages and services which should be distributed separately and versioned separately. For example, services for a particular robot might be packaged separately from core API infrastructure. +- Packages are all lowercase. +- Each package level should be one word. +- A .proto file's package declaration should match its relative path in the protos/ subdirectory. This is so the Python module namespace agrees with languages that obey the package directive. +- Flatter is better. For example, prefer bosdyn.api.spot over bosdyn.api.robot.spot. +- Consider creating a new package for messages and services which should be distributed separately and versioned separately. For example, services for a particular robot might be packaged separately from core API infrastructure. **Avoid specifying Request/Response messages in service definition files** Put them into the "foo.proto" file rather than the "foo_service.proto" file, to simplify dependencies in the build system. diff --git a/docs/python/README.md b/docs/python/README.md index 911632ad2..dca505fe9 100644 --- a/docs/python/README.md +++ b/docs/python/README.md @@ -27,9 +27,10 @@ The [Python reference guide](../../python/README.md) documents all of the Python ### Supported Platforms and Versions The Python client library is supported on the following platforms: - * Ubuntu 18.04 LTS - * Windows 10 - * MacOS 10.14 (Mojave and Catalina) + +- Ubuntu 22.04 LTS +- Windows 10 +- MacOS 10.14 (Mojave and Catalina) Python 3.6-3.10 are supported. @@ -37,9 +38,9 @@ Python 2.7 is _not_ supported, since the [Python 2 End-Of-Life](https://www.pyth ## Contents -* [Quickstart](quickstart.md) -* [Understanding Spot Programming](understanding_spot_programming.md) -* [Examples](../../python/examples/README.md) -* [Python Reference Guide](../../python/README.md) -* [Fetch Tutorial](fetch_tutorial/fetch1.md) -* [Data Collection Tutorial](daq_tutorial/daq1.md) +- [Quickstart](quickstart.md) +- [Understanding Spot Programming](understanding_spot_programming.md) +- [Examples](../../python/examples/README.md) +- [Python Reference Guide](../../python/README.md) +- [Fetch Tutorial](fetch_tutorial/fetch1.md) +- [Data Collection Tutorial](daq_tutorial/daq1.md) diff --git a/docs/python/daq_tutorial/daq2.md b/docs/python/daq_tutorial/daq2.md index ec553bf9c..0226259be 100644 --- a/docs/python/daq_tutorial/daq2.md +++ b/docs/python/daq_tutorial/daq2.md @@ -20,53 +20,59 @@ Development Kit License (20191101-BDSDK-SL). # Part 2: Capturing Images In this part of the tutorial, you will: -* Write an image service. -* Run the image service, connecting to the robot. -* Test that the image service functions properly. -If you do not have a webcam available, please skip ahead to [capturing other data](daq3.md). To skip the explanation and just run the service, jump ahead to [testing the service](#testing-the-service). +- Write an image service. +- Run the image service, connecting to the robot. +- Test that the image service functions properly. + +If you do not have a webcam available, please skip ahead to [capturing other data](daq3.md). To skip the explanation and just run the service, jump ahead to [testing the service](#testing-the-service). ## Understanding Image Services -An image service is a grpc service that implements the [bosdyn.api.ImageService] interface. A single image service can handle multiple cameras, exposing them as image sources. It then responds to GetImage requests by providing the images for the requested sources. The on-robot “image” service is exactly this interface, and provides access to the images from the robot’s on-board cameras. Note that image services are expected to return images “quickly”. If you have an image sensor that takes significant time to capture its images (more than several seconds), then you should instead implement a data acquisition plugin which can report on its capture status, and is not used for live views. +An image service is a grpc service that implements the [bosdyn.api.ImageService] interface. A single image service can handle multiple cameras, exposing them as image sources. It then responds to GetImage requests by providing the images for the requested sources. The on-robot “image” service is exactly this interface, and provides access to the images from the robot’s on-board cameras. Note that image services are expected to return images “quickly”. If you have an image sensor that takes significant time to capture its images (more than several seconds), then you should instead implement a data acquisition plugin which can report on its capture status, and is not used for live views. + +We have several helper classes to simplify the creation of new image services. These classes are found in `bosdyn.client.image_service_helpers`. -We have several helper classes to simplify the creation of new image services. These classes are found in `bosdyn.client.image_service_helpers`. -* `CameraInterface`: This is the abstract interface you will need to implement to read from particular camera hardware. This is the interface that we will implement in this tutorial. This implementation will require two methods: - * `blocking_capture()`: Takes the data from the camera and returns image data and a timestamp. - * `image_decode()`: Converts the image data into the correct format for returning a response to clients. -* `VisualImageSource`: Handles “running” a `CameraInterface`. It will manage details such as reporting faults, and optionally creating a thread to continually read from the camera. -* `CameraBaseImageServicer`: Implements the details of the grpc service that will respond to requests. +- `CameraInterface`: This is the abstract interface you will need to implement to read from particular camera hardware. This is the interface that we will implement in this tutorial. This implementation will require two methods: + - `blocking_capture()`: Takes the data from the camera and returns image data and a timestamp. + - `image_decode()`: Converts the image data into the correct format for returning a response to clients. +- `VisualImageSource`: Handles “running” a `CameraInterface`. It will manage details such as reporting faults, and optionally creating a thread to continually read from the camera. +- `CameraBaseImageServicer`: Implements the details of the grpc service that will respond to requests. ### Preparing the environment -For initial development, it is usually easiest to first connect the webcam (or other sensor) to your development machine and test and debug everything in that environment before deploying to the payload computer. Connect your webcam to your machine and verify that it works. + +For initial development, it is usually easiest to first connect the webcam (or other sensor) to your development machine and test and debug everything in that environment before deploying to the payload computer. Connect your webcam to your machine and verify that it works. For this example, we will use OpenCV to read from the camera hardware. #### Enter your Spot API virtualenv +

                                                                                                                                                                                                                                              Replace my_spot_env with the name of the virtualenv that you created using the [Spot Quickstart Guide](../quickstart.md):

                                                                                                                                                                                                                                              source my_spot_env/bin/activate
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              #### Install requirements +

                                                                                                                                                                                                                                              Install OpenCV's python bindings in your virtualenv:

                                                                                                                                                                                                                                              python3 -m pip install opencv-python==4.5.*
                                                                                                                                                                                                                                              - #### Directory Setup Make a folder called `~/data_capture` that we’ll put everything into: + ```sh mkdir ~/data_capture cd ~/data_capture ``` -Copy (or download) the script below into a file called `web_cam_image_service.py` in the `~/data_capture` folder. This is a simplified version of the [web cam example](../../../python/examples/service_customization/custom_parameter_image_server/README.md) (which includes some extra options to control how images are captured). +Copy (or download) the script below into a file called `web_cam_image_service.py` in the `~/data_capture` folder. This is a simplified version of the [web cam example](../../../python/examples/service_customization/custom_parameter_image_server/README.md) (which includes some extra options to control how images are captured). ### Web cam image service + Set up the imports for images and the Spot API ```python @@ -86,6 +92,7 @@ from bosdyn.api import image_service_pb2_grpc from bosdyn.client.image_service_helpers import (VisualImageSource, CameraBaseImageServicer, CameraInterface, convert_RGB_to_grayscale) ``` + Define some constants that we will use in the file. ```python @@ -95,14 +102,17 @@ SERVICE_TYPE = 'bosdyn.api.ImageService' _LOGGER = logging.getLogger(__name__) ``` -Now we will create the CameraInterface that does the work. The OpenCV VideoCapture class will handle the bulk of interfacing with standard webcams. + +Now we will create the CameraInterface that does the work. The OpenCV VideoCapture class will handle the bulk of interfacing with standard webcams. + ```python class WebCam(CameraInterface): """Provide access to the latest web cam data using openCV's VideoCapture.""" def __init__(self, device_name): ``` -OpenCV device names can be either an integer index or a device name string (such as /dev/video0 on linux or even the name of a video file), For usage simplicity, we will allow either and attempt to open the camera, raising an exception if that fails. We also generate a name for the image source from the device name, the details of which will be defined later. + +OpenCV device names can be either an integer index or a device name string (such as /dev/video0 on linux or even the name of a video file), For usage simplicity, we will allow either and attempt to open the camera, raising an exception if that fails. We also generate a name for the image source from the device name, the details of which will be defined later. ```python try: @@ -117,6 +127,7 @@ OpenCV device names can be either an integer index or a device name string (such _LOGGER.warning(err) raise Exception(err) ``` + We will also try to query the camera’s gain and exposure and reported resolution, so that we can report that data for the image source. ```python @@ -138,11 +149,12 @@ We will also try to query the camera’s gain and exposure and reported resoluti ``` Finally we’ll set a default jpeg quality to use if none is specified. + ```python self.default_jpeg_quality = 75 ``` -Next we define the actual capture function. For simplicity we only use `time.time()` as an approximation of the true capture time. +Next we define the actual capture function. For simplicity we only use `time.time()` as an approximation of the true capture time. ```python def blocking_capture(self): @@ -153,12 +165,13 @@ Next we define the actual capture function. For simplicity we only use `time.ti else: raise Exception("Unsuccessful call to cv2.VideoCapture().read()") ``` -Lastly, we need to decode that data into the output proto. For this method, `image_data` is the same data we returned from a `blocking_capture()` call. Image_proto is the output Image protobuf that we need to fill out, and image_req is the ImageRequest that contains image_format, quality_percent, pixel_format and resize_ratio options requested by the client. +Lastly, we need to decode that data into the output proto. For this method, `image_data` is the same data we returned from a `blocking_capture()` call. Image_proto is the output Image protobuf that we need to fill out, and image_req is the ImageRequest that contains image_format, quality_percent, pixel_format and resize_ratio options requested by the client. ```python def image_decode(self, image_data, image_proto, image_req): ``` + First, we convert the pixel format correctly and set the format in the output object. ```python @@ -173,6 +186,7 @@ First, we convert the pixel format correctly and set the format in the output ob else: image_proto.pixel_format = pixel_format ``` + If the resize_ratio is set, then we resize the image appropriately. ```python @@ -186,7 +200,8 @@ If the resize_ratio is set, then we resize the image appropriately. image_proto.cols = int(image_proto.cols * resize_ratio) converted_image_data = cv2.resize(converted_image_data, (image_proto.cols, image_proto.rows), interpolation = cv2.INTER_AREA) ``` -Next, we set the actual image data. If raw data was requested, we set the same bytes that we get from the camera. + +Next, we set the actual image data. If raw data was requested, we set the same bytes that we get from the camera. ```python # Set the image data. @@ -196,7 +211,7 @@ Next, we set the actual image data. If raw data was requested, we set the same image_proto.format = image_pb2.Image.FORMAT_RAW ``` -If JPEG encoding was requested, we encode it with OpenCV. If the quality_percent was not filled out in the request, we’ll use our default quality. +If JPEG encoding was requested, we encode it with OpenCV. If the quality_percent was not filled out in the request, we’ll use our default quality. ```python elif image_format == image_pb2.Image.FORMAT_JPEG or image_format == image_pb2.Image.FORMAT_UNKNOWN or image_format is None: @@ -216,7 +231,7 @@ If we don’t recognize the requested format, we’ll raise an error. "Image format %s is unsupported." % image_pb2.Image.Format.Name(image_format)) ``` -Now the image proto is filled out to be returned with the response. Note that we are *not* filling out any position transforms for the image, as in this case we don’t actually know where the camera is mounted. +Now the image proto is filled out to be returned with the response. Note that we are _not_ filling out any position transforms for the image, as in this case we don’t actually know where the camera is mounted. Next we’ll make the helper that turns the OpenCV device name into a nice source name to report to clients. @@ -227,7 +242,8 @@ def device_name_to_source_name(device_name): else: return os.path.basename(device_name) ``` -Now it’s time to create the image service. We take a list of device names and create our new WebCam class for each one, along with a VisualImageSource instance to run each one. We hard-code supported pixel formats in this tutorial when we create the VisualImageSource object. Please refer to SDK example on how to determine correct list of supported pixel formats. + +Now it’s time to create the image service. We take a list of device names and create our new WebCam class for each one, along with a VisualImageSource instance to run each one. We hard-code supported pixel formats in this tutorial when we create the VisualImageSource object. Please refer to SDK example on how to determine correct list of supported pixel formats. ```python def make_webcam_image_service(bosdyn_sdk_robot, service_name, device_names, logger=None): @@ -241,12 +257,14 @@ def make_webcam_image_service(bosdyn_sdk_robot, service_name, device_names, logg image_pb2.Image.PIXEL_FORMAT_RGB_U8]) image_sources.append(img_src) ``` + Finally we create and return our image service from the image sources. ```python return CameraBaseImageServicer(bosdyn_sdk_robot, service_name, image_sources, logger) ``` -Now that we have a way to create our image service (what gRPC calls a *servicer*), let’s make a function to run it. For this case we use the GrpcServiceRunner helper, which handles all the details of creating a gRPC server, adding the servicer to it, and running the service. + +Now that we have a way to create our image service (what gRPC calls a _servicer_), let’s make a function to run it. For this case we use the GrpcServiceRunner helper, which handles all the details of creating a gRPC server, adding the servicer to it, and running the service. ```python def run_service(bosdyn_sdk_robot, port, service_name, device_names, logger=None): @@ -255,7 +273,8 @@ def run_service(bosdyn_sdk_robot, port, service_name, device_names, logger=None) logger=logger) return GrpcServiceRunner(service_servicer, add_servicer_to_server_fn, port, logger=logger) ``` -All that is left is creating the command line interface for this script to run it. Here are the options for configuring the devices. As a convenience, if no devices are specified we will default to index 0. + +All that is left is creating the command line interface for this script to run it. Here are the options for configuring the devices. As a convenience, if no devices are specified we will default to index 0. ```python def add_web_cam_arguments(parser): @@ -264,7 +283,8 @@ def add_web_cam_arguments(parser): help=('Image source to query. If none are passed, it will default to the first available ' 'source.'), nargs='*', default=['0']) ``` -Now let’s create the main entry point. First we will set up and parse all command line arguments. These include our common arguments for connecting to a robot and creating a service. + +Now let’s create the main entry point. First we will set up and parse all command line arguments. These include our common arguments for connecting to a robot and creating a service. ```python if __name__ == '__main__': @@ -278,6 +298,7 @@ if __name__ == '__main__': ``` We default the device name to "0" so the script captures images from `/dev/video0`. + ``` devices = options.device_name if not devices: @@ -293,7 +314,8 @@ We set up logging options and then create the sdk and robot objects to communica sdk = bosdyn.client.create_standard_sdk("ImageServiceSDK") robot = sdk.create_robot(options.hostname) ``` -We need to authenticate with the robot. Instead of using a username and password, we want to identify as a payload. In order for this to work, the payload must be registered and have been authorized through Spot’s web service. + +We need to authenticate with the robot. Instead of using a username and password, we want to identify as a payload. In order for this to work, the payload must be registered and have been authorized through Spot’s web service. ```python robot.authenticate_from_payload_credentials(*bosdyn.client.util.get_guid_and_secret(options)) @@ -304,7 +326,9 @@ Now we create our service runner using the helper we defined previously. ```python service_runner = run_service(robot, options.port, DIRECTORY_NAME, devices, logger=_LOGGER) ``` -Lastly, we need to register our new service with the robot and run it. We will use the `DirectoryRegistrationKeepAlive` helper to handle the registration. + +Lastly, we need to register our new service with the robot and run it. We will use the `DirectoryRegistrationKeepAlive` helper to handle the registration. + ```python dir_reg_client = robot.ensure_client(DirectoryRegistrationClient.default_service_name) keep_alive = DirectoryRegistrationKeepAlive(dir_reg_client, logger=_LOGGER) @@ -313,49 +337,57 @@ Lastly, we need to register our new service with the robot and run it. We will with keep_alive: service_runner.run_until_interrupt() ``` + We now have a complete, runnable service that we can test and use. ## Testing the service -Authentication of an image service or a data acquisition plugin with a robot is done by using payload authentication instead of username/password login credentials. This allows us to authenticate these applications with payload credentials already created to register the payloads they pull data from. They can also use the SpotCORE payload credentials for authentication. + +Authentication of an image service or a data acquisition plugin with a robot is done by using payload authentication instead of username/password login credentials. This allows us to authenticate these applications with payload credentials already created to register the payloads they pull data from. They can also use the SpotCORE payload credentials for authentication. ### Registering a payload + In order to test these services, we need payload authentication credentials. Those credentials are created by registering a payload with the robot. The payload can represent an actual physical payload with mass and dimensions specified in the payload registration request, or a massless payload. To register a massless payload, please run the payload SDK example https://github.com/boston-dynamics/spot-sdk/tree/master/python/examples/payloads. For more information on registering payloads, please take a look at [this SDK documentation article](../../payload/configuring_payload_software). -The SpotCORE payload credentials can also be used to authenticate these image and data acquisition plugin services. They are located in `/opt/payload_credentials/payload_guid_and_secret` in SpotCORE. +The SpotCORE payload credentials can also be used to authenticate these image and data acquisition plugin services. They are located in `/opt/payload_credentials/payload_guid_and_secret` in SpotCORE. For testing on our development machine, we will use the credentials created and registered in [Part 1](daq1.md#register-a-payload-for-development). ### Running the service The simplest invocation of the service is just to run + ```sh export WEBCAM_PORT=5000 python3 web_cam_image_service.py --payload-credentials-file $CRED_FILE $ROBOT_IP --host-ip $SELF_IP --port $WEBCAM_PORT ``` -This will use the first webcam found by OpenCV. Note that you will need to either disable any firewall or open the specified port to allow the robot to contact the service. If you are unsure of the correct ip address to use for `--host-ip`, you can discover it via the bosdyn.client command line program: + +This will use the first webcam found by OpenCV. Note that you will need to either disable any firewall or open the specified port to allow the robot to contact the service. If you are unsure of the correct ip address to use for `--host-ip`, you can discover it via the bosdyn.client command line program: + ```sh python3 -m bosdyn.client $ROBOT_IP self-ip ``` + Be sure that the `$WEBCAM_PORT` is not blocked on your computer. Once this is running, use the [`image_service_tester.py` program](../../../python/examples/tester_programs/README.md#testing-an-image-service) to test its basic functionality. + ```sh python3 image_service_tester.py $ROBOT_IP --service-name web-cam-service --check-data-acquisition ``` + This will attempt to capture images from all reported sources, as well as capture images through the data acquisition service. Common errors at this point: -* Firewall blocking requests -* Incorrect host-ip specified -An additional test to perform is to use the robot’s tablet, and view the web-cam-service image source live on the tablet. +- Firewall blocking requests +- Incorrect host-ip specified +An additional test to perform is to use the robot’s tablet, and view the web-cam-service image source live on the tablet. ## Head over to [Part 3: Capturing Other Data](daq3.md) >> - -[<< Previous Page](daq1.md) +[<< Previous Page](daq1.md) | [Next Page>>](daq3.md) diff --git a/docs/python/daq_tutorial/daq6.md b/docs/python/daq_tutorial/daq6.md index 8de97e8b6..709a1d320 100644 --- a/docs/python/daq_tutorial/daq6.md +++ b/docs/python/daq_tutorial/daq6.md @@ -190,9 +190,9 @@ if __name__ == '__main__': plot_data(action_data, graph, image_size=args.image_size) ``` -The final result will be the map with the data collection overlayed. Tweak the `--image-size` parameter to get something that looks good for your map size and collection density. +The final result will be the map with the data collection overlaid. Tweak the `--image-size` parameter to get something that looks good for your map size and collection density. -![Collected data overlayed on the map](img/map1.png) +![Collected data overlaid on the map](img/map1.png) ## Further Reading diff --git a/docs/python/daq_tutorial/prism.css b/docs/python/daq_tutorial/prism.css index f938d78e7..1f073fffb 100644 --- a/docs/python/daq_tutorial/prism.css +++ b/docs/python/daq_tutorial/prism.css @@ -8,101 +8,106 @@ https://prismjs.com/download.html#themes=prism-coy&languages=markup+clike+bash+c code[class*="language-"], pre[class*="language-"] { - color: black; - background: none; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 1em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; + color: black; + background: none; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } /* Code blocks */ pre[class*="language-"] { - position: relative; - margin: .5em 0; - overflow: visible; - padding: 0; -} -pre[class*="language-"]>code { - position: relative; - border-left: 10px solid #358ccb; - box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf; - background-color: #fdfdfd; - background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%); - background-size: 3em 3em; - background-origin: content-box; - background-attachment: local; + position: relative; + margin: 0.5em 0; + overflow: visible; + padding: 0; +} +pre[class*="language-"] > code { + position: relative; + border-left: 10px solid #358ccb; + box-shadow: + -1px 0px 0px 0px #358ccb, + 0px 0px 0px 1px #dfdfdf; + background-color: #fdfdfd; + background-image: linear-gradient( + transparent 50%, + rgba(69, 142, 209, 0.04) 50% + ); + background-size: 3em 3em; + background-origin: content-box; + background-attachment: local; } code[class*="language-"] { - max-height: inherit; - height: inherit; - padding: 0 1em; - display: block; - overflow: auto; + max-height: inherit; + height: inherit; + padding: 0 1em; + display: block; + overflow: auto; } /* Margin bottom to accommodate shadow */ :not(pre) > code[class*="language-"], pre[class*="language-"] { - background-color: #fdfdfd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-bottom: 1em; + background-color: #fdfdfd; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 1em; } /* Inline code */ :not(pre) > code[class*="language-"] { - position: relative; - padding: .2em; - border-radius: 0.3em; - color: #c92c2c; - border: 1px solid rgba(0, 0, 0, 0.1); - display: inline; - white-space: normal; + position: relative; + padding: 0.2em; + border-radius: 0.3em; + color: #c92c2c; + border: 1px solid rgba(0, 0, 0, 0.1); + display: inline; + white-space: normal; } pre[class*="language-"]:before, pre[class*="language-"]:after { - content: ''; - z-index: -2; - display: block; - position: absolute; - bottom: 0.75em; - left: 0.18em; - width: 40%; - height: 20%; - max-height: 13em; - box-shadow: 0px 13px 8px #979797; - -webkit-transform: rotate(-2deg); - -moz-transform: rotate(-2deg); - -ms-transform: rotate(-2deg); - -o-transform: rotate(-2deg); - transform: rotate(-2deg); + content: ""; + z-index: -2; + display: block; + position: absolute; + bottom: 0.75em; + left: 0.18em; + width: 40%; + height: 20%; + max-height: 13em; + box-shadow: 0px 13px 8px #979797; + -webkit-transform: rotate(-2deg); + -moz-transform: rotate(-2deg); + -ms-transform: rotate(-2deg); + -o-transform: rotate(-2deg); + transform: rotate(-2deg); } pre[class*="language-"]:after { - right: 0.75em; - left: auto; - -webkit-transform: rotate(2deg); - -moz-transform: rotate(2deg); - -ms-transform: rotate(2deg); - -o-transform: rotate(2deg); - transform: rotate(2deg); + right: 0.75em; + left: auto; + -webkit-transform: rotate(2deg); + -moz-transform: rotate(2deg); + -ms-transform: rotate(2deg); + -o-transform: rotate(2deg); + transform: rotate(2deg); } .token.comment, @@ -110,11 +115,11 @@ pre[class*="language-"]:after { .token.prolog, .token.doctype, .token.cdata { - color: #7D8B99; + color: #7d8b99; } .token.punctuation { - color: #5F6364; + color: #5f6364; } .token.property, @@ -125,7 +130,7 @@ pre[class*="language-"]:after { .token.constant, .token.symbol, .token.deleted { - color: #c92c2c; + color: #c92c2c; } .token.selector, @@ -135,199 +140,200 @@ pre[class*="language-"]:after { .token.function, .token.builtin, .token.inserted { - color: #2f9c0a; + color: #2f9c0a; } .token.operator, .token.entity, .token.url, .token.variable { - color: #a67f59; - background: rgba(255, 255, 255, 0.5); + color: #a67f59; + background: rgba(255, 255, 255, 0.5); } .token.atrule, .token.attr-value, .token.keyword, .token.class-name { - color: #1990b8; + color: #1990b8; } .token.regex, .token.important { - color: #e90; + color: #e90; } .language-css .token.string, .style .token.string { - color: #a67f59; - background: rgba(255, 255, 255, 0.5); + color: #a67f59; + background: rgba(255, 255, 255, 0.5); } .token.important { - font-weight: normal; + font-weight: normal; } .token.bold { - font-weight: bold; + font-weight: bold; } .token.italic { - font-style: italic; + font-style: italic; } .token.entity { - cursor: help; + cursor: help; } .token.namespace { - opacity: .7; + opacity: 0.7; } @media screen and (max-width: 767px) { - pre[class*="language-"]:before, - pre[class*="language-"]:after { - bottom: 14px; - box-shadow: none; - } - + pre[class*="language-"]:before, + pre[class*="language-"]:after { + bottom: 14px; + box-shadow: none; + } } /* Plugin styles: Line Numbers */ pre[class*="language-"].line-numbers.line-numbers { - padding-left: 0; + padding-left: 0; } pre[class*="language-"].line-numbers.line-numbers code { - padding-left: 3.8em; + padding-left: 3.8em; } pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows { - left: 0; + left: 0; } /* Plugin styles: Line Highlight */ pre[class*="language-"][data-line] { - padding-top: 0; - padding-bottom: 0; - padding-left: 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 0; } pre[data-line] code { - position: relative; - padding-left: 4em; + position: relative; + padding-left: 4em; } pre .line-highlight { - margin-top: 0; + margin-top: 0; } pre[data-line] { - position: relative; - padding: 1em 0 1em 3em; + position: relative; + padding: 1em 0 1em 3em; } .line-highlight { - position: absolute; - left: 0; - right: 0; - padding: inherit 0; - margin-top: 1em; /* Same as .prism’s padding-top */ + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; /* Same as .prism’s padding-top */ - background: hsla(24, 20%, 50%,.08); - background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); + background: hsla(24, 20%, 50%, 0.08); + background: linear-gradient( + to right, + hsla(24, 20%, 50%, 0.1) 70%, + hsla(24, 20%, 50%, 0) + ); - pointer-events: none; + pointer-events: none; - line-height: inherit; - white-space: pre; + line-height: inherit; + white-space: pre; } @media print { - .line-highlight { - /* + .line-highlight { + /* * This will prevent browsers from replacing the background color with white. * It's necessary because the element is layered on top of the displayed code. */ - -webkit-print-color-adjust: exact; - color-adjust: exact; - } -} - - .line-highlight:before, - .line-highlight[data-end]:after { - content: attr(data-start); - position: absolute; - top: .4em; - left: .6em; - min-width: 1em; - padding: 0 .5em; - background-color: hsla(24, 20%, 50%,.4); - color: hsl(24, 20%, 95%); - font: bold 65%/1.5 sans-serif; - text-align: center; - vertical-align: .3em; - border-radius: 999px; - text-shadow: none; - box-shadow: 0 1px white; - } - - .line-highlight[data-end]:after { - content: attr(data-end); - top: auto; - bottom: .4em; - } + -webkit-print-color-adjust: exact; + color-adjust: exact; + } +} + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: 0.4em; + left: 0.6em; + min-width: 1em; + padding: 0 0.5em; + background-color: hsla(24, 20%, 50%, 0.4); + color: hsl(24, 20%, 95%); + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: 0.3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; +} + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: 0.4em; +} .line-numbers .line-highlight:before, .line-numbers .line-highlight:after { - content: none; + content: none; } pre[id].linkable-line-numbers span.line-numbers-rows { - pointer-events: all; + pointer-events: all; } pre[id].linkable-line-numbers span.line-numbers-rows > span:before { - cursor: pointer; + cursor: pointer; } pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { - background-color: rgba(128, 128, 128, .2); + background-color: rgba(128, 128, 128, 0.2); } pre[class*="language-"].line-numbers { - position: relative; - padding-left: 3.8em; - counter-reset: linenumber; + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; } pre[class*="language-"].line-numbers > code { - position: relative; - white-space: inherit; + position: relative; + white-space: inherit; } .line-numbers .line-numbers-rows { - position: absolute; - pointer-events: none; - top: 0; - font-size: 100%; - left: -3.8em; - width: 3em; /* works for line-numbers below 1000 lines */ - letter-spacing: -1px; - border-right: 1px solid #999; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -} - - .line-numbers-rows > span { - display: block; - counter-increment: linenumber; - } - - .line-numbers-rows > span:before { - content: counter(linenumber); - color: #999; - display: block; - padding-right: 0.8em; - text-align: right; - } + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; +} diff --git a/docs/python/daq_tutorial/prism.js b/docs/python/daq_tutorial/prism.js index 7c41486f5..006f22ccd 100644 --- a/docs/python/daq_tutorial/prism.js +++ b/docs/python/daq_tutorial/prism.js @@ -1,11 +1,1167 @@ /* PrismJS 1.23.0 https://prismjs.com/download.html#themes=prism-coy&languages=markup+clike+bash+c+cpp+python&plugins=line-highlight+line-numbers */ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var k=m.value;if(r.length>n.length)return;if(!(k instanceof W)){var b,x=1;if(h){if(!(b=z(p,y,n,f)))break;var w=b.index,A=b.index+b[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var S=m;S!==r.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(r,j,O),y+=O.length),q(r,j,x);var C=new W(o,g?M.tokenize(E,g):E,d,E);if(m=I(r,j,C),L&&I(r,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],r=e.head.next;for(;r!==e.tail;)n.push(r.value),r=r.next;return n}(a)},hooks:{all:{},add:function(e,n){var r=M.hooks.all;r[e]=r[e]||[],r[e].push(n)},run:function(e,n){var r=M.hooks.all[e];if(r&&r.length)for(var t,a=0;t=r[a++];)t(n)}},Token:W};function W(e,n,r,t){this.type=e,this.content=n,this.alias=r,this.length=0|(t||"").length}function z(e,n,r,t){e.lastIndex=n;var a=e.exec(r);if(a&&t&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,r){var t=n.next,a={value:r,prev:n,next:t};return n.next=a,t.prev=a,e.length++,a}function q(e,n,r){for(var t=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,t=n.code,a=n.immediateClose;u.postMessage(M.highlight(t,M.languages[r],r)),a&&u.close()},!1)),M;var e=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var t=document.readyState;"loading"===t||"interactive"===t&&e&&e.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); -Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:a}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean; -!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); -Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; -!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var t,o="line-numbers",s="linkable-line-numbers",a=function(){if(void 0===t){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML=" 
                                                                                                                                                                                                                                               ",document.body.appendChild(e),t=38===e.offsetHeight,document.body.removeChild(e)}return t},l=!0,u=0;Prism.hooks.add("before-sanity-check",function(e){var t=e.element.parentElement;if(c(t)){var n=0;v(".line-highlight",t).forEach(function(e){n+=e.textContent.length,e.parentNode.removeChild(e)}),n&&/^( \n)+$/.test(e.code.slice(-n))&&(e.code=e.code.slice(0,-n))}}),Prism.hooks.add("complete",function e(t){var n=t.element.parentElement;if(c(n)){clearTimeout(u);var i=Prism.plugins.lineNumbers,r=t.plugins&&t.plugins.lineNumbers;if(b(n,o)&&i&&!r)Prism.hooks.add("line-numbers",e);else d(n)(),u=setTimeout(f,1)}}),window.addEventListener("hashchange",f),window.addEventListener("resize",function(){v("pre").filter(c).map(function(e){return d(e)}).forEach(y)})}function v(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function b(e,t){return e.classList.contains(t)}function y(e){e()}function c(e){return!(!e||!/pre/i.test(e.nodeName))&&(!!e.hasAttribute("data-line")||!(!e.id||!Prism.util.isActive(e,s)))}function d(u,e,c){var t=(e="string"==typeof e?e:u.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+u.getAttribute("data-line-offset")||0,f=(a()?parseInt:parseFloat)(getComputedStyle(u).lineHeight),p=Prism.util.isActive(u,o),n=u.querySelector("code"),h=p?u:n||u,m=[],g=n&&h!=n?function(e,t){var n=getComputedStyle(e),i=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(i.borderTopWidth)+r(i.paddingTop)-r(n.paddingTop)}(u,n):0;t.forEach(function(e){var t=e.split("-"),n=+t[0],i=+t[1]||n,r=u.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(m.push(function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"}),p&&Prism.plugins.lineNumbers){var o=Prism.plugins.lineNumbers.getLine(u,n),s=Prism.plugins.lineNumbers.getLine(u,i);if(o){var a=o.offsetTop+g+"px";m.push(function(){r.style.top=a})}if(s){var l=s.offsetTop-o.offsetTop+s.offsetHeight+"px";m.push(function(){r.style.height=l})}}else m.push(function(){r.setAttribute("data-start",String(n)),n span",u).forEach(function(e,t){var n=t+r;e.onclick=function(){var e=i+"."+n;l=!1,location.hash=e,setTimeout(function(){l=!0},1)}})}return function(){m.forEach(y)}}function f(){var e=location.hash.slice(1);v(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var n=e.slice(0,e.lastIndexOf(".")),i=document.getElementById(n);if(i)i.hasAttribute("data-line")||i.setAttribute("data-line",""),d(i,t,"temporary ")(),l&&document.querySelector(".temporary.line-highlight").scrollIntoView()}}}(); -!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows");if(t){var i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=t(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1= l.reach); + y += m.value.length, m = m.next + ) { + var k = m.value; + if (r.length > n.length) return; + if (!(k instanceof W)) { + var b, + x = 1; + if (h) { + if (!(b = z(p, y, n, f))) break; + var w = b.index, + A = b.index + b[0].length, + P = y; + for (P += m.value.length; P <= w; ) + (m = m.next), (P += m.value.length); + if ( + ((P -= m.value.length), + (y = P), + m.value instanceof W) + ) + continue; + for ( + var S = m; + S !== r.tail && + (P < A || "string" == typeof S.value); + S = S.next + ) + x++, (P += S.value.length); + x--, (k = n.slice(y, P)), (b.index -= y); + } else if (!(b = z(p, 0, k, f))) continue; + var w = b.index, + E = b[0], + O = k.slice(0, w), + L = k.slice(w + E.length), + N = y + k.length; + l && N > l.reach && (l.reach = N); + var j = m.prev; + O && ((j = I(r, j, O)), (y += O.length)), q(r, j, x); + var C = new W(o, g ? M.tokenize(E, g) : E, d, E); + if (((m = I(r, j, C)), L && I(r, m, L), 1 < x)) { + var _ = { cause: o + "," + u, reach: N }; + e(n, r, t, m.prev, y, _), + l && _.reach > l.reach && (l.reach = _.reach); + } + } + } + } + } + })(e, a, n, a.head, 0), + (function (e) { + var n = [], + r = e.head.next; + for (; r !== e.tail; ) n.push(r.value), (r = r.next); + return n; + })(a) + ); + }, + hooks: { + all: {}, + add: function (e, n) { + var r = M.hooks.all; + (r[e] = r[e] || []), r[e].push(n); + }, + run: function (e, n) { + var r = M.hooks.all[e]; + if (r && r.length) for (var t, a = 0; (t = r[a++]); ) t(n); + }, + }, + Token: W, + }; + function W(e, n, r, t) { + (this.type = e), + (this.content = n), + (this.alias = r), + (this.length = 0 | (t || "").length); + } + function z(e, n, r, t) { + e.lastIndex = n; + var a = e.exec(r); + if (a && t && a[1]) { + var i = a[1].length; + (a.index += i), (a[0] = a[0].slice(i)); + } + return a; + } + function i() { + var e = { value: null, prev: null, next: null }, + n = { value: null, prev: e, next: null }; + (e.next = n), (this.head = e), (this.tail = n), (this.length = 0); + } + function I(e, n, r) { + var t = n.next, + a = { value: r, prev: n, next: t }; + return (n.next = a), (t.prev = a), e.length++, a; + } + function q(e, n, r) { + for (var t = n.next, a = 0; a < r && t !== e.tail; a++) t = t.next; + ((n.next = t).prev = n), (e.length -= a); + } + if ( + ((u.Prism = M), + (W.stringify = function n(e, r) { + if ("string" == typeof e) return e; + if (Array.isArray(e)) { + var t = ""; + return ( + e.forEach(function (e) { + t += n(e, r); + }), + t + ); + } + var a = { + type: e.type, + content: n(e.content, r), + tag: "span", + classes: ["token", e.type], + attributes: {}, + language: r, + }, + i = e.alias; + i && + (Array.isArray(i) + ? Array.prototype.push.apply(a.classes, i) + : a.classes.push(i)), + M.hooks.run("wrap", a); + var l = ""; + for (var o in a.attributes) + l += + " " + + o + + '="' + + (a.attributes[o] || "").replace(/"/g, """) + + '"'; + return ( + "<" + + a.tag + + ' class="' + + a.classes.join(" ") + + '"' + + l + + ">" + + a.content + + "" + ); + }), + !u.document) + ) + return ( + u.addEventListener && + (M.disableWorkerMessageHandler || + u.addEventListener( + "message", + function (e) { + var n = JSON.parse(e.data), + r = n.language, + t = n.code, + a = n.immediateClose; + u.postMessage(M.highlight(t, M.languages[r], r)), + a && u.close(); + }, + !1 + )), + M + ); + var e = M.util.currentScript(); + function r() { + M.manual || M.highlightAll(); + } + if ( + (e && + ((M.filename = e.src), + e.hasAttribute("data-manual") && (M.manual = !0)), + !M.manual) + ) { + var t = document.readyState; + "loading" === t || ("interactive" === t && e && e.defer) + ? document.addEventListener("DOMContentLoaded", r) + : window.requestAnimationFrame + ? window.requestAnimationFrame(r) + : window.setTimeout(r, 16); + } + return M; + })(_self); +"undefined" != typeof module && module.exports && (module.exports = Prism), + "undefined" != typeof global && (global.Prism = Prism); +(Prism.languages.markup = { + comment: //, + prolog: /<\?[\s\S]+?\?>/, + doctype: { + pattern: + /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i, + greedy: !0, + inside: { + "internal-subset": { + pattern: /(\[)[\s\S]+(?=\]>$)/, + lookbehind: !0, + greedy: !0, + inside: null, + }, + string: { pattern: /"[^"]*"|'[^']*'/, greedy: !0 }, + punctuation: /^$|[[\]]/, + "doctype-tag": /^DOCTYPE/, + name: /[^\s<>'"]+/, + }, + }, + cdata: //i, + tag: { + pattern: + /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, + greedy: !0, + inside: { + tag: { + pattern: /^<\/?[^\s>\/]+/, + inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ }, + }, + "attr-value": { + pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, + inside: { + punctuation: [{ pattern: /^=/, alias: "attr-equals" }, /"|'/], + }, + }, + punctuation: /\/?>/, + "attr-name": { + pattern: /[^\s>\/]+/, + inside: { namespace: /^[^\s>\/:]+:/ }, + }, + }, + }, + entity: [ + { pattern: /&[\da-z]{1,8};/i, alias: "named-entity" }, + /&#x?[\da-f]{1,8};/i, + ], +}), + (Prism.languages.markup.tag.inside["attr-value"].inside.entity = + Prism.languages.markup.entity), + (Prism.languages.markup.doctype.inside["internal-subset"].inside = + Prism.languages.markup), + Prism.hooks.add("wrap", function (a) { + "entity" === a.type && + (a.attributes.title = a.content.replace(/&/, "&")); + }), + Object.defineProperty(Prism.languages.markup.tag, "addInlined", { + value: function (a, e) { + var s = {}; + (s["language-" + e] = { + pattern: /(^$)/i, + lookbehind: !0, + inside: Prism.languages[e], + }), + (s.cdata = /^$/i); + var n = { + "included-cdata": { pattern: //i, inside: s }, + }; + n["language-" + e] = { pattern: /[\s\S]+/, inside: Prism.languages[e] }; + var t = {}; + (t[a] = { + pattern: RegExp( + "(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace( + /__/g, + function () { + return a; + } + ), + "i" + ), + lookbehind: !0, + greedy: !0, + inside: n, + }), + Prism.languages.insertBefore("markup", "cdata", t); + }, + }), + (Prism.languages.html = Prism.languages.markup), + (Prism.languages.mathml = Prism.languages.markup), + (Prism.languages.svg = Prism.languages.markup), + (Prism.languages.xml = Prism.languages.extend("markup", {})), + (Prism.languages.ssml = Prism.languages.xml), + (Prism.languages.atom = Prism.languages.xml), + (Prism.languages.rss = Prism.languages.xml); +Prism.languages.clike = { + comment: [ + { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0, greedy: !0 }, + { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 }, + ], + string: { + pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: !0, + }, + "class-name": { + pattern: + /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i, + lookbehind: !0, + inside: { punctuation: /[.\\]/ }, + }, + keyword: + /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + boolean: /\b(?:true|false)\b/, + function: /\w+(?=\()/, + number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, + operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, + punctuation: /[{}[\];(),.:]/, +}; +!(function (e) { + var t = + "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b", + n = { + pattern: /(^(["']?)\w+\2)[ \t]+\S.*/, + lookbehind: !0, + alias: "punctuation", + inside: null, + }, + a = { + bash: n, + environment: { pattern: RegExp("\\$" + t), alias: "constant" }, + variable: [ + { + pattern: /\$?\(\([\s\S]+?\)\)/, + greedy: !0, + inside: { + variable: [ + { pattern: /(^\$\(\([\s\S]+)\)\)/, lookbehind: !0 }, + /^\$\(\(/, + ], + number: + /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/, + operator: + /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, + punctuation: /\(\(?|\)\)?|,|;/, + }, + }, + { + pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/, + greedy: !0, + inside: { variable: /^\$\(|^`|\)$|`$/ }, + }, + { + pattern: /\$\{[^}]+\}/, + greedy: !0, + inside: { + operator: /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/, + punctuation: /[\[\]]/, + environment: { + pattern: RegExp("(\\{)" + t), + lookbehind: !0, + alias: "constant", + }, + }, + }, + /\$(?:\w+|[#?*!@$])/, + ], + entity: + /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/, + }; + (e.languages.bash = { + shebang: { pattern: /^#!\s*\/.*/, alias: "important" }, + comment: { pattern: /(^|[^"{\\$])#.*/, lookbehind: !0 }, + "function-name": [ + { + pattern: /(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/, + lookbehind: !0, + alias: "function", + }, + { pattern: /\b\w+(?=\s*\(\s*\)\s*\{)/, alias: "function" }, + ], + "for-or-select": { + pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/, + alias: "variable", + lookbehind: !0, + }, + "assign-left": { + pattern: /(^|[\s;|&]|[<>]\()\w+(?=\+?=)/, + inside: { + environment: { + pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + t), + lookbehind: !0, + alias: "constant", + }, + }, + alias: "variable", + lookbehind: !0, + }, + string: [ + { + pattern: /((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/, + lookbehind: !0, + greedy: !0, + inside: a, + }, + { + pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/, + lookbehind: !0, + greedy: !0, + inside: { bash: n }, + }, + { + pattern: + /(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/, + lookbehind: !0, + greedy: !0, + inside: a, + }, + ], + environment: { pattern: RegExp("\\$?" + t), alias: "constant" }, + variable: a.variable, + function: { + pattern: + /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + keyword: { + pattern: + /(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + builtin: { + pattern: + /(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/, + lookbehind: !0, + alias: "class-name", + }, + boolean: { + pattern: /(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + "file-descriptor": { pattern: /\B&\d\b/, alias: "important" }, + operator: { + pattern: + /\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/, + inside: { "file-descriptor": { pattern: /^\d/, alias: "important" } }, + }, + punctuation: /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/, + number: { pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/, lookbehind: !0 }, + }), + (n.inside = e.languages.bash); + for ( + var s = [ + "comment", + "function-name", + "for-or-select", + "assign-left", + "string", + "environment", + "function", + "keyword", + "builtin", + "boolean", + "file-descriptor", + "operator", + "punctuation", + "number", + ], + i = a.variable[1].inside, + o = 0; + o < s.length; + o++ + ) + i[s[o]] = e.languages.bash[s[o]]; + e.languages.shell = e.languages.bash; +})(Prism); +(Prism.languages.c = Prism.languages.extend("clike", { + comment: { + pattern: + /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/, + greedy: !0, + }, + "class-name": { + pattern: + /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/, + lookbehind: !0, + }, + keyword: + /\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, + function: /[a-z_]\w*(?=\s*\()/i, + number: + /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i, + operator: />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/, +})), + Prism.languages.insertBefore("c", "string", { + macro: { + pattern: + /(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im, + lookbehind: !0, + greedy: !0, + alias: "property", + inside: { + string: [ + { pattern: /^(#\s*include\s*)<[^>]+>/, lookbehind: !0 }, + Prism.languages.c.string, + ], + comment: Prism.languages.c.comment, + "macro-name": [ + { pattern: /(^#\s*define\s+)\w+\b(?!\()/i, lookbehind: !0 }, + { + pattern: /(^#\s*define\s+)\w+\b(?=\()/i, + lookbehind: !0, + alias: "function", + }, + ], + directive: { + pattern: /^(#\s*)[a-z]+/, + lookbehind: !0, + alias: "keyword", + }, + "directive-hash": /^#/, + punctuation: /##|\\(?=[\r\n])/, + expression: { pattern: /\S[\s\S]*/, inside: Prism.languages.c }, + }, + }, + constant: + /\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/, + }), + delete Prism.languages.c.boolean; +!(function (e) { + var t = + /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/; + (e.languages.cpp = e.languages.extend("c", { + "class-name": [ + { + pattern: RegExp( + "(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace( + //g, + function () { + return t.source; + } + ) + ), + lookbehind: !0, + }, + /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/, + /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i, + /\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/, + ], + keyword: t, + number: { + pattern: + /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i, + greedy: !0, + }, + operator: + />>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/, + boolean: /\b(?:true|false)\b/, + })), + e.languages.insertBefore("cpp", "string", { + "raw-string": { + pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, + alias: "string", + greedy: !0, + }, + }), + e.languages.insertBefore("cpp", "class-name", { + "base-clause": { + pattern: + /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/, + lookbehind: !0, + greedy: !0, + inside: e.languages.extend("cpp", {}), + }, + }), + e.languages.insertBefore( + "inside", + "operator", + { "class-name": /\b[a-z_]\w*\b(?!\s*::)/i }, + e.languages.cpp["base-clause"] + ); +})(Prism); +(Prism.languages.python = { + comment: { pattern: /(^|[^\\])#.*/, lookbehind: !0 }, + "string-interpolation": { + pattern: + /(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, + greedy: !0, + inside: { + interpolation: { + pattern: + /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/, + lookbehind: !0, + inside: { + "format-spec": { pattern: /(:)[^:(){}]+(?=}$)/, lookbehind: !0 }, + "conversion-option": { + pattern: /![sra](?=[:}]$)/, + alias: "punctuation", + }, + rest: null, + }, + }, + string: /[\s\S]+/, + }, + }, + "triple-quoted-string": { + pattern: /(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i, + greedy: !0, + alias: "string", + }, + string: { + pattern: /(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, + greedy: !0, + }, + function: { + pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, + lookbehind: !0, + }, + "class-name": { pattern: /(\bclass\s+)\w+/i, lookbehind: !0 }, + decorator: { + pattern: /(^\s*)@\w+(?:\.\w+)*/im, + lookbehind: !0, + alias: ["annotation", "punctuation"], + inside: { punctuation: /\./ }, + }, + keyword: + /\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/, + builtin: + /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, + boolean: /\b(?:True|False|None)\b/, + number: + /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i, + operator: /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, + punctuation: /[{}[\];(),.:]/, +}), + (Prism.languages.python[ + "string-interpolation" + ].inside.interpolation.inside.rest = Prism.languages.python), + (Prism.languages.py = Prism.languages.python); +!(function () { + if ( + "undefined" != typeof self && + self.Prism && + self.document && + document.querySelector + ) { + var t, + o = "line-numbers", + s = "linkable-line-numbers", + a = function () { + if (void 0 === t) { + var e = document.createElement("div"); + (e.style.fontSize = "13px"), + (e.style.lineHeight = "1.5"), + (e.style.padding = "0"), + (e.style.border = "0"), + (e.innerHTML = " 
                                                                                                                                                                                                                                               "), + document.body.appendChild(e), + (t = 38 === e.offsetHeight), + document.body.removeChild(e); + } + return t; + }, + l = !0, + u = 0; + Prism.hooks.add("before-sanity-check", function (e) { + var t = e.element.parentElement; + if (c(t)) { + var n = 0; + v(".line-highlight", t).forEach(function (e) { + (n += e.textContent.length), e.parentNode.removeChild(e); + }), + n && + /^( \n)+$/.test(e.code.slice(-n)) && + (e.code = e.code.slice(0, -n)); + } + }), + Prism.hooks.add("complete", function e(t) { + var n = t.element.parentElement; + if (c(n)) { + clearTimeout(u); + var i = Prism.plugins.lineNumbers, + r = t.plugins && t.plugins.lineNumbers; + if (b(n, o) && i && !r) Prism.hooks.add("line-numbers", e); + else d(n)(), (u = setTimeout(f, 1)); + } + }), + window.addEventListener("hashchange", f), + window.addEventListener("resize", function () { + v("pre") + .filter(c) + .map(function (e) { + return d(e); + }) + .forEach(y); + }); + } + function v(e, t) { + return Array.prototype.slice.call((t || document).querySelectorAll(e)); + } + function b(e, t) { + return e.classList.contains(t); + } + function y(e) { + e(); + } + function c(e) { + return ( + !(!e || !/pre/i.test(e.nodeName)) && + (!!e.hasAttribute("data-line") || !(!e.id || !Prism.util.isActive(e, s))) + ); + } + function d(u, e, c) { + var t = (e = "string" == typeof e ? e : u.getAttribute("data-line") || "") + .replace(/\s+/g, "") + .split(",") + .filter(Boolean), + d = +u.getAttribute("data-line-offset") || 0, + f = (a() ? parseInt : parseFloat)(getComputedStyle(u).lineHeight), + p = Prism.util.isActive(u, o), + n = u.querySelector("code"), + h = p ? u : n || u, + m = [], + g = + n && h != n + ? (function (e, t) { + var n = getComputedStyle(e), + i = getComputedStyle(t); + function r(e) { + return +e.substr(0, e.length - 2); + } + return ( + t.offsetTop + + r(i.borderTopWidth) + + r(i.paddingTop) - + r(n.paddingTop) + ); + })(u, n) + : 0; + t.forEach(function (e) { + var t = e.split("-"), + n = +t[0], + i = +t[1] || n, + r = + u.querySelector('.line-highlight[data-range="' + e + '"]') || + document.createElement("div"); + if ( + (m.push(function () { + r.setAttribute("aria-hidden", "true"), + r.setAttribute("data-range", e), + (r.className = (c || "") + " line-highlight"); + }), + p && Prism.plugins.lineNumbers) + ) { + var o = Prism.plugins.lineNumbers.getLine(u, n), + s = Prism.plugins.lineNumbers.getLine(u, i); + if (o) { + var a = o.offsetTop + g + "px"; + m.push(function () { + r.style.top = a; + }); + } + if (s) { + var l = s.offsetTop - o.offsetTop + s.offsetHeight + "px"; + m.push(function () { + r.style.height = l; + }); + } + } else + m.push(function () { + r.setAttribute("data-start", String(n)), + n < i && r.setAttribute("data-end", String(i)), + (r.style.top = (n - d - 1) * f + g + "px"), + (r.textContent = new Array(i - n + 2).join(" \n")); + }); + m.push(function () { + h.appendChild(r); + }); + }); + var i = u.id; + if (p && Prism.util.isActive(u, s) && i) { + b(u, s) || + m.push(function () { + u.classList.add(s); + }); + var r = parseInt(u.getAttribute("data-start") || "1"); + v(".line-numbers-rows > span", u).forEach(function (e, t) { + var n = t + r; + e.onclick = function () { + var e = i + "." + n; + (l = !1), + (location.hash = e), + setTimeout(function () { + l = !0; + }, 1); + }; + }); + } + return function () { + m.forEach(y); + }; + } + function f() { + var e = location.hash.slice(1); + v(".temporary.line-highlight").forEach(function (e) { + e.parentNode.removeChild(e); + }); + var t = (e.match(/\.([\d,-]+)$/) || [, ""])[1]; + if (t && !document.getElementById(e)) { + var n = e.slice(0, e.lastIndexOf(".")), + i = document.getElementById(n); + if (i) + i.hasAttribute("data-line") || i.setAttribute("data-line", ""), + d(i, t, "temporary ")(), + l && + document + .querySelector(".temporary.line-highlight") + .scrollIntoView(); + } + } +})(); +!(function () { + if ("undefined" != typeof self && self.Prism && self.document) { + var o = "line-numbers", + a = /\n(?!$)/g, + e = (Prism.plugins.lineNumbers = { + getLine: function (e, n) { + if ("PRE" === e.tagName && e.classList.contains(o)) { + var t = e.querySelector(".line-numbers-rows"); + if (t) { + var i = parseInt(e.getAttribute("data-start"), 10) || 1, + r = i + (t.children.length - 1); + n < i && (n = i), r < n && (n = r); + var s = n - i; + return t.children[s]; + } + } + }, + resize: function (e) { + u([e]); + }, + assumeViewportIndependence: !0, + }), + t = function (e) { + return e + ? window.getComputedStyle + ? getComputedStyle(e) + : e.currentStyle || null + : null; + }, + n = void 0; + window.addEventListener("resize", function () { + (e.assumeViewportIndependence && n === window.innerWidth) || + ((n = window.innerWidth), + u(Array.prototype.slice.call(document.querySelectorAll("pre." + o)))); + }), + Prism.hooks.add("complete", function (e) { + if (e.code) { + var n = e.element, + t = n.parentNode; + if ( + t && + /pre/i.test(t.nodeName) && + !n.querySelector(".line-numbers-rows") && + Prism.util.isActive(n, o) + ) { + n.classList.remove(o), t.classList.add(o); + var i, + r = e.code.match(a), + s = r ? r.length + 1 : 1, + l = new Array(s + 1).join(""); + (i = document.createElement("span")).setAttribute( + "aria-hidden", + "true" + ), + (i.className = "line-numbers-rows"), + (i.innerHTML = l), + t.hasAttribute("data-start") && + (t.style.counterReset = + "linenumber " + + (parseInt(t.getAttribute("data-start"), 10) - 1)), + e.element.appendChild(i), + u([t]), + Prism.hooks.run("line-numbers", e); + } + } + }), + Prism.hooks.add("line-numbers", function (e) { + (e.plugins = e.plugins || {}), (e.plugins.lineNumbers = !0); + }); + } + function u(e) { + if ( + 0 != + (e = e.filter(function (e) { + var n = t(e)["white-space"]; + return "pre-wrap" === n || "pre-line" === n; + })).length + ) { + var n = e + .map(function (e) { + var n = e.querySelector("code"), + t = e.querySelector(".line-numbers-rows"); + if (n && t) { + var i = e.querySelector(".line-numbers-sizer"), + r = n.textContent.split(a); + i || + (((i = document.createElement("span")).className = + "line-numbers-sizer"), + n.appendChild(i)), + (i.innerHTML = "0"), + (i.style.display = "block"); + var s = i.getBoundingClientRect().height; + return ( + (i.innerHTML = ""), + { + element: e, + lines: r, + lineHeights: [], + oneLinerHeight: s, + sizer: i, + } + ); + } + }) + .filter(Boolean); + n.forEach(function (e) { + var i = e.sizer, + n = e.lines, + r = e.lineHeights, + s = e.oneLinerHeight; + (r[n.length - 1] = void 0), + n.forEach(function (e, n) { + if (e && 1 < e.length) { + var t = i.appendChild(document.createElement("span")); + (t.style.display = "block"), (t.textContent = e); + } else r[n] = s; + }); + }), + n.forEach(function (e) { + for ( + var n = e.sizer, t = e.lineHeights, i = 0, r = 0; + r < t.length; + r++ + ) + void 0 === t[r] && + (t[r] = n.children[i++].getBoundingClientRect().height); + }), + n.forEach(function (e) { + var n = e.sizer, + t = e.element.querySelector(".line-numbers-rows"); + (n.style.display = "none"), + (n.innerHTML = ""), + e.lineHeights.forEach(function (e, n) { + t.children[n].style.height = e + "px"; + }); + }); + } + } +})(); diff --git a/docs/python/daq_tutorial/tutorial.css b/docs/python/daq_tutorial/tutorial.css index ec0e14e66..891192d2a 100644 --- a/docs/python/daq_tutorial/tutorial.css +++ b/docs/python/daq_tutorial/tutorial.css @@ -2,149 +2,150 @@ .rst-content .toctree-wrapper ul, .wy-plain-list-disc, article ul { - padding-inline-start: 20px; - margin-bottom: revert; + padding-inline-start: 20px; + margin-bottom: revert; } .section { - padding-top: revert; + padding-top: revert; } .section ol { - padding-inline-start: 20px; + padding-inline-start: 20px; } .video-background { - min-width: 100%; - min-height: 100%; - overflow: hidden; + min-width: 100%; + min-height: 100%; + overflow: hidden; } .tutorial-video { - - max-width: 100%; - max-height: 65vh; /* 65% of viewport height */ - overflow: hidden; + max-width: 100%; + max-height: 65vh; /* 65% of viewport height */ + overflow: hidden; } .half-width-image { - width: 100%; + width: 100%; } p.navigation-numbers { - font-size: 20px; - font-family: 'Open Sans','Helvetica Neue',Arial,sans-serif; + font-size: 20px; + font-family: "Open Sans", "Helvetica Neue", Arial, sans-serif; } .nav-button { - min-width: 100px; - font-size: 15px; + min-width: 100px; + font-size: 15px; } a.help-button { - text-transform: none; - margin-top: -2px; - padding: 0px 0px; + text-transform: none; + margin-top: -2px; + padding: 0px 0px; } ul.help-button { - margin-top: -5px; + margin-top: -5px; } - -td, th { +td, +th { border: 1px solid #ddd; padding: 8px; } -tr:nth-child(even){background-color: #f2f2f2;} - +tr:nth-child(even) { + background-color: #f2f2f2; +} th { padding-top: 12px; padding-bottom: 12px; text-align: left; - background-color: #4CAF50; + background-color: #4caf50; color: white; } .section img { - max-width: 100%; - width: revert; + max-width: 100%; + width: revert; } .nomarker { - list-style: none; + list-style: none; } -.rst-content .section ul li.nomarker, .rst-content .toctree-wrapper ul li.nomarker, .wy-plain-list-disc li.nomarker, article ul li.nomarker { - list-style: none; +.rst-content .section ul li.nomarker, +.rst-content .toctree-wrapper ul li.nomarker, +.wy-plain-list-disc li.nomarker, +article ul li.nomarker { + list-style: none; } - - .indent { - padding-left: 30px + padding-left: 30px; } -@media (min-width:60rem) { - h3 { - color: revert; - font-size: 1.75rem; - font-weight: 300; - margin-bottom: .3em - } +@media (min-width: 60rem) { + h3 { + color: revert; + font-size: 1.75rem; + font-weight: 300; + margin-bottom: 0.3em; + } } -@media (min-width:75rem) { - h3 { - font-size: 1.875rem - } +@media (min-width: 75rem) { + h3 { + font-size: 1.875rem; + } } label { - display: revert + display: revert; } pre[class*="language-"].line-numbers.line-numbers code.wrap { - white-space: pre-wrap + white-space: pre-wrap; } code.wrap { - white-space: pre-wrap + white-space: pre-wrap; } aside { - background-color: #CEECFF; - border-style: solid; - border-width: 1px; + background-color: #ceecff; + border-style: solid; + border-width: 1px; } aside > p { - margin: .5rem; + margin: 0.5rem; } - -*, ::after, ::before { - box-sizing: border-box; +*, +::after, +::before { + box-sizing: border-box; } - .collapse { - display: block; - max-height: 0px; - overflow: hidden; - transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); +.collapse { + display: block; + max-height: 0px; + overflow: hidden; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); } - .collapse.show { - max-height: 99em; - transition: max-height 0.5s ease-in-out; +.collapse.show { + max-height: 99em; + transition: max-height 0.5s ease-in-out; } h1 { - text-transform: revert; - font-size: 2.5rem; + text-transform: revert; + font-size: 2.5rem; } .noscale { - width: revert; + width: revert; } - diff --git a/docs/python/daq_tutorial/video_play_at_scroll.js b/docs/python/daq_tutorial/video_play_at_scroll.js index 7e6a1411d..2f50ed658 100644 --- a/docs/python/daq_tutorial/video_play_at_scroll.js +++ b/docs/python/daq_tutorial/video_play_at_scroll.js @@ -1,55 +1,53 @@ -var videos = document.getElementsByTagName("video") +var videos = document.getElementsByTagName("video"); videoPlayAtFraction = 0.2; function checkScroll() { + for (var i = 0; i < videos.length; i++) { + var video = videos[i]; - for(var i = 0; i < videos.length; i++) { + var frac_used = videoPlayAtFraction; - var video = videos[i]; - - var frac_used = videoPlayAtFraction - - if (video.className == "video-background") { - frac_used = 0.1; - } - - if (fractionScrolledIntoView(video) > frac_used) { - if (video.paused) { - video.currentTime = 0 - } - video.play(); - } else { - video.pause(); - } + if (video.className == "video-background") { + frac_used = 0.1; } -} -function fractionScrolledIntoView(el) { - var elemTop = el.getBoundingClientRect().top; - var elemBottom = el.getBoundingClientRect().bottom; - var elemHeight = elemBottom - elemTop - - if (elemTop > 0) { - topFrac = 1 + if (fractionScrolledIntoView(video) > frac_used) { + if (video.paused) { + video.currentTime = 0; + } + video.play(); } else { - topFrac = (elemTop + elemHeight) / elemHeight + video.pause(); } + } +} - // Off the bottom of the screen - bottomFrac = 1 + (window.innerHeight - elemBottom) / elemHeight - bottomFrac = Math.max(0, bottomFrac) - bottomFrac = Math.min(1, bottomFrac) +function fractionScrolledIntoView(el) { + var elemTop = el.getBoundingClientRect().top; + var elemBottom = el.getBoundingClientRect().bottom; + var elemHeight = elemBottom - elemTop; + + if (elemTop > 0) { + topFrac = 1; + } else { + topFrac = (elemTop + elemHeight) / elemHeight; + } + // Off the bottom of the screen + bottomFrac = 1 + (window.innerHeight - elemBottom) / elemHeight; + bottomFrac = Math.max(0, bottomFrac); + bottomFrac = Math.min(1, bottomFrac); - fraction = Math.min(topFrac, bottomFrac) - return fraction + fraction = Math.min(topFrac, bottomFrac); + return fraction; } -window.addEventListener('scroll', checkScroll, false); -window.addEventListener('resize', checkScroll, false); +window.addEventListener("scroll", checkScroll, false); +window.addEventListener("resize", checkScroll, false); // Set the name of the hidden property and the change event for visibility var hidden, visibilityChange; -if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support +if (typeof document.hidden !== "undefined") { + // Opera 12.10 and Firefox 18 and later support hidden = "hidden"; visibilityChange = "visibilitychange"; } else if (typeof document.msHidden !== "undefined") { @@ -62,50 +60,58 @@ if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and // If the page is hidden (ie a tab change), pause all videos to save CPU function handleVisibilityChange() { - for(var i = 0; i < videos.length; i++) { - var video = videos[i]; + for (var i = 0; i < videos.length; i++) { + var video = videos[i]; - if (document[hidden]) { - video.pause() - } else { - video.play() - } + if (document[hidden]) { + video.pause(); + } else { + video.play(); } + } } // Warn if the browser doesn't support addEventListener or the Page Visibility API -if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") { - console.log("Auto play/pause requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API."); +if ( + typeof document.addEventListener === "undefined" || + typeof document[hidden] === "undefined" +) { + console.log( + "Auto play/pause requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API." + ); } else { - // Handle page visibility change - document.addEventListener(visibilityChange, handleVisibilityChange, false); + // Handle page visibility change + document.addEventListener(visibilityChange, handleVisibilityChange, false); } // map our commands to the classList methods const fnmap = { - 'toggle': 'toggle', - 'show': 'add', - 'hide': 'remove' + toggle: "toggle", + show: "add", + hide: "remove", }; const collapse = (selector, cmd) => { const targets = Array.from(document.querySelectorAll(selector)); - targets.forEach(target => { - target.classList[fnmap[cmd]]('show'); + targets.forEach((target) => { + target.classList[fnmap[cmd]]("show"); }); -} - +}; window.onload = loadTriggers; -triggers = [] +triggers = []; function loadTriggers() { - triggers = Array.from(document.querySelectorAll('[data-toggle="collapse"]')); + triggers = Array.from(document.querySelectorAll('[data-toggle="collapse"]')); } // Listen for click events, but only on our triggers -window.addEventListener('click', (ev) => { +window.addEventListener( + "click", + (ev) => { // Grab all the trigger elements on the page - const elm = ev.target; - if (triggers.includes(elm)) { - const selector = elm.getAttribute('data-target'); - collapse(selector, 'toggle'); - } -}, false); + const elm = ev.target; + if (triggers.includes(elm)) { + const selector = elm.getAttribute("data-target"); + collapse(selector, "toggle"); + } + }, + false +); diff --git a/docs/python/fetch_tutorial/fetch1.md b/docs/python/fetch_tutorial/fetch1.md index 753e37344..f680bae4e 100644 --- a/docs/python/fetch_tutorial/fetch1.md +++ b/docs/python/fetch_tutorial/fetch1.md @@ -47,7 +47,7 @@ At the end, you'll have a fully-functional API example that enables Spot to auto
                                                                                                                                                                                                                                            • is easy to see in the tablet view
                                                                                                                                                                                                                                            • Spot's arm is capable of picking using the Pick Up Object option in the tablet
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                          • A computer running Ubuntu 18.04
                                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                                          • A computer running an officially supported Ubuntu version
                                                                                                                                                                                                                                          • CUDA enabled GPU
                                                                                                                                                                                                                                          • A relatively large operational area (5x5 meters)
                                                                                                                                                                                                                                          diff --git a/docs/python/fetch_tutorial/fetch2.md b/docs/python/fetch_tutorial/fetch2.md index e27db22f8..54357c231 100644 --- a/docs/python/fetch_tutorial/fetch2.md +++ b/docs/python/fetch_tutorial/fetch2.md @@ -11,7 +11,6 @@ Development Kit License (20191101-BDSDK-SL). - -

                                                                                                                                                                                                                                          @@ -42,10 +40,10 @@ function update_checklist(element, output_id) {


                                                                                                                                                                                                                                          - # Fetch Part 2: Training the Model In this portion of the tutorial, you will: +
                                                                                                                                                                                                                                          • Install TensorFlow.
                                                                                                                                                                                                                                          • Download pre-trained model weights (for transfer learning).
                                                                                                                                                                                                                                          • @@ -290,7 +288,6 @@ To help keep you on track, here is a checklist:
                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                          Train the Model

                                                                                                                                                                                                                                          • Copy the training script into a more convenient location:
                                                                                                                                                                                                                                          • @@ -416,6 +413,7 @@ CUDA_VISIBLE_DEVICES="-1" python3 model_main_tf2.py --model_dir=dogtoy/models/my

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Troubleshooting

                                                                                                                                                                                                                                              Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
                                                                                                                                                                                                                                              @@ -448,7 +446,6 @@ CUDA_VISIBLE_DEVICES="-1" python3 model_main_tf2.py --model_dir=dogtoy/models/my ^^^^<---- not zero!

                                                                                                                                    -

                                                                                                                                    Once training is complete, head to Part 3 to take the latest checkpoint, convert it to an online model, and visualize the results. @@ -463,4 +460,3 @@ CUDA_VISIBLE_DEVICES="-1" python3 model_main_tf2.py --model_dir=dogtoy/models/my


                                                                                                                                    - diff --git a/docs/python/fetch_tutorial/fetch3.md b/docs/python/fetch_tutorial/fetch3.md index 4d282b09b..b0a234687 100644 --- a/docs/python/fetch_tutorial/fetch3.md +++ b/docs/python/fetch_tutorial/fetch3.md @@ -11,7 +11,6 @@ Development Kit License (20191101-BDSDK-SL). -

                                                                                                                                    @@ -22,6 +21,7 @@ Development Kit License (20191101-BDSDK-SL). # Fetch Part 3: Evaluating the Model In this portion of the tutorial, you will: +

                                                                                                                                    • Evaluate your model on test data.
                                                                                                                                    • Connect your model to Spot.
                                                                                                                                    • @@ -371,7 +371,6 @@ kServiceAuthority = "fetch-tutorial-worker.spot.robot"


                                                                                                                                      -
                                                                                                                                                  if not args.no_debug:
                                                                                                                                                       polygon = np.array([point1, point2, point3, point4], np.int32)
                                                                                                                                                       polygon = polygon.reshape((-1, 1, 2))
                                                                                                                                      @@ -401,7 +400,6 @@ kServiceAuthority = "fetch-tutorial-worker.spot.robot"
                                                                                                                                       


                                                                                                                                      -
                                                                                                                                              response_queue.put(out_proto)
                                                                                                                                       
                                                                                                                                      @@ -410,7 +408,6 @@ kServiceAuthority = "fetch-tutorial-worker.spot.robot"


                                                                                                                                      -
                                                                                                                                      class NetworkComputeBridgeWorkerServicer(
                                                                                                                                               network_compute_bridge_service_pb2_grpc.NetworkComputeBridgeWorkerServicer):
                                                                                                                                       
                                                                                                                                      @@ -516,7 +513,6 @@ kServiceAuthority = "fetch-tutorial-worker.spot.robot"
                                                                                                                                       


                                                                                                                                      -
                                                                                                                                          # Set up GRPC endpoint
                                                                                                                                           server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
                                                                                                                                           network_compute_bridge_service_pb2_grpc.add_NetworkComputeBridgeWorkerServicer_to_server(
                                                                                                                                      @@ -573,10 +569,10 @@ python3 -m bosdyn.client 192.168.80.3 dir list
                                                                                                                                      Fill in your IP, username, and password. If it worked, you should see an entry like this:

                                                                                                                                      -
                                                                                                                                      name                       type                                                      authority                             tokens
                                                                                                                                      ---------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                      +## 
                                                                                                                                      name type authority tokens
                                                                                                                                      +
                                                                                                                                       [...]
                                                                                                                                      -fetch-server              bosdyn.api.NetworkComputeBridgeWorker                     fetch-tutorial-worker.spot.robot      user
                                                                                                                                      +fetch-server bosdyn.api.NetworkComputeBridgeWorker fetch-tutorial-worker.spot.robot user
                                                                                                                                       [...]
                                                                                                                                       
                                                                                                                                      @@ -638,7 +634,6 @@ fetch-server bosdyn.api.NetworkComputeBridgeWorker -

                                                                                                                                      Once you're satisfied with your model, head over to Part 4 where we'll integrate the Spot Manipulation API to pick up the dog-toy.

                                                                                                                                      @@ -653,4 +648,3 @@ fetch-server bosdyn.api.NetworkComputeBridgeWorker
                                                                                                                                    - diff --git a/docs/python/fetch_tutorial/fetch6.md b/docs/python/fetch_tutorial/fetch6.md index 3174a9bdc..e97fb3240 100644 --- a/docs/python/fetch_tutorial/fetch6.md +++ b/docs/python/fetch_tutorial/fetch6.md @@ -31,7 +31,7 @@ Development Kit License (20191101-BDSDK-SL).

                                                                                                                                    - For this part we are going to move the inference models to run on the robot in the CORE I/O. This is to show how you could run these as part of a mission, without the need for a laptop conencted to Spot. + For this part we are going to move the inference models to run on the robot in the CORE I/O. This is to show how you could run these as part of a mission, without the need for a laptop connected to Spot.

                                                                                                                                    The Setup

                                                                                                                                    @@ -307,7 +307,7 @@ If everything is successful you should end up with a `fetch_detector.spx` file.

                                                                                                                                    - You should see some cosole output similar to below. + You should see some console output similar to below.

                                                                                                                                    
                                                                                                                                     2022-08-01T19:24:58.150841720Z 2022-08-01 19:24:58.150396: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.10.2
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/capture_images.py b/docs/python/fetch_tutorial/files/capture_images.py
                                                                                                                                    index b667c6e07..5eb9b927c 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/capture_images.py
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/capture_images.py
                                                                                                                                    @@ -5,19 +5,23 @@
                                                                                                                                     # Development Kit License (20191101-BDSDK-SL).
                                                                                                                                     
                                                                                                                                     import argparse
                                                                                                                                    -import sys
                                                                                                                                     import os
                                                                                                                                    +import sys
                                                                                                                                    +import time
                                                                                                                                    +
                                                                                                                                    +import cv2
                                                                                                                                    +import numpy as np
                                                                                                                                    +
                                                                                                                                     import bosdyn.client
                                                                                                                                     import bosdyn.client.util
                                                                                                                                     from bosdyn.client.image import ImageClient
                                                                                                                                    -import cv2
                                                                                                                                    -import numpy as np
                                                                                                                                    -import time
                                                                                                                                    +
                                                                                                                                     
                                                                                                                                     def main(argv):
                                                                                                                                         parser = argparse.ArgumentParser()
                                                                                                                                         bosdyn.client.util.add_base_arguments(parser)
                                                                                                                                    -    parser.add_argument('--image-source', help='Get image from source(s)', default='frontleft_fisheye_image')
                                                                                                                                    +    parser.add_argument('--image-source', help='Get image from source(s)',
                                                                                                                                    +                        default='frontleft_fisheye_image')
                                                                                                                                         parser.add_argument('--folder', help='Path to write images to', default='')
                                                                                                                                         options = parser.parse_args(argv)
                                                                                                                                     
                                                                                                                                    @@ -57,7 +61,9 @@ def main(argv):
                                                                                                                                     
                                                                                                                                             # Don't overwrite an existing image
                                                                                                                                             while True:
                                                                                                                                    -            image_saved_path = os.path.join(options.folder, image_responses[0].source.name + '_{:0>4d}'.format(counter) + '.jpg')
                                                                                                                                    +            image_saved_path = os.path.join(
                                                                                                                                    +                options.folder,
                                                                                                                                    +                image_responses[0].source.name + '_{:0>4d}'.format(counter) + '.jpg')
                                                                                                                                                 counter += 1
                                                                                                                                     
                                                                                                                                                 if not os.path.exists(image_saved_path):
                                                                                                                                    @@ -70,9 +76,9 @@ def main(argv):
                                                                                                                                             # Wait for some time so we can drive the robot to a new position.
                                                                                                                                             time.sleep(0.7)
                                                                                                                                     
                                                                                                                                    -
                                                                                                                                         return True
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     if __name__ == "__main__":
                                                                                                                                         if not main(sys.argv[1:]):
                                                                                                                                             sys.exit(1)
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/coreio_extension/create_extension.sh b/docs/python/fetch_tutorial/files/coreio_extension/create_extension.sh
                                                                                                                                    index 104e41fd7..cf0085b10 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/coreio_extension/create_extension.sh
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/coreio_extension/create_extension.sh
                                                                                                                                    @@ -33,4 +33,4 @@ tar -cvzf fetch_detector.spx \
                                                                                                                                         data
                                                                                                                                     
                                                                                                                                     # Cleanup intermediate image
                                                                                                                                    -rm fetch_detector_image.tar.gz
                                                                                                                                    \ No newline at end of file
                                                                                                                                    +rm fetch_detector_image.tar.gz
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/coreio_extension/manifest.json b/docs/python/fetch_tutorial/files/coreio_extension/manifest.json
                                                                                                                                    index ed17deb88..9fbf0f921 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/coreio_extension/manifest.json
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/coreio_extension/manifest.json
                                                                                                                                    @@ -1,7 +1,6 @@
                                                                                                                                     {
                                                                                                                                    -    "description": "fetch_detector",
                                                                                                                                    -    "version": "3.2.0",
                                                                                                                                    -    "images": [
                                                                                                                                    -        "fetch_detector_image.tar.gz"
                                                                                                                                    -    ]
                                                                                                                                    -}
                                                                                                                                    \ No newline at end of file
                                                                                                                                    +  "description": "fetch_detector",
                                                                                                                                    +  "version": "3.2.0",
                                                                                                                                    +  "images": ["fetch_detector_image.tar.gz"],
                                                                                                                                    +  "extension_name": "fetch_detector"
                                                                                                                                    +}
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/coreio_extension/network_compute_server_core_io.py b/docs/python/fetch_tutorial/files/coreio_extension/network_compute_server_core_io.py
                                                                                                                                    index 3bc8ec7a2..9e13861d5 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/coreio_extension/network_compute_server_core_io.py
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/coreio_extension/network_compute_server_core_io.py
                                                                                                                                    @@ -6,37 +6,36 @@
                                                                                                                                     
                                                                                                                                     import argparse
                                                                                                                                     import io
                                                                                                                                    +import logging
                                                                                                                                     import os
                                                                                                                                    +import queue
                                                                                                                                     import sys
                                                                                                                                    +import threading
                                                                                                                                     import time
                                                                                                                                    -import logging
                                                                                                                                    +from concurrent import futures
                                                                                                                                     
                                                                                                                                     import cv2
                                                                                                                                    -from PIL import Image
                                                                                                                                    -import numpy as np
                                                                                                                                    -
                                                                                                                                    -from bosdyn.api import network_compute_bridge_service_pb2_grpc
                                                                                                                                    -from bosdyn.api import network_compute_bridge_pb2
                                                                                                                                    -from bosdyn.api import image_pb2
                                                                                                                                    -from bosdyn.api import header_pb2
                                                                                                                                    -import bosdyn.client
                                                                                                                                    -import bosdyn.client.util
                                                                                                                                     import grpc
                                                                                                                                    -from concurrent import futures
                                                                                                                                    +import numpy as np
                                                                                                                                     import tensorflow as tf
                                                                                                                                    -
                                                                                                                                    -import queue
                                                                                                                                    -import threading
                                                                                                                                     from google.protobuf import wrappers_pb2
                                                                                                                                     from object_detection.utils import label_map_util
                                                                                                                                    +from PIL import Image
                                                                                                                                    +
                                                                                                                                    +import bosdyn.client
                                                                                                                                    +import bosdyn.client.util
                                                                                                                                    +from bosdyn.api import (header_pb2, image_pb2, network_compute_bridge_pb2,
                                                                                                                                    +                        network_compute_bridge_service_pb2_grpc)
                                                                                                                                     
                                                                                                                                     kServiceAuthority = "fetch-tutorial-worker.spot.robot"
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     class TensorFlowObjectDetectionModel:
                                                                                                                                    +
                                                                                                                                         def __init__(self, model_path, label_path):
                                                                                                                                             self.detect_fn = tf.saved_model.load(model_path)
                                                                                                                                    -        self.category_index = label_map_util.create_category_index_from_labelmap(label_path, use_display_name=True)
                                                                                                                                    +        self.category_index = label_map_util.create_category_index_from_labelmap(
                                                                                                                                    +            label_path, use_display_name=True)
                                                                                                                                             self.name = os.path.basename(os.path.dirname(model_path))
                                                                                                                                     
                                                                                                                                         def predict(self, image):
                                                                                                                                    @@ -46,6 +45,7 @@ def predict(self, image):
                                                                                                                                     
                                                                                                                                             return detections
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     def process_thread(args, request_queue, response_queue):
                                                                                                                                         # Load the model(s)
                                                                                                                                         models = {}
                                                                                                                                    @@ -66,7 +66,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                             if isinstance(request, network_compute_bridge_pb2.ListAvailableModelsRequest):
                                                                                                                                                 out_proto = network_compute_bridge_pb2.ListAvailableModelsResponse()
                                                                                                                                                 for model_name in models:
                                                                                                                                    -                out_proto.models.data.append(network_compute_bridge_pb2.ModelData(model_name=model_name))
                                                                                                                                    +                out_proto.models.data.append(
                                                                                                                                    +                    network_compute_bridge_pb2.ModelData(model_name=model_name))
                                                                                                                                                 response_queue.put(out_proto)
                                                                                                                                                 continue
                                                                                                                                             else:
                                                                                                                                    @@ -77,7 +78,7 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                 err_str = 'Cannot find model "' + request.input_data.model_name + '" in loaded models.'
                                                                                                                                                 print(err_str)
                                                                                                                                     
                                                                                                                                    -             # Set the error in the header.
                                                                                                                                    +            # Set the error in the header.
                                                                                                                                                 out_proto.header.error.code = header_pb2.CommonError.CODE_INVALID_REQUEST
                                                                                                                                                 out_proto.header.error.message = err_str
                                                                                                                                                 response_queue.put(out_proto)
                                                                                                                                    @@ -97,7 +98,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                     image = pil_image
                                                                                                                                     
                                                                                                                                                 else:
                                                                                                                                    -                print('Error: image input in unsupported pixel format: ', request.input_data.image.pixel_format)
                                                                                                                                    +                print('Error: image input in unsupported pixel format: ',
                                                                                                                                    +                      request.input_data.image.pixel_format)
                                                                                                                                                     response_queue.put(out_proto)
                                                                                                                                                     continue
                                                                                                                                     
                                                                                                                                    @@ -121,14 +123,12 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                             # Convert to numpy arrays, and take index [0] to remove the batch dimension.
                                                                                                                                             # We're only interested in the first num_detections.
                                                                                                                                             num_detections = int(detections.pop('num_detections'))
                                                                                                                                    -        detections = {key: value[0, :num_detections].numpy()
                                                                                                                                    -                       for key, value in detections.items()}
                                                                                                                                    +        detections = {key: value[0, :num_detections].numpy() for key, value in detections.items()}
                                                                                                                                     
                                                                                                                                             boxes = detections['detection_boxes']
                                                                                                                                             classes = detections['detection_classes']
                                                                                                                                             scores = detections['detection_scores']
                                                                                                                                     
                                                                                                                                    -
                                                                                                                                             for i in range(boxes.shape[0]):
                                                                                                                                                 if scores[i] < request.input_data.min_confidence:
                                                                                                                                                     continue
                                                                                                                                    @@ -136,7 +136,10 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                 box = tuple(boxes[i].tolist())
                                                                                                                                     
                                                                                                                                                 # Boxes come in with normalized coordinates.  Convert to pixel values.
                                                                                                                                    -            box = [box[0] * image_width, box[1] * image_height, box[2] * image_width, box[3] * image_height]
                                                                                                                                    +            box = [
                                                                                                                                    +                box[0] * image_width, box[1] * image_height, box[2] * image_width,
                                                                                                                                    +                box[3] * image_height
                                                                                                                                    +            ]
                                                                                                                                     
                                                                                                                                                 score = scores[i]
                                                                                                                                     
                                                                                                                                    @@ -149,7 +152,6 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                     
                                                                                                                                                 print('Found object with label: "' + label + '" and score: ' + str(score))
                                                                                                                                     
                                                                                                                                    -
                                                                                                                                                 point1 = np.array([box[1], box[0]])
                                                                                                                                                 point2 = np.array([box[3], box[0]])
                                                                                                                                                 point3 = np.array([box[3], box[2]])
                                                                                                                                    @@ -187,8 +189,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                     caption = "{}: {:.3f}".format(label, score)
                                                                                                                                                     left_x = min(point1[0], min(point2[0], min(point3[0], point4[0])))
                                                                                                                                                     top_y = min(point1[1], min(point2[1], min(point3[1], point4[1])))
                                                                                                                                    -                cv2.putText(image, caption, (int(left_x), int(top_y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                                                                                                                                    -                            (0, 255, 0), 2)
                                                                                                                                    +                cv2.putText(image, caption, (int(left_x), int(top_y)), cv2.FONT_HERSHEY_SIMPLEX,
                                                                                                                                    +                            0.5, (0, 255, 0), 2)
                                                                                                                                     
                                                                                                                                             print('Found ' + str(num_objects) + ' object(s)')
                                                                                                                                     
                                                                                                                                    @@ -252,19 +254,24 @@ def register_with_robot(options):
                                                                                                                                                 break
                                                                                                                                     
                                                                                                                                         # Register service
                                                                                                                                    -    print('Attempting to register ' + ip + ':' + options.port + ' onto ' + options.hostname + ' directory...')
                                                                                                                                    -    directory_registration_client.register(options.name, "bosdyn.api.NetworkComputeBridgeWorker", kServiceAuthority, ip, int(options.port))
                                                                                                                                    -
                                                                                                                                    +    print('Attempting to register ' + ip + ':' + options.port + ' onto ' + options.hostname +
                                                                                                                                    +          ' directory...')
                                                                                                                                    +    directory_registration_client.register(options.name, "bosdyn.api.NetworkComputeBridgeWorker",
                                                                                                                                    +                                           kServiceAuthority, ip, int(options.port))
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     def main(argv):
                                                                                                                                         default_port = '50051'
                                                                                                                                     
                                                                                                                                         parser = argparse.ArgumentParser()
                                                                                                                                    -    parser.add_argument('-m', '--model', help='[MODEL_DIR] [LABELS_FILE.pbtxt]: Path to a model\'s directory and path to its labels .pbtxt file', action='append', nargs=2, required=True)
                                                                                                                                    +    parser.add_argument(
                                                                                                                                    +        '-m', '--model', help=
                                                                                                                                    +        '[MODEL_DIR] [LABELS_FILE.pbtxt]: Path to a model\'s directory and path to its labels .pbtxt file',
                                                                                                                                    +        action='append', nargs=2, required=True)
                                                                                                                                         parser.add_argument('-p', '--port', help='Server\'s port number, default: ' + default_port,
                                                                                                                                                             default=default_port)
                                                                                                                                    -    parser.add_argument('-d', '--no-debug', help='Disable writing debug images.', action='store_true')
                                                                                                                                    +    parser.add_argument('-d', '--no-debug', help='Disable writing debug images.',
                                                                                                                                    +                        action='store_true')
                                                                                                                                         parser.add_argument('-n', '--name', help='Service name', default='fetch-server')
                                                                                                                                         bosdyn.client.util.add_payload_credentials_arguments(parser, required=False)
                                                                                                                                         bosdyn.client.util.add_base_arguments(parser)
                                                                                                                                    @@ -286,7 +293,8 @@ def main(argv):
                                                                                                                                         response_queue = queue.Queue()
                                                                                                                                     
                                                                                                                                         # Start server thread
                                                                                                                                    -    thread = threading.Thread(target=process_thread, args=([options, request_queue, response_queue]))
                                                                                                                                    +    thread = threading.Thread(target=process_thread, args=([options, request_queue,
                                                                                                                                    +                                                            response_queue]))
                                                                                                                                         thread.start()
                                                                                                                                     
                                                                                                                                         # Set up GRPC endpoint
                                                                                                                                    @@ -301,6 +309,7 @@ def main(argv):
                                                                                                                                     
                                                                                                                                         return True
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     if __name__ == '__main__':
                                                                                                                                         logging.basicConfig()
                                                                                                                                         if not main(sys.argv[1:]):
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/eval.py b/docs/python/fetch_tutorial/files/eval.py
                                                                                                                                    index e2ee5ceec..0647188cc 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/eval.py
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/eval.py
                                                                                                                                    @@ -5,34 +5,39 @@
                                                                                                                                     # Development Kit License (20191101-BDSDK-SL).
                                                                                                                                     
                                                                                                                                     import argparse
                                                                                                                                    -import numpy as np
                                                                                                                                    -from PIL import Image
                                                                                                                                    -import matplotlib.pyplot as plt
                                                                                                                                    +import os
                                                                                                                                    +import pathlib
                                                                                                                                    +import time
                                                                                                                                     import warnings
                                                                                                                                    +
                                                                                                                                     import cv2
                                                                                                                                    -import time
                                                                                                                                    +import matplotlib.pyplot as plt
                                                                                                                                    +import numpy as np
                                                                                                                                     import tensorflow as tf
                                                                                                                                    -import os
                                                                                                                                     from object_detection.utils import label_map_util
                                                                                                                                     from object_detection.utils import visualization_utils as viz_utils
                                                                                                                                    -import pathlib
                                                                                                                                    +from PIL import Image
                                                                                                                                    +
                                                                                                                                     
                                                                                                                                     def load_image_into_numpy_array(path):
                                                                                                                                         return np.array(Image.open(path))
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     def main():
                                                                                                                                         parser = argparse.ArgumentParser()
                                                                                                                                         parser.add_argument('-i', '--image-dir', help='Directory of images to use.')
                                                                                                                                         parser.add_argument('-m', '--model', help='Path to the model', required=True)
                                                                                                                                    -    parser.add_argument('-l', '--label-map', help='Path to the label_map.pbtxt file.', required=True)
                                                                                                                                    -    parser.add_argument('-o', '--output-dir', help='Directory to write labeled images.', required=True)
                                                                                                                                    +    parser.add_argument('-l', '--label-map', help='Path to the label_map.pbtxt file.',
                                                                                                                                    +                        required=True)
                                                                                                                                    +    parser.add_argument('-o', '--output-dir', help='Directory to write labeled images.',
                                                                                                                                    +                        required=True)
                                                                                                                                     
                                                                                                                                         args = parser.parse_args()
                                                                                                                                     
                                                                                                                                         detect_fn = tf.saved_model.load(args.model)
                                                                                                                                    -    category_index = label_map_util.create_category_index_from_labelmap(args.label_map, use_display_name=True)
                                                                                                                                    -    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
                                                                                                                                    -
                                                                                                                                    +    category_index = label_map_util.create_category_index_from_labelmap(
                                                                                                                                    +        args.label_map, use_display_name=True)
                                                                                                                                    +    warnings.filterwarnings('ignore')  # Suppress Matplotlib warnings
                                                                                                                                     
                                                                                                                                         if not os.path.exists(args.image_dir):
                                                                                                                                             print('Error: image path does not exist: ' + args.image_dir)
                                                                                                                                    @@ -48,7 +53,9 @@ def main():
                                                                                                                                     
                                                                                                                                             full_path = os.path.join(args.image_dir, image_path)
                                                                                                                                     
                                                                                                                                    -        print('[{counter:d}/{total:d}] Running inference for {path:s}... '.format(counter=counter, total=total, path=full_path), end='')
                                                                                                                                    +        print(
                                                                                                                                    +            '[{counter:d}/{total:d}] Running inference for {path:s}... '.format(
                                                                                                                                    +                counter=counter, total=total, path=full_path), end='')
                                                                                                                                     
                                                                                                                                             image = cv2.imread(full_path, -1)
                                                                                                                                     
                                                                                                                                    @@ -64,8 +71,7 @@ def main():
                                                                                                                                             # Convert to numpy arrays, and take index [0] to remove the batch dimension.
                                                                                                                                             # We're only interested in the first num_detections.
                                                                                                                                             num_detections = int(detections.pop('num_detections'))
                                                                                                                                    -        detections = {key: value[0, :num_detections].numpy()
                                                                                                                                    -                       for key, value in detections.items()}
                                                                                                                                    +        detections = {key: value[0, :num_detections].numpy() for key, value in detections.items()}
                                                                                                                                             detections['num_detections'] = num_detections
                                                                                                                                     
                                                                                                                                             # detection_classes should be ints.
                                                                                                                                    @@ -76,15 +82,10 @@ def main():
                                                                                                                                     
                                                                                                                                             image_np_with_detections = image.copy()
                                                                                                                                             viz_utils.visualize_boxes_and_labels_on_image_array(
                                                                                                                                    -              image_np_with_detections,
                                                                                                                                    -              detections['detection_boxes'],
                                                                                                                                    -              detections['detection_classes'],
                                                                                                                                    -              detections['detection_scores'],
                                                                                                                                    -              category_index,
                                                                                                                                    -              use_normalized_coordinates=True,
                                                                                                                                    -              max_boxes_to_draw=200,
                                                                                                                                    -              min_score_thresh=.30,
                                                                                                                                    -              agnostic_mode=False)
                                                                                                                                    +            image_np_with_detections, detections['detection_boxes'],
                                                                                                                                    +            detections['detection_classes'], detections['detection_scores'], category_index,
                                                                                                                                    +            use_normalized_coordinates=True, max_boxes_to_draw=200, min_score_thresh=.30,
                                                                                                                                    +            agnostic_mode=False)
                                                                                                                                     
                                                                                                                                             output_path = os.path.join(args.output_dir, image_path)
                                                                                                                                     
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/network_compute_server.py b/docs/python/fetch_tutorial/files/network_compute_server.py
                                                                                                                                    index 4219293be..38b30a5c0 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/network_compute_server.py
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/network_compute_server.py
                                                                                                                                    @@ -6,37 +6,36 @@
                                                                                                                                     
                                                                                                                                     import argparse
                                                                                                                                     import io
                                                                                                                                    +import logging
                                                                                                                                     import os
                                                                                                                                    +import queue
                                                                                                                                     import sys
                                                                                                                                    +import threading
                                                                                                                                     import time
                                                                                                                                    -import logging
                                                                                                                                    +from concurrent import futures
                                                                                                                                     
                                                                                                                                     import cv2
                                                                                                                                    -from PIL import Image
                                                                                                                                    -import numpy as np
                                                                                                                                    -
                                                                                                                                    -from bosdyn.api import network_compute_bridge_service_pb2_grpc
                                                                                                                                    -from bosdyn.api import network_compute_bridge_pb2
                                                                                                                                    -from bosdyn.api import image_pb2
                                                                                                                                    -from bosdyn.api import header_pb2
                                                                                                                                    -import bosdyn.client
                                                                                                                                    -import bosdyn.client.util
                                                                                                                                     import grpc
                                                                                                                                    -from concurrent import futures
                                                                                                                                    +import numpy as np
                                                                                                                                     import tensorflow as tf
                                                                                                                                    -
                                                                                                                                    -import queue
                                                                                                                                    -import threading
                                                                                                                                     from google.protobuf import wrappers_pb2
                                                                                                                                     from object_detection.utils import label_map_util
                                                                                                                                    +from PIL import Image
                                                                                                                                    +
                                                                                                                                    +import bosdyn.client
                                                                                                                                    +import bosdyn.client.util
                                                                                                                                    +from bosdyn.api import (header_pb2, image_pb2, network_compute_bridge_pb2,
                                                                                                                                    +                        network_compute_bridge_service_pb2_grpc)
                                                                                                                                     
                                                                                                                                     kServiceAuthority = "fetch-tutorial-worker.spot.robot"
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     class TensorFlowObjectDetectionModel:
                                                                                                                                    +
                                                                                                                                         def __init__(self, model_path, label_path):
                                                                                                                                             self.detect_fn = tf.saved_model.load(model_path)
                                                                                                                                    -        self.category_index = label_map_util.create_category_index_from_labelmap(label_path, use_display_name=True)
                                                                                                                                    +        self.category_index = label_map_util.create_category_index_from_labelmap(
                                                                                                                                    +            label_path, use_display_name=True)
                                                                                                                                             self.name = os.path.basename(os.path.dirname(model_path))
                                                                                                                                     
                                                                                                                                         def predict(self, image):
                                                                                                                                    @@ -46,6 +45,7 @@ def predict(self, image):
                                                                                                                                     
                                                                                                                                             return detections
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     def process_thread(args, request_queue, response_queue):
                                                                                                                                         # Load the model(s)
                                                                                                                                         models = {}
                                                                                                                                    @@ -66,7 +66,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                             if isinstance(request, network_compute_bridge_pb2.ListAvailableModelsRequest):
                                                                                                                                                 out_proto = network_compute_bridge_pb2.ListAvailableModelsResponse()
                                                                                                                                                 for model_name in models:
                                                                                                                                    -                out_proto.models.data.append(network_compute_bridge_pb2.ModelData(model_name=model_name))
                                                                                                                                    +                out_proto.models.data.append(
                                                                                                                                    +                    network_compute_bridge_pb2.ModelData(model_name=model_name))
                                                                                                                                                 response_queue.put(out_proto)
                                                                                                                                                 continue
                                                                                                                                             else:
                                                                                                                                    @@ -77,7 +78,7 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                 err_str = 'Cannot find model "' + request.input_data.model_name + '" in loaded models.'
                                                                                                                                                 print(err_str)
                                                                                                                                     
                                                                                                                                    -             # Set the error in the header.
                                                                                                                                    +            # Set the error in the header.
                                                                                                                                                 out_proto.header.error.code = header_pb2.CommonError.CODE_INVALID_REQUEST
                                                                                                                                                 out_proto.header.error.message = err_str
                                                                                                                                                 response_queue.put(out_proto)
                                                                                                                                    @@ -97,7 +98,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                     image = pil_image
                                                                                                                                     
                                                                                                                                                 else:
                                                                                                                                    -                print('Error: image input in unsupported pixel format: ', request.input_data.image.pixel_format)
                                                                                                                                    +                print('Error: image input in unsupported pixel format: ',
                                                                                                                                    +                      request.input_data.image.pixel_format)
                                                                                                                                                     response_queue.put(out_proto)
                                                                                                                                                     continue
                                                                                                                                     
                                                                                                                                    @@ -121,14 +123,12 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                             # Convert to numpy arrays, and take index [0] to remove the batch dimension.
                                                                                                                                             # We're only interested in the first num_detections.
                                                                                                                                             num_detections = int(detections.pop('num_detections'))
                                                                                                                                    -        detections = {key: value[0, :num_detections].numpy()
                                                                                                                                    -                       for key, value in detections.items()}
                                                                                                                                    +        detections = {key: value[0, :num_detections].numpy() for key, value in detections.items()}
                                                                                                                                     
                                                                                                                                             boxes = detections['detection_boxes']
                                                                                                                                             classes = detections['detection_classes']
                                                                                                                                             scores = detections['detection_scores']
                                                                                                                                     
                                                                                                                                    -
                                                                                                                                             for i in range(boxes.shape[0]):
                                                                                                                                                 if scores[i] < request.input_data.min_confidence:
                                                                                                                                                     continue
                                                                                                                                    @@ -136,7 +136,10 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                 box = tuple(boxes[i].tolist())
                                                                                                                                     
                                                                                                                                                 # Boxes come in with normalized coordinates.  Convert to pixel values.
                                                                                                                                    -            box = [box[0] * image_width, box[1] * image_height, box[2] * image_width, box[3] * image_height]
                                                                                                                                    +            box = [
                                                                                                                                    +                box[0] * image_width, box[1] * image_height, box[2] * image_width,
                                                                                                                                    +                box[3] * image_height
                                                                                                                                    +            ]
                                                                                                                                     
                                                                                                                                                 score = scores[i]
                                                                                                                                     
                                                                                                                                    @@ -149,7 +152,6 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                     
                                                                                                                                                 print('Found object with label: "' + label + '" and score: ' + str(score))
                                                                                                                                     
                                                                                                                                    -
                                                                                                                                                 point1 = np.array([box[1], box[0]])
                                                                                                                                                 point2 = np.array([box[3], box[0]])
                                                                                                                                                 point3 = np.array([box[3], box[2]])
                                                                                                                                    @@ -187,8 +189,8 @@ def process_thread(args, request_queue, response_queue):
                                                                                                                                                     caption = "{}: {:.3f}".format(label, score)
                                                                                                                                                     left_x = min(point1[0], min(point2[0], min(point3[0], point4[0])))
                                                                                                                                                     top_y = min(point1[1], min(point2[1], min(point3[1], point4[1])))
                                                                                                                                    -                cv2.putText(image, caption, (int(left_x), int(top_y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                                                                                                                                    -                            (0, 255, 0), 2)
                                                                                                                                    +                cv2.putText(image, caption, (int(left_x), int(top_y)), cv2.FONT_HERSHEY_SIMPLEX,
                                                                                                                                    +                            0.5, (0, 255, 0), 2)
                                                                                                                                     
                                                                                                                                             print('Found ' + str(num_objects) + ' object(s)')
                                                                                                                                     
                                                                                                                                    @@ -248,19 +250,24 @@ def register_with_robot(options):
                                                                                                                                                 break
                                                                                                                                     
                                                                                                                                         # Register service
                                                                                                                                    -    print('Attempting to register ' + ip + ':' + options.port + ' onto ' + options.hostname + ' directory...')
                                                                                                                                    -    directory_registration_client.register(options.name, "bosdyn.api.NetworkComputeBridgeWorker", kServiceAuthority, ip, int(options.port))
                                                                                                                                    -
                                                                                                                                    +    print('Attempting to register ' + ip + ':' + options.port + ' onto ' + options.hostname +
                                                                                                                                    +          ' directory...')
                                                                                                                                    +    directory_registration_client.register(options.name, "bosdyn.api.NetworkComputeBridgeWorker",
                                                                                                                                    +                                           kServiceAuthority, ip, int(options.port))
                                                                                                                                     
                                                                                                                                     
                                                                                                                                     def main(argv):
                                                                                                                                         default_port = '50051'
                                                                                                                                     
                                                                                                                                         parser = argparse.ArgumentParser()
                                                                                                                                    -    parser.add_argument('-m', '--model', help='[MODEL_DIR] [LABELS_FILE.pbtxt]: Path to a model\'s directory and path to its labels .pbtxt file', action='append', nargs=2, required=True)
                                                                                                                                    +    parser.add_argument(
                                                                                                                                    +        '-m', '--model', help=
                                                                                                                                    +        '[MODEL_DIR] [LABELS_FILE.pbtxt]: Path to a model\'s directory and path to its labels .pbtxt file',
                                                                                                                                    +        action='append', nargs=2, required=True)
                                                                                                                                         parser.add_argument('-p', '--port', help='Server\'s port number, default: ' + default_port,
                                                                                                                                                             default=default_port)
                                                                                                                                    -    parser.add_argument('-d', '--no-debug', help='Disable writing debug images.', action='store_true')
                                                                                                                                    +    parser.add_argument('-d', '--no-debug', help='Disable writing debug images.',
                                                                                                                                    +                        action='store_true')
                                                                                                                                         parser.add_argument('-n', '--name', help='Service name', default='fetch-server')
                                                                                                                                         bosdyn.client.util.add_base_arguments(parser)
                                                                                                                                     
                                                                                                                                    @@ -281,7 +288,8 @@ def main(argv):
                                                                                                                                         response_queue = queue.Queue()
                                                                                                                                     
                                                                                                                                         # Start server thread
                                                                                                                                    -    thread = threading.Thread(target=process_thread, args=([options, request_queue, response_queue]))
                                                                                                                                    +    thread = threading.Thread(target=process_thread, args=([options, request_queue,
                                                                                                                                    +                                                            response_queue]))
                                                                                                                                         thread.start()
                                                                                                                                     
                                                                                                                                         # Set up GRPC endpoint
                                                                                                                                    @@ -296,6 +304,7 @@ def main(argv):
                                                                                                                                     
                                                                                                                                         return True
                                                                                                                                     
                                                                                                                                    +
                                                                                                                                     if __name__ == '__main__':
                                                                                                                                         logging.basicConfig()
                                                                                                                                         if not main(sys.argv[1:]):
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/files/split_dataset.py b/docs/python/fetch_tutorial/files/split_dataset.py
                                                                                                                                    index 8688b653d..7924174f4 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/files/split_dataset.py
                                                                                                                                    +++ b/docs/python/fetch_tutorial/files/split_dataset.py
                                                                                                                                    @@ -7,17 +7,20 @@
                                                                                                                                     """Split our dataset into test and train sets."""
                                                                                                                                     
                                                                                                                                     import argparse
                                                                                                                                    -import sys
                                                                                                                                     import os
                                                                                                                                     import pathlib
                                                                                                                                    -from shutil import copyfile
                                                                                                                                     import random
                                                                                                                                    +import sys
                                                                                                                                    +from shutil import copyfile
                                                                                                                                    +
                                                                                                                                     
                                                                                                                                     def main():
                                                                                                                                         parser = argparse.ArgumentParser()
                                                                                                                                         parser.add_argument('-r', '--ratio', help='Test/train ratio.', default=0.9)
                                                                                                                                         parser.add_argument('-l', '--labels-dir', help='Path to the directory of labels', required=True)
                                                                                                                                    -    parser.add_argument('-o', '--output-dir', help='Path to the output where we create test and train folders', default='.')
                                                                                                                                    +    parser.add_argument('-o', '--output-dir',
                                                                                                                                    +                        help='Path to the output where we create test and train folders',
                                                                                                                                    +                        default='.')
                                                                                                                                     
                                                                                                                                         args = parser.parse_args()
                                                                                                                                     
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/prism.css b/docs/python/fetch_tutorial/prism.css
                                                                                                                                    index f938d78e7..1f073fffb 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/prism.css
                                                                                                                                    +++ b/docs/python/fetch_tutorial/prism.css
                                                                                                                                    @@ -8,101 +8,106 @@ https://prismjs.com/download.html#themes=prism-coy&languages=markup+clike+bash+c
                                                                                                                                     
                                                                                                                                     code[class*="language-"],
                                                                                                                                     pre[class*="language-"] {
                                                                                                                                    -	color: black;
                                                                                                                                    -	background: none;
                                                                                                                                    -	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
                                                                                                                                    -	font-size: 1em;
                                                                                                                                    -	text-align: left;
                                                                                                                                    -	white-space: pre;
                                                                                                                                    -	word-spacing: normal;
                                                                                                                                    -	word-break: normal;
                                                                                                                                    -	word-wrap: normal;
                                                                                                                                    -	line-height: 1.5;
                                                                                                                                    -
                                                                                                                                    -	-moz-tab-size: 4;
                                                                                                                                    -	-o-tab-size: 4;
                                                                                                                                    -	tab-size: 4;
                                                                                                                                    -
                                                                                                                                    -	-webkit-hyphens: none;
                                                                                                                                    -	-moz-hyphens: none;
                                                                                                                                    -	-ms-hyphens: none;
                                                                                                                                    -	hyphens: none;
                                                                                                                                    +  color: black;
                                                                                                                                    +  background: none;
                                                                                                                                    +  font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
                                                                                                                                    +  font-size: 1em;
                                                                                                                                    +  text-align: left;
                                                                                                                                    +  white-space: pre;
                                                                                                                                    +  word-spacing: normal;
                                                                                                                                    +  word-break: normal;
                                                                                                                                    +  word-wrap: normal;
                                                                                                                                    +  line-height: 1.5;
                                                                                                                                    +
                                                                                                                                    +  -moz-tab-size: 4;
                                                                                                                                    +  -o-tab-size: 4;
                                                                                                                                    +  tab-size: 4;
                                                                                                                                    +
                                                                                                                                    +  -webkit-hyphens: none;
                                                                                                                                    +  -moz-hyphens: none;
                                                                                                                                    +  -ms-hyphens: none;
                                                                                                                                    +  hyphens: none;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     /* Code blocks */
                                                                                                                                     pre[class*="language-"] {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	margin: .5em 0;
                                                                                                                                    -	overflow: visible;
                                                                                                                                    -	padding: 0;
                                                                                                                                    -}
                                                                                                                                    -pre[class*="language-"]>code {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	border-left: 10px solid #358ccb;
                                                                                                                                    -	box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
                                                                                                                                    -	background-color: #fdfdfd;
                                                                                                                                    -	background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
                                                                                                                                    -	background-size: 3em 3em;
                                                                                                                                    -	background-origin: content-box;
                                                                                                                                    -	background-attachment: local;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  margin: 0.5em 0;
                                                                                                                                    +  overflow: visible;
                                                                                                                                    +  padding: 0;
                                                                                                                                    +}
                                                                                                                                    +pre[class*="language-"] > code {
                                                                                                                                    +  position: relative;
                                                                                                                                    +  border-left: 10px solid #358ccb;
                                                                                                                                    +  box-shadow:
                                                                                                                                    +    -1px 0px 0px 0px #358ccb,
                                                                                                                                    +    0px 0px 0px 1px #dfdfdf;
                                                                                                                                    +  background-color: #fdfdfd;
                                                                                                                                    +  background-image: linear-gradient(
                                                                                                                                    +    transparent 50%,
                                                                                                                                    +    rgba(69, 142, 209, 0.04) 50%
                                                                                                                                    +  );
                                                                                                                                    +  background-size: 3em 3em;
                                                                                                                                    +  background-origin: content-box;
                                                                                                                                    +  background-attachment: local;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     code[class*="language-"] {
                                                                                                                                    -	max-height: inherit;
                                                                                                                                    -	height: inherit;
                                                                                                                                    -	padding: 0 1em;
                                                                                                                                    -	display: block;
                                                                                                                                    -	overflow: auto;
                                                                                                                                    +  max-height: inherit;
                                                                                                                                    +  height: inherit;
                                                                                                                                    +  padding: 0 1em;
                                                                                                                                    +  display: block;
                                                                                                                                    +  overflow: auto;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     /* Margin bottom to accommodate shadow */
                                                                                                                                     :not(pre) > code[class*="language-"],
                                                                                                                                     pre[class*="language-"] {
                                                                                                                                    -	background-color: #fdfdfd;
                                                                                                                                    -	-webkit-box-sizing: border-box;
                                                                                                                                    -	-moz-box-sizing: border-box;
                                                                                                                                    -	box-sizing: border-box;
                                                                                                                                    -	margin-bottom: 1em;
                                                                                                                                    +  background-color: #fdfdfd;
                                                                                                                                    +  -webkit-box-sizing: border-box;
                                                                                                                                    +  -moz-box-sizing: border-box;
                                                                                                                                    +  box-sizing: border-box;
                                                                                                                                    +  margin-bottom: 1em;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     /* Inline code */
                                                                                                                                     :not(pre) > code[class*="language-"] {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	padding: .2em;
                                                                                                                                    -	border-radius: 0.3em;
                                                                                                                                    -	color: #c92c2c;
                                                                                                                                    -	border: 1px solid rgba(0, 0, 0, 0.1);
                                                                                                                                    -	display: inline;
                                                                                                                                    -	white-space: normal;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  padding: 0.2em;
                                                                                                                                    +  border-radius: 0.3em;
                                                                                                                                    +  color: #c92c2c;
                                                                                                                                    +  border: 1px solid rgba(0, 0, 0, 0.1);
                                                                                                                                    +  display: inline;
                                                                                                                                    +  white-space: normal;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"]:before,
                                                                                                                                     pre[class*="language-"]:after {
                                                                                                                                    -	content: '';
                                                                                                                                    -	z-index: -2;
                                                                                                                                    -	display: block;
                                                                                                                                    -	position: absolute;
                                                                                                                                    -	bottom: 0.75em;
                                                                                                                                    -	left: 0.18em;
                                                                                                                                    -	width: 40%;
                                                                                                                                    -	height: 20%;
                                                                                                                                    -	max-height: 13em;
                                                                                                                                    -	box-shadow: 0px 13px 8px #979797;
                                                                                                                                    -	-webkit-transform: rotate(-2deg);
                                                                                                                                    -	-moz-transform: rotate(-2deg);
                                                                                                                                    -	-ms-transform: rotate(-2deg);
                                                                                                                                    -	-o-transform: rotate(-2deg);
                                                                                                                                    -	transform: rotate(-2deg);
                                                                                                                                    +  content: "";
                                                                                                                                    +  z-index: -2;
                                                                                                                                    +  display: block;
                                                                                                                                    +  position: absolute;
                                                                                                                                    +  bottom: 0.75em;
                                                                                                                                    +  left: 0.18em;
                                                                                                                                    +  width: 40%;
                                                                                                                                    +  height: 20%;
                                                                                                                                    +  max-height: 13em;
                                                                                                                                    +  box-shadow: 0px 13px 8px #979797;
                                                                                                                                    +  -webkit-transform: rotate(-2deg);
                                                                                                                                    +  -moz-transform: rotate(-2deg);
                                                                                                                                    +  -ms-transform: rotate(-2deg);
                                                                                                                                    +  -o-transform: rotate(-2deg);
                                                                                                                                    +  transform: rotate(-2deg);
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"]:after {
                                                                                                                                    -	right: 0.75em;
                                                                                                                                    -	left: auto;
                                                                                                                                    -	-webkit-transform: rotate(2deg);
                                                                                                                                    -	-moz-transform: rotate(2deg);
                                                                                                                                    -	-ms-transform: rotate(2deg);
                                                                                                                                    -	-o-transform: rotate(2deg);
                                                                                                                                    -	transform: rotate(2deg);
                                                                                                                                    +  right: 0.75em;
                                                                                                                                    +  left: auto;
                                                                                                                                    +  -webkit-transform: rotate(2deg);
                                                                                                                                    +  -moz-transform: rotate(2deg);
                                                                                                                                    +  -ms-transform: rotate(2deg);
                                                                                                                                    +  -o-transform: rotate(2deg);
                                                                                                                                    +  transform: rotate(2deg);
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.comment,
                                                                                                                                    @@ -110,11 +115,11 @@ pre[class*="language-"]:after {
                                                                                                                                     .token.prolog,
                                                                                                                                     .token.doctype,
                                                                                                                                     .token.cdata {
                                                                                                                                    -	color: #7D8B99;
                                                                                                                                    +  color: #7d8b99;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.punctuation {
                                                                                                                                    -	color: #5F6364;
                                                                                                                                    +  color: #5f6364;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.property,
                                                                                                                                    @@ -125,7 +130,7 @@ pre[class*="language-"]:after {
                                                                                                                                     .token.constant,
                                                                                                                                     .token.symbol,
                                                                                                                                     .token.deleted {
                                                                                                                                    -	color: #c92c2c;
                                                                                                                                    +  color: #c92c2c;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.selector,
                                                                                                                                    @@ -135,199 +140,200 @@ pre[class*="language-"]:after {
                                                                                                                                     .token.function,
                                                                                                                                     .token.builtin,
                                                                                                                                     .token.inserted {
                                                                                                                                    -	color: #2f9c0a;
                                                                                                                                    +  color: #2f9c0a;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.operator,
                                                                                                                                     .token.entity,
                                                                                                                                     .token.url,
                                                                                                                                     .token.variable {
                                                                                                                                    -	color: #a67f59;
                                                                                                                                    -	background: rgba(255, 255, 255, 0.5);
                                                                                                                                    +  color: #a67f59;
                                                                                                                                    +  background: rgba(255, 255, 255, 0.5);
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.atrule,
                                                                                                                                     .token.attr-value,
                                                                                                                                     .token.keyword,
                                                                                                                                     .token.class-name {
                                                                                                                                    -	color: #1990b8;
                                                                                                                                    +  color: #1990b8;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.regex,
                                                                                                                                     .token.important {
                                                                                                                                    -	color: #e90;
                                                                                                                                    +  color: #e90;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .language-css .token.string,
                                                                                                                                     .style .token.string {
                                                                                                                                    -	color: #a67f59;
                                                                                                                                    -	background: rgba(255, 255, 255, 0.5);
                                                                                                                                    +  color: #a67f59;
                                                                                                                                    +  background: rgba(255, 255, 255, 0.5);
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.important {
                                                                                                                                    -	font-weight: normal;
                                                                                                                                    +  font-weight: normal;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.bold {
                                                                                                                                    -	font-weight: bold;
                                                                                                                                    +  font-weight: bold;
                                                                                                                                     }
                                                                                                                                     .token.italic {
                                                                                                                                    -	font-style: italic;
                                                                                                                                    +  font-style: italic;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.entity {
                                                                                                                                    -	cursor: help;
                                                                                                                                    +  cursor: help;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .token.namespace {
                                                                                                                                    -	opacity: .7;
                                                                                                                                    +  opacity: 0.7;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     @media screen and (max-width: 767px) {
                                                                                                                                    -	pre[class*="language-"]:before,
                                                                                                                                    -	pre[class*="language-"]:after {
                                                                                                                                    -		bottom: 14px;
                                                                                                                                    -		box-shadow: none;
                                                                                                                                    -	}
                                                                                                                                    -
                                                                                                                                    +  pre[class*="language-"]:before,
                                                                                                                                    +  pre[class*="language-"]:after {
                                                                                                                                    +    bottom: 14px;
                                                                                                                                    +    box-shadow: none;
                                                                                                                                    +  }
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     /* Plugin styles: Line Numbers */
                                                                                                                                     pre[class*="language-"].line-numbers.line-numbers {
                                                                                                                                    -	padding-left: 0;
                                                                                                                                    +  padding-left: 0;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"].line-numbers.line-numbers code {
                                                                                                                                    -	padding-left: 3.8em;
                                                                                                                                    +  padding-left: 3.8em;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows {
                                                                                                                                    -	left: 0;
                                                                                                                                    +  left: 0;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     /* Plugin styles: Line Highlight */
                                                                                                                                     pre[class*="language-"][data-line] {
                                                                                                                                    -	padding-top: 0;
                                                                                                                                    -	padding-bottom: 0;
                                                                                                                                    -	padding-left: 0;
                                                                                                                                    +  padding-top: 0;
                                                                                                                                    +  padding-bottom: 0;
                                                                                                                                    +  padding-left: 0;
                                                                                                                                     }
                                                                                                                                     pre[data-line] code {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	padding-left: 4em;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  padding-left: 4em;
                                                                                                                                     }
                                                                                                                                     pre .line-highlight {
                                                                                                                                    -	margin-top: 0;
                                                                                                                                    +  margin-top: 0;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[data-line] {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	padding: 1em 0 1em 3em;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  padding: 1em 0 1em 3em;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .line-highlight {
                                                                                                                                    -	position: absolute;
                                                                                                                                    -	left: 0;
                                                                                                                                    -	right: 0;
                                                                                                                                    -	padding: inherit 0;
                                                                                                                                    -	margin-top: 1em; /* Same as .prism’s padding-top */
                                                                                                                                    +  position: absolute;
                                                                                                                                    +  left: 0;
                                                                                                                                    +  right: 0;
                                                                                                                                    +  padding: inherit 0;
                                                                                                                                    +  margin-top: 1em; /* Same as .prism’s padding-top */
                                                                                                                                     
                                                                                                                                    -	background: hsla(24, 20%, 50%,.08);
                                                                                                                                    -	background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
                                                                                                                                    +  background: hsla(24, 20%, 50%, 0.08);
                                                                                                                                    +  background: linear-gradient(
                                                                                                                                    +    to right,
                                                                                                                                    +    hsla(24, 20%, 50%, 0.1) 70%,
                                                                                                                                    +    hsla(24, 20%, 50%, 0)
                                                                                                                                    +  );
                                                                                                                                     
                                                                                                                                    -	pointer-events: none;
                                                                                                                                    +  pointer-events: none;
                                                                                                                                     
                                                                                                                                    -	line-height: inherit;
                                                                                                                                    -	white-space: pre;
                                                                                                                                    +  line-height: inherit;
                                                                                                                                    +  white-space: pre;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     @media print {
                                                                                                                                    -	.line-highlight {
                                                                                                                                    -		/*
                                                                                                                                    +  .line-highlight {
                                                                                                                                    +    /*
                                                                                                                                     		 * This will prevent browsers from replacing the background color with white.
                                                                                                                                     		 * It's necessary because the element is layered on top of the displayed code.
                                                                                                                                     		 */
                                                                                                                                    -		-webkit-print-color-adjust: exact;
                                                                                                                                    -		color-adjust: exact;
                                                                                                                                    -	}
                                                                                                                                    -}
                                                                                                                                    -
                                                                                                                                    -	.line-highlight:before,
                                                                                                                                    -	.line-highlight[data-end]:after {
                                                                                                                                    -		content: attr(data-start);
                                                                                                                                    -		position: absolute;
                                                                                                                                    -		top: .4em;
                                                                                                                                    -		left: .6em;
                                                                                                                                    -		min-width: 1em;
                                                                                                                                    -		padding: 0 .5em;
                                                                                                                                    -		background-color: hsla(24, 20%, 50%,.4);
                                                                                                                                    -		color: hsl(24, 20%, 95%);
                                                                                                                                    -		font: bold 65%/1.5 sans-serif;
                                                                                                                                    -		text-align: center;
                                                                                                                                    -		vertical-align: .3em;
                                                                                                                                    -		border-radius: 999px;
                                                                                                                                    -		text-shadow: none;
                                                                                                                                    -		box-shadow: 0 1px white;
                                                                                                                                    -	}
                                                                                                                                    -
                                                                                                                                    -	.line-highlight[data-end]:after {
                                                                                                                                    -		content: attr(data-end);
                                                                                                                                    -		top: auto;
                                                                                                                                    -		bottom: .4em;
                                                                                                                                    -	}
                                                                                                                                    +    -webkit-print-color-adjust: exact;
                                                                                                                                    +    color-adjust: exact;
                                                                                                                                    +  }
                                                                                                                                    +}
                                                                                                                                    +
                                                                                                                                    +.line-highlight:before,
                                                                                                                                    +.line-highlight[data-end]:after {
                                                                                                                                    +  content: attr(data-start);
                                                                                                                                    +  position: absolute;
                                                                                                                                    +  top: 0.4em;
                                                                                                                                    +  left: 0.6em;
                                                                                                                                    +  min-width: 1em;
                                                                                                                                    +  padding: 0 0.5em;
                                                                                                                                    +  background-color: hsla(24, 20%, 50%, 0.4);
                                                                                                                                    +  color: hsl(24, 20%, 95%);
                                                                                                                                    +  font: bold 65%/1.5 sans-serif;
                                                                                                                                    +  text-align: center;
                                                                                                                                    +  vertical-align: 0.3em;
                                                                                                                                    +  border-radius: 999px;
                                                                                                                                    +  text-shadow: none;
                                                                                                                                    +  box-shadow: 0 1px white;
                                                                                                                                    +}
                                                                                                                                    +
                                                                                                                                    +.line-highlight[data-end]:after {
                                                                                                                                    +  content: attr(data-end);
                                                                                                                                    +  top: auto;
                                                                                                                                    +  bottom: 0.4em;
                                                                                                                                    +}
                                                                                                                                     
                                                                                                                                     .line-numbers .line-highlight:before,
                                                                                                                                     .line-numbers .line-highlight:after {
                                                                                                                                    -	content: none;
                                                                                                                                    +  content: none;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[id].linkable-line-numbers span.line-numbers-rows {
                                                                                                                                    -	pointer-events: all;
                                                                                                                                    +  pointer-events: all;
                                                                                                                                     }
                                                                                                                                     pre[id].linkable-line-numbers span.line-numbers-rows > span:before {
                                                                                                                                    -	cursor: pointer;
                                                                                                                                    +  cursor: pointer;
                                                                                                                                     }
                                                                                                                                     pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {
                                                                                                                                    -	background-color: rgba(128, 128, 128, .2);
                                                                                                                                    +  background-color: rgba(128, 128, 128, 0.2);
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"].line-numbers {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	padding-left: 3.8em;
                                                                                                                                    -	counter-reset: linenumber;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  padding-left: 3.8em;
                                                                                                                                    +  counter-reset: linenumber;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     pre[class*="language-"].line-numbers > code {
                                                                                                                                    -	position: relative;
                                                                                                                                    -	white-space: inherit;
                                                                                                                                    +  position: relative;
                                                                                                                                    +  white-space: inherit;
                                                                                                                                     }
                                                                                                                                     
                                                                                                                                     .line-numbers .line-numbers-rows {
                                                                                                                                    -	position: absolute;
                                                                                                                                    -	pointer-events: none;
                                                                                                                                    -	top: 0;
                                                                                                                                    -	font-size: 100%;
                                                                                                                                    -	left: -3.8em;
                                                                                                                                    -	width: 3em; /* works for line-numbers below 1000 lines */
                                                                                                                                    -	letter-spacing: -1px;
                                                                                                                                    -	border-right: 1px solid #999;
                                                                                                                                    -
                                                                                                                                    -	-webkit-user-select: none;
                                                                                                                                    -	-moz-user-select: none;
                                                                                                                                    -	-ms-user-select: none;
                                                                                                                                    -	user-select: none;
                                                                                                                                    -
                                                                                                                                    -}
                                                                                                                                    -
                                                                                                                                    -	.line-numbers-rows > span {
                                                                                                                                    -		display: block;
                                                                                                                                    -		counter-increment: linenumber;
                                                                                                                                    -	}
                                                                                                                                    -
                                                                                                                                    -		.line-numbers-rows > span:before {
                                                                                                                                    -			content: counter(linenumber);
                                                                                                                                    -			color: #999;
                                                                                                                                    -			display: block;
                                                                                                                                    -			padding-right: 0.8em;
                                                                                                                                    -			text-align: right;
                                                                                                                                    -		}
                                                                                                                                    +  position: absolute;
                                                                                                                                    +  pointer-events: none;
                                                                                                                                    +  top: 0;
                                                                                                                                    +  font-size: 100%;
                                                                                                                                    +  left: -3.8em;
                                                                                                                                    +  width: 3em; /* works for line-numbers below 1000 lines */
                                                                                                                                    +  letter-spacing: -1px;
                                                                                                                                    +  border-right: 1px solid #999;
                                                                                                                                    +
                                                                                                                                    +  -webkit-user-select: none;
                                                                                                                                    +  -moz-user-select: none;
                                                                                                                                    +  -ms-user-select: none;
                                                                                                                                    +  user-select: none;
                                                                                                                                    +}
                                                                                                                                     
                                                                                                                                    +.line-numbers-rows > span {
                                                                                                                                    +  display: block;
                                                                                                                                    +  counter-increment: linenumber;
                                                                                                                                    +}
                                                                                                                                    +
                                                                                                                                    +.line-numbers-rows > span:before {
                                                                                                                                    +  content: counter(linenumber);
                                                                                                                                    +  color: #999;
                                                                                                                                    +  display: block;
                                                                                                                                    +  padding-right: 0.8em;
                                                                                                                                    +  text-align: right;
                                                                                                                                    +}
                                                                                                                                    diff --git a/docs/python/fetch_tutorial/prism.js b/docs/python/fetch_tutorial/prism.js
                                                                                                                                    index 7c41486f5..006f22ccd 100644
                                                                                                                                    --- a/docs/python/fetch_tutorial/prism.js
                                                                                                                                    +++ b/docs/python/fetch_tutorial/prism.js
                                                                                                                                    @@ -1,11 +1,1167 @@
                                                                                                                                     /* PrismJS 1.23.0
                                                                                                                                     https://prismjs.com/download.html#themes=prism-coy&languages=markup+clike+bash+c+cpp+python&plugins=line-highlight+line-numbers */
                                                                                                                                    -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var k=m.value;if(r.length>n.length)return;if(!(k instanceof W)){var b,x=1;if(h){if(!(b=z(p,y,n,f)))break;var w=b.index,A=b.index+b[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var S=m;S!==r.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(r,j,O),y+=O.length),q(r,j,x);var C=new W(o,g?M.tokenize(E,g):E,d,E);if(m=I(r,j,C),L&&I(r,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],r=e.head.next;for(;r!==e.tail;)n.push(r.value),r=r.next;return n}(a)},hooks:{all:{},add:function(e,n){var r=M.hooks.all;r[e]=r[e]||[],r[e].push(n)},run:function(e,n){var r=M.hooks.all[e];if(r&&r.length)for(var t,a=0;t=r[a++];)t(n)}},Token:W};function W(e,n,r,t){this.type=e,this.content=n,this.alias=r,this.length=0|(t||"").length}function z(e,n,r,t){e.lastIndex=n;var a=e.exec(r);if(a&&t&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,r){var t=n.next,a={value:r,prev:n,next:t};return n.next=a,t.prev=a,e.length++,a}function q(e,n,r){for(var t=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,t=n.code,a=n.immediateClose;u.postMessage(M.highlight(t,M.languages[r],r)),a&&u.close()},!1)),M;var e=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var t=document.readyState;"loading"===t||"interactive"===t&&e&&e.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
                                                                                                                                    -Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
                                                                                                                                    -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
                                                                                                                                    -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:a}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean;
                                                                                                                                    -!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism);
                                                                                                                                    -Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python;
                                                                                                                                    -!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var t,o="line-numbers",s="linkable-line-numbers",a=function(){if(void 0===t){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML=" 
                                                                                                                                     ",document.body.appendChild(e),t=38===e.offsetHeight,document.body.removeChild(e)}return t},l=!0,u=0;Prism.hooks.add("before-sanity-check",function(e){var t=e.element.parentElement;if(c(t)){var n=0;v(".line-highlight",t).forEach(function(e){n+=e.textContent.length,e.parentNode.removeChild(e)}),n&&/^( \n)+$/.test(e.code.slice(-n))&&(e.code=e.code.slice(0,-n))}}),Prism.hooks.add("complete",function e(t){var n=t.element.parentElement;if(c(n)){clearTimeout(u);var i=Prism.plugins.lineNumbers,r=t.plugins&&t.plugins.lineNumbers;if(b(n,o)&&i&&!r)Prism.hooks.add("line-numbers",e);else d(n)(),u=setTimeout(f,1)}}),window.addEventListener("hashchange",f),window.addEventListener("resize",function(){v("pre").filter(c).map(function(e){return d(e)}).forEach(y)})}function v(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function b(e,t){return e.classList.contains(t)}function y(e){e()}function c(e){return!(!e||!/pre/i.test(e.nodeName))&&(!!e.hasAttribute("data-line")||!(!e.id||!Prism.util.isActive(e,s)))}function d(u,e,c){var t=(e="string"==typeof e?e:u.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+u.getAttribute("data-line-offset")||0,f=(a()?parseInt:parseFloat)(getComputedStyle(u).lineHeight),p=Prism.util.isActive(u,o),n=u.querySelector("code"),h=p?u:n||u,m=[],g=n&&h!=n?function(e,t){var n=getComputedStyle(e),i=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(i.borderTopWidth)+r(i.paddingTop)-r(n.paddingTop)}(u,n):0;t.forEach(function(e){var t=e.split("-"),n=+t[0],i=+t[1]||n,r=u.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(m.push(function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"}),p&&Prism.plugins.lineNumbers){var o=Prism.plugins.lineNumbers.getLine(u,n),s=Prism.plugins.lineNumbers.getLine(u,i);if(o){var a=o.offsetTop+g+"px";m.push(function(){r.style.top=a})}if(s){var l=s.offsetTop-o.offsetTop+s.offsetHeight+"px";m.push(function(){r.style.height=l})}}else m.push(function(){r.setAttribute("data-start",String(n)),n span",u).forEach(function(e,t){var n=t+r;e.onclick=function(){var e=i+"."+n;l=!1,location.hash=e,setTimeout(function(){l=!0},1)}})}return function(){m.forEach(y)}}function f(){var e=location.hash.slice(1);v(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var n=e.slice(0,e.lastIndexOf(".")),i=document.getElementById(n);if(i)i.hasAttribute("data-line")||i.setAttribute("data-line",""),d(i,t,"temporary ")(),l&&document.querySelector(".temporary.line-highlight").scrollIntoView()}}}(); -!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows");if(t){var i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=t(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1= l.reach); + y += m.value.length, m = m.next + ) { + var k = m.value; + if (r.length > n.length) return; + if (!(k instanceof W)) { + var b, + x = 1; + if (h) { + if (!(b = z(p, y, n, f))) break; + var w = b.index, + A = b.index + b[0].length, + P = y; + for (P += m.value.length; P <= w; ) + (m = m.next), (P += m.value.length); + if ( + ((P -= m.value.length), + (y = P), + m.value instanceof W) + ) + continue; + for ( + var S = m; + S !== r.tail && + (P < A || "string" == typeof S.value); + S = S.next + ) + x++, (P += S.value.length); + x--, (k = n.slice(y, P)), (b.index -= y); + } else if (!(b = z(p, 0, k, f))) continue; + var w = b.index, + E = b[0], + O = k.slice(0, w), + L = k.slice(w + E.length), + N = y + k.length; + l && N > l.reach && (l.reach = N); + var j = m.prev; + O && ((j = I(r, j, O)), (y += O.length)), q(r, j, x); + var C = new W(o, g ? M.tokenize(E, g) : E, d, E); + if (((m = I(r, j, C)), L && I(r, m, L), 1 < x)) { + var _ = { cause: o + "," + u, reach: N }; + e(n, r, t, m.prev, y, _), + l && _.reach > l.reach && (l.reach = _.reach); + } + } + } + } + } + })(e, a, n, a.head, 0), + (function (e) { + var n = [], + r = e.head.next; + for (; r !== e.tail; ) n.push(r.value), (r = r.next); + return n; + })(a) + ); + }, + hooks: { + all: {}, + add: function (e, n) { + var r = M.hooks.all; + (r[e] = r[e] || []), r[e].push(n); + }, + run: function (e, n) { + var r = M.hooks.all[e]; + if (r && r.length) for (var t, a = 0; (t = r[a++]); ) t(n); + }, + }, + Token: W, + }; + function W(e, n, r, t) { + (this.type = e), + (this.content = n), + (this.alias = r), + (this.length = 0 | (t || "").length); + } + function z(e, n, r, t) { + e.lastIndex = n; + var a = e.exec(r); + if (a && t && a[1]) { + var i = a[1].length; + (a.index += i), (a[0] = a[0].slice(i)); + } + return a; + } + function i() { + var e = { value: null, prev: null, next: null }, + n = { value: null, prev: e, next: null }; + (e.next = n), (this.head = e), (this.tail = n), (this.length = 0); + } + function I(e, n, r) { + var t = n.next, + a = { value: r, prev: n, next: t }; + return (n.next = a), (t.prev = a), e.length++, a; + } + function q(e, n, r) { + for (var t = n.next, a = 0; a < r && t !== e.tail; a++) t = t.next; + ((n.next = t).prev = n), (e.length -= a); + } + if ( + ((u.Prism = M), + (W.stringify = function n(e, r) { + if ("string" == typeof e) return e; + if (Array.isArray(e)) { + var t = ""; + return ( + e.forEach(function (e) { + t += n(e, r); + }), + t + ); + } + var a = { + type: e.type, + content: n(e.content, r), + tag: "span", + classes: ["token", e.type], + attributes: {}, + language: r, + }, + i = e.alias; + i && + (Array.isArray(i) + ? Array.prototype.push.apply(a.classes, i) + : a.classes.push(i)), + M.hooks.run("wrap", a); + var l = ""; + for (var o in a.attributes) + l += + " " + + o + + '="' + + (a.attributes[o] || "").replace(/"/g, """) + + '"'; + return ( + "<" + + a.tag + + ' class="' + + a.classes.join(" ") + + '"' + + l + + ">" + + a.content + + "" + ); + }), + !u.document) + ) + return ( + u.addEventListener && + (M.disableWorkerMessageHandler || + u.addEventListener( + "message", + function (e) { + var n = JSON.parse(e.data), + r = n.language, + t = n.code, + a = n.immediateClose; + u.postMessage(M.highlight(t, M.languages[r], r)), + a && u.close(); + }, + !1 + )), + M + ); + var e = M.util.currentScript(); + function r() { + M.manual || M.highlightAll(); + } + if ( + (e && + ((M.filename = e.src), + e.hasAttribute("data-manual") && (M.manual = !0)), + !M.manual) + ) { + var t = document.readyState; + "loading" === t || ("interactive" === t && e && e.defer) + ? document.addEventListener("DOMContentLoaded", r) + : window.requestAnimationFrame + ? window.requestAnimationFrame(r) + : window.setTimeout(r, 16); + } + return M; + })(_self); +"undefined" != typeof module && module.exports && (module.exports = Prism), + "undefined" != typeof global && (global.Prism = Prism); +(Prism.languages.markup = { + comment: //, + prolog: /<\?[\s\S]+?\?>/, + doctype: { + pattern: + /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i, + greedy: !0, + inside: { + "internal-subset": { + pattern: /(\[)[\s\S]+(?=\]>$)/, + lookbehind: !0, + greedy: !0, + inside: null, + }, + string: { pattern: /"[^"]*"|'[^']*'/, greedy: !0 }, + punctuation: /^$|[[\]]/, + "doctype-tag": /^DOCTYPE/, + name: /[^\s<>'"]+/, + }, + }, + cdata: //i, + tag: { + pattern: + /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, + greedy: !0, + inside: { + tag: { + pattern: /^<\/?[^\s>\/]+/, + inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ }, + }, + "attr-value": { + pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, + inside: { + punctuation: [{ pattern: /^=/, alias: "attr-equals" }, /"|'/], + }, + }, + punctuation: /\/?>/, + "attr-name": { + pattern: /[^\s>\/]+/, + inside: { namespace: /^[^\s>\/:]+:/ }, + }, + }, + }, + entity: [ + { pattern: /&[\da-z]{1,8};/i, alias: "named-entity" }, + /&#x?[\da-f]{1,8};/i, + ], +}), + (Prism.languages.markup.tag.inside["attr-value"].inside.entity = + Prism.languages.markup.entity), + (Prism.languages.markup.doctype.inside["internal-subset"].inside = + Prism.languages.markup), + Prism.hooks.add("wrap", function (a) { + "entity" === a.type && + (a.attributes.title = a.content.replace(/&/, "&")); + }), + Object.defineProperty(Prism.languages.markup.tag, "addInlined", { + value: function (a, e) { + var s = {}; + (s["language-" + e] = { + pattern: /(^$)/i, + lookbehind: !0, + inside: Prism.languages[e], + }), + (s.cdata = /^$/i); + var n = { + "included-cdata": { pattern: //i, inside: s }, + }; + n["language-" + e] = { pattern: /[\s\S]+/, inside: Prism.languages[e] }; + var t = {}; + (t[a] = { + pattern: RegExp( + "(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace( + /__/g, + function () { + return a; + } + ), + "i" + ), + lookbehind: !0, + greedy: !0, + inside: n, + }), + Prism.languages.insertBefore("markup", "cdata", t); + }, + }), + (Prism.languages.html = Prism.languages.markup), + (Prism.languages.mathml = Prism.languages.markup), + (Prism.languages.svg = Prism.languages.markup), + (Prism.languages.xml = Prism.languages.extend("markup", {})), + (Prism.languages.ssml = Prism.languages.xml), + (Prism.languages.atom = Prism.languages.xml), + (Prism.languages.rss = Prism.languages.xml); +Prism.languages.clike = { + comment: [ + { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0, greedy: !0 }, + { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 }, + ], + string: { + pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: !0, + }, + "class-name": { + pattern: + /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i, + lookbehind: !0, + inside: { punctuation: /[.\\]/ }, + }, + keyword: + /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + boolean: /\b(?:true|false)\b/, + function: /\w+(?=\()/, + number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, + operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, + punctuation: /[{}[\];(),.:]/, +}; +!(function (e) { + var t = + "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b", + n = { + pattern: /(^(["']?)\w+\2)[ \t]+\S.*/, + lookbehind: !0, + alias: "punctuation", + inside: null, + }, + a = { + bash: n, + environment: { pattern: RegExp("\\$" + t), alias: "constant" }, + variable: [ + { + pattern: /\$?\(\([\s\S]+?\)\)/, + greedy: !0, + inside: { + variable: [ + { pattern: /(^\$\(\([\s\S]+)\)\)/, lookbehind: !0 }, + /^\$\(\(/, + ], + number: + /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/, + operator: + /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, + punctuation: /\(\(?|\)\)?|,|;/, + }, + }, + { + pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/, + greedy: !0, + inside: { variable: /^\$\(|^`|\)$|`$/ }, + }, + { + pattern: /\$\{[^}]+\}/, + greedy: !0, + inside: { + operator: /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/, + punctuation: /[\[\]]/, + environment: { + pattern: RegExp("(\\{)" + t), + lookbehind: !0, + alias: "constant", + }, + }, + }, + /\$(?:\w+|[#?*!@$])/, + ], + entity: + /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/, + }; + (e.languages.bash = { + shebang: { pattern: /^#!\s*\/.*/, alias: "important" }, + comment: { pattern: /(^|[^"{\\$])#.*/, lookbehind: !0 }, + "function-name": [ + { + pattern: /(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/, + lookbehind: !0, + alias: "function", + }, + { pattern: /\b\w+(?=\s*\(\s*\)\s*\{)/, alias: "function" }, + ], + "for-or-select": { + pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/, + alias: "variable", + lookbehind: !0, + }, + "assign-left": { + pattern: /(^|[\s;|&]|[<>]\()\w+(?=\+?=)/, + inside: { + environment: { + pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + t), + lookbehind: !0, + alias: "constant", + }, + }, + alias: "variable", + lookbehind: !0, + }, + string: [ + { + pattern: /((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/, + lookbehind: !0, + greedy: !0, + inside: a, + }, + { + pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/, + lookbehind: !0, + greedy: !0, + inside: { bash: n }, + }, + { + pattern: + /(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/, + lookbehind: !0, + greedy: !0, + inside: a, + }, + ], + environment: { pattern: RegExp("\\$?" + t), alias: "constant" }, + variable: a.variable, + function: { + pattern: + /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + keyword: { + pattern: + /(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + builtin: { + pattern: + /(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/, + lookbehind: !0, + alias: "class-name", + }, + boolean: { + pattern: /(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/, + lookbehind: !0, + }, + "file-descriptor": { pattern: /\B&\d\b/, alias: "important" }, + operator: { + pattern: + /\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/, + inside: { "file-descriptor": { pattern: /^\d/, alias: "important" } }, + }, + punctuation: /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/, + number: { pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/, lookbehind: !0 }, + }), + (n.inside = e.languages.bash); + for ( + var s = [ + "comment", + "function-name", + "for-or-select", + "assign-left", + "string", + "environment", + "function", + "keyword", + "builtin", + "boolean", + "file-descriptor", + "operator", + "punctuation", + "number", + ], + i = a.variable[1].inside, + o = 0; + o < s.length; + o++ + ) + i[s[o]] = e.languages.bash[s[o]]; + e.languages.shell = e.languages.bash; +})(Prism); +(Prism.languages.c = Prism.languages.extend("clike", { + comment: { + pattern: + /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/, + greedy: !0, + }, + "class-name": { + pattern: + /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/, + lookbehind: !0, + }, + keyword: + /\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, + function: /[a-z_]\w*(?=\s*\()/i, + number: + /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i, + operator: />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/, +})), + Prism.languages.insertBefore("c", "string", { + macro: { + pattern: + /(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im, + lookbehind: !0, + greedy: !0, + alias: "property", + inside: { + string: [ + { pattern: /^(#\s*include\s*)<[^>]+>/, lookbehind: !0 }, + Prism.languages.c.string, + ], + comment: Prism.languages.c.comment, + "macro-name": [ + { pattern: /(^#\s*define\s+)\w+\b(?!\()/i, lookbehind: !0 }, + { + pattern: /(^#\s*define\s+)\w+\b(?=\()/i, + lookbehind: !0, + alias: "function", + }, + ], + directive: { + pattern: /^(#\s*)[a-z]+/, + lookbehind: !0, + alias: "keyword", + }, + "directive-hash": /^#/, + punctuation: /##|\\(?=[\r\n])/, + expression: { pattern: /\S[\s\S]*/, inside: Prism.languages.c }, + }, + }, + constant: + /\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/, + }), + delete Prism.languages.c.boolean; +!(function (e) { + var t = + /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/; + (e.languages.cpp = e.languages.extend("c", { + "class-name": [ + { + pattern: RegExp( + "(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace( + //g, + function () { + return t.source; + } + ) + ), + lookbehind: !0, + }, + /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/, + /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i, + /\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/, + ], + keyword: t, + number: { + pattern: + /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i, + greedy: !0, + }, + operator: + />>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/, + boolean: /\b(?:true|false)\b/, + })), + e.languages.insertBefore("cpp", "string", { + "raw-string": { + pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, + alias: "string", + greedy: !0, + }, + }), + e.languages.insertBefore("cpp", "class-name", { + "base-clause": { + pattern: + /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/, + lookbehind: !0, + greedy: !0, + inside: e.languages.extend("cpp", {}), + }, + }), + e.languages.insertBefore( + "inside", + "operator", + { "class-name": /\b[a-z_]\w*\b(?!\s*::)/i }, + e.languages.cpp["base-clause"] + ); +})(Prism); +(Prism.languages.python = { + comment: { pattern: /(^|[^\\])#.*/, lookbehind: !0 }, + "string-interpolation": { + pattern: + /(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, + greedy: !0, + inside: { + interpolation: { + pattern: + /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/, + lookbehind: !0, + inside: { + "format-spec": { pattern: /(:)[^:(){}]+(?=}$)/, lookbehind: !0 }, + "conversion-option": { + pattern: /![sra](?=[:}]$)/, + alias: "punctuation", + }, + rest: null, + }, + }, + string: /[\s\S]+/, + }, + }, + "triple-quoted-string": { + pattern: /(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i, + greedy: !0, + alias: "string", + }, + string: { + pattern: /(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, + greedy: !0, + }, + function: { + pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, + lookbehind: !0, + }, + "class-name": { pattern: /(\bclass\s+)\w+/i, lookbehind: !0 }, + decorator: { + pattern: /(^\s*)@\w+(?:\.\w+)*/im, + lookbehind: !0, + alias: ["annotation", "punctuation"], + inside: { punctuation: /\./ }, + }, + keyword: + /\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/, + builtin: + /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, + boolean: /\b(?:True|False|None)\b/, + number: + /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i, + operator: /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, + punctuation: /[{}[\];(),.:]/, +}), + (Prism.languages.python[ + "string-interpolation" + ].inside.interpolation.inside.rest = Prism.languages.python), + (Prism.languages.py = Prism.languages.python); +!(function () { + if ( + "undefined" != typeof self && + self.Prism && + self.document && + document.querySelector + ) { + var t, + o = "line-numbers", + s = "linkable-line-numbers", + a = function () { + if (void 0 === t) { + var e = document.createElement("div"); + (e.style.fontSize = "13px"), + (e.style.lineHeight = "1.5"), + (e.style.padding = "0"), + (e.style.border = "0"), + (e.innerHTML = " 
                                                                                                                                     "), + document.body.appendChild(e), + (t = 38 === e.offsetHeight), + document.body.removeChild(e); + } + return t; + }, + l = !0, + u = 0; + Prism.hooks.add("before-sanity-check", function (e) { + var t = e.element.parentElement; + if (c(t)) { + var n = 0; + v(".line-highlight", t).forEach(function (e) { + (n += e.textContent.length), e.parentNode.removeChild(e); + }), + n && + /^( \n)+$/.test(e.code.slice(-n)) && + (e.code = e.code.slice(0, -n)); + } + }), + Prism.hooks.add("complete", function e(t) { + var n = t.element.parentElement; + if (c(n)) { + clearTimeout(u); + var i = Prism.plugins.lineNumbers, + r = t.plugins && t.plugins.lineNumbers; + if (b(n, o) && i && !r) Prism.hooks.add("line-numbers", e); + else d(n)(), (u = setTimeout(f, 1)); + } + }), + window.addEventListener("hashchange", f), + window.addEventListener("resize", function () { + v("pre") + .filter(c) + .map(function (e) { + return d(e); + }) + .forEach(y); + }); + } + function v(e, t) { + return Array.prototype.slice.call((t || document).querySelectorAll(e)); + } + function b(e, t) { + return e.classList.contains(t); + } + function y(e) { + e(); + } + function c(e) { + return ( + !(!e || !/pre/i.test(e.nodeName)) && + (!!e.hasAttribute("data-line") || !(!e.id || !Prism.util.isActive(e, s))) + ); + } + function d(u, e, c) { + var t = (e = "string" == typeof e ? e : u.getAttribute("data-line") || "") + .replace(/\s+/g, "") + .split(",") + .filter(Boolean), + d = +u.getAttribute("data-line-offset") || 0, + f = (a() ? parseInt : parseFloat)(getComputedStyle(u).lineHeight), + p = Prism.util.isActive(u, o), + n = u.querySelector("code"), + h = p ? u : n || u, + m = [], + g = + n && h != n + ? (function (e, t) { + var n = getComputedStyle(e), + i = getComputedStyle(t); + function r(e) { + return +e.substr(0, e.length - 2); + } + return ( + t.offsetTop + + r(i.borderTopWidth) + + r(i.paddingTop) - + r(n.paddingTop) + ); + })(u, n) + : 0; + t.forEach(function (e) { + var t = e.split("-"), + n = +t[0], + i = +t[1] || n, + r = + u.querySelector('.line-highlight[data-range="' + e + '"]') || + document.createElement("div"); + if ( + (m.push(function () { + r.setAttribute("aria-hidden", "true"), + r.setAttribute("data-range", e), + (r.className = (c || "") + " line-highlight"); + }), + p && Prism.plugins.lineNumbers) + ) { + var o = Prism.plugins.lineNumbers.getLine(u, n), + s = Prism.plugins.lineNumbers.getLine(u, i); + if (o) { + var a = o.offsetTop + g + "px"; + m.push(function () { + r.style.top = a; + }); + } + if (s) { + var l = s.offsetTop - o.offsetTop + s.offsetHeight + "px"; + m.push(function () { + r.style.height = l; + }); + } + } else + m.push(function () { + r.setAttribute("data-start", String(n)), + n < i && r.setAttribute("data-end", String(i)), + (r.style.top = (n - d - 1) * f + g + "px"), + (r.textContent = new Array(i - n + 2).join(" \n")); + }); + m.push(function () { + h.appendChild(r); + }); + }); + var i = u.id; + if (p && Prism.util.isActive(u, s) && i) { + b(u, s) || + m.push(function () { + u.classList.add(s); + }); + var r = parseInt(u.getAttribute("data-start") || "1"); + v(".line-numbers-rows > span", u).forEach(function (e, t) { + var n = t + r; + e.onclick = function () { + var e = i + "." + n; + (l = !1), + (location.hash = e), + setTimeout(function () { + l = !0; + }, 1); + }; + }); + } + return function () { + m.forEach(y); + }; + } + function f() { + var e = location.hash.slice(1); + v(".temporary.line-highlight").forEach(function (e) { + e.parentNode.removeChild(e); + }); + var t = (e.match(/\.([\d,-]+)$/) || [, ""])[1]; + if (t && !document.getElementById(e)) { + var n = e.slice(0, e.lastIndexOf(".")), + i = document.getElementById(n); + if (i) + i.hasAttribute("data-line") || i.setAttribute("data-line", ""), + d(i, t, "temporary ")(), + l && + document + .querySelector(".temporary.line-highlight") + .scrollIntoView(); + } + } +})(); +!(function () { + if ("undefined" != typeof self && self.Prism && self.document) { + var o = "line-numbers", + a = /\n(?!$)/g, + e = (Prism.plugins.lineNumbers = { + getLine: function (e, n) { + if ("PRE" === e.tagName && e.classList.contains(o)) { + var t = e.querySelector(".line-numbers-rows"); + if (t) { + var i = parseInt(e.getAttribute("data-start"), 10) || 1, + r = i + (t.children.length - 1); + n < i && (n = i), r < n && (n = r); + var s = n - i; + return t.children[s]; + } + } + }, + resize: function (e) { + u([e]); + }, + assumeViewportIndependence: !0, + }), + t = function (e) { + return e + ? window.getComputedStyle + ? getComputedStyle(e) + : e.currentStyle || null + : null; + }, + n = void 0; + window.addEventListener("resize", function () { + (e.assumeViewportIndependence && n === window.innerWidth) || + ((n = window.innerWidth), + u(Array.prototype.slice.call(document.querySelectorAll("pre." + o)))); + }), + Prism.hooks.add("complete", function (e) { + if (e.code) { + var n = e.element, + t = n.parentNode; + if ( + t && + /pre/i.test(t.nodeName) && + !n.querySelector(".line-numbers-rows") && + Prism.util.isActive(n, o) + ) { + n.classList.remove(o), t.classList.add(o); + var i, + r = e.code.match(a), + s = r ? r.length + 1 : 1, + l = new Array(s + 1).join(""); + (i = document.createElement("span")).setAttribute( + "aria-hidden", + "true" + ), + (i.className = "line-numbers-rows"), + (i.innerHTML = l), + t.hasAttribute("data-start") && + (t.style.counterReset = + "linenumber " + + (parseInt(t.getAttribute("data-start"), 10) - 1)), + e.element.appendChild(i), + u([t]), + Prism.hooks.run("line-numbers", e); + } + } + }), + Prism.hooks.add("line-numbers", function (e) { + (e.plugins = e.plugins || {}), (e.plugins.lineNumbers = !0); + }); + } + function u(e) { + if ( + 0 != + (e = e.filter(function (e) { + var n = t(e)["white-space"]; + return "pre-wrap" === n || "pre-line" === n; + })).length + ) { + var n = e + .map(function (e) { + var n = e.querySelector("code"), + t = e.querySelector(".line-numbers-rows"); + if (n && t) { + var i = e.querySelector(".line-numbers-sizer"), + r = n.textContent.split(a); + i || + (((i = document.createElement("span")).className = + "line-numbers-sizer"), + n.appendChild(i)), + (i.innerHTML = "0"), + (i.style.display = "block"); + var s = i.getBoundingClientRect().height; + return ( + (i.innerHTML = ""), + { + element: e, + lines: r, + lineHeights: [], + oneLinerHeight: s, + sizer: i, + } + ); + } + }) + .filter(Boolean); + n.forEach(function (e) { + var i = e.sizer, + n = e.lines, + r = e.lineHeights, + s = e.oneLinerHeight; + (r[n.length - 1] = void 0), + n.forEach(function (e, n) { + if (e && 1 < e.length) { + var t = i.appendChild(document.createElement("span")); + (t.style.display = "block"), (t.textContent = e); + } else r[n] = s; + }); + }), + n.forEach(function (e) { + for ( + var n = e.sizer, t = e.lineHeights, i = 0, r = 0; + r < t.length; + r++ + ) + void 0 === t[r] && + (t[r] = n.children[i++].getBoundingClientRect().height); + }), + n.forEach(function (e) { + var n = e.sizer, + t = e.element.querySelector(".line-numbers-rows"); + (n.style.display = "none"), + (n.innerHTML = ""), + e.lineHeights.forEach(function (e, n) { + t.children[n].style.height = e + "px"; + }); + }); + } + } +})(); diff --git a/docs/python/fetch_tutorial/tutorial.css b/docs/python/fetch_tutorial/tutorial.css index ec0e14e66..891192d2a 100644 --- a/docs/python/fetch_tutorial/tutorial.css +++ b/docs/python/fetch_tutorial/tutorial.css @@ -2,149 +2,150 @@ .rst-content .toctree-wrapper ul, .wy-plain-list-disc, article ul { - padding-inline-start: 20px; - margin-bottom: revert; + padding-inline-start: 20px; + margin-bottom: revert; } .section { - padding-top: revert; + padding-top: revert; } .section ol { - padding-inline-start: 20px; + padding-inline-start: 20px; } .video-background { - min-width: 100%; - min-height: 100%; - overflow: hidden; + min-width: 100%; + min-height: 100%; + overflow: hidden; } .tutorial-video { - - max-width: 100%; - max-height: 65vh; /* 65% of viewport height */ - overflow: hidden; + max-width: 100%; + max-height: 65vh; /* 65% of viewport height */ + overflow: hidden; } .half-width-image { - width: 100%; + width: 100%; } p.navigation-numbers { - font-size: 20px; - font-family: 'Open Sans','Helvetica Neue',Arial,sans-serif; + font-size: 20px; + font-family: "Open Sans", "Helvetica Neue", Arial, sans-serif; } .nav-button { - min-width: 100px; - font-size: 15px; + min-width: 100px; + font-size: 15px; } a.help-button { - text-transform: none; - margin-top: -2px; - padding: 0px 0px; + text-transform: none; + margin-top: -2px; + padding: 0px 0px; } ul.help-button { - margin-top: -5px; + margin-top: -5px; } - -td, th { +td, +th { border: 1px solid #ddd; padding: 8px; } -tr:nth-child(even){background-color: #f2f2f2;} - +tr:nth-child(even) { + background-color: #f2f2f2; +} th { padding-top: 12px; padding-bottom: 12px; text-align: left; - background-color: #4CAF50; + background-color: #4caf50; color: white; } .section img { - max-width: 100%; - width: revert; + max-width: 100%; + width: revert; } .nomarker { - list-style: none; + list-style: none; } -.rst-content .section ul li.nomarker, .rst-content .toctree-wrapper ul li.nomarker, .wy-plain-list-disc li.nomarker, article ul li.nomarker { - list-style: none; +.rst-content .section ul li.nomarker, +.rst-content .toctree-wrapper ul li.nomarker, +.wy-plain-list-disc li.nomarker, +article ul li.nomarker { + list-style: none; } - - .indent { - padding-left: 30px + padding-left: 30px; } -@media (min-width:60rem) { - h3 { - color: revert; - font-size: 1.75rem; - font-weight: 300; - margin-bottom: .3em - } +@media (min-width: 60rem) { + h3 { + color: revert; + font-size: 1.75rem; + font-weight: 300; + margin-bottom: 0.3em; + } } -@media (min-width:75rem) { - h3 { - font-size: 1.875rem - } +@media (min-width: 75rem) { + h3 { + font-size: 1.875rem; + } } label { - display: revert + display: revert; } pre[class*="language-"].line-numbers.line-numbers code.wrap { - white-space: pre-wrap + white-space: pre-wrap; } code.wrap { - white-space: pre-wrap + white-space: pre-wrap; } aside { - background-color: #CEECFF; - border-style: solid; - border-width: 1px; + background-color: #ceecff; + border-style: solid; + border-width: 1px; } aside > p { - margin: .5rem; + margin: 0.5rem; } - -*, ::after, ::before { - box-sizing: border-box; +*, +::after, +::before { + box-sizing: border-box; } - .collapse { - display: block; - max-height: 0px; - overflow: hidden; - transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); +.collapse { + display: block; + max-height: 0px; + overflow: hidden; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); } - .collapse.show { - max-height: 99em; - transition: max-height 0.5s ease-in-out; +.collapse.show { + max-height: 99em; + transition: max-height 0.5s ease-in-out; } h1 { - text-transform: revert; - font-size: 2.5rem; + text-transform: revert; + font-size: 2.5rem; } .noscale { - width: revert; + width: revert; } - diff --git a/docs/python/fetch_tutorial/video_play_at_scroll.js b/docs/python/fetch_tutorial/video_play_at_scroll.js index 7e6a1411d..2f50ed658 100644 --- a/docs/python/fetch_tutorial/video_play_at_scroll.js +++ b/docs/python/fetch_tutorial/video_play_at_scroll.js @@ -1,55 +1,53 @@ -var videos = document.getElementsByTagName("video") +var videos = document.getElementsByTagName("video"); videoPlayAtFraction = 0.2; function checkScroll() { + for (var i = 0; i < videos.length; i++) { + var video = videos[i]; - for(var i = 0; i < videos.length; i++) { + var frac_used = videoPlayAtFraction; - var video = videos[i]; - - var frac_used = videoPlayAtFraction - - if (video.className == "video-background") { - frac_used = 0.1; - } - - if (fractionScrolledIntoView(video) > frac_used) { - if (video.paused) { - video.currentTime = 0 - } - video.play(); - } else { - video.pause(); - } + if (video.className == "video-background") { + frac_used = 0.1; } -} -function fractionScrolledIntoView(el) { - var elemTop = el.getBoundingClientRect().top; - var elemBottom = el.getBoundingClientRect().bottom; - var elemHeight = elemBottom - elemTop - - if (elemTop > 0) { - topFrac = 1 + if (fractionScrolledIntoView(video) > frac_used) { + if (video.paused) { + video.currentTime = 0; + } + video.play(); } else { - topFrac = (elemTop + elemHeight) / elemHeight + video.pause(); } + } +} - // Off the bottom of the screen - bottomFrac = 1 + (window.innerHeight - elemBottom) / elemHeight - bottomFrac = Math.max(0, bottomFrac) - bottomFrac = Math.min(1, bottomFrac) +function fractionScrolledIntoView(el) { + var elemTop = el.getBoundingClientRect().top; + var elemBottom = el.getBoundingClientRect().bottom; + var elemHeight = elemBottom - elemTop; + + if (elemTop > 0) { + topFrac = 1; + } else { + topFrac = (elemTop + elemHeight) / elemHeight; + } + // Off the bottom of the screen + bottomFrac = 1 + (window.innerHeight - elemBottom) / elemHeight; + bottomFrac = Math.max(0, bottomFrac); + bottomFrac = Math.min(1, bottomFrac); - fraction = Math.min(topFrac, bottomFrac) - return fraction + fraction = Math.min(topFrac, bottomFrac); + return fraction; } -window.addEventListener('scroll', checkScroll, false); -window.addEventListener('resize', checkScroll, false); +window.addEventListener("scroll", checkScroll, false); +window.addEventListener("resize", checkScroll, false); // Set the name of the hidden property and the change event for visibility var hidden, visibilityChange; -if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support +if (typeof document.hidden !== "undefined") { + // Opera 12.10 and Firefox 18 and later support hidden = "hidden"; visibilityChange = "visibilitychange"; } else if (typeof document.msHidden !== "undefined") { @@ -62,50 +60,58 @@ if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and // If the page is hidden (ie a tab change), pause all videos to save CPU function handleVisibilityChange() { - for(var i = 0; i < videos.length; i++) { - var video = videos[i]; + for (var i = 0; i < videos.length; i++) { + var video = videos[i]; - if (document[hidden]) { - video.pause() - } else { - video.play() - } + if (document[hidden]) { + video.pause(); + } else { + video.play(); } + } } // Warn if the browser doesn't support addEventListener or the Page Visibility API -if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") { - console.log("Auto play/pause requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API."); +if ( + typeof document.addEventListener === "undefined" || + typeof document[hidden] === "undefined" +) { + console.log( + "Auto play/pause requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API." + ); } else { - // Handle page visibility change - document.addEventListener(visibilityChange, handleVisibilityChange, false); + // Handle page visibility change + document.addEventListener(visibilityChange, handleVisibilityChange, false); } // map our commands to the classList methods const fnmap = { - 'toggle': 'toggle', - 'show': 'add', - 'hide': 'remove' + toggle: "toggle", + show: "add", + hide: "remove", }; const collapse = (selector, cmd) => { const targets = Array.from(document.querySelectorAll(selector)); - targets.forEach(target => { - target.classList[fnmap[cmd]]('show'); + targets.forEach((target) => { + target.classList[fnmap[cmd]]("show"); }); -} - +}; window.onload = loadTriggers; -triggers = [] +triggers = []; function loadTriggers() { - triggers = Array.from(document.querySelectorAll('[data-toggle="collapse"]')); + triggers = Array.from(document.querySelectorAll('[data-toggle="collapse"]')); } // Listen for click events, but only on our triggers -window.addEventListener('click', (ev) => { +window.addEventListener( + "click", + (ev) => { // Grab all the trigger elements on the page - const elm = ev.target; - if (triggers.includes(elm)) { - const selector = elm.getAttribute('data-target'); - collapse(selector, 'toggle'); - } -}, false); + const elm = ev.target; + if (triggers.includes(elm)) { + const selector = elm.getAttribute("data-target"); + collapse(selector, "toggle"); + } + }, + false +); diff --git a/docs/python/quickstart.md b/docs/python/quickstart.md index a7e893dbb..90ee2438f 100644 --- a/docs/python/quickstart.md +++ b/docs/python/quickstart.md @@ -8,28 +8,29 @@ Development Kit License (20191101-BDSDK-SL). # QuickStart -This guide will help you set up your programming environment to successfully command and control Boston Dynamics' `Spot` robot using the `Spot Python SDK`. The guide defaults to a Linux setup. +This guide will help you set up your programming environment to successfully command and control Boston Dynamics' `Spot` robot using the `Spot Python SDK`. The guide defaults to a Linux setup. **Windows users:** Please find notes like this to help you where Windows may differ from Linux. - * [System Setup](#system-setup) - * [System Requirements](#system-requirements) - * [Python Requirements](#python-requirements) - * [Pip Installation](#pip-installation) - * [Manage Multiple Python Environments with virtualenv](#manage-multiple-python-environments-with-virtualenv) - * [Install Spot Python Packages](#install-spot-python-packages) - * [Verify your Spot packages installation](#verify-your-spot-packages-installation) - * [Verify you can command and query Spot](#verify-you-can-command-and-query-spot) - * [Get a Spot Robot](#get-a-spot-robot) - * [Get a user account on the robot](#get-a-user-account-on-the-robot) - * [Ping Spot](#ping-spot) - * [Request Spot robot's ID](#request-spot-robot-s-id) - * [Get a copy of the full SDK distribution from github](#get-a-copy-of-the-full-sdk-distribution-from-github) - * [Run Hello Spot - let's see the robot move!](#run-hello-spot-let-s-see-the-robot-move) - * [Run an Independent E-Stop](#run-an-independent-e-stop) - * [Run Hello Spot (Take 2)](#run-hello-spot-take-2) - * [Next Steps](#next-steps) + +- [System Setup](#system-setup) + - [System Requirements](#system-requirements) + - [Python Requirements](#python-requirements) + - [Pip Installation](#pip-installation) + - [Manage Multiple Python Environments with virtualenv](#manage-multiple-python-environments-with-virtualenv) +- [Install Spot Python Packages](#install-spot-python-packages) + - [Verify your Spot packages installation](#verify-your-spot-packages-installation) +- [Verify you can command and query Spot](#verify-you-can-command-and-query-spot) + - [Get a Spot Robot](#get-a-spot-robot) + - [Get a user account on the robot](#get-a-user-account-on-the-robot) + - [Ping Spot](#ping-spot) + - [Request Spot robot's ID](#request-spot-robot-s-id) +- [Get a copy of the full SDK distribution from github](#get-a-copy-of-the-full-sdk-distribution-from-github) +- [Run Hello Spot - let's see the robot move!](#run-hello-spot-let-s-see-the-robot-move) + - [Run an Independent E-Stop](#run-an-independent-e-stop) + - [Run Hello Spot (Take 2)](#run-hello-spot-take-2) +- [Next Steps](#next-steps) ## System setup @@ -37,21 +38,23 @@ This guide will help you set up your programming environment to successfully com ### System requirements The Boston Dynamics Spot Python SDK works with most operating systems including: -* Linux Ubuntu 18.04 LTS -* Windows 10 -* MacOS 10.14 (Mojave) + +- Linux Ubuntu 22.04 LTS +- Windows 10 +- MacOS 10.14 (Mojave) Windows WSL use is discouraged due to so many examples having graphics. ### Python requirements -Spot Python SDK works with Python 3.6, Python 3.7 and 3.8. +Spot Python SDK works with Python 3.6-3.10. Downloads and instructions for installing Python can be found at https://www.python.org/. -**We use "python" in this guide but**...if you have multiple versions of Python installed then running `python` might reference an incorrect version (e.g. version 2.7). For example, to run python 3 on Ubuntu 18.04 you would run `python3` and on Windows you could use the [Python launcher](https://docs.python.org/3/using/windows.html#launcher) and run `py -3`. Our documentation uses `python` assuming that the command launches a compatible version of Python. `Virtualenv` (described below), is an excellent way to resolve these issues. +**We use "python" in this guide but**...if you have multiple versions of Python installed then running `python` might reference an incorrect version (e.g. version 2.7). For example, to run python 3 on Ubuntu 18.04 you would run `python3` and on Windows you could use the [Python launcher](https://docs.python.org/3/using/windows.html#launcher) and run `py -3`. Our documentation uses `python` assuming that the command launches a compatible version of Python. `Virtualenv` (described below), is an excellent way to resolve these issues. + +Verify your python install is the correct version. Open a command prompt or start your python IDE: -Verify your python install is the correct version. Open a command prompt or start your python IDE: ``` $ python --version Python 3.6.8 @@ -59,11 +62,13 @@ Python 3.6.8 **Windows users:** There are two common methods for starting the Python interpreter on the command line. First, launch a terminal: Start > Command Prompt. At the command prompt, enter either: + ```shell > python.exe ``` or + ```shell > py.exe ``` @@ -71,7 +76,7 @@ or The former will directly call the `python.exe` that is the highest priority in the PATH environment variable. (Note you could also supply a full pathname `c:\path\to\install\python.exe` to directly call the executable). The latter uses the Python launcher, which by default starts the most recent version of Python -installed. You can also optionally pass arguments to the launcher to control what version of +installed. You can also optionally pass arguments to the launcher to control what version of python to launch: `py.exe -2` (launches Python 2) @@ -82,7 +87,6 @@ python to launch: ### Pip Installation - Pip is the package installer for Python. The Spot SDK and the third-party packages used by many of its programming examples use pip to install. Check if pip is installed by requesting its version: @@ -100,10 +104,9 @@ pip 19.2.1 from If pip is not found, you'll need to install it. There are a few options: - * pip comes preinstalled with all Python 3 versions >= 3.4 downloaded from python.org - * Use the [`get-pip.py` installation script.](https://pip.pypa.io/en/stable/installing/) - * Use an OS-specific package manager (such as the python3-pip package on Ubuntu) - +- pip comes preinstalled with all Python 3 versions >= 3.4 downloaded from python.org +- Use the [`get-pip.py` installation script.](https://pip.pypa.io/en/stable/installing/) +- Use an OS-specific package manager (such as the python3-pip package on Ubuntu) **Permission Denied:** If you do not use virtualenv (described below), when you install packages using pip, you may receive Permission Denied errors, if so, add the `--user` option to your pip command. @@ -111,13 +114,12 @@ If pip is not found, you'll need to install it. There are a few options: **This section is optional, but recommended.** -Users with multiple python versions, anaconda, etc., are responsible for maintaining separation between those installs. Common failures include using the wrong version of python, installing python packages to the wrong python, or using pip associated with the wrong python. One way to improve the stability of your Spot code and your pre-existing python code is to keep them separate using virtual environments. Here are some tips to working with [virtualenv](https://pypi.org/project/virtualenv). - +Users with multiple python versions, anaconda, etc., are responsible for maintaining separation between those installs. Common failures include using the wrong version of python, installing python packages to the wrong python, or using pip associated with the wrong python. One way to improve the stability of your Spot code and your pre-existing python code is to keep them separate using virtual environments. Here are some tips to working with [virtualenv](https://pypi.org/project/virtualenv). -* Install virtualenv. -* Create a virtualenv, being careful to point at the proper python executable. -* Activate the virtualenv. -* Install packages as needed, including Spot SDK. +- Install virtualenv. +- Create a virtualenv, being careful to point at the proper python executable. +- Activate the virtualenv. +- Install packages as needed, including Spot SDK. ``` $ python3 -m pip install virtualenv @@ -164,10 +166,10 @@ $ python3 -m pip install --upgrade bosdyn-client bosdyn-mission bosdyn-choreogra Installing the `bosdyn-client`, `bosdyn-choreography-client` and `bosdyn-mission` packages will also install `bosdyn-api` and `bosdyn-core` packages with the same version. The command above installs the latest version of the packages. To install a different version of the packages from PyPI, for -example 4.0.3, use the following command. +example 4.1.0, use the following command. ```shell -$ python3 -m pip install bosdyn-client==4.0.3 bosdyn-mission==4.0.3 bosdyn-choreography-client==4.0.3 bosdyn-orbit==4.0.3 +$ python3 -m pip install bosdyn-client==4.1.0 bosdyn-mission==4.1.0 bosdyn-choreography-client==4.1.0 bosdyn-orbit==4.1.0 ``` **Version incompatibility:** @@ -176,7 +178,7 @@ If you see a version incompatibility error during pip install such as: ```shell ERROR: bosdyn-core has requirement bosdyn-api==, but you -have bosdyn-api 4.0.3 which is incompatible. +have bosdyn-api 4.1.0 which is incompatible. ``` Try uninstalling the bosdyn packages (Note: unlike install, you will need to explicitly list all packages) and then reinstalling: @@ -187,19 +189,22 @@ $ python3 -m pip install bosdyn-client bosdyn-mission ``` ### Verify your Spot packages installation + Make sure that the packages have been installed. ```shell $ python3 -m pip list --format=columns | grep bosdyn -bosdyn-api 4.0.3 -bosdyn-choreography-client 4.0.3 -bosdyn-choreography-protos 4.0.3 -bosdyn-client 4.0.3 -bosdyn-core 4.0.3 -bosdyn-mission 4.0.3 -bosdyn-orbit 4.0.3 +bosdyn-api 4.1.0 +bosdyn-choreography-client 4.1.0 +bosdyn-choreography-protos 4.1.0 +bosdyn-client 4.1.0 +bosdyn-core 4.1.0 +bosdyn-mission 4.1.0 +bosdyn-orbit 4.1.0 ``` + **Windows users:** + ```shell > python3 -m pip list --format=columns | findstr bosdyn ``` @@ -229,6 +234,7 @@ PACKAGE CONTENTS __main__ ... ``` + If the packages are **not** installed correctly, you may see an error like this one: ```python @@ -240,14 +246,14 @@ ModuleNotFoundError: No module named 'bosdyn.client' If that's the case, run `python -m pip list` again to make sure that the Boston Dynamics Python packages are installed. -If you can't import bosdyn.client without an error, you may have multiple instances of Python on your computer and have installed bosdyn to one while running the other. Check the pathnames of your python executables. Are they where you'd expect them to be? If not, this is a potential sign that you may have multiple python installs. Consider using virtual environments (see above). +If you can't import bosdyn.client without an error, you may have multiple instances of Python on your computer and have installed bosdyn to one while running the other. Check the pathnames of your python executables. Are they where you'd expect them to be? If not, this is a potential sign that you may have multiple python installs. Consider using virtual environments (see above). ## Verify you can command and query Spot To verify your packages work correctly with Spot, you need: -* A Spot robot on the same version as your packages, -* A user account on the robot +- A Spot robot on the same version as your packages, +- A user account on the robot ### Get a Spot robot @@ -255,17 +261,16 @@ Contact sales@bostondynamics.com to get a Spot robot. ### Get a user account on the robot -If you just unboxed your Spot robot, you will find a sticker inside the battery cavity with wifi, admin, and username "user" credentials. Please note however that Boston Dynamics recommends that you first have your designated robot administrator log onto the robot with admin credentials and change passwords to increase security. +If you just unboxed your Spot robot, you will find a sticker inside the battery cavity with wifi, admin, and username "user" credentials. Please note however that Boston Dynamics recommends that you first have your designated robot administrator log onto the robot with admin credentials and change passwords to increase security. NOTE: The following examples will assume username "user" and password "password." ### Ping Spot -1. Power on Spot by holding the power button down until the fans start. Wait for the fans to turn off (and maybe 10-20 seconds after that) +1. Power on Spot by holding the power button down until the fans start. Wait for the fans to turn off (and maybe 10-20 seconds after that) 2. Connect to Spot via wifi. 3. Ping spot at 192.168.80.3 - ```shell $ ping 192.168.80.3 ``` @@ -281,7 +286,7 @@ Software: 2.3.4 (b11205d698e 2020-12-11 11:53:12) Installed: 2020-12-11 15:06:57 ``` -If this worked for you, SUCCESS! You are now successfully communicating with Spot via Python! Note that the output returned shows your Spot robot's unique serial number, its nickname and robot type (Boston Dynamics has multiple robots), the software version, and install date. +If this worked for you, SUCCESS! You are now successfully communicating with Spot via Python! Note that the output returned shows your Spot robot's unique serial number, its nickname and robot type (Boston Dynamics has multiple robots), the software version, and install date. If you see one of the following: @@ -289,27 +294,28 @@ If you see one of the following: $ python3 -m bosdyn.client 192.168.80.3 id Could not contact robot with hostname "192.168.80.3" ``` + ```shell $ python3 -m bosdyn.client 192.168.80.3 id RetryableUnavailableError: _InactiveRpcError: gRPC service unavailable. Likely transient and can be resolved by retrying the request. ``` -The robot is not powered on or is unreachable. Go back and try to get your ping to work. You can also try the `-v` or `--verbose` to get more information to debug the issue. +The robot is not powered on or is unreachable. Go back and try to get your ping to work. You can also try the `-v` or `--verbose` to get more information to debug the issue. ### Get a copy of the full SDK distribution from github -While simply installing the Boston Dynamics Python packages is sufficient to deploy solutions, developers need to download the full Spot SDK distribution to actually develop solutions. The distribution contains programming examples, protobuf definitions and API documentation. +While simply installing the Boston Dynamics Python packages is sufficient to deploy solutions, developers need to download the full Spot SDK distribution to actually develop solutions. The distribution contains programming examples, protobuf definitions and API documentation. The Spot Python SDK distribution is available at https://github.com/boston-dynamics/spot-sdk. Users can either: - * `git clone https://github.com/boston-dynamics/spot-sdk.git` (recommended) - * Download a zipfile distribution: - * Select green box "Clone or download" from the webpage. - * Select "Download ZIP". - * Unzip the file to your home directory. - * Rename the top-level directory `spot-sdk-master` to `spot-sdk`. (only for consistency with this document, nor required) +- `git clone https://github.com/boston-dynamics/spot-sdk.git` (recommended) +- Download a zipfile distribution: + - Select green box "Clone or download" from the webpage. + - Select "Download ZIP". + - Unzip the file to your home directory. + - Rename the top-level directory `spot-sdk-master` to `spot-sdk`. (only for consistency with this document, nor required) ### Run Hello Spot - let's see the robot move! @@ -322,8 +328,8 @@ Change your working directory to the hello_spot example in the distribution. Do ```shell $ cd ~/spot-sdk/python/examples/hello_spot # or wherever you installed Spot SDK $ python3 -m pip install -r requirements.txt # will install dependent packages -$ export BOSDYN_CLIENT_USERNAME=user -$ export BOSDYN_CLIENT_PASSWORD=password +$ export BOSDYN_CLIENT_USERNAME=user +$ export BOSDYN_CLIENT_PASSWORD=password $ python3 hello_spot.py 192.168.80.3 ``` @@ -335,6 +341,7 @@ the E-Stop SDK example, to configure E-Stop. ``` If you see the following error: + ```shell $ python3 hello_spot.py 192.168.80.3 2021-04-03 15:10:28,189 - ERROR - Hello, Spot! threw an exception: InvalidLoginError() @@ -353,16 +360,15 @@ $ python3 estop_nogui.py 192.168.80.3 ``` Now try to run the estop_gui version: + ```shell $ python3 estop_gui.py 192.168.80.3 ``` - You should now have a big red STOP button displayed on your screen. You're now ready to go! (or stop in an emergency!!) #### Run Hello Spot (take 2) - OK, now we have an E-Stop. Leave it running, and open a second python window, and again run hello_spot: ```shell @@ -370,21 +376,21 @@ $ cd ~/spot-sdk/python/examples/hello_spot # or wherever you installed Spot SDK $ python3 hello_spot.py 192.168.80.3 ``` +Your Spot robot should have powered up its motors, stood up, made a few poses, taken a picture, and sat down. If it didn't, be sure to check that the **Motor power enable** button on the back of Spot was properly turned on. -Your Spot robot should have powered up its motors, stood up, made a few poses, taken a picture, and sat down. If it didn't, be sure to check that the **Motor power enable** button on the back of Spot was properly turned on. - -Try it again, and this time, push the E-Stop button and watch the robot do a "glide-stop." Remember, E-Stop is your friend. +Try it again, and this time, push the E-Stop button and watch the robot do a "glide-stop." Remember, E-Stop is your friend. **Congratulations, you are now a full-fledged Spot Programming Example Operator!** -But, if you also want to be a full-fledged Spot Programmer, you need to understand more about how Spot works. Here are the next steps we recommend: +But, if you also want to be a full-fledged Spot Programmer, you need to understand more about how Spot works. Here are the next steps we recommend: ## Next Steps -1. Read our next section, [Spot Programming](./understanding_spot_programming.md) Highly recommended! +1. Read our next section, [Spot Programming](./understanding_spot_programming.md) Highly recommended! 2. Take time to explore the [programming examples](../../python/examples/README) which all launch in essentially the same manner as hello_spot. - * Try making simple modifications to the code. NOTE: If you installed the SDK using a zipfile, be careful to understand what changes you've made, as users sometimes inject errors into the SDK code unintentionally. Git users can simply use `git diff` to understand all changes they have made. - * Try out the [wasd programming example](../../python/examples/wasd/README). This is a more detailed example built on top of the Python API which lets you interactively control Spot using the keyboard on your development machine. It covers issuing commands in far more detail than this quick start. And it is fun! + + - Try making simple modifications to the code. NOTE: If you installed the SDK using a zipfile, be careful to understand what changes you've made, as users sometimes inject errors into the SDK code unintentionally. Git users can simply use `git diff` to understand all changes they have made. + - Try out the [wasd programming example](../../python/examples/wasd/README). This is a more detailed example built on top of the Python API which lets you interactively control Spot using the keyboard on your development machine. It covers issuing commands in far more detail than this quick start. And it is fun! 3. Read through the [protocol buffer definitions](../protos/README) and the Spot Python SDK [source code documentation](../../python/README) to understand even more. diff --git a/docs/python/understanding_spot_programming.md b/docs/python/understanding_spot_programming.md index 0ceeb3139..18948d462 100644 --- a/docs/python/understanding_spot_programming.md +++ b/docs/python/understanding_spot_programming.md @@ -11,29 +11,31 @@ Development Kit License (20191101-BDSDK-SL). This guide will help you understand the programming principles that drive Spot and the Spot Python SDK. - * [Fundamental Robot Services](#fundamental-robot-services) - * [Understanding the "id" command](#understanding-the-id-command) - * [Listing Services](#listing-services) - * [Understanding How to Setup and Command Spot to Move](#how-to-setup-and-command-spot-to-move) - * [Create the SDK object](#create-the-sdk-object) - * [Create a Robot object](#create-a-robot-object) - * [Retrieve the Robot ID](#retrieve-the-robot-id) - * [Blocking vs. Asynchronous Spot Python SDK functions](#blocking-vs-asynchronous-spot-python-sdk-functions) - * [Inspecting robot state](#inspecting-robot-state) - * [Services and Authentication](#services-and-authentication) - * [Retrieving Robot State](#retrieving-robot-state) - * [Robot State was a Message, Messages are defined by Protobufs](#robot-state-was-a-message-messages-are-defined-by-protobufs) - * [Capture and View Camera images](#capture-and-view-camera-images) - * [Configuring "Motor Power Authority" (software E-Stop)](#configuring-motor-power-authority-software-e-stop) - * [Create and register an E-Stop Endpoint](#create-and-register-an-e-stop-endpoint) - * [Clear the E-Stop](#clear-the-e-stop) - * [Taking ownership of Spot (Leases)](#taking-ownership-of-spot-leases) - * [Powering on the robot](#powering-on-the-robot) - * [Establishing timesync](#establishing-timesync) - * [Commanding the robot](#commanding-the-robot) - * [Powering off the robot](#powering-off-the-robot) + +- [Fundamental Robot Services](#fundamental-robot-services) + - [Understanding the "id" command](#understanding-the-id-command) + - [Listing Services](#listing-services) +- [Understanding How to Setup and Command Spot to Move](#how-to-setup-and-command-spot-to-move) +_ [Create the SDK object](#create-the-sdk-object) +_ [Create a Robot object](#create-a-robot-object) +_ [Retrieve the Robot ID](#retrieve-the-robot-id) +_ [Blocking vs. Asynchronous Spot Python SDK functions](#blocking-vs-asynchronous-spot-python-sdk-functions) +_ [Inspecting robot state](#inspecting-robot-state) +_ [Services and Authentication](#services-and-authentication) +_ [Retrieving Robot State](#retrieving-robot-state) +_ [Robot State was a Message, Messages are defined by Protobufs](#robot-state-was-a-message-messages-are-defined-by-protobufs) +_ [Capture and View Camera images](#capture-and-view-camera-images) +_ [Configuring "Motor Power Authority" (software E-Stop)](#configuring-motor-power-authority-software-e-stop) +_ [Create and register an E-Stop Endpoint](#create-and-register-an-e-stop-endpoint) +_ [Clear the E-Stop](#clear-the-e-stop) +_ [Taking ownership of Spot (Leases)](#taking-ownership-of-spot-leases) +_ [Powering on the robot](#powering-on-the-robot) +_ [Establishing timesync](#establishing-timesync) +_ [Commanding the robot](#commanding-the-robot) \* [Powering off the robot](#powering-off-the-robot) + ## Fundamental Robot Services + ### Understanding the "id" command The "id" command is one of the simplest Spot commands, so it's useful to understand how it works, since every command to Spot performs many of the same basic functions. @@ -47,13 +49,14 @@ $ python -m bosdyn.client --verbose 192.168.80.3 id 2020-03-26 17:30:27,615 - DEBUG - Created channel to 192.168.80.3 at port 443 with authority id.spot.robot ... ``` -The first output line creates a Spot SDK object. All Spot API programs start this way. + +The first output line creates a Spot SDK object. All Spot API programs start this way. Note that the output text itself demonstrates Spot's use of Python's [logging facility](https://docs.python.org/3/library/logging.html), we recommend you perform your logging with the same. The third line creates a `client` of Spot's `robot-id` service. The Spot API exposes on-robot capabilities via a set of network-accessible services - similar to a [microservice](https://en.wikipedia.org/wiki/Microservices) architecture. -The final line of output above shows the command initiating a gRPC channel to Spot. All communication to the robot is over a secure HTTPS connection. Spot API uses [gRPC](https://grpc.io) as its underlying RPC (Remote Procedure Call) transport. gRPC is a high-performance networking connection for services which supports a wide variety of programming environments. gRPC uses [Protocol Buffers](https://developers.google.com/protocol-buffers/) as the messaging format, which has a compact over-the-wire representation and supports backwards and forwards compatibility. +The final line of output above shows the command initiating a gRPC channel to Spot. All communication to the robot is over a secure HTTPS connection. Spot API uses [gRPC](https://grpc.io) as its underlying RPC (Remote Procedure Call) transport. gRPC is a high-performance networking connection for services which supports a wide variety of programming environments. gRPC uses [Protocol Buffers](https://developers.google.com/protocol-buffers/) as the messaging format, which has a compact over-the-wire representation and supports backwards and forwards compatibility. ``` 2020-03-26 17:30:27,616 - DEBUG - blocking request: b'/bosdyn.api.RobotIdService/GetRobotId' @@ -119,7 +122,7 @@ robot_id { ### Listing services -The following command lists all of the services available on the robot. Note the `robot-id` service is listed, which we just used in the previous section. Services are what you communicate with on Spot, use them to issue commands, retrieve information, etc. +The following command lists all of the services available on the robot. Note the `robot-id` service is listed, which we just used in the previous section. Services are what you communicate with on Spot, use them to issue commands, retrieve information, etc. ``` $ python -m bosdyn.client --user user --password password 192.168.80.3 dir list @@ -155,12 +158,12 @@ Type "help", "copyright", "credits" or "license" for more information. All Boston Dynamics API programs start by creating an SDK object with a client name argument. The client name is used to help with debugging, and does not have any semantic information - so use whatever string is helpful for you. - ```python >>> sdk = bosdyn.client.create_standard_sdk('understanding-spot') ``` ### Create a robot object + To retrieve the robot id like we did in [Spot Python SDK Quickstart](./quickstart.md) we'll first need to create a `robot` object, using its network address as an argument. In this example, we only create one `robot` object, but it is possible to create and control multiple robots in the same program with the Boston Dynamics API. ```python @@ -182,6 +185,7 @@ species: "spot" ``` ### Blocking vs. Asynchronous Spot Python SDK functions + The `get_id()` call above is blocking - it will not complete until after the RPC completes. It is possible to tweak parameters for the call, such as a timeout for how long to wait. The following example sets a too short timeout and fails... ``` @@ -200,7 +204,7 @@ grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with: > ``` -In addition to blocking calls, clients support non-blocking asynchronous calls. This can be useful in high performance applications where a thread of execution can not stall waiting for an RPC to complete. Python's [futures](https://docs.python.org/3/library/concurrent.futures.html#future-objects) architecture is used as the underpinning of asynchronous communication. See the [get_robot_state_async programming example](../../python/examples/get_robot_state_async/README.md) for how to use these functions. +In addition to blocking calls, clients support non-blocking asynchronous calls. This can be useful in high performance applications where a thread of execution can not stall waiting for an RPC to complete. Python's [futures](https://docs.python.org/3/library/concurrent.futures.html#future-objects) architecture is used as the underpinning of asynchronous communication. See the [get_robot_state_async programming example](../../python/examples/get_robot_state_async/README.md) for how to use these functions. Let's make an asynchronous call for the robot id and wait for the result from the returned future object: @@ -217,6 +221,7 @@ species: "spot" The `robot-state` service contains dynamic information about the robot such as location, battery status, etc. #### Services and Authentication + Before robot state can be retrieved, you need to authenticate to the robot. The majority of services require the user to be authenticated - this prevents random network attackers from being able to control the robot or intercept information which might be sensitive. Assuming that the username is `user` and the password is `password`, issue the following command. @@ -228,6 +233,7 @@ Assuming that the username is `user` and the password is `password`, issue the f If you provided the wrong credentials, an exception will be raised. #### Retrieving robot state + Now we can create a `RobotStateClient` for the `robot-state` service, and obtain information about Spot: ```python @@ -242,7 +248,8 @@ power_state { ``` #### Robot State was a message, messages are defined by protobufs -The structure of the robot state message retrieved above is defined by its *protobuf definition*. This is the language the robot speaks. Spot SDK completely exposes the protobuf, so to really understand Spot programming you want to look at and understand the protobufs. Take a look, they are right here in your distribution! [../../protos/bosdyn/api/robot_state.proto](../../protos/bosdyn/api/robot_state.proto) + +The structure of the robot state message retrieved above is defined by its _protobuf definition_. This is the language the robot speaks. Spot SDK completely exposes the protobuf, so to really understand Spot programming you want to look at and understand the protobufs. Take a look, they are right here in your distribution! [../../protos/bosdyn/api/robot_state.proto](../../protos/bosdyn/api/robot_state.proto) ### Spot's Frames @@ -250,7 +257,7 @@ Often, it is useful to know about the position of Spot and how it relates to the ### Capture and View Camera Images -Spot has 5 "fisheye" cameras in addition to 5 depth cameras. Images can be captured from the these image sources. The 'list_image_sources' RPC returns valid camera source names. +Spot has 5 "fisheye" cameras in addition to 5 depth cameras. Images can be captured from the these image sources. The 'list_image_sources' RPC returns valid camera source names. ```python >>> from bosdyn.client.image import ImageClient @@ -260,7 +267,7 @@ Spot has 5 "fisheye" cameras in addition to 5 depth cameras. Images can be capt ['back_depth', 'back_depth_in_visual_frame', 'back_fisheye_image', 'frontleft_depth', 'frontleft_depth_in_visual_frame', 'frontleft_fisheye_image', 'frontright_depth', 'frontright_depth_in_visual_frame', 'frontright_fisheye_image', 'left_depth', 'left_depth_in_visual_frame', 'left_fisheye_image', 'right_depth', 'right_depth_in_visual_frame', 'right_fisheye_image'] ``` -Using the source names listed above, we can capture an image from one or more image sources. These images can be captured in RAW format or JPG format (with specified quality). Multiple images requested in a single RPC will be hardware time-synced with one another. Let's retrieve the left_fisheye_image and display it (unless you are on MacOS or WSL)... +Using the source names listed above, we can capture an image from one or more image sources. These images can be captured in RAW format or JPG format (with specified quality). Multiple images requested in a single RPC will be hardware time-synced with one another. Let's retrieve the left_fisheye_image and display it (unless you are on MacOS or WSL)... ```python >>> image_response = image_client.get_image_from_sources(["left_fisheye_image"])[0] @@ -272,7 +279,7 @@ Using the source names listed above, we can capture an image from one or more im ### Configuring "Motor Power Authority" (software E-Stop) -Before Spot can power on, an independent *Motor Power Authority* must be correctly configured. We use the term "E-Stop" below and in our functions as shorthand for Motor Power Authority. The E-Stop is a key safety feature of Spot which lets operators kill motor power immediately if a situation calls for it. Note that in some circles the term "E-Stop" implies a hardware power short-circuit, hence our semantic dancing, as Spot's Motor Power Authority is a networked software solution, not a hardware solution. +Before Spot can power on, an independent _Motor Power Authority_ must be correctly configured. We use the term "E-Stop" below and in our functions as shorthand for Motor Power Authority. The E-Stop is a key safety feature of Spot which lets operators kill motor power immediately if a situation calls for it. Note that in some circles the term "E-Stop" implies a hardware power short-circuit, hence our semantic dancing, as Spot's Motor Power Authority is a networked software solution, not a hardware solution. Let's take a look at the initial E-Stop state of the robot by creating a client to the E-Stop service and requesting status: @@ -294,7 +301,7 @@ The `stop_level_details: "Not all endpoints are registered"` line indicates that >>> estop_endpoint.force_simple_setup() ``` -E-Stop endpoints are expected to regularly check in to the robot to assure the robot is safely being controlled. If it has been more than `estop_timeout` seconds, the motor power will be cut. Tuning this number is important: too low a number, and the power may cut out due to transient network issues; too large a number and you run the risk of Spot operating without safe supervision. +E-Stop endpoints are expected to regularly check in to the robot to assure the robot is safely being controlled. If it has been more than `estop_timeout` seconds, the motor power will be cut. Tuning this number is important: too low a number, and the power may cut out due to transient network issues; too large a number and you run the risk of Spot operating without safe supervision. The `force_simple_setup` call issues a few API calls to make your E-Stop Endpoint the sole endpoint in a new E-Stop configuration. @@ -359,11 +366,11 @@ See the Concept documents for more details about [Spot's software E-Stop Service ### Taking ownership of Spot (Leases) -There's one more step before powering on Spot's motors, and that's to acquire ownership of the robot. The robot can have multiple clients but only one can control the robot even as other clients may be requesting data or acting as E-Stop endpoints. +There's one more step before powering on Spot's motors, and that's to acquire ownership of the robot. The robot can have multiple clients but only one can control the robot even as other clients may be requesting data or acting as E-Stop endpoints. To gain control of the robot, a client needs to acquire a `Lease`. A valid lease must be presented with every mobility command to the robot. Leases can be returned when the client no longer wants to control the robot. -Like the E-Stop, lease-holders need to periodically check in with Spot to indicate that they are still actively controlling the robot. If it has been too long since a check-in, the robot will commence a Comms Loss Procedure - sitting down if it can, and then powering off. +Like the E-Stop, lease-holders need to periodically check in with Spot to indicate that they are still actively controlling the robot. If it has been too long since a check-in, the robot will commence a Comms Loss Procedure - sitting down if it can, and then powering off. Let's make a `LeaseClient` for the `lease` service and list the current leases: @@ -470,7 +477,7 @@ True ### Establishing timesync -Timesync is required to coordinate clock skew between your device and Spot. From a safety perspective, this allows users to define a period of time for which a command will be valid. The robot class maintains a timesync thread. The `wait_for_sync` call below will start a timesync thread, and block until sync is established. After timesync is established, this thread will make periodic calls to maintain timesync. Each client is issued a clock identifier which is used to validate that the client has performed timesync, for services that require this functionality. The client library is written such that most implementation details of timesync are taken care of in the background. +Timesync is required to coordinate clock skew between your device and Spot. From a safety perspective, this allows users to define a period of time for which a command will be valid. The robot class maintains a timesync thread. The `wait_for_sync` call below will start a timesync thread, and block until sync is established. After timesync is established, this thread will make periodic calls to maintain timesync. Each client is issued a clock identifier which is used to validate that the client has performed timesync, for services that require this functionality. The client library is written such that most implementation details of timesync are taken care of in the background. ```python >>> robot.time_sync.wait_for_sync() @@ -490,7 +497,7 @@ The API provides a helper function to stand Spot. This command wraps several Rob The robot should now be standing. In addition, the stand command can be modified to control the height of the body as well as the orientation of the body with respect to the **footprint frame**. The footprint frame is a gravity aligned frame with its origin located at the geometric center of the feet. The Z axis up, and the X axis is forward. -The commands proto can be quite expressive, and therefore, if going beyond default parameters, non-trivial. To increase simplicity, Spot API provides several helper functions that combine Spot API RPC commands into single line functions. +The commands proto can be quite expressive, and therefore, if going beyond default parameters, non-trivial. To increase simplicity, Spot API provides several helper functions that combine Spot API RPC commands into single line functions. We encourage you to experiment with these various parameters, referencing the [robot_command proto](../../protos/bosdyn/api/robot_command.proto) parent class for general Boston Dynamics robots and the [robot command proto](../../protos/bosdyn/api/spot/robot_command.proto) Spot subclass. @@ -508,7 +515,7 @@ We encourage you to experiment with these various parameters, referencing the [r ### Powering off the robot -Power off the robot using the `power_off` command. Note the preferred method is with `cut_immediately=False` where Spot will come to a stop and sit down gently before powering off. The other power off option cuts motor power immediately, which causes the robot to collapse. +Power off the robot using the `power_off` command. Note the preferred method is with `cut_immediately=False` where Spot will come to a stop and sit down gently before powering off. The other power off option cuts motor power immediately, which causes the robot to collapse. ```python >>> robot.power_off(cut_immediately=False) diff --git a/docs/release_notes.md b/docs/release_notes.md index 1c4e73fcc..ba09d62ae 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -12,6 +12,190 @@ Development Kit License (20191101-BDSDK-SL). # Spot Release Notes +## 4.1.0 + +### Breaking Changes + +- The `BeginCallbackRequest` message will no longer have the `recorded_data` field filled out. Area callback services should continue to use the existing `custom_params` in `BeginCallbackRequest` instead of trying to read the duplicate data from inside `recorded_data`. + +- The asynchronous call, `get_choreography_status_async` in [Choreography Client](../python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.py) will no longer return a Future and a validity time as a tuple directly. Now `get_choreography_status_async` will only return a Future, and calling `result()` on that Future will return a tuple with the GetChoreographyStatus response and the validity time instead of only returning the status response. No changes were made to the non-asynchronous version of the call, `get_choreography_status`. + +- The `flat_ground` field in the [Annotations](../protos/bosdyn/api/graph_nav/map.proto#edge-annotations) message in the [Edge](../protos/bosdyn/api/graph_nav/map.proto#edge) message may no longer be functional. Please use `ground_clutter_mode` instead. + +### New Features + +#### Autowalk / Missions + +- Support for predetermined, human-robot interaction (HRI) behaviors has been added to autowalk. A new field, `hri_behaviors`, has been added to the [GlobalParameters](../protos/bosdyn/api/autowalk/walks.proto#globalparameters) message. Setting `play_alert_behaviors` to `true` will result in Spot tapping its front-left foot twice if anomalies are discovered during an inspection. Setting `play_undock_behaviors` to `true` will result in Spot raising and lowering its legs twice before undocking. + +- Support for multiple docks has been added to autowalk. Two new fields, `disable_recharge` and `disable_end` have been added to the [Dock](../protos/bosdyn/api/autowalk/walks.proto#dock) message. Setting `disable_recharge` to `true` determines whether the robot can use the corresponding dock for recharging or executing a return to dock and try again later failure behavior. Setting `disable_end` to `true` determines whether the robot can end the mission on the corresponding dock. + +- Support for mission text has been added to missions via the [CreateMissionText](../protos/bosdyn/api/mission/nodes.proto#createmissiontext) node type. Mission text is similar to prompts (e.g., the action failed, what would you like to do?), minus the answering functionality. It can be used to communicate the mission status to users, among other things. Clients can retrieve all active mission text through the [GetState](../protos/bosdyn/api/mission/mission_service.proto#getstate) RPC, where active means the mission text node has been ticked and is running. Please see the `active_mission_text` field in the [State](../protos/bosdyn/api/mission/mission.proto#state) message for more information. + +- Support for querying Data Acquisition Store has been added to missions via the [BosdynQueryStoredCaptures](../protos/bosdyn/api/mission/nodes.proto#bosdynquerystoredcaptures) node type. This node type queries Data Acquisition Store and writes the corresponding `QueryStoredCapturesResponse` to the blackboard. If a client needs inspection-dependent behavior (e.g., inspection B is contingent on the outcome of inspection A), this node can be used to help accomplish that (assuming inspection A writes data to the Data Acquisition Store). The aforementioned HRI behaviors rely on this new node type, among other things, under the hood. After an inspection, the Data Acquisition Store is queried to determine if an anomaly was found during that inspection, then the robot behaves accordingly. + +#### Clients + +- Async streaming is now supported in the Python SDK. The [StoreDataStream](../protos/bosdyn/api/data_acquisition_store_service.proto#storedatastream) and [QueryStoredCaptures](../protos/bosdyn/api/data_acquisition_store_service.proto#querystoredcaptures) RPCs are two examples of streaming RPCs that can now be called in an async manner. Please see the corresponding client implementation in the `store_file_async`, `store_data_as_chunks_async`, and `query_stored_captures_async` methods in the [DataAcquisitionClient](../python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py) for examples of usage. + +Please see [common.py](../python/bosdyn-client/src/bosdyn/client/common.py). Tests for async streaming have been added to `test_base_client.py`. + +#### Data Acquisition Store + +- Files in excess of 100 MB can now be stored in a single RPC using the [StoreDataStream](../protos/bosdyn/api/data_acquisition_store_service.proto#StoreDataStream) RPC. This functionality is useful for payloads that produce files in excess of 100 MB (e.g., laser scanners). Please note that the Data Acquisition Store capacity is 50 GB and writing files before existing data is offloaded will result in existing data being overwritten. The new field, `include_large`, in the [QueryParameters](../protos/bosdyn/api/data_acquisition_store.proto#queryparameters) message controls whether captures in excess of 100 MB are included in the [QueryStoredCapturesResponse](../protos/bosdyn/api/data_acquisition_store.proto#querystoredcapturesresponse) message. `DataAcquisitionStoreHelper` and `DataAcquisitionStoreClient` have been updated accordingly. Please see [data_acquisition_plugin_service.py](../python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.py) and [data_acquisition_store.py](../python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py), respectively. + +#### GraphNav + +- Support for uploading and downloading [graphs](../protos/bosdyn/api/graph_nav/map.proto#graph) larger than 4 MB has been added via the [UploadGraphStreaming](../protos/bosdyn/api/graph_nav/graph_nav_service.proto#uploadgraphstreaming) and [DownloadGraphStreaming](../protos/bosdyn/api/graph_nav/graph_nav_service.proto#downloadgraphstreaming) RPCs, respectively. + +- Area Callback implementations are now informed of whether the robot is already inside the callback region at the beginning of the callback, rather than starting from the edge of the region as usual. This can be used by the callback to provide [better behavior for restarting or re-routing](concepts/autonomy/graphnav_area_callbacks.md#handling-re-routing. This can happen in some cases when the robot gets stuck inside the region, and restarts navigation with a new navigation command. + +#### Keepalive Service + +- The Keepalive Service is no longer in beta and is now in use by Spot, the tablet, and Orbit. This service unifies and expands the comms-loss behaviors of Spot. It lets a client specify one or more Policies, each containing one or more actions. Each action will automatically occur if a client does not send a CheckInRequest within a configurable amount of time. Please see [here](concepts/keepalive_service.md) for more information. + +#### Navigation + +- The robot can now detect and classify objects or regions in the world as obstacles or areas to avoid that previously would not have been classified as such. The `hazard_detection_mode` field in the [MobilityParams](../protos/bosdyn/api/robot_command.proto) message controls whether the feature is on, and if it is on, the strictness of navigation around the detected hazards. + +- The robot can now be restricted from ascending or descending stairs by using the new `STAIRS_MODE_PROHIBITED` enumerator in the `StairsMode` enum type in the [MobilityParams](../protos/bosdyn/api/robot_command.proto) message. + +- No-go regions now support circles via the new field, `circle`, in the [NoGoRegionProperties](../protos/bosdyn/api/world_object.proto#nogoregionproperties) message. + +### Bug Fixes and Improvements + +#### Choreography + +- Support for choreography moves that are relative to the move start or dance frame has been added to Choreographer via three new fields, `relative_position`, `relative_yaw`, and `relative` in the [GotoParams](../protos/bosdyn/api/spot/choreography_params.proto#gotoparams) message. The `relative_position` and `relative_yaw` fields control the robot's position and orientation (yaw), respectively. The `relative` field controls whether the motion is relative to the move start (`true`) or dance frame (`false`). Please see [Move Reference](concepts/choreography/move_reference.md) for more information. + +- Support for three new move types that control the robot's status lights, AV lights, and AV buzzer has been added to Choreographer via the [SetAudioVisualColorParams](../protos/bosdyn/api/spot/choreography_params.proto#setaudiovisualcolorparams), [BuzzerNoteParams](../protos/bosdyn/api/spot/choreography_params.proto#buzzernoteparams), and [SetAllColorParams](../protos/bosdyn/api/spot/choreography_params.proto#setallcolorparams) messages, respectively. In [MoveParams](../protos/bosdyn/api/spot/choreography_sequence.proto#moveparams), the `set_audio_visual_color_params`, `buzzer_note_params`, and `set_all_color_params` fields control the robot's AV lights, AV buzzer, and status lights, respectively. Please see the [Move Reference](concepts/choreography/move_reference.md) for more information. + +- Additional options have been added for generating `custom_gait` motion from valid Animations with the `custom_gait_cycle` option. See the [Animation files for Choreographer](concepts/choreography/animation_file_specification.md) documentation for additional details on Animation file options and the [Custom Gait](concepts/choreography/custom_gait.md) documentation for additional details on the `custom_gait` move. These new options, `enable_body_offset`, `enable_body_motion`, and `enable_swings_xy`, add support for using animation input for the body motion of a `custom_gait` move and the x-y motion of the `custom_gait` swing trajectories. See the [AnimatedCycleParams](../protos/bosdyn/api/spot/choreography_params.proto#animatedcycleparams) message for additional information on the `animated_cycle_params` options. + +- The `animate_move_params_file` argument is now required in the `convert_animation_file_to_proto` function if default move parameter values are needed. Please see [animation_file_to_proto.py](../python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.py). + +#### Clients + +- The `ResponseContext` class has been updated such that if the response header does not contain a response timestamp, it sets the response timestamp. + +- A bug in the `oneof_param_to_dict` function in the [service customization helpers](../python/bosdyn-client/src/bosdyn/client/service_customization_helpers.py) has been fixed. The function now returns `Dict` instead of `List`. + +- Support for the `Keepalive Service` has been added to the command-line client. Please see [command_line.py](../python/bosdyn-client/src/bosdyn/client/command_line.py). + +#### Extensions + +- Support for a new field, `extension_name`, has been added for Extensions (via the required `manifest.json` file). This field represents the name of the extension. If no `extension_name` is provided, the extension name defaults to the name of the spx file as before. Please see [here](payload/docker_containers.md#extension-structure) for more information. + +- Support for the `journald` logging driver has been added for Extensions (via the required `docker-compose.yml` file). Usage of the `journald` logging driver enables developers to retrieve logs for containers that are no longer running, even after a power cycle. Please see the [CORE I/O documentation](payload/docker_containers.md#docker-compose-yaml-configuration-file) for more information. If no logging driver is specified in the `docker-compose.yml` file, the Extension uses the `journald` logging driver. + +#### Geometry and Frames + +- A new reference frame, "feet_center", has been added. This frame is gravity-aligned and represents the robot's footprint. The origin is at the geometric center of the robot's feet. The x-axis is aligned such that it points from the center of the rear feet to the center of the front feet in the x-y plane. + +- Support for the `seed` and `waypoint` frames has been added to [frame_helpers.py](../python/bosdyn-client/src/bosdyn/client/frame_helpers.py). The `seed` frame is a global reference frame for a Graph Nav map. Its metric consistency may be improved using the [ProcessAnchoring](../protos/bosdyn/api/graph_nav/map_processing_service.proto) RPC. For example, suppose a Graph Nav map were recorded on a construction site where "survey targets" the robot could recognize (e.g., AprilTags) had been measured with millimeter-level accuracy using a Total Measurement Station. The robot's pose in this `seed` frame is advantageous from a registration perspective for laser scans collected using a laser scanner that may not necessarily be capable of tracking its localization accurately in challenging environments because it can inform the laser scanner of where it actually is with high accuracy. Similarly, the robot's pose relative to the `waypoint` frame may also be important if the robot is expected to perform some action there that requires a high degree of repeatability. The added support for these frames in the frame helpers allows developers to focus on the high-level, value-added tasks. + +#### Graph Nav + +- Clients are now informed by Graph Nav if they send a [SetLocalizationRequest](../protos/bosdyn/api/graph_nav/graph_nav.proto#setlocalizationrequest) message to the robot and no map is loaded. The new status, `STATUS_NO_MAP_LOADED`, is returned in the `status` field in the response ([SetLocalizationResponse](../protos/bosdyn/api/graph_nav/graph_nav.proto#setlocalizationresponse) message type). This status indicates that localization failed because no map is currently loaded. + +- More granular control over whether the robot has reached its goal is now available via the `box_region` field in the [TravelParams](../protos/bosdyn/api/graph_nav/graph_nav.proto#travelparams) message. Clients can now specify a oriented 2D rectangle relative to a waypoint using the [OrientedBox2](../protos/bosdyn/api/geometry.proto#orientedbox2) message. Previously, only a `max_distance` (2D circle with radius `max_distance`) and `max_yaw` were supported. Similarly, while navigating an edge at playback, the max distance from the recorded edge that the robot is allowed to travel when avoiding obstacles or optimizing its path is configurable using the `max_corridor_distance` field in the edge [Annotations](../protos/bosdyn/api/graph_nav/map.proto#edge-annotations) message. + +- The lost detector, which is responsible for determining when the robot is lost, is now configurable. If the robot is regularly getting lost on site in a particular location, where, for example, its surroundings change regularly, this may be of use. The strictness of the lost detector can be configured using the [LostDetectorStrictness](../protos/bosdyn/api/graph_nav/lost_detection.proto#lostdetectorstrictness) enum type. Similarly, if there are particular, problematic regions at a given waypoint, the [RegionWithFrame](../protos/bosdyn/api/graph_nav/map.proto#regionwithframe) message may be used to configure how scan matching or other parameters work. For example, there could be a particular region at a waypoint where the scene changed frequently, thereby causing the robot to get lost. Assuming no risks from a navigation or safety perspective are in the vicinity (e.g., an unprotected fall), the `lost_detector_strictness` field could be set to `LOST_DETECTOR_STRICTNESS_PERMISSIVE`. The dynamic region could be indicated using the `regions` field, setting the `data_filter` field in the [Region](../protos/bosdyn/api/graph_nav/map.proto) message to `DATA_FILTER_IGNORE`. These settings are per [Waypoint](../protos/bosdyn/api/graph_nav/map.proto#waypoint). To debug the lost detector, use the `lost_detector_state` field in the [GetLocalizationStateResponse](../protos/bosdyn/api/graph_nav/graph_nav.proto#getlocalizationstateresponse) message. + +- More granular control of the feature matching behavior of topology processing is now available via the [FeatureMatchingParams](../protos/bosdyn/api/graph_nav/map_processing.proto#featurematchingparams) message. A new field, `feature_matching_params`, has been added to the [Params](../protos/bosdyn/api/graph_nav/map_processing.proto#params) message that controls whether and how sparse feature matching is performed during topology processing. At present, the how is limited to simply enabling/disabling feature matching. Please see [here](concepts/autonomy/graphnav_map_structure.md#topology-processing) for more information. + +- The Python SDK now raises `LicenseError` if the robot's license is not valid when calling `upload_graph()`, `start_recording()`, or `create_waypoint()`. Previously they incorrectly raised `UnsetStatusError`. + +#### Missions + +- Additional mission node data can now be read from the blackboard at playback. The updated node types and data that can be read are: + +| Node Type | Data | +| ----------------------------------------------------------------------------------------- | ----------------------------------------- | +| [ForDuration](../protos/bosdyn/api/mission/nodes.proto#forduration) | Duration (`google.protobuf.Duration`) | +| [BosdynNavigateRoute](../protos/bosdyn/api/mission/nodes.proto#bosdynnavigateroute) | `graph_nav_pb2.NavigateRouteRequest` | +| [BosdynGraphNavLocalize](../protos/bosdyn/api/mission/nodes.proto#bosdyngraphnavlocalize) | `graph_nav_pb2.SetLocalizationRequest` | +| [Prompt](../protos/bosdyn/api/mission/nodes.proto#prompt) | List of options (`nodes_pb2.OptionsList`) | +| [Dock](../protos/bosdyn/api/mission/nodes.proto#dock) | Docking station ID (`uint32`) | + +#### Rajant + +- The default IP address for all Rajant ES1 Radios shipped from Boston Dynamics is 192.168.50.9. + +#### Robot State + +- The behavior state of the robot can now be determined in a simpler fashion via the new `behavior_state` field in the [RobotState](../protos/bosdyn/api/robot_state.proto#robotstate) message. Behavior states currently include standing, stepping, transitioning from sitting to standing and vice versa, unready to move, and unknown. Clients that were previously relying on their own heuristics to determine this type of information may benefit from this new field. + +### Deprecations + +- In the `AreaCallbackData` message, the `custom_params` field is being replaced by the `param_collection` field, which contains the same values, but also the specification used to edit them. For the time being, the `custom_params` field will still be filled out during recording, but any usage of that field should be migrated to prefer the `param_collection` values. + +- In the `PlaybackMode` message, the `skip_docking_after_completion` field is being replaced by the `disable_end` field in the `Dock` message. Setting `skip_docking_after_completion` to `true` is the same as setting `disable_end` to `true` for every `Dock`. + +- Currently the mission service supports blackboard variable keys that contain ".", "[]", and "()". In a future release, this will no longer be supported. Boston Dynamics recommends using letters, numbers, and underscores for blackboard keys. + +### Known Issues + +#### Preexisting, but undiscovered prior to 4.1.0 + +- The [TimeSync client](../python/bosdyn-client/src/bosdyn/client/time_sync.py) may lose time sync with the robot, and eventually the client time may drift far enough away from the robot time that the robot starts rejecting the client's messages. + +#### Preexisting + +- Same as 4.0.2 + +### Spot Sample Code + +#### New + +#### Updated + +- [Area Callback Crosswalk](../python/examples/area_callback/README.md) and [Area Callback Look Both Ways](../python/examples/area_callback/README.md): The `area_callback_crosswalk.py` and `area_callback_look_both_ways.py` examples now utilize the new `starting_inside_region` field mentioned above in the [4.1.0](#410) release notes. Custom parameters have also been added to the latter example to allow the user to configure the yaw. + +- [Build Extension](../python/examples/extensions/README.md): The `build_extension.py` example now checks if docker-compose.yml and manifest.json are malformed. Please note that it does not check whether all required fields are there. + +- [Get Depth Plus Visual Image](../python/examples/get_depth_plus_visual_image/README.md): The `get_depth_plus_visual_image.py` example now supports querying the gripper camera. + +- [GPS](../python/examples/gps_service/README.md): The `gps_listener.py` now self-registers the GPS device as a payload on Spot. Please note that the corresponding docker-compose.yml file needs to be updated. Additionally, some of the command-line parameters in the docker-compose.yml files have been updated. "Support" for two additional receivers has been added, namely the `ByNav C2-M2X` and `u-blox ZED-F9R`. "Support" is written in quotations because strictly speaking, these payloads are neither officially supported nor endorsed by Boston Dynamics. Finally, a workaround for an issue with the [TimeSync client](../python/bosdyn-client/src/bosdyn/client/time_sync.py) where the robot would start rejecting the GPS data has been implemented. When this workaround is enabled (by adding `"--disable-time-sync"` to the `docker-compose.yml` file), the client uses the CORE I/O system time, which is synchronized with the robot time using NTP, thereby negating the need to use the time sync client. Please note that the underlying issue with the time sync client has not yet been resolved and that this issue may apply more generally. + +- [Remote Mission Service Examples](../python/examples/remote_mission_service/README.md): A bug, whereby the user would be unable to select who the robot should say "hello" to on the tablet, has been fixed in the `hello_world_mission_service.py` example. The `remote_mission_client.py` example has been made more autowalk-friendly. Previously, the example and autowalk would fight for control over the robot due to the example powering off the robot. Now, the robot simply performs "the wave" instead. + +- [Replay Mission](../python/examples/replay_mission/README.md): A bug that caused the `replay_mission.py` example to crash has been fixed. + +- [Save File Plugin Service](../python/examples/data_acquisition_service/README.md#save-file-plugin) and [Data Acquisition Plugin - Custom Params](../python/examples/service_customization/custom_parameters_data_acquisition/README.md): These examples now use methods that use the new [StoreDataStream](../protos/bosdyn/api/data_acquisition_store_service.proto#StoreDataStream) RPC under the hood. Please note that these examples will no longer work if the robot software version is before 4.1.0. + +[Data Acquisition Download](../python/examples/data_acquisition_service/README.md): This example now additionally supports the [QueryStoredCaptures](../protos/bosdyn/api/data_acquisition_store_service.proto#querystoredcaptures) RPC. + +- [Simple Alert Server](../python/examples/network_compute_bridge/README.md): The breaking change reported in [4.0.1](#401), but present since [4.0.0](#400) has been fixed for the `simple_alert_server.py` example. The `status` in the `WorkerComputeResponse` is set to `NETWORK_COMPUTE_STATUS_SUCCESS`. + +- [Velodyne Client](../python/examples/velodyne_client/README.md): A deprecation warning associated with NumPy >= 2.0.0 has been fixed. + +- [View GraphNav Map in a Web Browser](../python/examples/graph_nav_view_gps/README.md): The `view_gps.py` example now supports filtering the GPS data by relative time. This can be useful for reducing the rendering workload if the GPS's update rate is really high. + +- [Arm Gcode Example](../python/examples/arm_gcode/README.md): The `arm_gcode.py` example now supports a tool length value configurable by the user to account for the length of chalk held by the gripper. This is found in `gcode.cfg`. Drawing sequences now pause at the start to allow the user to insert chalk into the open gripper and close the gripper on command. Other updates include consistent use of the vision frame for localization, ground plane estimation, and drawing location. Draw on wall stability is improved but this feature remains in beta. + +### Orbit Sample Code + +#### New + +- [Orbit API Documentation](concepts/orbit/orbit_api.md): Though not an example, the Orbit API documentation is significantly improved. High-level concepts are still described on the [About Orbit](concepts/orbit/about_orbit.md) page. + +- [Orbit Client](../python/bosdyn-orbit/src/bosdyn/orbit/client.py): The Orbit Client now supports `PATCH` endpoints on Orbit via the `patch_resource` method. In addition, five new methods: `patch_anomaly_by_id`, `patch_bulk_close_anomalies`, `get_site_walk_archive_by_id`, `post_backup_task`, and `delete_backup` have been added. For examples demonstrating usage of these new methods, please see the [Get Anomalies](../python/examples/orbit/anomalies/README.md) example for the first two methods, the [Export SiteWalk Archive(s)](../python/examples/orbit/export_site_walk_archives/README.md) for the third method, and the [Get Backup](../python/examples/orbit/backups/README.md) example for the last two methods. Please note that the **deprecated** [Scout Client](../python/bosdyn-scout/src/bosdyn/scout/client.py) has **not** been updated. + +- [Get Backup](../python/examples/orbit/backups/README.md): The `get_backup.py` example shows how to retrieve a backup from Orbit. + +- [Get Anomalies](../python/examples/orbit/anomalies/README.md): The `get_anomalies.py` and `patch_anomalies.py` examples show how to retrieve and edit anomaly data using the Orbit Client, respectively. Anomalies are more commonly known as alerts. + +- [Export SiteWalk Archive(s)](../python/examples/orbit/export_site_walk_archives/README.md): The `export_site_walk_archives.py` example shows how to retrieve SiteWalk(s) using the Orbit Client. A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks, among other things. A SiteWalk archive is simply a compressed file containing a Graph Nav map and a .walk file. The .walk file is a serialized protobuf message of type [Walk](../protos/bosdyn/api/autowalk/walks.proto#walk). + +- [Webhook Integration](../python/examples/orbit/webhook_integration/README.md): The `webhook_integration.py` example is a separate example that builds on the existing [Webhook Example](../python/examples/orbit/webhook/README.md), by additionally listening for webhooks, then performing some data maniuplation on said webhooks before sending the result to an external Enterprise Asset Management (EAM) system. The example may be run on Orbit by building an Orbit Extension and deploying it to Orbit. + +#### Updated + +- [Send Robot Back to Dock](../python/examples/orbit/send_robot_back_to_dock/README.md): The `send_robot_back_to_dock.py` example now supports skipping initialization, which can be useful if the robot is already localized to the map. + +- [Orbit Client](../python/bosdyn-orbit/src/bosdyn/orbit/client.py): An issue with the `post_export_as_walk` method has been fixed. The `SiteWalk UUID` is now included in the JSON arguments, not appended to the POST request URL as it was before. The `post_dispatch_mission_to_robot` method now supports the `skip_initialization` argument, which controls whether the robot should skip initialization when starting the return to dock mission. The **deprecated** [Scout Client](../python/bosdyn-scout/src/bosdyn/scout/client.py) has also been updated. + ## 4.0.3 ### Breaking Changes @@ -171,13 +355,13 @@ Network Compute Bridge workers are now required to set the status field. Previou - Support for visualization of route progress with the addition of `CompletedRoute` to the `NavigationFeedbackResponse` message. -- `Prompt` nodes now support custom paramater specification for answers, enabling prompts for any data supported by the Service Customization service. More detailed descriptions of how to specify these parameters can be found in the [service customization documentation](concepts/service_customization.md). +- `Prompt` nodes now support custom parameter specification for answers, enabling prompts for any data supported by the Service Customization service. More detailed descriptions of how to specify these parameters can be found in the [service customization documentation](concepts/service_customization.md). #### Orbit (formerly Scout) -- [**Webhooks**](./concepts/about_orbit.md#webhooks): Webhooks are a new mechanism for clients to subscribe to real-time Orbit events. In order to receive events, Webhook subscribers must register with Orbit via the settings UI or the new `/webhooks` endpoints documented as part of the Orbit API. Corresponding helper functions such as `post_webhook` are available in [bosdyn-orbit](https://pypi.org/project/bosdyn-orbit/)'s client. +- [**Webhooks**](concepts/orbit/about_orbit.md#webhooks): Webhooks are a new mechanism for clients to subscribe to real-time Orbit events. In order to receive events, Webhook subscribers must register with Orbit via the settings UI or the new `/webhooks` endpoints documented as part of the Orbit API. Corresponding helper functions such as `post_webhook` are available in [bosdyn-orbit](https://pypi.org/project/bosdyn-orbit/)'s client. -- [**Scheduler**](./concepts/about_orbit.md#scheduling-missions): Alongside the new Orbit scheduler, one can also schedule missions via the new `/calendar` set of Orbit API endpoints. Corresponsing helper functions such as `post_calendar_event` and `get_calendar` are available in [bosdyn-orbit](https://pypi.org/project/bosdyn-orbit/)'s client. +- [**Scheduler**](concepts/orbit/about_orbit.md#scheduling-missions): Alongside the new Orbit scheduler, one can also schedule missions via the new `/calendar` set of Orbit API endpoints. Corresponding helper functions such as `post_calendar_event` and `get_calendar` are available in [bosdyn-orbit](https://pypi.org/project/bosdyn-orbit/)'s client. #### GPS @@ -195,7 +379,7 @@ This feature allows payloads to display live data on the tablet and Orbit during #### Data Acquisition Store -Two RPCs have been added, namely `QueryStoredCaptures` and `QueryMaxCaptureId`. `QueryStoredCaptures` is used to query the DAQ Store for stored data while `QueryMaxCaptureId` returns only the largest capture ID for the associated query. These RPCs are intended to be used instead of the `/v1/data-buffer/daq-data/` endpoint. +Two RPCs have been added, namely `QueryStoredCaptures` and `QueryMaxCaptureId`. `QueryStoredCaptures` is used to query the Data Acquisition Store Store for stored data while `QueryMaxCaptureId` returns only the largest capture ID for the associated query. These RPCs are intended to be used instead of the `/v1/data-buffer/daq-data/` endpoint. #### Spot Arm @@ -227,7 +411,7 @@ Added `ResetSafetyStop` RPC for Safety-Related Stopping Function (SRSF) compatib #### GraphNav -New [configuration options](concepts/autonomy/graphnav_area_callbacks.md#configuring-behavior-for-a-callback) have been added to Area Callbacks to specify GraphNav's behavior with respect to blockages, impairment, entities, and stopping poses for callback regions. +New [configuration options](concepts/autonomy/graphnav_area_callbacks.md#configuring-behavior-for-a-callback) have been added to Area Callbacks to specify GraphNav's behavior with respect to blockages, impairment, entities, and stopping poses for callback regions. ### Bug Fixes and Improvements @@ -237,7 +421,7 @@ Lease update change: ignore failed old leases in the case the wallet contains th A new `SystemState` message that includes the temperature data for the robot's motors has been added to the `RobotState` message. This new message is expected to expand in the future. The documentation for the `Kinematic State` message in [robot_state.proto](../protos/bosdyn/api/robot_state.proto) has been improved. -The SpotCam [CompositorClient](../python/bosdyn-client/src/bosdyn/client/spot_cam/compositor.py) now sets both the `coords` (deprecated in v3.3) and `meter` fields for backwards compability purposes in the `set_ir_meter_overlay` and `set_ir_meter_overlay_async` methods. +The SpotCam [CompositorClient](../python/bosdyn-client/src/bosdyn/client/spot_cam/compositor.py) now sets both the `coords` (deprecated in v3.3) and `meter` fields for backwards compatibility purposes in the `set_ir_meter_overlay` and `set_ir_meter_overlay_async` methods. In the SpotCam [PtzClient](../python/bosdyn-client/src/bosdyn/client/spot_cam/ptz.py), `focus_mode` overrides `distance` in the `set_ptz_focus_state` and `set_ptz_focus_state_async` methods, so long as it is not set to `None`. @@ -247,9 +431,9 @@ The `get_info` method in the [Mission Client](../python/bosdyn-mission/src/bosdy For non-Core I/O payloads, it is now recommended to [authenticate and register payloads](../python/examples/self_registration/README.md) by generating a payload credentials file with a unique GUID and secret. The `read_or_create_payload_credentials` and `add_payload_credentials_file_argument` [helper functions](../python/bosdyn-client/src/bosdyn/client/util.py) assist with doing this. Core I/O Extensions should continue reading the existing on-disk file, located at `/opt/payload_credentials/payload_guid_and_secret`. -GraphNav will no longer restart an Area Callback in the middle of a region if it re-routes. It will instead call a [new Area Callback RPC](concepts/autonomy/graphnav_area_callbacks.md#handling-re-routing) to inform the callback of the change. +GraphNav will no longer restart an Area Callback in the middle of a region if it re-routes. It will instead call a [new Area Callback RPC](concepts/autonomy/graphnav_area_callbacks.md#handling-re-routing) to inform the callback of the change. -Published robot state messages previously contained kinematic information for a non-existant HR0 joint on Spot's arm, set to all zeros. This has been removed and the published kinematic information now only contains existing joints. The number of published joints will be one less than on releases < 4.0. Customers storing local copies of Spot URDF files may need to reacquire them from the robot after updating to 4.0. +Published robot state messages previously contained kinematic information for a non-existent HR0 joint on Spot's arm, set to all zeros. This has been removed and the published kinematic information now only contains existing joints. The number of published joints will be one less than on releases < 4.0. Customers storing local copies of Spot URDF files may need to reacquire them from the robot after updating to 4.0. ### Deprecations @@ -271,6 +455,8 @@ Published robot state messages previously contained kinematic information for a - The kinematic_state's transforms_snapshot now uses "arm0.link_wr1" instead of "link_wr1" for the name of the frame attached to the SpotArm's wr1 link. This is (1) the name used in the URDF description of the robot and (2) the name used in the image service snapshots. We will continue to publish the kinematic_state's snapshot with the deprecated name in the 4.0 release, but it will be removed in a future release. +- `bosdyn.client` command `become-estop` is deprecated and is now a subcommand under `estop` + #### Orbit (formerly Scout) - The package `bosdyn-scout` is deprecated and replaced with [bosdyn-orbit](https://pypi.org/project/bosdyn-orbit/), due to Scout being renamed to Orbit. As a result, the pre-existing examples in `../python/examples/scout/` are moved to `../python/examples/orbit/`. All examples use `bosdyn-orbit` instead of `bosdyn-scout`. @@ -285,7 +471,7 @@ Published robot state messages previously contained kinematic information for a - There are circular imports between bosdyn/api/gps/registration.proto and bosdyn/api/world_object.proto. This may break proto code generation for some languages (e.g., Go). -#### Preexisting, but undiscovered prior to 4.0 +#### Preexisting, but undiscovered prior to 4.0.0 - The /v1/data-buffer/daq-data/ REST endpoint sometimes fails to return all of the requested data. Two workarounds are to (1) modify the query parameters such that a subset of data is returned or (2) use the new QueryStoredCaptures RPC. @@ -362,7 +548,7 @@ Published robot state messages previously contained kinematic information for a - [Custom Parameter Network Compute Bridge Worker](../python/examples/service_customization/custom_parameter_ncb_worker/README.md): The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included. -- [Detect and Follow](../python/examples/spot_detect_and_follow/README.md): The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included. +- [Detect and Follow](https://github.com/boston-dynamics/spot-sdk/blob/577c45e26241ba1cbbbdf3d85013b2a5b2b52888/python/examples/spot_detect_and_follow/README.md): The base image in Dockerfile.l4t has been updated to account for v4.0 CoreIO running on Jetpack 5. Specific instructions for how to build the corresponding Spot Extension are now included. - [DAQ Plugin Tester](../python/examples/tester_programs/README.md): The plugin now tests for whether the DAQ plugin is publishing live data. @@ -647,7 +833,7 @@ Some malformed Graph Nav graphs were previously accepted, but would leave the se [Arm_constrained_manipulation](../python/examples/arm_constrained_manipulation/README.md): Improved documentation, introduced the position control loop for constrained manipulation and fixed bugs in setting position and velocity variables. -[Arm Impedence_Control](../python/examples/arm_impedance_control/README.md): Added impedance feedback. +[Arm Impedance_Control](../python/examples/arm_impedance_control/README.md): Added impedance feedback. [Estop](../python/examples/estop/README.md): Added feedback in GUI. @@ -664,7 +850,7 @@ Some malformed Graph Nav graphs were previously accepted, but would leave the se - Added get/set ptz focus calls. - Added `exposure_mode` and `exposure_duration` in `StreamQualityCommand`. -[Spot Detect and Follow](../python/examples/spot_detect_and_follow/README.md) +[Spot Detect and Follow](https://github.com/boston-dynamics/spot-sdk/blob/577c45e26241ba1cbbbdf3d85013b2a5b2b52888/python/examples/spot_detect_and_follow/README.md) - Added documentation for running it as a Spot Extension. - Added authentication through payload credentials. @@ -683,7 +869,7 @@ No changes from 3.2.2. Improved CORE I/O documentation on passwords, user specifications in Spot Extensions, and ports for incoming traffic. -Updated [Data Acquisition Tutorial](python/daq_tutorial/daq1.md) documentation on udev rules to refrect changes on the automatic execution of udev rules during a Spot Extension installation. +Updated [Data Acquisition Tutorial](python/daq_tutorial/daq1.md) documentation on udev rules to reflect changes on the automatic execution of udev rules during a Spot Extension installation. ### Known Issues @@ -710,7 +896,7 @@ Fixed issues relating to GraphNav Area Callbacks and loop closures where connect Updated Fetch tutorial with information to run on CORE I/O payload. -Added [Getting Started](concepts/about_orbit.md) section in Scout documentation. +Added [Getting Started](concepts/orbit/about_orbit.md) section in Scout documentation. Removed unused imports in the protobuf files `protos/bosdyn/api/autowalk/walks.proto`, `protos/bosdyn/api/graph_nav/area_callback.proto`, `protos/bosdyn/api/graph_nav/graph_nav.proto`, `protos/bosdyn/api/mission/nodes.proto`. @@ -788,7 +974,7 @@ Added full `ImageRequest` in data_acquisition request and deprecated `image_sour Docking: -- Added UpdateDockingParams in DockingCommandFeedbackRequest to update paramaters relating to the specified command ID. +- Added UpdateDockingParams in DockingCommandFeedbackRequest to update parameters relating to the specified command ID. - Added `STATUS_ERROR_STUCK` in `DockingCommandFeedbackResponse` to flag the robot not making progress towards docking. Added `Matrixf`, `MatrixInt64`, `MatrixInt32` and `Vector` in `geometry.proto`. @@ -821,7 +1007,7 @@ Missions: - Added `Switch` node definition in mission definition to run a specific child based on a specified pivot_value. - Added `respect_child_failure` flag in mission `Repeat` nodes to control whether a repeat node will keep running its child regardless of whether or not the child succeeds or fails. - `BosdynRecordEvent` message: - - Added `succed_early` to control the wait for the `RecordEvents` RPC. + - Added `succeed_early` to control the wait for the `RecordEvents` RPC. - Added `additional_parameters` to support runtime parameters. - `RemoteGrpc` message: - Added `severity` field to determine what sort of alerting a prompt triggers. @@ -953,7 +1139,7 @@ Deprecated Spot CORE Documentation and moved to [Pre-3.2 Spot CORE Documentation [Fiducial Follow](../python/examples/fiducial_follow/README.md): Updated example for better lease usage. -[GraphNava Command-Line](../python/examples/graph_nav_command_line/README.md): Fixed lease usage. +[GraphNav Command-Line](../python/examples/graph_nav_command_line/README.md): Fixed lease usage. [Mission Recorder](../python/examples/mission_recorder/README.md): Added metadata for the recording session. @@ -971,7 +1157,7 @@ Deprecated Spot CORE Documentation and moved to [Pre-3.2 Spot CORE Documentation - Added spotcam ir meter example into command line. - Hardcoded dependency versions that work with Python 3.6. -[Spot Detect and Follow](../python/examples/spot_detect_and_follow/README.md): Added configuration to create a Spot Extension with the example and various improvements. +[Spot Detect and Follow](https://github.com/boston-dynamics/spot-sdk/blob/577c45e26241ba1cbbbdf3d85013b2a5b2b52888/python/examples/spot_detect_and_follow/README.md): Added configuration to create a Spot Extension with the example and various improvements. [Stitch Front Images](../python/examples/stitch_front_images/README.md): Add live viewer to example. @@ -1312,7 +1498,7 @@ The new map processing service provides two ways to process the data in a graph - optimizing “anchorings” of a map, which will generate optimized positions of waypoints in the world for display or navigation. **Navigate to Anchor** -A new NaviagateToAnchor RPC can be used to command GraphNav to drive the robot to a specific place in an anchoring. GraphNav will find the waypoint that has the shortest path length from the robot's current position but is still close to the goal. +A new NavigateToAnchor RPC can be used to command GraphNav to drive the robot to a specific place in an anchoring. GraphNav will find the waypoint that has the shortest path length from the robot's current position but is still close to the goal. See the [Graph Nav](concepts/autonomy/graphnav_map_structure.md) documentation for more information. @@ -1762,7 +1948,7 @@ A new `PREP_POSE_UNDOCK` command option can be used to undock a docked robot. It #### Graph Nav -When localizing the robot using `FIDUICIAL_INIT_SPECIFIC`, if the target waypoint does not contain a good measurement of the desired fiducial, nearby waypoints may be used to infer the robot's location. This behavior can be disabled with the new `restrict_fiducial_detections_to_target_waypoint` field to only use the waypoint’s own data. +When localizing the robot using `FIDUCIAL_INIT_SPECIFIC`, if the target waypoint does not contain a good measurement of the desired fiducial, nearby waypoints may be used to infer the robot's location. This behavior can be disabled with the new `restrict_fiducial_detections_to_target_waypoint` field to only use the waypoint’s own data. A new `destination_waypoint_tform_body_goal` is provided for the `NavigateTo` and `NavigateRoute` RPCs. This allows the user to specify a goal position that is offset from the destination waypoint, rather than exactly on the waypoint. @@ -2228,7 +2414,7 @@ Create a standard Boston Dynamics API `ImageService` that communicates with the [**Service faults (new)**](../python/examples/service_faults/README.md) Demonstrates raising service faults, clearing service faults, and implementation of directory liveness checks. -[**Spot detect and follow (new)**](../python/examples/spot_detect_and_follow/README.md) +[**Spot detect and follow (new)**](https://github.com/boston-dynamics/spot-sdk/blob/577c45e26241ba1cbbbdf3d85013b2a5b2b52888/python/examples/spot_detect_and_follow/README.md) Collects images from the two front Spot cameras and performs object detection on a specified class. [**Stance (new)**](../python/examples/stance/README.md) diff --git a/prebuilt/bosdyn_api-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_api-4.1.0-py3-none-any.whl similarity index 55% rename from prebuilt/bosdyn_api-4.0.3-py3-none-any.whl rename to prebuilt/bosdyn_api-4.1.0-py3-none-any.whl index e6d9db7d2..a1506bc1f 100644 Binary files a/prebuilt/bosdyn_api-4.0.3-py3-none-any.whl and b/prebuilt/bosdyn_api-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_choreography_client-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_choreography_client-4.0.3-py3-none-any.whl deleted file mode 100644 index cbc6eebda..000000000 Binary files a/prebuilt/bosdyn_choreography_client-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_choreography_client-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_choreography_client-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..a42b91835 Binary files /dev/null and b/prebuilt/bosdyn_choreography_client-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_choreography_protos-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_choreography_protos-4.0.3-py3-none-any.whl deleted file mode 100644 index 145335241..000000000 Binary files a/prebuilt/bosdyn_choreography_protos-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_choreography_protos-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_choreography_protos-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..4340fe792 Binary files /dev/null and b/prebuilt/bosdyn_choreography_protos-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_client-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_client-4.0.3-py3-none-any.whl deleted file mode 100644 index 369411835..000000000 Binary files a/prebuilt/bosdyn_client-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_client-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_client-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..e67fe9782 Binary files /dev/null and b/prebuilt/bosdyn_client-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_core-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_core-4.1.0-py3-none-any.whl similarity index 67% rename from prebuilt/bosdyn_core-4.0.3-py3-none-any.whl rename to prebuilt/bosdyn_core-4.1.0-py3-none-any.whl index 1a2b4d403..505eedbac 100644 Binary files a/prebuilt/bosdyn_core-4.0.3-py3-none-any.whl and b/prebuilt/bosdyn_core-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_mission-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_mission-4.0.3-py3-none-any.whl deleted file mode 100644 index 11f50a9fa..000000000 Binary files a/prebuilt/bosdyn_mission-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_mission-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_mission-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..3ab8c06f2 Binary files /dev/null and b/prebuilt/bosdyn_mission-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_orbit-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_orbit-4.0.3-py3-none-any.whl deleted file mode 100644 index 413f06d7c..000000000 Binary files a/prebuilt/bosdyn_orbit-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_orbit-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_orbit-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..9dbf90518 Binary files /dev/null and b/prebuilt/bosdyn_orbit-4.1.0-py3-none-any.whl differ diff --git a/prebuilt/bosdyn_scout-4.0.3-py3-none-any.whl b/prebuilt/bosdyn_scout-4.0.3-py3-none-any.whl deleted file mode 100644 index d0bfaae48..000000000 Binary files a/prebuilt/bosdyn_scout-4.0.3-py3-none-any.whl and /dev/null differ diff --git a/prebuilt/bosdyn_scout-4.1.0-py3-none-any.whl b/prebuilt/bosdyn_scout-4.1.0-py3-none-any.whl new file mode 100644 index 000000000..d0487dc81 Binary files /dev/null and b/prebuilt/bosdyn_scout-4.1.0-py3-none-any.whl differ diff --git a/protos/README.md b/protos/README.md index 07b443bbb..46805075c 100644 --- a/protos/README.md +++ b/protos/README.md @@ -12,8 +12,8 @@ Development Kit License (20191101-BDSDK-SL).

                                                                                                                                    -The bosdyn-api wheel contains the Python implementation for the Protobuf definitions in the Boston -Dynamics Spot API. The message and service types defined in this wheel are used by the clients in -[bosdyn-client](https://pypi.org/project/bosdyn-client/), -[bosdyn-mission](https://pypi.org/project/bosdyn-mission/) and [bosdyn-choreography-client](https://pypi.org/project/bosdyn-choreography-client/) wheels to communicate with the services +The bosdyn-api wheel contains the Python implementation for the Protobuf definitions in the Boston +Dynamics Spot API. The message and service types defined in this wheel are used by the clients in +[bosdyn-client](https://pypi.org/project/bosdyn-client/), +[bosdyn-mission](https://pypi.org/project/bosdyn-mission/) and [bosdyn-choreography-client](https://pypi.org/project/bosdyn-choreography-client/) wheels to communicate with the services running on the Spot robots. diff --git a/protos/bosdyn/api/README.md b/protos/bosdyn/api/README.md index d4b4a83a6..96fa895be 100644 --- a/protos/bosdyn/api/README.md +++ b/protos/bosdyn/api/README.md @@ -12,4 +12,4 @@ These protos are the Boston Dynamics Public API. ## Contents -* [Protos](proto_reference) \ No newline at end of file +- [Protos](proto_reference) diff --git a/protos/bosdyn/api/arm_surface_contact.proto b/protos/bosdyn/api/arm_surface_contact.proto index 45a76ab6d..fdd46f3f4 100644 --- a/protos/bosdyn/api/arm_surface_contact.proto +++ b/protos/bosdyn/api/arm_surface_contact.proto @@ -15,7 +15,6 @@ import "bosdyn/api/trajectory.proto"; import "bosdyn/api/arm_command.proto"; import "google/protobuf/wrappers.proto"; - // ArmSurfaceContact lets you accurately move the robot's arm in the world while having some ability // to perform force control. This mode is useful for drawing, wiping, and other similar behaviors. // @@ -23,8 +22,7 @@ import "google/protobuf/wrappers.proto"; // details. message ArmSurfaceContact { message Request { - - // The root frame is used to set the optional task frame that all trajectories are + // The root frame is used to set the optional task frame that all trajectories are // specified with respect to. If the optional task frame is left un-specified it defaults // to the identity transform and the root frame becomes the task frame. string root_frame_name = 25; @@ -33,15 +31,17 @@ message ArmSurfaceContact { // Defaults to // [0.19557 0 0] // [1 0 0 0] - // a frame with it's origin slightly in front of the gripper's palm plate aligned with wrists orientation. + // a frame with it's origin slightly in front of the gripper's palm plate aligned with + // wrists orientation. SE3Pose wrist_tform_tool = 6; // The fields below are specified in this optional task frame. If unset int defaults - // to the identity transform and all quantities are therefore expressed in the root_frame_name. + // to the identity transform and all quantities are therefore expressed in the + // root_frame_name. SE3Pose root_tform_task = 26; // A 3D pose trajectory for the tool expressed in the task frame, e.g. task_T_tool. - // This pose trajectory is optional if requesting a pure wrench at the end-effector, + // This pose trajectory is optional if requesting a pure wrench at the end-effector, // otherwise required for position or mixed force/position end-effector requests. SE3Trajectory pose_trajectory_in_task = 2; @@ -54,20 +54,21 @@ message ArmSurfaceContact { google.protobuf.DoubleValue max_angular_velocity = 5; // Maximum allowable tracking error of the tool frame from the desired trajectory - // before the arm will stop moving and cancel the rest of the trajectory. When this limit is exceeded, the - // hand will stay at the pose it was at when it exceeded the tracking error, and any other part of the - // trajectory specified in the rest of this message will be ignored. - // max position tracking error in meters + // before the arm will stop moving and cancel the rest of the trajectory. When this limit is + // exceeded, the hand will stay at the pose it was at when it exceeded the tracking error, + // and any other part of the trajectory specified in the rest of this message will be + // ignored. max position tracking error in meters google.protobuf.DoubleValue max_pos_tracking_error = 18; // max orientation tracking error in radians google.protobuf.DoubleValue max_rot_tracking_error = 19; - // Set a "preferred joint configuration" for this trajectory. When near a singularity, the robot will move towards - // the specified pose. If no pose is provided (ie no value is set for this oneof), a default one will be - // chosen. If the user wishes to explicitly tell the robot to not prefer any pose, (useful if doing a - // local move, and the user wants to avoid large joint motions) they should set ignore_joint_configuration - // to be true. The robot's behavior around singularities will then be to simply minimize joint velocity, - // resulting in the robot coming in and out of the singularity with similar joint angles + // Set a "preferred joint configuration" for this trajectory. When near a singularity, the + // robot will move towards the specified pose. If no pose is provided (ie no value is set + // for this oneof), a default one will be chosen. If the user wishes to explicitly tell the + // robot to not prefer any pose, (useful if doing a local move, and the user wants to avoid + // large joint motions) they should set ignore_joint_configuration to be true. The robot's + // behavior around singularities will then be to simply minimize joint velocity, resulting + // in the robot coming in and out of the singularity with similar joint angles oneof joint_configuration { bool force_remain_near_current_joint_configuration = 15; ArmJointPosition preferred_joint_configuration = 16; @@ -75,7 +76,10 @@ message ArmSurfaceContact { // If an axis is set to position mode (default), read desired from SE3Trajectory command. // If mode is set to force, use the "press_force_percentage" field to determine force. - enum AxisMode { AXIS_MODE_POSITION = 0; AXIS_MODE_FORCE = 1; } + enum AxisMode { + AXIS_MODE_POSITION = 0; + AXIS_MODE_FORCE = 1; + } AxisMode x_axis = 8; AxisMode y_axis = 9; AxisMode z_axis = 10; @@ -84,16 +88,15 @@ message ArmSurfaceContact { // be negative. Full range: [-1.0, 1.0] Vec3 press_force_percentage = 12; - // Parameters for controlling admittance. By default, the robot will // stop moving the arm when it encounters resistance. You can control that reaction to // make the robot stiffer or less stiff by changing the parameters. enum AdmittanceSetting { ADMITTANCE_SETTING_UNKNOWN = 0; - ADMITTANCE_SETTING_OFF = 1; // No admittance. - ADMITTANCE_SETTING_NORMAL = 2; // Normal reaction to touching things in the world - ADMITTANCE_SETTING_LOOSE = 3; // Robot will not push very hard against objects - ADMITTANCE_SETTING_STIFF = 4; // Robot will push hard against the world + ADMITTANCE_SETTING_OFF = 1; // No admittance. + ADMITTANCE_SETTING_NORMAL = 2; // Normal reaction to touching things in the world + ADMITTANCE_SETTING_LOOSE = 3; // Robot will not push very hard against objects + ADMITTANCE_SETTING_STIFF = 4; // Robot will push hard against the world ADMITTANCE_SETTING_VERY_STIFF = 5; // Robot will push very hard against the world } @@ -103,16 +106,15 @@ message ArmSurfaceContact { // Cross term, making force in the XY axis cause movement in the z-axis. // By default is OFF - // Setting this value will make the arm move in the negative Z-axis whenever it feels force in - // the XY axis. + // Setting this value will make the arm move in the negative Z-axis whenever it feels force + // in the XY axis. AdmittanceSetting xy_to_z_cross_term_admittance = 17; - // Specifies a force that the body should expect to feel. This allows the robot to "lean into" - // an external force. Be careful using this field, because if you lie to the robot, it can - // fall over. + // Specifies a force that the body should expect to feel. This allows the robot to "lean + // into" an external force. Be careful using this field, because if you lie to the robot, + // it can fall over. Vec3 bias_force_ewrt_body = 20; - // Gripper control ClawGripperCommand.Request gripper_command = 23; @@ -122,6 +124,5 @@ message ArmSurfaceContact { reserved 1, 7; } - message Feedback { - } + message Feedback {} } diff --git a/protos/bosdyn/api/auto_return/auto_return.proto b/protos/bosdyn/api/auto_return/auto_return.proto index 6d4d9c3b8..687695ce4 100644 --- a/protos/bosdyn/api/auto_return/auto_return.proto +++ b/protos/bosdyn/api/auto_return/auto_return.proto @@ -24,7 +24,7 @@ message Params { // Allow AutoReturn to move the robot this far in the XY plane from the location where // AutoReturn started. Travel along the Z axis (which is gravity-aligned) does not count. // Must be > 0. - float max_displacement = 2; // meters + float max_displacement = 2; // meters // Optionally specify the maximum amount of time AutoReturn can take. // If this duration is exceeded, AutoReturn will stop trying to move the robot. @@ -43,7 +43,7 @@ message ConfigureRequest { // Parameters to use when AutoReturn automatically triggers. Params params = 3; - + // Forget any buffered locations the robot may be remembering. Defaults to false. // Set to true if the robot has just crossed an area it should not traverse in AutoReturn. bool clear_buffer = 4; diff --git a/protos/bosdyn/api/auto_return/auto_return_service.proto b/protos/bosdyn/api/auto_return/auto_return_service.proto index 2d71c4a57..fede29095 100644 --- a/protos/bosdyn/api/auto_return/auto_return_service.proto +++ b/protos/bosdyn/api/auto_return/auto_return_service.proto @@ -13,7 +13,6 @@ option java_outer_classname = "AutoReturnServiceProto"; import "bosdyn/api/auto_return/auto_return.proto"; service AutoReturnService { - // Configure the service. rpc Configure(ConfigureRequest) returns (ConfigureResponse); diff --git a/protos/bosdyn/api/autowalk/walks.proto b/protos/bosdyn/api/autowalk/walks.proto index 17920b862..bb71fccef 100644 --- a/protos/bosdyn/api/autowalk/walks.proto +++ b/protos/bosdyn/api/autowalk/walks.proto @@ -48,15 +48,14 @@ message Walk { repeated Element elements = 5; // The docks the mission can dock at. - // AT THE MOMENT AUTOWALK ONLY SUPPORTS A SINGLE DOCK. - // However, this is subject to change. repeated Dock docks = 6; // Unique identifier for this walk. This will be embedded in various Data Acquisition captures // and various logging bundles. This should be globally unique across all walks. string id = 8; - // Choreography related dependencies (any sequences and animations a robot needs to play this walk). + // Choreography related dependencies (any sequences and animations a robot needs to play this + // walk). ChoreographyItems choreography_items = 9; } @@ -91,6 +90,10 @@ message GlobalParameters { // target of each element, however it will not actually perform the associated // action & action wrappers. bool skip_actions = 5; + + // Configurable options for Spot to perform extra behaviors in missions to + // communicate with nearby observers. + HriBehaviors hri_behaviors = 6; } // The dock itself and the target associated with it @@ -125,6 +128,25 @@ message Dock { // This parameter also controls how long robot will wait to retry to undock on // a failed undock. google.protobuf.Duration prompt_duration = 4; + + + // Whether the robot can use this dock for recharging or executing a return to dock and try + // again later failure behavior. + bool disable_recharge = 9; + + // Whether the robot can end a mission on this dock. + bool disable_end = 10; +} + +// Options for Spot to perform additional human-robot interaction behaviors in missions +// to help communicate with observers. +message HriBehaviors { + // If true, Spot will tap its front-left foot twice if anomalies are discovered + // during an inspection. Alerts can be viewed in Orbit. + bool play_alert_behaviors = 1; + + // If true, Spot will lift its legs twice before undocking. + bool play_undock_behaviors = 2; } // Choreography elements required for the mission. @@ -143,8 +165,10 @@ message ChoreographyItems { message PlaybackMode { // The mission should be played back once. message Once { + // Deprecated as of 4.1. To skip docking after completion, set disable_end + // to true for all docks in the walk proto. // Boolean to allow the robot to not dock after completing a mission. - bool skip_docking_after_completion = 1; + bool skip_docking_after_completion = 1 [deprecated = true]; } // The mission should be played back periodically. @@ -314,7 +338,7 @@ message Action { // while last_known_capabilities should be updated as time progresses and services // evolve. // - // This data is meant to allow UI's to give users context about their actions, AND + // This data is meant to allow UIs to give users context about their actions, AND // provide them a canvas to edit region of interests with after the fact. It is // not used at mission playback time. repeated ImageCaptureAndSource record_time_images = 4; @@ -348,13 +372,13 @@ message Action { // if the RemoteGRPC advertises parameters that require a region of interest for a specific // camera. // - // This data is meant to allow UI's to give users context about their actions, AND + // This data is meant to allow UIs to give users context about their actions, AND // provide them a canvas to edit region of interests with after the fact. It is // not used at mission playback time. repeated ImageCaptureAndSource record_time_images = 6; } - message ExecuteChoreography{ + message ExecuteChoreography { // The name of the sequence to play. string sequence_name = 1; } diff --git a/protos/bosdyn/api/basic_command.proto b/protos/bosdyn/api/basic_command.proto index 8c73e78ae..3ac626d36 100644 --- a/protos/bosdyn/api/basic_command.proto +++ b/protos/bosdyn/api/basic_command.proto @@ -155,7 +155,7 @@ message SE2TrajectoryCommand { // The name of the frame that trajectory is relative to. The trajectory // must be expressed in a gravity aligned frame, so either "vision", // "odom", or "body". Any other provided se2_frame_name will be rejected - // and the trajectory command will not be exectuted. + // and the trajectory command will not be executed. string se2_frame_name = 3; // The trajectory that the robot should follow, expressed in the frame @@ -567,7 +567,7 @@ message ConstrainedManipulationCommand { message JointCommand { message Request { - // Empty message, no paramaters required to activate. + // Empty message, no parameters required to activate. } message Feedback { @@ -642,8 +642,8 @@ message JointCommand { // ADVICE_NOT_IN_CONTACT: leg will enter CONTACT_LOST state on receipt. // If a leg is not on the ground (CONTACT_LOST): // ADVICE_NONE: leg will enter CONTACT_MADE if any collision is detected on the foot. - // ADVICE_IN_CONTACT: leg will enter CONTACT_MADE if any collision is deteced on the foot. - // ADVICE_NOT_IN_CONTACT: no change + // ADVICE_IN_CONTACT: leg will enter CONTACT_MADE if any collision is detected on the + // foot. ADVICE_NOT_IN_CONTACT: no change // Contact states may be used by the robot to improve state estimation. enum Advice { // ADVICE_UNKNOWN should not be used. diff --git a/protos/bosdyn/api/data_acquisition.proto b/protos/bosdyn/api/data_acquisition.proto index 317e9d5e4..0ebfa9b1e 100644 --- a/protos/bosdyn/api/data_acquisition.proto +++ b/protos/bosdyn/api/data_acquisition.proto @@ -332,7 +332,7 @@ message AcquirePluginDataRequest { // storing the data in the DataBuffer. repeated DataIdentifier data_id = 2; - // Metadata specified by the requestor. + // Metadata specified by the requester. Metadata metadata = 3; // Id to be associated with all the data buffered for this request. It will be stored diff --git a/protos/bosdyn/api/data_acquisition_store.proto b/protos/bosdyn/api/data_acquisition_store.proto index 82afcb828..286c6029b 100644 --- a/protos/bosdyn/api/data_acquisition_store.proto +++ b/protos/bosdyn/api/data_acquisition_store.proto @@ -10,6 +10,7 @@ package bosdyn.api; option java_outer_classname = "DataAcquisitionStoreProto"; +import "bosdyn/api/data_chunk.proto"; import "google/protobuf/timestamp.proto"; import "bosdyn/api/header.proto"; import "bosdyn/api/image.proto"; @@ -78,6 +79,19 @@ message QueryParameters { bool include_data = 7; bool include_metadata = 8; bool include_alerts = 9; + + // Setting this value will return results that are classified as large data. If this value is + // not set these captures will not be returned even when none of the other captures types are + // set. + bool include_large = 11; + + // Boolean that specifies how to order the query results based on capture id field, ascending + // (default) or descending. + // Ascending: Captures with lowest id are first, meaning oldest stored captures are ordered + // first. + // Descending: Captures with highest id are first, meaning newest stored captures are + // ordered first. + bool order_descending = 10; } @@ -156,6 +170,27 @@ message StoreDataResponse { uint64 id = 2; } +message StoreStreamRequest { + // Common request header. + RequestHeader header = 1; + + // Data identifier of the data. + DataIdentifier data_id = 2; + + // File extension to use when writing the data to file. + string file_extension = 4; + + // The piece of the data to store. + DataChunk chunk = 3; +} + +message StoreStreamResponse { + // Common response header. + ResponseHeader header = 1; + + uint64 id = 2; +} + message ListCaptureActionsRequest { // Common request header. RequestHeader header = 1; @@ -250,6 +285,17 @@ message StoredCapturedData { string file_extension = 2; } +message StoredLargeCapturedData { + // Data related to capture. + DataChunk chunk = 1; + + // Start index of resulting bytes. + uint64 offset = 2; + + // File extension to use for writing the data to a file. + string file_extension = 3; + +} message QueryStoredCaptureResult { DataIdentifier data_id = 1; @@ -258,6 +304,7 @@ message QueryStoredCaptureResult { AssociatedMetadata metadata = 4; AssociatedAlertData alert_data = 5; StoredCapturedData data = 6; + StoredLargeCapturedData large_data = 7; } } diff --git a/protos/bosdyn/api/data_acquisition_store_service.proto b/protos/bosdyn/api/data_acquisition_store_service.proto index 720f5bd88..734facbb2 100644 --- a/protos/bosdyn/api/data_acquisition_store_service.proto +++ b/protos/bosdyn/api/data_acquisition_store_service.proto @@ -27,6 +27,9 @@ service DataAcquisitionStoreService { rpc ListStoredData(ListStoredDataRequest) returns (ListStoredDataResponse); // Store arbitrary data associated with a DataIdentifier. rpc StoreData(StoreDataRequest) returns (StoreDataResponse); + // Store arbitrary data associated with a DataIdentifier through a stream. Supports files > 100 + // MB and below the Data Acquisition Store capacity. + rpc StoreDataStream(stream StoreStreamRequest) returns (StoreStreamResponse); // Type-safe to images: list data identifiers (which identify specific images // from an action) for stored images that satisfy the diff --git a/protos/bosdyn/api/directory.proto b/protos/bosdyn/api/directory.proto index 5736c69f8..f627c7629 100644 --- a/protos/bosdyn/api/directory.proto +++ b/protos/bosdyn/api/directory.proto @@ -109,7 +109,7 @@ message ListServiceEntriesRequest { } // The ListServiceEntries response message returns all known services at the time the request -// was recieved. +// was received. message ListServiceEntriesResponse { // Common response header. ResponseHeader header = 1; diff --git a/protos/bosdyn/api/directory_registration.proto b/protos/bosdyn/api/directory_registration.proto index a6d5a120c..82a5e68f3 100644 --- a/protos/bosdyn/api/directory_registration.proto +++ b/protos/bosdyn/api/directory_registration.proto @@ -13,8 +13,8 @@ option java_outer_classname = "DirectoryRegistrationProto"; import "bosdyn/api/directory.proto"; import "bosdyn/api/header.proto"; -// The RegisterService request message sends the service's entry and endpoint to the robot's directory. -// This Request serves as a heartbeat to the Directory. +// The RegisterService request message sends the service's entry and endpoint to the robot's +// directory. This Request serves as a heartbeat to the Directory. message RegisterServiceRequest { // Common request header. RequestHeader header = 1; @@ -26,13 +26,15 @@ message RegisterServiceRequest { ServiceEntry service_entry = 3; } -// The RegisterService response message has information of whether the service was registered correctly. +// The RegisterService response message has information of whether the service was registered +// correctly. message RegisterServiceResponse { // Common response Header. ResponseHeader header = 1; enum Status { - // UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set. + // UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened + // if UNKNOWN is set. STATUS_UNKNOWN = 0; // Success. The new service record is available. @@ -74,8 +76,8 @@ message UnregisterServiceResponse { Status status = 2; } -// The UpdateService request message will update a service based on name to include the new endpoint and service entry. -// This Request serves as a heartbeat to the Directory. +// The UpdateService request message will update a service based on name to include the new endpoint +// and service entry. This Request serves as a heartbeat to the Directory. message UpdateServiceRequest { // Common request header. RequestHeader header = 1; @@ -93,7 +95,8 @@ message UpdateServiceResponse { ResponseHeader header = 1; enum Status { - // UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set. + // UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened + // if UNKNOWN is set. STATUS_UNKNOWN = 0; // Success. The new service record is available. diff --git a/protos/bosdyn/api/docking/docking.proto b/protos/bosdyn/api/docking/docking.proto index 02d538897..1acbc2e48 100644 --- a/protos/bosdyn/api/docking/docking.proto +++ b/protos/bosdyn/api/docking/docking.proto @@ -38,7 +38,6 @@ message DockingCommandRequest { // This is a required field and used to prevent runaway commands. google.protobuf.Timestamp end_time = 5; - // [Optional] Specify the prep pose behavior PrepPoseBehavior prep_pose_behavior = 9; @@ -49,7 +48,6 @@ message DockingCommandRequest { // Response to a DockingCommandRequest message DockingCommandResponse { - enum Status { // Status is not specified. STATUS_UNKNOWN = 0; @@ -70,7 +68,7 @@ message DockingCommandResponse { STATUS_ERROR_GRIPPER_HOLDING_ITEM = 8; // ERROR: The dock is not available for docking. - STATUS_ERROR_NOT_AVAILABLE = 9; + STATUS_ERROR_NOT_AVAILABLE = 9; // ERROR: Internal system error during execution // This error cannot be resolved by issuing a new DockingCommand @@ -108,9 +106,8 @@ message DockingCommandFeedbackRequest { UpdateDockingParams update_docking_params = 3; } -// Response to a DockingCommandFeedbackRequest for a particualar docking command ID +// Response to a DockingCommandFeedbackRequest for a particular docking command ID message DockingCommandFeedbackResponse { - enum Status { // Status is not specified. STATUS_UNKNOWN = 0; @@ -125,7 +122,8 @@ message DockingCommandFeedbackResponse { STATUS_AT_PREP_POSE = 11; // Misaligned was detected between the robot and the dock. - // The docking command was aborted to save an ending up in an unrecoverable state, please try again. + // The docking command was aborted to save an ending up in an unrecoverable state, please + // try again. STATUS_MISALIGNED = 10; // This DockingCommand overridden by new docking command. @@ -147,7 +145,7 @@ message DockingCommandFeedbackResponse { STATUS_ERROR_TOO_DISTANT = 8; // ERROR: The dock is not available for docking. - STATUS_ERROR_NOT_AVAILABLE = 12; + STATUS_ERROR_NOT_AVAILABLE = 12; // ERROR: The prior could not be confirmed as a real dock STATUS_ERROR_UNREFINED_PRIOR = 13; @@ -211,11 +209,12 @@ message GetDockingConfigResponse { // Defines how and whether we use the "pre-docking" pose. enum PrepPoseBehavior { - PREP_POSE_UNKNOWN = 0; // Default behavior, equivalent to PREP_POSE_USE_POSE. - PREP_POSE_USE_POSE = 1; // Goes to the pre-docking pose before docking. - PREP_POSE_SKIP_POSE = 2; // Docks before going to the pre-docking pose. - PREP_POSE_ONLY_POSE = 3; // Goes to the pre-docking pose, and then returns SUCCESS without docking. - PREP_POSE_UNDOCK = 4; // Use this enum to undock a currently docked robot. + PREP_POSE_UNKNOWN = 0; // Default behavior, equivalent to PREP_POSE_USE_POSE. + PREP_POSE_USE_POSE = 1; // Goes to the pre-docking pose before docking. + PREP_POSE_SKIP_POSE = 2; // Docks before going to the pre-docking pose. + PREP_POSE_ONLY_POSE = + 3; // Goes to the pre-docking pose, and then returns SUCCESS without docking. + PREP_POSE_UNDOCK = 4; // Use this enum to undock a currently docked robot. } // Message describing the overall dock state of the robot, including power & comms connections. \ @@ -224,40 +223,40 @@ enum PrepPoseBehavior { // or DOCK_STATUS_UNDOCKING. \ // Note: [^] indicates fields which are only valid if the status is DOCK_STATUS_DOCKED. \ message DockState { - enum DockedStatus { - // Unknown - DOCK_STATUS_UNKNOWN = 0; - // Robot is detected as on a dock - DOCK_STATUS_DOCKED = 1; - // Robot is currently running a docking command - DOCK_STATUS_DOCKING = 2; - // Robot is not detected as on dock - DOCK_STATUS_UNDOCKED = 3; - // Robot is currently running an undocking command - DOCK_STATUS_UNDOCKING = 4; - } - enum LinkStatus { - // Unknown or Not applicable - LINK_STATUS_UNKNOWN = 0; - // The link status is being detected - LINK_STATUS_DETECTING = 3; - // The link is detected as connected - LINK_STATUS_CONNECTED = 1; - // The link could not be detected - LINK_STATUS_ERROR = 2; - } +enum DockedStatus { + // Unknown + DOCK_STATUS_UNKNOWN = 0; + // Robot is detected as on a dock + DOCK_STATUS_DOCKED = 1; + // Robot is currently running a docking command + DOCK_STATUS_DOCKING = 2; + // Robot is not detected as on dock + DOCK_STATUS_UNDOCKED = 3; + // Robot is currently running an undocking command + DOCK_STATUS_UNDOCKING = 4; +} +enum LinkStatus { + // Unknown or Not applicable + LINK_STATUS_UNKNOWN = 0; + // The link status is being detected + LINK_STATUS_DETECTING = 3; + // The link is detected as connected + LINK_STATUS_CONNECTED = 1; + // The link could not be detected + LINK_STATUS_ERROR = 2; +} + +// Status of if the robot is on dock +DockedStatus status = 1; + +// [*] Type of the dock +DockType dock_type = 2; +// [*] ID of the dock +uint32 dock_id = 3; + +// [^] Status of power detection from the dock +LinkStatus power_status = 4; - // Status of if the robot is on dock - DockedStatus status = 1; - - // [*] Type of the dock - DockType dock_type = 2; - // [*] ID of the dock - uint32 dock_id = 3; - - // [^] Status of power detection from the dock - LinkStatus power_status = 4; - } // Message to get the overall docking state diff --git a/protos/bosdyn/api/docking/docking_service.proto b/protos/bosdyn/api/docking/docking_service.proto index 0d70ff704..87dcf2b04 100644 --- a/protos/bosdyn/api/docking/docking_service.proto +++ b/protos/bosdyn/api/docking/docking_service.proto @@ -19,7 +19,8 @@ service DockingService { rpc DockingCommand(DockingCommandRequest) returns (DockingCommandResponse) {} // Check the status of a docking command. - rpc DockingCommandFeedback(DockingCommandFeedbackRequest) returns (DockingCommandFeedbackResponse) {} + rpc DockingCommandFeedback(DockingCommandFeedbackRequest) + returns (DockingCommandFeedbackResponse) {} // Get the configured dock ID ranges. rpc GetDockingConfig(GetDockingConfigRequest) returns (GetDockingConfigResponse) {} diff --git a/protos/bosdyn/api/estop.proto b/protos/bosdyn/api/estop.proto index b91bbe46a..ab853eb87 100644 --- a/protos/bosdyn/api/estop.proto +++ b/protos/bosdyn/api/estop.proto @@ -89,7 +89,6 @@ message EstopSystemStatus { string stop_level_details = 5; } - // Client request for setting/maintaining an E-Stop system level. // After the first CheckIn, must include response to previous challenge. message EstopCheckInRequest { @@ -203,7 +202,7 @@ message DeregisterEstopEndpointRequest { // Response to E-Stop endpoint deregistration request. message DeregisterEstopEndpointResponse { - // Common resonse header. + // Common response header. ResponseHeader header = 1; // Copy of the initial request. diff --git a/protos/bosdyn/api/estop_service.proto b/protos/bosdyn/api/estop_service.proto index 3505ad8f9..d0398d717 100644 --- a/protos/bosdyn/api/estop_service.proto +++ b/protos/bosdyn/api/estop_service.proto @@ -16,7 +16,8 @@ import "bosdyn/api/estop.proto"; // 1. Uses challenge-style communication to enforce end user (aka "originators") connection // for Authority to Operate (ATO). // 2. Offers the ability to issue a direct denial of ATO. -// The EstopService provides a service interface for the robot EStop/Authority to operate the system. +// The EstopService provides a service interface for the robot EStop/Authority to operate the +// system. service EstopService { // Register an Estop "originator" or "endpoint". // This may be a replacement for another active endpoint. @@ -38,6 +39,5 @@ service EstopService { rpc SetEstopConfig(SetEstopConfigRequest) returns (SetEstopConfigResponse) {} // Ask for the current status of the estop system. - rpc GetEstopSystemStatus(GetEstopSystemStatusRequest) - returns (GetEstopSystemStatusResponse) {} + rpc GetEstopSystemStatus(GetEstopSystemStatusRequest) returns (GetEstopSystemStatusResponse) {} } diff --git a/protos/bosdyn/api/full_body_command.proto b/protos/bosdyn/api/full_body_command.proto index 4bf539f3f..5f8e186d9 100644 --- a/protos/bosdyn/api/full_body_command.proto +++ b/protos/bosdyn/api/full_body_command.proto @@ -18,13 +18,10 @@ import "google/protobuf/any.proto"; // The robot command message to specify a basic command that requires full control of the entire // robot to be completed. message FullBodyCommand { - // The full body request must be one of the basic command primitives. message Request { - // Only one full body command can be requested at a time. oneof command { - // Command to stop the robot. StopCommand.Request stop_request = 1; @@ -58,11 +55,9 @@ message FullBodyCommand { // The feedback for the fully body command that will provide information on the progress // of the robot command. message Feedback { - // The feedback message associated with the requested command. Some commands may have // an empty feedback message if they do not provide any updates/progress. oneof feedback { - // Feedback for the stop command request. StopCommand.Feedback stop_feedback = 1; diff --git a/protos/bosdyn/api/geometry.proto b/protos/bosdyn/api/geometry.proto index 1ba46a3c4..576b7245b 100644 --- a/protos/bosdyn/api/geometry.proto +++ b/protos/bosdyn/api/geometry.proto @@ -26,14 +26,14 @@ message Vec3 { double z = 3; } -// Cylindrical coordinates are a generalization of polar coordiates, adding a +// Cylindrical coordinates are a generalization of polar coordinates, adding a // height // axis. See (http://mathworld.wolfram.com/CylindricalCoordinates.html) for // more details. message CylindricalCoordinate { double r = 1; // Radial coordinate double theta = 2; // Azimuthal coordinate - double z = 3; // Vertical coordiante + double z = 3; // Vertical coordinate } // Quaternion primitive. A quaternion can be used to describe the rotation. @@ -161,8 +161,8 @@ message FrameTreeSnapshot { * The two properties above reduce data size. Instead of having to send N^2 * edge_map entries to represent all relationships between N frames, * only N edge_map entries need to be sent. Clients will need to determine - * the chain of edges to follow to get from one frame to another frae, - * and then do inversion and concatentation to generate the appropriate pose. \ + * the chain of edges to follow to get from one frame to another frame, + * and then do inversion and concatenation to generate the appropriate pose. \ * * Note that all FrameTreeSnapshots are expected to be a single rooted tree. * The syntax for FrameTreeSnapshot could also support graphs with @@ -192,6 +192,12 @@ message Box2 { Vec2 size = 1; } +// Two-dimensional box with an angle +message OrientedBox2 { + Box2 box = 1; + float angle = 2; +} + // Geometric primitive to describe a 2D box in a specific frame. message Box2WithFrame { // The box is specified with width (y) and length (x), and the full box is @@ -329,6 +335,17 @@ message Circle { double radius = 2; // Dimensions in m from center_pt. } +// Geometric primitive to describe a 2D circle in a specific frame. +message CircleWithFrame { + // The circle is specified with a radius and center point in x-y coordinates. + Circle circle = 1; + // The pose of the circle is in 'frame_name'. + string frame_name = 2; + // The transformation of the circle into the desired frame + // (specified above). + SE3Pose frame_name_tform_circle = 3; +} + // Represents an area in the XY plane. message Area { oneof geometry { diff --git a/protos/bosdyn/api/gps/aggregator_service.proto b/protos/bosdyn/api/gps/aggregator_service.proto index cc289d92b..4f3a7301c 100644 --- a/protos/bosdyn/api/gps/aggregator_service.proto +++ b/protos/bosdyn/api/gps/aggregator_service.proto @@ -22,5 +22,5 @@ import "bosdyn/api/gps/aggregator.proto"; * - The peripheral computer should send timestamped data to the AggregatorService */ service AggregatorService { - rpc NewGpsData (NewGpsDataRequest) returns (NewGpsDataResponse) {} + rpc NewGpsData(NewGpsDataRequest) returns (NewGpsDataResponse) {} } diff --git a/protos/bosdyn/api/gps/gps.proto b/protos/bosdyn/api/gps/gps.proto index 3664d6926..79db778c1 100644 --- a/protos/bosdyn/api/gps/gps.proto +++ b/protos/bosdyn/api/gps/gps.proto @@ -45,26 +45,26 @@ message GpsDataPoint { Accuracy accuracy = 4; // Information about a GNSS satellite measurement. message Satellite { - uint32 prn=1; //satellite identifier - float elevation=2; //Degrees from -90 to 90 - float azimuth=3; //Degrees from true north - float snr=4; //in dB - enum Constellation{ - UNKNOWN=0; - GPS_L1CA=1; - GPS_L2CM=2; - SBAS_L1CA=3; - GLONASS_L1CA=4; - GLONASS_L2CA=5; - GPS_L1P=6; - GPS_L2P=7; - //BDS stands for the BeiDou Navigation Satellite System - BDS2_B1=8; - BDS2_B2=9; - GALILEO_E1B=10; - GALILEO_E7I=11; + uint32 prn = 1; // satellite identifier + float elevation = 2; // Degrees from -90 to 90 + float azimuth = 3; // Degrees from true north + float snr = 4; // in dB + enum Constellation { + UNKNOWN = 0; + GPS_L1CA = 1; + GPS_L2CM = 2; + SBAS_L1CA = 3; + GLONASS_L1CA = 4; + GLONASS_L2CA = 5; + GPS_L1P = 6; + GPS_L2P = 7; + // BDS stands for the BeiDou Navigation Satellite System + BDS2_B1 = 8; + BDS2_B2 = 9; + GALILEO_E1B = 10; + GALILEO_E7I = 11; } - Constellation constellation=5; + Constellation constellation = 5; } // Satellites used in the location solution. repeated Satellite satellites = 5; @@ -72,15 +72,15 @@ message GpsDataPoint { // Types of fixes possible. enum Mode { Invalid = 0; - SPP = 1; //Single Point Positioning - DGNSS = 2; //Differential Global Navigation Satellite System - PPS = 3; //Precise Positioning System Fix - FIXED_RTK = 4; //Fixed-Point Real-Time Kinematics - FLOAT_RTK = 5; //Floating-Point Real-Time Kinematics + SPP = 1; // Single Point Positioning + DGNSS = 2; // Differential Global Navigation Satellite System + PPS = 3; // Precise Positioning System Fix + FIXED_RTK = 4; // Fixed-Point Real-Time Kinematics + FLOAT_RTK = 5; // Floating-Point Real-Time Kinematics DEAD_RECKONING = 6; FIXED_POSITION = 7; SIMULATED = 8; - SBAS = 9; //Satellite Based Augmentation System + SBAS = 9; // Satellite Based Augmentation System } // The current type of fix. Mode value = 1; diff --git a/protos/bosdyn/api/gps/registration.proto b/protos/bosdyn/api/gps/registration.proto index ea8d25198..02bd3973a 100644 --- a/protos/bosdyn/api/gps/registration.proto +++ b/protos/bosdyn/api/gps/registration.proto @@ -23,8 +23,8 @@ message GpsState { // What GPS device generated the latest data GpsDevice gps_device = 3; - // Estimate of where the robot's body is in the ECEF frame given this measurement. Note this must be a position - // and not a pose because of the lack of orientation data. + // Estimate of where the robot's body is in the ECEF frame given this measurement. Note this + // must be a position and not a pose because of the lack of orientation data. bosdyn.api.Vec3 ecef_p_body = 4; // Collection of all GPS data received by this device within some window. @@ -36,9 +36,9 @@ message Registration { enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_NEED_DATA = 2; // No data has been reported to perform registration. - STATUS_NEED_MORE_DATA = 3; // Data has been reported, but not enough to get a fix. - STATUS_STALE = 4; // We have a registration, but it is based on old data. + STATUS_NEED_DATA = 2; // No data has been reported to perform registration. + STATUS_NEED_MORE_DATA = 3; // Data has been reported, but not enough to get a fix. + STATUS_STALE = 4; // We have a registration, but it is based on old data. } Status status = 1; diff --git a/protos/bosdyn/api/gps/registration_service.proto b/protos/bosdyn/api/gps/registration_service.proto index 611a3c8cb..d7a4ecc76 100644 --- a/protos/bosdyn/api/gps/registration_service.proto +++ b/protos/bosdyn/api/gps/registration_service.proto @@ -14,10 +14,10 @@ import "bosdyn/api/gps/registration.proto"; /* * The RegistrationService consumes data sent to the Gps/AggregatorService. - * It calculates where the robot is in the world, and the transfroms from - * the robots internal frames to the world frame. + * It calculates where the robot is in the world, and the transforms from + * the robots internal frames to the world frame. */ - service RegistrationService { - rpc GetLocation (GetLocationRequest) returns (GetLocationResponse) {} - rpc ResetRegistration (ResetRegistrationRequest) returns (ResetRegistrationResponse) {} +service RegistrationService { + rpc GetLocation(GetLocationRequest) returns (GetLocationResponse) {} + rpc ResetRegistration(ResetRegistrationRequest) returns (ResetRegistrationResponse) {} } \ No newline at end of file diff --git a/protos/bosdyn/api/graph_nav/area_callback.proto b/protos/bosdyn/api/graph_nav/area_callback.proto index 2437d0109..3c920c8c2 100644 --- a/protos/bosdyn/api/graph_nav/area_callback.proto +++ b/protos/bosdyn/api/graph_nav/area_callback.proto @@ -9,6 +9,7 @@ syntax = "proto3"; package bosdyn.api.graph_nav; option java_outer_classname = "AreaCallbackProto"; +import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; @@ -157,6 +158,12 @@ message RegionInformation { // The planned route through the region. bosdyn.api.graph_nav.Route route = 3; + + // Flag that indicates that the robot is already inside the callback region at the beginning of + // the callback, rather than starting from the edge of the region as usual. This can happen in + // some cases when the robot gets stuck inside the region, and restarts with a new navigation + // command. + bool starting_inside_region = 4; } message BeginCallbackRequest { @@ -170,11 +177,15 @@ message BeginCallbackRequest { // If unset, a AreaCallback implementation may pick a reasonable value. google.protobuf.Timestamp end_time = 3; + // Deprecated in 4.1, the relevant data is set in custom_params and config_data instead. // Configuration data associated with this area callback region - AreaCallbackData recorded_data = 5; + AreaCallbackData recorded_data = 5 [deprecated = true]; // Any other custom parameters to the callback. DictParam custom_params = 6; + + // Custom config data used by the service to do its job. + google.protobuf.Any config_data = 7; } message BeginCallbackResponse { diff --git a/protos/bosdyn/api/graph_nav/area_callback_data.proto b/protos/bosdyn/api/graph_nav/area_callback_data.proto index 4443886eb..cbc2e1bf1 100644 --- a/protos/bosdyn/api/graph_nav/area_callback_data.proto +++ b/protos/bosdyn/api/graph_nav/area_callback_data.proto @@ -20,9 +20,16 @@ message AreaCallbackMapConfig { message AreaCallbackData { // Custom config data used by the service to do its job. google.protobuf.Any config_data = 1; + + // Deprecated in 4.1, use param_collection instead so that the + // parameter specs are available for building editors. + // Any other custom parameters to the callback. This will be copied into + // custom_params inside the BeginCallback RPC if it exists. + DictParam custom_params = 2 [deprecated = true]; + // Any other custom parameters to the callback. This will be copied into // custom_params inside the BeginCallback RPC if it exists. - DictParam custom_params = 2; + CustomParamCollection parameters = 4; // Configuration data for how this area callback should be treated in the map. AreaCallbackMapConfig map_config = 3; diff --git a/protos/bosdyn/api/graph_nav/gps.proto b/protos/bosdyn/api/graph_nav/gps.proto index 1d53210e6..9f03597e4 100644 --- a/protos/bosdyn/api/graph_nav/gps.proto +++ b/protos/bosdyn/api/graph_nav/gps.proto @@ -15,23 +15,24 @@ import "bosdyn/api/gps/gps.proto"; message GPSLocalization { enum State { STATE_UNKNOWN = 0; - STATE_OK = 1; // Using GPS. - STATE_BAD_FRAMES = 2; // Error getting frames (ko, etc.) - STATE_NO_GPS_OBJECTS = 3; // No GPS available. - STATE_REGISTRATION_NOT_OK = 4; // GPS registration isn't ready. - STATE_NO_GPS_STATES = 5; // No GPS state measurements. - STATE_NOT_ENOUGH_SATELLITES = 6; // Too few satellites to localize. - STATE_NO_ECEF_FRAME = 7; // GPS registration is missing a frame. - STATE_HIGH_ERROR = 8; // The GPS data exists, but is high error. - STATE_STALE = 9; // The GPS data exists, and we have not used it yet, but it is too old to use. - STATE_INTERNAL_ERROR = 10; // Internal error (e.g. missing waypoints). + STATE_OK = 1; // Using GPS. + STATE_BAD_FRAMES = 2; // Error getting frames (ko, etc.) + STATE_NO_GPS_OBJECTS = 3; // No GPS available. + STATE_REGISTRATION_NOT_OK = 4; // GPS registration isn't ready. + STATE_NO_GPS_STATES = 5; // No GPS state measurements. + STATE_NOT_ENOUGH_SATELLITES = 6; // Too few satellites to localize. + STATE_NO_ECEF_FRAME = 7; // GPS registration is missing a frame. + STATE_HIGH_ERROR = 8; // The GPS data exists, but is high error. + STATE_STALE = + 9; // The GPS data exists, and we have not used it yet, but it is too old to use. + STATE_INTERNAL_ERROR = 10; // Internal error (e.g. missing waypoints). }; // State of the live GPS data. State live_gps_state = 1; // State of GPS data at the current waypoint. State map_gps_state = 2; - // Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the time - // of localization. + // Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the + // time of localization. bosdyn.api.SE3Pose ecef_tform_body = 3; // Estimate of the latitude/longitude/height of the robot at the time of localization. bosdyn.api.gps.LLH latitude_longitude_height = 4; diff --git a/protos/bosdyn/api/graph_nav/graph_nav.proto b/protos/bosdyn/api/graph_nav/graph_nav.proto index fe825754a..faed0963a 100644 --- a/protos/bosdyn/api/graph_nav/graph_nav.proto +++ b/protos/bosdyn/api/graph_nav/graph_nav.proto @@ -15,6 +15,7 @@ import "bosdyn/api/data_chunk.proto"; import "bosdyn/api/geometry.proto"; import "bosdyn/api/gps/gps.proto"; import "bosdyn/api/graph_nav/gps.proto"; +import "bosdyn/api/graph_nav/lost_detection.proto"; import "bosdyn/api/graph_nav/nav.proto"; import "bosdyn/api/graph_nav/map.proto"; import "bosdyn/api/graph_nav/area_callback.proto"; @@ -35,9 +36,9 @@ message VisualRefinementOptions { } // The SetLocalization request is used to initialize or reset the localization of GraphNav -// to a map. A localization consists of a waypoint ID, and a pose of the robot relative to that waypoint. -// GraphNav uses the localization to decide how to navigate through a map. -// The SetLocalizationRequest contains parameters to help find a correct localization. For example, +// to a map. A localization consists of a waypoint ID, and a pose of the robot relative to that +// waypoint. GraphNav uses the localization to decide how to navigate through a map. The +// SetLocalizationRequest contains parameters to help find a correct localization. For example, // AprilTags (fiducials) may be used to set the localization, or the caller can provide an explicit // guess of the localization. // Once the SetLocalizationRequest completes, the current localization to the map @@ -46,7 +47,11 @@ message SetLocalizationRequest { // Common request header. RequestHeader header = 1; - // Operator-supplied guess at localization. + // Operator-supplied guess at localization. In this localization message, only waypoint_id and + // waypoint_tform_body will be used. All other fields are ignored. If the message is not + // provided, the initial guess will be assumed to be the identity transform to whatever waypoint + // was requested for methods that require it. Use initial_guess.waypoint_id to restrict the + // SetLocalizationRequest to specific waypoints. Localization initial_guess = 3; // Robot pose when the initial_guess was made. @@ -55,21 +60,23 @@ message SetLocalizationRequest { // localization guess, if necessary. SE3Pose ko_tform_body = 4; - // The max distance [meters] is how far away the robot is allowed to localize from the position supplied - // in the initial guess. If not specified, the offset is used directly. Otherwise it searches a neighborhood - // of the given size. + // The max distance [meters] is how far away the robot is allowed to localize from the position + // supplied in the initial guess. If not specified, the offset is used directly. Otherwise it + // searches a neighborhood of the given size. double max_distance = 5; - // The max yaw [radians] is how different the localized yaw is allowed to be from the supplied yaw - // in the initial guess. If not specified, the offset is used directly. Otherwise it searches a neighborhood - // of the given size. + // The max yaw [radians] is how different the localized yaw is allowed to be from the supplied + // yaw in the initial guess. If not specified, the offset is used directly. Otherwise it + // searches a neighborhood of the given size. double max_yaw = 6; enum FiducialInit { - FIDUCIAL_INIT_UNKNOWN = 0; // It is a programming error to use this one. - FIDUCIAL_INIT_NO_FIDUCIAL = 1; // Ignore fiducials during initialization. - FIDUCIAL_INIT_NEAREST = 2; // Localize to the nearest fiducial in any waypoint. - FIDUCIAL_INIT_NEAREST_AT_TARGET = 3; // Localize to nearest fiducial at the target waypoint (from initial_guess). - FIDUCIAL_INIT_SPECIFIC = 4; // Localize to the given fiducial at the target waypoint (from initial_guess) if it exists, or any waypoint otherwise. + FIDUCIAL_INIT_UNKNOWN = 0; // It is a programming error to use this one. + FIDUCIAL_INIT_NO_FIDUCIAL = 1; // Ignore fiducials during initialization. + FIDUCIAL_INIT_NEAREST = 2; // Localize to the nearest fiducial in any waypoint. + FIDUCIAL_INIT_NEAREST_AT_TARGET = + 3; // Localize to nearest fiducial at the target waypoint (from initial_guess). + FIDUCIAL_INIT_SPECIFIC = 4; // Localize to the given fiducial at the target waypoint (from + // initial_guess) if it exists, or any waypoint otherwise. } // Tells the initializer whether to use fiducials, and how to use them. @@ -77,7 +84,8 @@ message SetLocalizationRequest { // If using FIDUCIAL_INIT_SPECIFIC, this is the specific fiducial ID to use for initialization. // If no detection of this fiducial exists, the service will return STATUS_NO_MATCHING_FIDUCIAL. - // If detections exist, but are low quality, STATUS_FIDUCIAL_TOO_FAR_AWAY, FIDUCIAL_TOO_OLD, or FIDUCIAL_POSE_UNCERTAIN will be returned. + // If detections exist, but are low quality, STATUS_FIDUCIAL_TOO_FAR_AWAY, FIDUCIAL_TOO_OLD, or + // FIDUCIAL_POSE_UNCERTAIN will be returned. int32 use_fiducial_id = 8; // If true, consider how nearby localizations appear (like turned 180). @@ -90,8 +98,8 @@ message SetLocalizationRequest { bool restrict_fiducial_detections_to_target_waypoint = 11; oneof refinement { - // If true, and we are using fiducials during initialization, will run ICP after the fiducial - // was used for an initial guess. + // If true, and we are using fiducials during initialization, will run ICP after the + // fiducial was used for an initial guess. bool refine_fiducial_result_with_icp = 9; // Improve localization based on images from body cameras @@ -132,27 +140,29 @@ message SetLocalizationResponse { // Failed to localize for some other reason; see the error_report for details. // This is often because the initial guess was incorrect. STATUS_FAILED = 5; - // Failed to localize because the fiducial requested by 'use_fiducial_id' was too far away from - // the robot. + // Failed to localize because the fiducial requested by 'use_fiducial_id' was too far away + // from the robot. STATUS_FIDUCIAL_TOO_FAR_AWAY = 6; - // Failed to localize because the fiducial requested by 'use_fiducial_id' had a detection time that was too - // far in the past. + // Failed to localize because the fiducial requested by 'use_fiducial_id' had a detection + // time that was too far in the past. STATUS_FIDUCIAL_TOO_OLD = 7; - // Failed to localize because the fiducial requested by 'use_fiducial_id' did not exist in the map at - // the required location. + // Failed to localize because the fiducial requested by 'use_fiducial_id' did not exist in + // the map at the required location. STATUS_NO_MATCHING_FIDUCIAL = 8; // Failed to localize because the fiducial requested by 'use_fiducial_id' had an unreliable // pose estimation, either in the current detection of that fiducial, or in detections that - // were saved in the map. Note that when using FIDUCIAL_INIT_SPECIFIC, fiducial detections at - // the target waypoint will be used so long as they are not uncertain -- otherwise, detections - // at adjacent waypoints may be used. If there exists no uncertain detection of the fiducial - // near the target waypoint in the map, the service returns this status. + // were saved in the map. Note that when using FIDUCIAL_INIT_SPECIFIC, fiducial detections + // at the target waypoint will be used so long as they are not uncertain -- otherwise, + // detections at adjacent waypoints may be used. If there exists no uncertain detection of + // the fiducial near the target waypoint in the map, the service returns this status. STATUS_FIDUCIAL_POSE_UNCERTAIN = 9; // The localization could not be set, because the map was recorded using a different sensor // setup than the robot currently has onboard. See SensorStatus for more details. STATUS_INCOMPATIBLE_SENSORS = 10; // Visual feature based alignment failed or the pose solution was considered unreliable. STATUS_VISUAL_ALIGNMENT_FAILED = 11; + // Failed to localize because there is no map loaded. + STATUS_NO_MAP_LOADED = 12; } // Return status for the request. Status status = 3; @@ -194,28 +204,37 @@ message SetLocalizationResponse { // After applying the localization, Graph Nav checked the localization, and found that // the robot's gravity vector does not align with the map's. This can happen if a fiducial // being used to align to the map was detected wrongly during recording, or if the robot's - // IMU is miscalibrated. It can also occur when the inital guess passed in to the SetLocalization - // RPC is in the incorrect reference frame. + // IMU is miscalibrated. It can also occur when the initial guess passed in to the + // SetLocalization RPC is in the incorrect reference frame. QUALITY_CHECK_POOR_GRAVITY_ALIGNMENT = 3; // There wasn't enough data to make a determination about quality. QUALITY_CHECK_SKIPPED = 4; - // The prior passed in is too different from the expected height of the robot e.w.r.t the waypoint. + // The prior passed in is too different from the expected height of the robot e.w.r.t the + // waypoint. QUALITY_CHECK_BAD_HEIGHT = 5; } // Graph Nav will check the quality of the resulting localization and report the status - // here. Note that to preserve backwards compatability with 3.2 and earlier, a poor quality check - // does not result in this RPC failing. + // here. Note that to preserve backwards compatability with 3.2 and earlier, a poor quality + // check does not result in this RPC failing. QualityCheckResult quality_check_result = 10; } message RouteGenParams { + } // Parameters describing how to travel along a route. message TravelParams { - // Threshold for the maximum distance [meters] that defines when we have reached - // the final waypoint. - double max_distance = 1; + oneof cartesian_distance_parameters { + // Threshold for the maximum distance [meters] that defines a circular region for when we + // have reached the final waypoint. + double max_distance = 1; + + // Oriented 2D bounding box [meters & radians] that defines an rectangular region for when + // we have reached the final waypoint. + bosdyn.api.OrientedBox2 box_region = 15; + } + // Threshold for the maximum yaw [radians] that defines when we have reached // the final waypoint (ignored if ignore_final_yaw is set to true). double max_yaw = 2; @@ -229,12 +248,18 @@ message TravelParams { // it will attempt to achieve the yaw as well. bool ignore_final_yaw = 4; + // Max distance from the recorded edge that the robot is allowed to travel when avoiding + // obstacles or optimized its path. This is half of the full width of the corridor the robot may + // walk within. If this value is not set, the robot will choose a default corridor width. + double max_corridor_distance = 18; // Indicates whether robot will navigate through areas with poor quality features enum FeatureQualityTolerance { - TOLERANCE_UNKNOWN = 0; // Unknown value - TOLERANCE_DEFAULT = 1; // Navigate through default number of waypoints with poor quality features - TOLERANCE_IGNORE_POOR_FEATURE_QUALITY = 2; // Navigate through unlimited number of waypoints with poor quality features + TOLERANCE_UNKNOWN = 0; // Unknown value + TOLERANCE_DEFAULT = + 1; // Navigate through default number of waypoints with poor quality features + TOLERANCE_IGNORE_POOR_FEATURE_QUALITY = + 2; // Navigate through unlimited number of waypoints with poor quality features } FeatureQualityTolerance feature_quality_tolerance = 5; @@ -254,6 +279,32 @@ message TravelParams { // Ground clutter avoidance mode. bosdyn.api.graph_nav.Edge.Annotations.GroundClutterAvoidanceMode ground_clutter_mode = 11; + + // The strictness at which the lost detector will declare the robot lost during this command. + // Note that this level of strictness will continue to apply even if the robot is teleoperated + // by the user. Changing the level of strictness also resets the lost detector. So if the robot + // is lost, issuing a new command with a lower level of strictness will cause the robot to + // continue as if it were not lost. Issuing a command with LOST_DETECTOR_STRICTNESS_UNKNOWN + // results in no change. + LostDetectorStrictness lost_detector_strictness = 14; + + // Determines which local path planner to use. + enum PathPlannerMode { + // Unknown value. + PLANNER_MODE_UNKNOWN = 0; + + // Use default path planner. Currently this is the short range planner. + PLANNER_MODE_DEFAULT = 1; + + // Use short range planner. + PLANNER_MODE_SHORT_RANGE = 2; + + // Use long range planner. This is an experimental feature that helps the robot navigate + // around large obstacles that were not present during mission recording. + // NOTE: Alternate route-finding waypoints are disabled when using the long range planner. + PLANNER_MODE_LONG_RANGE = 3; + }; + PathPlannerMode planner_mode = 17; } @@ -264,19 +315,19 @@ message ModifyNavigationResponse { enum Status { STATUS_UNKNOWN = 0; - STATUS_OK = 1; // Modify request was accepted. - STATUS_UNRECOGNIZED_COMMAND = 2; // The command ID wasn't the ID of the last command. + STATUS_OK = 1; // Modify request was accepted. + STATUS_UNRECOGNIZED_COMMAND = 2; // The command ID wasn't the ID of the last command. } // Status code specific to the ModifyNavigationResponse. Status status = 3; } // The NavigateToRequest can be used to command GraphNav to drive the robot to a specific waypoint. -// GraphNav will plan a path through the map which most efficiently gets the robot to the specified goal waypoint. -// Parameters are provided which influence how GraphNav will generate and follow the path. -// This RPC returns immediately after the request is processed. It does not block until GraphNav completes the path -// to the goal waypoint. The user is expected to periodically check the status of the NavigateTo command using -// the NavigationFeedbackRequest RPC. +// GraphNav will plan a path through the map which most efficiently gets the robot to the specified +// goal waypoint. Parameters are provided which influence how GraphNav will generate and follow the +// path. This RPC returns immediately after the request is processed. It does not block until +// GraphNav completes the path to the goal waypoint. The user is expected to periodically check the +// status of the NavigateTo command using the NavigationFeedbackRequest RPC. message NavigateToRequest { // Common request header. RequestHeader header = 1; @@ -304,17 +355,18 @@ message NavigateToRequest { // offset goal, attempting to avoid obstacles along the way. SE2Pose destination_waypoint_tform_body_goal = 8; - // Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation - // of an existing command. If this is a continuation of an existing command, all parameters will be - // ignored, and the old parameters will be preserved. + // Unique identifier for the command. If 0, this is a new command, otherwise it is a + // continuation of an existing command. If this is a continuation of an existing command, all + // parameters will be ignored, and the old parameters will be preserved. uint32 command_id = 9; // Defines robot behavior when route is blocked. Defaults to reroute when route is blocked. RouteFollowingParams.RouteBlockedBehavior route_blocked_behavior = 10; } -// Response to a NavigateToRequest. This is returned immediately after the request is processed. A command_id -// is provided to specify the ID that the user may use to poll the system for feedback on the NavigateTo command. +// Response to a NavigateToRequest. This is returned immediately after the request is processed. A +// command_id is provided to specify the ID that the user may use to poll the system for feedback on +// the NavigateTo command. message NavigateToResponse { // Common response header. ResponseHeader header = 1; @@ -324,45 +376,47 @@ message NavigateToResponse { enum Status { // An unknown / unexpected error occurred. - STATUS_UNKNOWN = 0; + STATUS_UNKNOWN = 0; // Request was accepted. - STATUS_OK = 1; + STATUS_OK = 1; // [Time error] Client has not done timesync with robot. - STATUS_NO_TIMESYNC = 2; + STATUS_NO_TIMESYNC = 2; // [Time error] The command was received after its end time had already passed. - STATUS_EXPIRED = 3; + STATUS_EXPIRED = 3; // [Time error]The command end time was too far in the future. - STATUS_TOO_DISTANT = 4; + STATUS_TOO_DISTANT = 4; // [Robot State Error] Cannot navigate a route if the robot has a critical // perception fault, or behavior fault, or LIDAR not working. - STATUS_ROBOT_IMPAIRED = 5; + STATUS_ROBOT_IMPAIRED = 5; // [Robot State Error] Cannot navigate a route while recording a map. - STATUS_RECORDING = 6; + STATUS_RECORDING = 6; // [Route Error] One or more of the waypoints specified weren't in the map. - STATUS_UNKNOWN_WAYPOINT = 7; + STATUS_UNKNOWN_WAYPOINT = 7; // [Route Error] There is no path to the specified waypoint. - STATUS_NO_PATH = 8; + STATUS_NO_PATH = 8; // [Route Error] Route contained too many waypoints with low-quality features. - STATUS_FEATURE_DESERT = 10; + STATUS_FEATURE_DESERT = 10; // [Route Error] Happens when you try to issue a navigate to while the robot is lost. - STATUS_LOST = 11; - // [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). + STATUS_LOST = 11; + // [Route Error] Happens when the current localization doesn't refer to any waypoint in the + // map (possibly uninitialized localization). STATUS_NOT_LOCALIZED_TO_MAP = 13; // [Wrestling error] Happens when graph nav refuses to follow the route you specified. STATUS_COULD_NOT_UPDATE_ROUTE = 12; - // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate to a different - // waypoint, or clear the route and try again. - STATUS_STUCK = 14; - // [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. - STATUS_UNRECOGNIZED_COMMAND = 15; - // [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. + // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. + // Navigate to a different waypoint, or clear the route and try again. + STATUS_STUCK = 14; + // [Request Error] Happens when you try to continue a command that was either expired, or + // had an unrecognized id. + STATUS_UNRECOGNIZED_COMMAND = 15; + // [Route Error] Happens when you try to navigate along a route and a needed callback is no + // longer available. STATUS_AREA_CALLBACK_ERROR = 16; - } // Return status for the request. Status status = 3; @@ -373,12 +427,12 @@ message NavigateToResponse { // Unique identifier for the command, If 0, command was not accepted. uint32 command_id = 4; - // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. + // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the + // error. repeated string error_waypoint_ids = 5; // Errors about Area Callbacks in the map. AreaCallbackServiceError area_callback_error = 10; - } // These parameters are specific to how the robot follows a specified route in NavigateRoute. @@ -425,7 +479,7 @@ message RouteFollowingParams { enum RouteBlockedBehavior { // The mode is unset. ROUTE_BLOCKED_UNKNOWN = 0; - // For NavigateToRequests, the robot will find the shortest path to the desination + // For NavigateToRequests, the robot will find the shortest path to the destination // that avoids the blockage. // For NavigateRouteRequests, the robot will find the shortest path to any point // after the furthest-along blockage, and after the furthest-along traversed edge, @@ -443,10 +497,12 @@ message RouteFollowingParams { RouteBlockedBehavior route_blocked_behavior = 3; } + // A NavigateRoute request message specifies a route of waypoints/edges and parameters // about how to get there. Like NavigateTo, this command returns immediately upon -// processing and provides a command_id that the user can use along with a NavigationFeedbackRequest RPC to -// poll the system for feedback on this command. The RPC does not block until the route is completed. +// processing and provides a command_id that the user can use along with a NavigationFeedbackRequest +// RPC to poll the system for feedback on this command. The RPC does not block until the route is +// completed. message NavigateRouteRequest { // Common request header. RequestHeader header = 1; @@ -477,13 +533,15 @@ message NavigateRouteRequest { // offset goal, attempting to avoid obstacles along the way. SE2Pose destination_waypoint_tform_body_goal = 7; - // Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation - // of an existing command. + // Unique identifier for the command. If 0, this is a new command, otherwise it is a + // continuation of an existing command. uint32 command_id = 8; + } -// Response to a NavigateRouteRequest. This is returned immediately after the request is processed. A command_id -// is provided to specify the ID that the user may use to poll the system for feedback on the NavigateRoute command. +// Response to a NavigateRouteRequest. This is returned immediately after the request is processed. +// A command_id is provided to specify the ID that the user may use to poll the system for feedback +// on the NavigateRoute command. message NavigateRouteResponse { // Common response header. ResponseHeader header = 1; @@ -493,50 +551,54 @@ message NavigateRouteResponse { enum Status { // An unknown / unexpected error occurred. - STATUS_UNKNOWN = 0; + STATUS_UNKNOWN = 0; // Request was accepted. - STATUS_OK = 1; + STATUS_OK = 1; // [Time Error] Client has not done timesync with robot. - STATUS_NO_TIMESYNC = 2; + STATUS_NO_TIMESYNC = 2; // [Time Error] The command was received after its end time had already passed. - STATUS_EXPIRED = 3; + STATUS_EXPIRED = 3; // [Time Error] The command end time was too far in the future. - STATUS_TOO_DISTANT = 4; + STATUS_TOO_DISTANT = 4; - // [Robot State Error] Cannot navigate a route if the robot has a crtical + // [Robot State Error] Cannot navigate a route if the robot has a critical // perception fault, or behavior fault, or LIDAR not working. - STATUS_ROBOT_IMPAIRED = 5; + STATUS_ROBOT_IMPAIRED = 5; // [Robot State Error] Cannot navigate a route while recording a map. - STATUS_RECORDING = 6; + STATUS_RECORDING = 6; // [Route Error] One or more waypoints/edges are not in the map. STATUS_UNKNOWN_ROUTE_ELEMENTS = 8; // [Route Error] One or more edges do not connect to expected waypoints. - STATUS_INVALID_EDGE = 9; + STATUS_INVALID_EDGE = 9; // [Route Error] There is no path to the specified route. - STATUS_NO_PATH = 20; + STATUS_NO_PATH = 20; // [Route Error] Route contained a constraint fault. - STATUS_CONSTRAINT_FAULT = 11; + STATUS_CONSTRAINT_FAULT = 11; // [Route Error] Route contained too many waypoints with low-quality features. - STATUS_FEATURE_DESERT = 13; + STATUS_FEATURE_DESERT = 13; // [Route Error] Happens when you try to issue a navigate route while the robot is lost. - STATUS_LOST = 14; + STATUS_LOST = 14; // [Route Error] Happens when the current localization doesn't refer to any waypoint // in the route (possibly uninitialized localization). STATUS_NOT_LOCALIZED_TO_ROUTE = 16; - // [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). + // [Route Error] Happens when the current localization doesn't refer to any waypoint in the + // map (possibly uninitialized localization). STATUS_NOT_LOCALIZED_TO_MAP = 19; - // [Wrestling Errors] Happens when graph nav refuses to follow the route you specified. Try saying please? + // [Wrestling Errors] Happens when graph nav refuses to follow the route you specified. Try + // saying please? STATUS_COULD_NOT_UPDATE_ROUTE = 15; - // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate a different - // route, or clear the route and try again. + // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. + // Navigate a different route, or clear the route and try again. STATUS_STUCK = 17; - // [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. - STATUS_UNRECOGNIZED_COMMAND = 18; + // [Request Error] Happens when you try to continue a command that was either expired, or + // had an unrecognized id. + STATUS_UNRECOGNIZED_COMMAND = 18; - // [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. + // [Route Error] Happens when you try to navigate along a route and a needed callback is no + // longer available. STATUS_AREA_CALLBACK_ERROR = 21; } // Return status for the request. @@ -548,9 +610,11 @@ message NavigateRouteResponse { // Unique identifier for the command, If 0, command was not accepted. uint32 command_id = 4; - // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. + // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the + // error. repeated string error_waypoint_ids = 5; - // On a relevant error status code (STATUS_INVALID_EDGE), this is populated with the edge ID's that cased the error. + // On a relevant error status code (STATUS_INVALID_EDGE), this is populated with the edge ID's + // that cased the error. repeated Edge.Id error_edge_ids = 6; // Errors about Area Callbacks in the map. @@ -562,14 +626,15 @@ message GPSNavigationParams { // The goal position as latitude/longitude. Height is ignored. bosdyn.api.gps.LLH goal_llh = 1; - // Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve at the goal. This is a bearing - // around the "up" axis such that East points to zero yaw, and West is pi radians yaw. If not provided, the robot will try to - // achieve any allowable orientation at the goal. + // Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve + // at the goal. This is a bearing around the "up" axis such that East points to zero yaw, and + // West is pi radians yaw. If not provided, the robot will try to achieve any allowable + // orientation at the goal. google.protobuf.DoubleValue goal_yaw = 2; - // The maximum distance we are willing to accept for the LLH coordinate from the mapped data in meters. This - // is a 2 dimensional measurement (height is not considered). If not filled out, Spot will decide based on - // internal defaults. + // The maximum distance we are willing to accept for the LLH coordinate from the mapped data in + // meters. This is a 2 dimensional measurement (height is not considered). If not filled out, + // Spot will decide based on internal defaults. google.protobuf.DoubleValue max_distance_from_map = 3; } @@ -592,15 +657,16 @@ message NavigateToAnchorRequest { // Users may either choose seed_tform_goal or gps_navigation_params as a goal. oneof goal { - // The goal, expressed with respect to the seed frame of the current anchoring. - // The robot will use the z value to find the goal waypoint, but the final z height the robot - // achieves will depend on the terrain height at the offset from the goal. - SE3Pose seed_tform_goal = 3; - // If given, the NavigateToAnchor request will instead be interpreted as a command to navigate to GPS coordinates. - // When given, the seed_tform_goal will be ignored,and instead the parameters in this message will be used. Otherwise, - // the NavigateToAnchorRequest works identically to when seed_tform_goal is used instead. For example, the TravelParams - // will be respected for this kind of goal. - GPSNavigationParams gps_navigation_params = 11; + // The goal, expressed with respect to the seed frame of the current anchoring. + // The robot will use the z value to find the goal waypoint, but the final z height the + // robot achieves will depend on the terrain height at the offset from the goal. + SE3Pose seed_tform_goal = 3; + // If given, the NavigateToAnchor request will instead be interpreted as a command to + // navigate to GPS coordinates. When given, the seed_tform_goal will be ignored,and instead + // the parameters in this message will be used. Otherwise, the NavigateToAnchorRequest works + // identically to when seed_tform_goal is used instead. For example, the TravelParams will + // be respected for this kind of goal. + GPSNavigationParams gps_navigation_params = 11; } // These parameters control selection of the goal waypoint. In seed frame, they are the x, y, @@ -619,9 +685,9 @@ message NavigateToAnchorRequest { // Identifier provided by the time sync service to verify time sync between robot and client. string clock_identifier = 9; - // Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation - // of an existing command. If this is a continuation of an existing command, all parameters will be - // ignored, and the old parameters will be preserved. + // Unique identifier for the command. If 0, this is a new command, otherwise it is a + // continuation of an existing command. If this is a continuation of an existing command, all + // parameters will be ignored, and the old parameters will be preserved. uint32 command_id = 10; } @@ -637,53 +703,56 @@ message NavigateToAnchorResponse { enum Status { // An unknown / unexpected error occurred. - STATUS_UNKNOWN = 0; + STATUS_UNKNOWN = 0; // Request was accepted. - STATUS_OK = 1; + STATUS_OK = 1; // [Time error] Client has not done timesync with robot. - STATUS_NO_TIMESYNC = 2; + STATUS_NO_TIMESYNC = 2; // [Time error] The command was received after its end time had already passed. - STATUS_EXPIRED = 3; + STATUS_EXPIRED = 3; // [Time error]The command end time was too far in the future. - STATUS_TOO_DISTANT = 4; + STATUS_TOO_DISTANT = 4; // [Robot State Error] Cannot navigate a route if the robot has a critical // perception fault, or behavior fault, or LIDAR not working. - STATUS_ROBOT_IMPAIRED = 5; + STATUS_ROBOT_IMPAIRED = 5; // [Robot State Error] Cannot navigate a route while recording a map. - STATUS_RECORDING = 6; + STATUS_RECORDING = 6; // [Route Error] There is no anchoring. - STATUS_NO_ANCHORING = 7; + STATUS_NO_ANCHORING = 7; // [Route Error] There is no path to a waypoint near the specified goal. // If any waypoints were found (but no path), the error_waypoint_ids field // will be filled. - STATUS_NO_PATH = 8; + STATUS_NO_PATH = 8; // [Route Error] Route contained too many waypoints with low-quality features. - STATUS_FEATURE_DESERT = 10; + STATUS_FEATURE_DESERT = 10; // [Route Error] Happens when you try to issue a navigate to while the robot is lost. - STATUS_LOST = 11; - // [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). + STATUS_LOST = 11; + // [Route Error] Happens when the current localization doesn't refer to any waypoint in the + // map (possibly uninitialized localization). STATUS_NOT_LOCALIZED_TO_MAP = 13; // [Wrestling error] Happens when graph nav refuses to follow the route you specified. STATUS_COULD_NOT_UPDATE_ROUTE = 12; - // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate to a different - // waypoint, or clear the route and try again. - STATUS_STUCK = 14; - // [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. - STATUS_UNRECOGNIZED_COMMAND = 15; + // [Route Error] Happens when you try to issue a navigate to while the robot is stuck. + // Navigate to a different waypoint, or clear the route and try again. + STATUS_STUCK = 14; + // [Request Error] Happens when you try to continue a command that was either expired, or + // had an unrecognized id. + STATUS_UNRECOGNIZED_COMMAND = 15; // [Route Error] The pose is invalid, or known to be unachievable (upside-down, etc). - STATUS_INVALID_POSE = 16; + STATUS_INVALID_POSE = 16; - // [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. + // [Route Error] Happens when you try to navigate along a route and a needed callback is no + // longer available. STATUS_AREA_CALLBACK_ERROR = 17; - // [Route Error] The command contained an invalid GPS request. See gps_status for more details. + // [Route Error] The command contained an invalid GPS request. See gps_status for more + // details. STATUS_INVALID_GPS_COMMAND = 18; - } // Return status for the request. Status status = 3; @@ -694,7 +763,8 @@ message NavigateToAnchorResponse { // Unique identifier for the command, If 0, command was not accepted. uint32 command_id = 4; - // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. + // On a relevant error status code, these fields contain the waypoint/edge IDs that caused the + // error. repeated string error_waypoint_ids = 5; // Errors about Area Callbacks in the map. @@ -706,23 +776,22 @@ message NavigateToAnchorResponse { GPS_STATUS_UNKNOWN = 0; // The GPS command was valid and can be executed. GPS_STATUS_OK = 1; - // The GPS command could not be completed because the map does not have GPS coordinates, neither in - // waypoint annotations nor in the waypoint snapshot data. Please record the map using a GPS-enabled robot, - // or annotate the waypoints with custom GPS coordinates. + // The GPS command could not be completed because the map does not have GPS coordinates, + // neither in waypoint annotations nor in the waypoint snapshot data. Please record the map + // using a GPS-enabled robot, or annotate the waypoints with custom GPS coordinates. GPS_STATUS_NO_COORDS_IN_MAP = 2; - // The GPS command could not be completed because the coordinates passed in were too far from any mapped GPS - // data. + // The GPS command could not be completed because the coordinates passed in were too far + // from any mapped GPS data. GPS_STATUS_TOO_FAR_FROM_MAP = 3; } // Result of the GPS command. GPSStatus gps_status = 8; - } // The NavigationFeedback request message uses the command_id of a navigation request to get -// the robot's progress and current status for the command. Note that all commands return immediately -// after they are processed, and the robot will continue to execute the command asynchronously until -// it times out or completes. New commands override old ones. +// the robot's progress and current status for the command. Note that all commands return +// immediately after they are processed, and the robot will continue to execute the command +// asynchronously until it times out or completes. New commands override old ones. message NavigationFeedbackRequest { // Common request header. RequestHeader header = 1; @@ -753,13 +822,14 @@ message NavigationFeedbackResponse { STATUS_NO_LOCALIZATION = 4; // Robot appears to be lost. STATUS_LOST = 5; - // Robot appears stuck and unable to make progress, but can still navigate to other destinations. - // stuck_reason provides more details on the reason that caused the robot to become stuck. + // Robot appears stuck and unable to make progress, but can still navigate to other + // destinations. stuck_reason provides more details on the reason that caused the robot to + // become stuck. STATUS_STUCK = 6; // The command expired. STATUS_COMMAND_TIMED_OUT = 7; - // Cannot navigate a route if the robot has a crtical perception fault, or behavior fault, - // or LIDAR not working. See impared_status for details. + // Cannot navigate a route if the robot has a critical perception fault, or behavior fault, + // or LIDAR not working. See impaired_status for details. STATUS_ROBOT_IMPAIRED = 8; // The route constraints were not feasible. STATUS_CONSTRAINT_FAULT = 11; @@ -810,7 +880,7 @@ message NavigationFeedbackResponse { bosdyn.api.graph_nav.Edge.Annotations.PathFollowingMode path_following_mode = 8; // Map of Region IDs with relevant information - map active_region_information = 10; + map active_region_information = 10; // Data for a Area Callback region message ActiveRegionInformation { @@ -822,7 +892,7 @@ message NavigationFeedbackResponse { AreaCallbackStatus region_status = 3; enum AreaCallbackStatus { - STATUS_UNKNOWN = 0; + STATUS_UNKNOWN = 0; // The robot is navigating the Area Callback region STATUS_NAVIGATING = 1; // The robot is waiting for assistance to navigate through the Area Callback region @@ -832,9 +902,9 @@ message NavigationFeedbackResponse { } } - // When the robot is following a route (and Status is STATUS_FOLLOWING_ROUTE), this gives additional - // detail about what the robot is doing to follow that route. When Status is not STATUS_FOLLOWING_ROUTE, - // this will be set to ROUTE_FOLLOWING_STATUS_UNKNOWN. + // When the robot is following a route (and Status is STATUS_FOLLOWING_ROUTE), this gives + // additional detail about what the robot is doing to follow that route. When Status is not + // STATUS_FOLLOWING_ROUTE, this will be set to ROUTE_FOLLOWING_STATUS_UNKNOWN. enum RouteFollowingStatus { ROUTE_FOLLOWING_STATUS_UNKNOWN = 0; // The robot is following the nominal path to the goal, either from a request or @@ -854,23 +924,25 @@ message NavigationFeedbackResponse { // Additional information about what kind of route the robot is following and why. RouteFollowingStatus route_following_status = 1000; - // Indicates whether the robot thinks its current path is blocked by an obstacle. This will be set when - // Status is STATUS_FOLLOWING_ROUTE, or STATUS_STUCK, and will be BLOCKAGE_STATUS_UNKNOWN in all other cases. + // Indicates whether the robot thinks its current path is blocked by an obstacle. This will be + // set when Status is STATUS_FOLLOWING_ROUTE, or STATUS_STUCK, and will be + // BLOCKAGE_STATUS_UNKNOWN in all other cases. enum BlockageStatus { BLOCKAGE_STATUS_UNKNOWN = 0; // The robot believes the path forward to be clear of obstacles. BLOCKAGE_STATUS_ROUTE_CLEAR = 1; // The robot believes there is an obstacle in the path which it can't get around easily. - // It will attempt to get around the obstacle, and if all else fails it will declare itself stuck. + // It will attempt to get around the obstacle, and if all else fails it will declare itself + // stuck. BLOCKAGE_STATUS_ROUTE_BLOCKED_TEMPORARILY = 2; - // The robot has given up trying to get around perceived obstacles in the path and has declared itself stuck. - // This will only ever be set when Status is STATUS_STUCK. + // The robot has given up trying to get around perceived obstacles in the path and has + // declared itself stuck. This will only ever be set when Status is STATUS_STUCK. BLOCKAGE_STATUS_STUCK = 3; }; - // Additional information about whether or not the robot believes the current route to be blocked. + // Additional information about whether or not the robot believes the current route to be + // blocked. BlockageStatus blockage_status = 1001; - // If status is STATUS_STUCK, this enum provides reasons differentiating various cases that // can cause the robot to re enum StuckReason { @@ -909,7 +981,7 @@ message GetLocalizationStateRequest { bool request_live_images = 3; // If true, request the live terrain maps at the time of localization. bool request_live_terrain_maps = 4; - // If true, reqeuest the live world objects at the time of localization. + // If true, request the live world objects at the time of localization. bool request_live_world_objects = 5; // If true, requests the full live robot state at the time of localization. bool request_live_robot_state = 6; @@ -939,19 +1011,62 @@ message RemotePointCloudStatus { // * Calling SetLocalization RPC. message LostDetectorState { // Whether or not the robot is currently lost. If this is true, graph nav will reject - // NavigateTo or NavigateRoute RPC's. + // NavigateTo or NavigateRoute RPCs. bool is_lost = 1; - + // The lost detector either accepts or rejects localizations based on a scoring criteria. + // This is the total number of localizations that have been accepted since the last + // SetLocalization RPC. + int32 total_num_accepted_localizations = 2; + // This is the total number of localizations that have been rejected since the last + // SetLocalization RPC. + int32 total_num_rejected_localizations = 3; + // This is the total number of localizations that have been rejected by the lost detector since + // either a localization was accepted, or a SetLocalization RPC. + int32 num_rejected_localizations_since_accepted = 4; + // This is the number of meters (3d translation of the robot body) the lost detector believes + // the robot to have traveled since it had a rejected localization. + float distance_traveled_with_rejected_localization = 5; + // This is the most recent localization the lost detector accepted. + Localization last_accepted_localization = 6; + // This is the most recent localization that the lost detector rejected. + Localization last_rejected_localization = 7; + // The number of edges the LostDetector believes the robot has crossed without first getting an + // accepted localization. + int32 num_consecutive_bad_edges = 8; + + // Parameters for the lost detector which control when it determines that we are lost. + // In general, when we start seeing "bad" localizations, (based on sensor data and map data + // agreement) we start counting the amount of time and distance the robot has traveled before we + // see a "good" localization. If this distance exceeds a threshold, we then start counting the + // number of edges that the robot has crossed with a "bad" localization. Once a number of edges + // crosses a threshold, we then declare the robot lost. Note that these thresholds are + // hierarchical; so we first start counting time, then distance, then number of edges. + message Params { + // Maximum time (seconds) that the robot can walk with a bad localization before we start + // counting distance/edges with bad localization. + double max_time_with_bad_localization = 1; + // The maximum distance the robot can walk (m) with a bad localization before we start + // counting the number of edges with bad localization. + double max_distance_with_bad_localization = 2; + // The maximum number of edges the robot can walk with a bad localization before we declare + // the robot to be lost. + int32 max_num_edges_with_bad_localization = 3; + // Determines how "strict" the lost detector is about declaring lost. This value is used to + // set the other thresholds. + LostDetectorStrictness strictness = 4; + } + // Parameters the lost detector is using. + Params params = 9; } -// The GetLocalizationState response message returns the current localization and robot state, as well -// as any requested live data information. +// The GetLocalizationState response message returns the current localization and robot state, as +// well as any requested live data information. message GetLocalizationStateResponse { // Common response header. ResponseHeader header = 1; - // Where the robot currently is. If a waypoint_id was specified in the request, this localization - // will be relative to that waypoint. + // Where the robot currently is. If a waypoint_id was specified in the request, this + // localization will be relative to that waypoint. Localization localization = 2; // Robot kinematic state at time of localization. @@ -971,8 +1086,9 @@ message GetLocalizationStateResponse { LostDetectorState lost_detector_state = 7; - // If the robot has GPS capability and the map was recorded with GPS, this message will show graph nav's estimate of - // the robot location in earth-centered frames. To see the raw GPS data, look at the WorldObject list. + // If the robot has GPS capability and the map was recorded with GPS, this message will show + // graph nav's estimate of the robot location in earth-centered frames. To see the raw GPS data, + // look at the WorldObject list. GPSLocalization gps = 8; } @@ -1017,11 +1133,22 @@ message UploadGraphRequest { // If this is true, generate an (overwrite the) anchoring on upload. bool generate_new_anchoring = 4; - // If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be returned. This is false by - // default. + // If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be + // returned. This is false by default. bool treat_validation_warnings_as_errors = 5; } +// This is a streaming version of the UploadGraph request. +message UploadGraphStreamingRequest { + // Common request header. + RequestHeader header = 1; + // Serialized bytes of a UploadGraphRequest message, restricted to a chunk no larger than 4MB in + // size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in + // order as DataChunk objects. The chunks will be concatenated together on the server, and + // deserialized. + DataChunk chunk = 2; +} + // Response to the UploadGraphRequest. After uploading a graph, the user is expected // to upload large data at waypoints and edges (called snapshots). The response provides // a list of snapshot IDs which are not yet cached on the server. Snapshots with these IDs should @@ -1036,9 +1163,9 @@ message UploadGraphResponse { STATUS_MAP_TOO_LARGE_LICENSE = 3; // The graph or its anchoring are invalid. See the ValidationStatus for more details. STATUS_INVALID_GRAPH = 4; - // The sensor data associated with this graph is incompatible with the current robot. A common example - // would be trying to upload a map recorded on a robot that had LIDAR to a robot that did not, or vice - // versa. + // The sensor data associated with this graph is incompatible with the current robot. A + // common example would be trying to upload a map recorded on a robot that had LIDAR to a + // robot that did not, or vice versa. STATUS_INCOMPATIBLE_SENSORS = 5; // There is an error associated with one of the area callbacks in this graph. STATUS_AREA_CALLBACK_ERROR = 6; @@ -1074,51 +1201,61 @@ message UploadGraphResponse { // are the missing IDs. This is a warning. The anchorings will be ignored. repeated string missing_waypoint_ids_in_anchors = 2; // One or more edges had an invalid from_tform_to transform. These are the edge IDs uploaded - // that have an invalid transform. Valid transforms have quaternion rotations that are normalized. - // This is a warning. Edges with invalid transforms will be fixed on upload. + // that have an invalid transform. Valid transforms have quaternion rotations that are + // normalized. This is a warning. Edges with invalid transforms will be fixed on upload. repeated Edge.Id edge_ids_invalid_transform = 3; - // One or more waypoint anchors in the anchoring have an invalid transform. These are the waypoint IDs - // that have an invalid transform. Valid transforms have quaternion rotations that are normalized. - // This is a warning. Anchors with invalid transforms will be fixed on upload. + // One or more waypoint anchors in the anchoring have an invalid transform. These are the + // waypoint IDs that have an invalid transform. Valid transforms have quaternion rotations + // that are normalized. This is a warning. Anchors with invalid transforms will be fixed on + // upload. repeated string waypoint_anchors_invalid_transform = 4; - // One or more of the object achors in the anchoring have an invalid transform. These are the object IDs - // that have an invalid transform. Valid transforms have quaternion rotations that are normalized. - // This is a warning. Anchors with invalid transforms will be fixed on upload. + // One or more of the object anchors in the anchoring have an invalid transform. These are + // the object IDs that have an invalid transform. Valid transforms have quaternion rotations + // that are normalized. This is a warning. Anchors with invalid transforms will be fixed on + // upload. repeated string object_anchors_invalid_transform = 5; - // The Graph in the UploadGraph request contained more than one waypoint with the same ID. These are the - // waypoint IDs which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list - // the same number of times they are duplicated in the request. - // This is an error. Fix the graph and re-upload. + // The Graph in the UploadGraph request contained more than one waypoint with the same ID. + // These are the waypoint IDs which occur in the UploadGraph request more than once. Note + // that IDs are duplicated in this list the same number of times they are duplicated in the + // request. This is an error. Fix the graph and re-upload. repeated string duplicate_waypoint_ids = 6; - // The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are duplicated in this list - // the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. + // The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are + // duplicated in this list the same number of times they are duplicated in the request. This + // is a warning. Only the first anchor will be used. repeated string duplicate_waypoint_anchor_ids = 7; - // The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs are duplicated in this list - // the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. + // The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs + // are duplicated in this list the same number of times they are duplicated in the request. + // This is a warning. Only the first anchor will be used. repeated string duplicate_object_anchor_ids = 8; - // The Graph in the UploadGraph request contained more than one edge with the equivalent ID. These are the edge IDs - // which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list the same number - // of times that they are duplicated in the request. Note that edges are *not* directional, and it is impossible - // to have both a->b *and* b->a in the same map. This is an error. Fix the graph and re-upload. + // The Graph in the UploadGraph request contained more than one edge with the equivalent ID. + // These are the edge IDs which occur in the UploadGraph request more than once. Note that + // IDs are duplicated in this list the same number of times that they are duplicated in the + // request. Note that edges are *not* directional, and it is impossible to have both a->b + // *and* b->a in the same map. This is an error. Fix the graph and re-upload. repeated Edge.Id duplicate_edge_ids = 9; - // Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint IDs which have self - // edges in the UploadGraph request. This is an error. Fix the graph and re-upload. + // Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint + // IDs which have self edges in the UploadGraph request. This is an error. Fix the graph and + // re-upload. repeated string invalid_waypoint_ids_self_edges = 10; - // At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and re-upload. + // At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and + // re-upload. bool has_empty_waypoint_ids = 11; // At least one edge in the graph references a waypoint with an empty ID. // This is an error. Fix the graph and re-upload. bool has_empty_edge_ids = 12; - // At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. + // At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty + // anchors will be ignored. bool has_empty_waypoint_anchor_ids = 13; - // At least one object anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. + // At least one object anchor in the anchoring has an empty ID. This is a warning. Empty + // anchors will be ignored. bool has_empty_object_anchor_ids = 14; - // One or more edges had a malformed staircase annotation. This is an error. Remove, rerecord, or fix the annotation. + // One or more edges had a malformed staircase annotation. This is an error. Remove, + // rerecord, or fix the annotation. repeated Edge.Id malformed_staircase_edge_ids = 15; } - // If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about why the - // graph was invalid. Note that some graph validation errors are warnings and the robot will be able to navigate - // on the graph even when they are present. + // If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about + // why the graph was invalid. Note that some graph validation errors are warnings and the robot + // will be able to navigate on the graph even when they are present. ValidationStatus validation_status = 12; } @@ -1140,6 +1277,17 @@ message DownloadGraphResponse { Graph graph = 2; } +// Streaming version of the DownloadGraphResponse. +message DownloadGraphStreamingResponse { + // Common response header. + ResponseHeader header = 1; + // Chunk of data to download. Responses are sent in sequence until the + // data chunk is complete. After receiving all chunks, concatenate them + // into a single byte string. Then, deserialize the byte string into a + // DownloadGraphResponse object. + DataChunk chunk = 2; +} + // Used to upload waypoint snapshot in chunks for a specific waypoint snapshot. Waypoint // snapshots consist of the large sensor data at each waypoint. @@ -1148,9 +1296,10 @@ message DownloadGraphResponse { message UploadWaypointSnapshotRequest { // Common response header. RequestHeader header = 1; - // Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in size. - // To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects. - // The chunks will be concatenated together on the server, and deserialized. + // Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in + // size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in + // order as DataChunk objects. The chunks will be concatenated together on the server, and + // deserialized. DataChunk chunk = 3; // The Leases to show ownership of the graph-nav service. Lease lease = 4; @@ -1188,8 +1337,8 @@ message UploadEdgeSnapshotRequest { // Common response header. RequestHeader header = 1; // Serialized bytes of a EdgeSnapshot message, restricted to a chunk no larger than 4MB in size. - // To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects. - // The chunks will be concatenated together on the server, and deserialized + // To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as + // DataChunk objects. The chunks will be concatenated together on the server, and deserialized DataChunk chunk = 4; // The Leases to show ownership of the graph-nav service. Lease lease = 5; @@ -1285,10 +1434,8 @@ message DownloadEdgeSnapshotResponse { DataChunk chunk = 5; } - -// Information about problems Area Callback services specifified in a map or on a route. -message AreaCallbackServiceError{ - +// Information about problems Area Callback services specified in a map or on a route. +message AreaCallbackServiceError { // Area Callback services that were requested but could not be contacted by graph nav. // A service is considered missing if it is either not registered, or if it is registered // but does not respond to a AreaCallbackInformation request. @@ -1296,10 +1443,8 @@ message AreaCallbackServiceError{ // Area Callback services that were requested but are reporting critical faults. repeated ServiceFault faulted_services = 2; - } - // Run a check on the currently loaded map. message ValidateGraphRequest { RequestHeader header = 1; diff --git a/protos/bosdyn/api/graph_nav/graph_nav_service.proto b/protos/bosdyn/api/graph_nav/graph_nav_service.proto index 87afd8507..c44048152 100644 --- a/protos/bosdyn/api/graph_nav/graph_nav_service.proto +++ b/protos/bosdyn/api/graph_nav/graph_nav_service.proto @@ -12,28 +12,28 @@ option java_outer_classname = "GraphNavServiceProto"; import "bosdyn/api/graph_nav/graph_nav.proto"; -// The GraphNav service service is a place-based localization and locomotion service. The service can -// be used to get/set the localization, upload and download the current graph nav maps, and send navigation -// requests to move around the map. +// The GraphNav service service is a place-based localization and locomotion service. The service +// can be used to get/set the localization, upload and download the current graph nav maps, and send +// navigation requests to move around the map. service GraphNavService { // Trigger a manual localization. Typically done to provide the initial localization. - rpc SetLocalization (SetLocalizationRequest) returns (SetLocalizationResponse) {} + rpc SetLocalization(SetLocalizationRequest) returns (SetLocalizationResponse) {} // Tell GraphNav to navigate/traverse a given route. - rpc NavigateRoute (NavigateRouteRequest) returns (NavigateRouteResponse) {} + rpc NavigateRoute(NavigateRouteRequest) returns (NavigateRouteResponse) {} // Tell GraphNav to navigate to a waypoint along a route it chooses. - rpc NavigateTo (NavigateToRequest) returns (NavigateToResponse) {} + rpc NavigateTo(NavigateToRequest) returns (NavigateToResponse) {} // Tell GraphNav to navigate to a goal with respect to the current anchoring. - rpc NavigateToAnchor (NavigateToAnchorRequest) returns (NavigateToAnchorResponse) {} + rpc NavigateToAnchor(NavigateToAnchorRequest) returns (NavigateToAnchorResponse) {} // Get feedback on active navigation command. - rpc NavigationFeedback (NavigationFeedbackRequest) returns (NavigationFeedbackResponse) {} + rpc NavigationFeedback(NavigationFeedbackRequest) returns (NavigationFeedbackResponse) {} // Get the localization status and data. - rpc GetLocalizationState (GetLocalizationStateRequest) returns (GetLocalizationStateResponse) {} + rpc GetLocalizationState(GetLocalizationStateRequest) returns (GetLocalizationStateResponse) {} // Clears the local graph structure. Also erases any snapshots currently in RAM. rpc ClearGraph(ClearGraphRequest) returns (ClearGraphResponse) {} @@ -41,26 +41,44 @@ service GraphNavService { // Download the graph structure. rpc DownloadGraph(DownloadGraphRequest) returns (DownloadGraphResponse) {} + // This is a streaming version of the DownloadGraph RPC. + rpc DownloadGraphStreaming(DownloadGraphRequest) + returns (stream DownloadGraphStreamingResponse) {} + // Upload the full list of waypoint IDs, graph topology and other small info. - rpc UploadGraph (UploadGraphRequest) returns (UploadGraphResponse) {} + // Note: if multiple clients/RPCs are attempting to upload a graph at the same time, uploads + // will be performed synchronously in the order in which they are received, and the later + // UploadGraph request will block until the earlier completes. + rpc UploadGraph(UploadGraphRequest) returns (UploadGraphResponse) {} + + // This is a streaming version of UploadGraph to allow uploading larger graphs. + // Note: as with UploadWaypointSnapshot, this streaming process involves serializing a full + // UploadGraph message from chunks. After all the chunks have been uploaded, a regular + // UploadGraph RPC will be performed internally, so UploadGraphStreaming has the same semantics + // as UploadGraph when it completes. That is, UploadGraphStreaming is *not* to be used for + // incrementally uploading graph data as the robot is navigating -- this is merely a streaming + // wrapper around UploadGraph. + rpc UploadGraphStreaming(stream UploadGraphStreamingRequest) returns (UploadGraphResponse) {} // Uploads large waypoint snapshot as a stream for a particular waypoint. - rpc UploadWaypointSnapshot (stream UploadWaypointSnapshotRequest) returns (UploadWaypointSnapshotResponse) {} + rpc UploadWaypointSnapshot(stream UploadWaypointSnapshotRequest) + returns (UploadWaypointSnapshotResponse) {} // Uploads large edge snapshot as a stream for a particular edge. - rpc UploadEdgeSnapshot (stream UploadEdgeSnapshotRequest) returns (UploadEdgeSnapshotResponse) {} + rpc UploadEdgeSnapshot(stream UploadEdgeSnapshotRequest) returns (UploadEdgeSnapshotResponse) {} - // Download waypoint data from the server. If the snapshot exists in disk cache, it will be loaded. - rpc DownloadWaypointSnapshot (DownloadWaypointSnapshotRequest) returns (stream DownloadWaypointSnapshotResponse) {} + // Download waypoint data from the server. If the snapshot exists in disk cache, it will be + // loaded. + rpc DownloadWaypointSnapshot(DownloadWaypointSnapshotRequest) + returns (stream DownloadWaypointSnapshotResponse) {} // Download edge data from the server. If the snapshot exists in disk cache, it will be loaded. - rpc DownloadEdgeSnapshot (DownloadEdgeSnapshotRequest) returns (stream DownloadEdgeSnapshotResponse) {} + rpc DownloadEdgeSnapshot(DownloadEdgeSnapshotRequest) + returns (stream DownloadEdgeSnapshotResponse) {} // Verify that the graph is still valid and all required external services are still available. - // A map that was valid at upload time may not still be valid if required services are no longer running. + // A map that was valid at upload time may not still be valid if required services are no longer + // running. rpc ValidateGraph(ValidateGraphRequest) returns (ValidateGraphResponse) {} - - - } diff --git a/protos/bosdyn/api/graph_nav/lost_detection.proto b/protos/bosdyn/api/graph_nav/lost_detection.proto new file mode 100644 index 000000000..b7d3f5fe8 --- /dev/null +++ b/protos/bosdyn/api/graph_nav/lost_detection.proto @@ -0,0 +1,18 @@ +// Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +// +// Downloading, reproducing, distributing or otherwise using the SDK Software +// is subject to the terms and conditions of the Boston Dynamics Software +// Development Kit License (20191101-BDSDK-SL). + +syntax = "proto3"; +package bosdyn.api.graph_nav; +option java_outer_classname = "LostDetectionProto"; + +// Determines how "strict" the lost detector is about declaring lost. +enum LostDetectorStrictness { + LOST_DETECTOR_STRICTNESS_UNKNOWN = 0; // Unset (defaults to STRICTNESS_DEFAULT). + LOST_DETECTOR_STRICTNESS_DISABLED = 1; // Never declares lost. + LOST_DETECTOR_STRICTNESS_PERMISSIVE = 2; // Declares lost less readily than default. + LOST_DETECTOR_STRICTNESS_DEFAULT = 3; // Default lost detector strictness. + LOST_DETECTOR_STRICTNESS_STRICT = 4; // Declares lost more readily than default. +}; \ No newline at end of file diff --git a/protos/bosdyn/api/graph_nav/map.proto b/protos/bosdyn/api/graph_nav/map.proto index d54215536..8a8379d9a 100644 --- a/protos/bosdyn/api/graph_nav/map.proto +++ b/protos/bosdyn/api/graph_nav/map.proto @@ -9,6 +9,8 @@ syntax = "proto3"; package bosdyn.api.graph_nav; option java_outer_classname = "MapProto"; +import "bosdyn/api/graph_nav/lost_detection.proto"; +import "bosdyn/api/graph_nav/visual_features.proto"; import "bosdyn/api/geometry.proto"; import "bosdyn/api/graph_nav/area_callback_data.proto"; import "bosdyn/api/image.proto"; @@ -129,21 +131,30 @@ message Waypoint { // a particular intersection or near a dock. LoopClosureSettings loop_closure_settings = 7; - // Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) frame, which - // can aid in localization. + // Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) + // frame, which can aid in localization. message GPSSettings { - // If the annotation state is set, the GPS settings will be applied. Otherwise, they will be ignored. - // If ignored, GPS will only be used at this waypoint if data from a GPS exists in the waypoint snapshot, and the - // robot has a GPS payload installed and running. Set the annotation state to override this behavior. + // If the annotation state is set, the GPS settings will be applied. Otherwise, they + // will be ignored. If ignored, GPS will only be used at this waypoint if data from a + // GPS exists in the waypoint snapshot, and the robot has a GPS payload installed and + // running. Set the annotation state to override this behavior. AnnotationState state = 1; // This defines the pose of the waypoint in the Earth-Centered-Earth-Fixed (ECEF) frame. SE3Pose ecef_tform_waypoint = 2; - // If true, GPS localization will be disabled at this waypoint. If false, the robot will use GPS when available - // to localize to this waypoint. + // If true, GPS localization will be disabled at this waypoint. If false, the robot will + // use GPS when available to localize to this waypoint. bool disable_gps_localization = 5; } // Optional GPS navigation settings for this waypoint. GPSSettings gps_settings = 8; + + // Regions may be defined around the waypoint which affect how scan matching or other + // parameters work. + repeated RegionWithFrame regions = 9; + + // Strictness of the lost detector to use while traversing this waypoint. If unset, the + // default strictness will be used. + LostDetectorStrictness lost_detector_strictness = 10; } // Annotations specific to the current waypoint. Annotations annotations = 4; @@ -216,6 +227,7 @@ message WaypointSnapshot { // Information about when the recording session started in robot time basis. // This will be filled out by the recording service when StartRecording is called. google.protobuf.Timestamp recording_started_on = 15; + } @@ -263,7 +275,6 @@ message Edge { // Annotations understood by BostonDynamics systems. message Annotations { - // Defines any parameters of the stairs message StairData { // Check this before reading other fields. @@ -327,6 +338,7 @@ message Edge { // If true, the edge crosses flat ground and the robot shouldn't try to climb over // obstacles. // DEPRECATED as of 3.3. Replaced by ground_clutter_mode. + // As of 4.1, no longer functional. google.protobuf.BoolValue flat_ground = 6 [deprecated = true]; // Overrides the following fields of the mobility parameters to whatever is @@ -360,6 +372,12 @@ message Edge { // Path following mode for this edge. PathFollowingMode path_following_mode = 14; + // Max distance from the recorded edge that the robot is allowed to travel when avoiding + // obstacles or optimized its path. This is half of the full width of the corridor the robot + // may walk within. If this value is not set, the robot will choose a default corridor + // width. + double max_corridor_distance = 18; + // Disable directed exploration for this edge. bool disable_directed_exploration = 15; @@ -496,3 +514,58 @@ message MapStats { // map. double total_path_length = 9; } + +// Defines a region in a map. Regions are shapes, commonly they are boxes. Many waypoints may share +// the same regions. Regions do not need to cover the waypoint itself. A common use for such regions +// is to define certain parts of the point cloud as being unreliable for localization. Note that +// this is a different concept than the LocalizeRegion, which is used to determine where the robot's +// body must be relative to the waypoint for it to localize -- the RegionWithFrame instead can be +// used to label data near the waypoint. *Regions and Reference Frames* -- regions are stored inside +// waypoint annotations as "RegionWithFrames". These consist of a region and a named reference frame +// relative to the waypoint (such as "odom" or "seed", or "waypoint" etc). +message Region { + // Unique identifier of the region within a map. This will be used to deduplicate + // regions that many waypoints may reference. Note that the transform of the region is + // defined with respect to this waypoint's KO frame, so the same region may exist in several + // waypoints while having different transforms in each case. Regions with the same ID are not + // guaranteed to be unique. Graph Nav will use whatever regions exist in the current waypoint + // only, and will ignore all other regions; so if you want Graph Nav to use a region in multiple + // waypoints, you must duplicate the region into each waypoint in which it is to be used. + string region_id = 1; + + oneof shape { + // Oriented bounding box defining the region. The axes are defined relative to the "base + // frame" for this region. See RegionWithFrame for how this frame may be defined. + Box3 bounding_box = 2; + }; + + // Defines how scan match data is filtered near this waypoint. Data filters are logical set + // operators expressed on sets of data near the waypoint. Notes on interactions: If there are + // multiple regions marked as INCLUDE_ONLY, data that falls within any of these regions will be + // used, that is the operation of many DATA_FILTER_INCLUDE_ONLY regions is a logical set union. + // Conversely, DATA_FILTER_IGNORE operators override DATA_FILTER_INCLUDE_ONLY. + // For example, if there are 3 regions, A, B and C; and region A is marked as INCLUDE_ONLY, B is + // marked as INCLUDE_ONLY, and C is marked as IGNORE, the data that will be used for scan + // matching is: (A _u_ B) ~ C (that is, union(A, B) excluding C). + enum DataFilter { + DATA_FILTER_UNKNOWN = 0; // Defaults to DATA_FILTER_NONE. + DATA_FILTER_NONE = 1; // No special considerations for scan matching in this region. + DATA_FILTER_IGNORE = 2; // No scan match data falling within this region will be used. + DATA_FILTER_INCLUDE_ONLY = 3; // Only data from within this region will be used. + } + // How (if at all) the region affects data filtering for scan matching. + DataFilter data_filter = 3; +} + +// Defines a region and a transform near a specific waypoint. Regions will only be used if they are +// attached to waypoint annotations. Regions may be duplicated over many waypoints. +message RegionWithFrame { + // The region attached to this waypoint. + Region region = 1; + // Reference frame that the region's transform is defined with respect to. For example, + // "waypoint" for the waypoint's reference frame, or "odom" for the odometry frame at the time + // of waypoint recording. + string base_frame_name = 2; + // Transform of the region in the base frame. + SE3Pose base_frame_tform_region = 3; +} diff --git a/protos/bosdyn/api/graph_nav/map_processing.proto b/protos/bosdyn/api/graph_nav/map_processing.proto index 7af614c5b..80b6f4c7b 100644 --- a/protos/bosdyn/api/graph_nav/map_processing.proto +++ b/protos/bosdyn/api/graph_nav/map_processing.proto @@ -23,7 +23,8 @@ package bosdyn.api.graph_nav; // sessions so long as they share fiducial observations. message ProcessTopologyRequest { // Parameters for how to refine loop closure edges using iterative - // closest point matching. + // closest point matching. If both ICP and Feature matching are used, feature matching + // will be performed first for a coarse alignment, followed by ICP for a local refinement. message ICPParams { // The maximum number of iterations to run. Set to zero to skip ICP processing. google.protobuf.Int32Value icp_iters = 1; @@ -31,6 +32,13 @@ message ProcessTopologyRequest { // accept for matches. google.protobuf.DoubleValue max_point_match_distance = 2; } + // Parameters to control point cloud sparse feature matching. + message FeatureMatchingParams { + // If true, feature matching will be performed. If both ICP and Feature matching are used, + // feature matching + // will be performed first for a coarse alignment, followed by ICP for a local refinement. + google.protobuf.BoolValue do_feature_matching = 1; + } // Parameters for how to close loops using odometry. This infers which waypoints // should be connected to one another based on the odometry measurements in the map. message OdometryLoopClosureParams { @@ -59,7 +67,7 @@ message ProcessTopologyRequest { google.protobuf.Int32Value num_extra_loop_closure_iterations = 5; // If true, redundant edges will be ignored, and only the "best" in a small area // will be selected (true by default). - google.protobuf.BoolValue prune_edges = 6; + google.protobuf.BoolValue prune_edges = 6; } // Parameters for how to close a loop using fiducials (AprilTags). This infers // which waypoints should be connected to one another based on shared observations @@ -85,7 +93,7 @@ message ProcessTopologyRequest { google.protobuf.DoubleValue max_loop_closure_height_change = 4; // If true, redundant edges will be ignored, and only the "best" in a small area // will be selected (true by default). - google.protobuf.BoolValue prune_edges = 5; + google.protobuf.BoolValue prune_edges = 5; } // Parameters for how to check for collisions when creating loop closures. The system // will avoid creating edges in the map that the robot cannot actually traverse due to @@ -119,11 +127,13 @@ message ProcessTopologyRequest { // Parameters which control rejecting loop closure candidates which // collide with obstacles. CollisionCheckingParams collision_check_params = 6; - // Causes the processing to time out after this many seconds. If not set, a default of 45 seconds - // will be used. If this timeout occurs before the overall RPC timeout, a partial result will be - // returned with ProcessTopologyResponse.timed_out set to true. Processing can be continued by - // calling ProcessTopology again. + // Causes the processing to time out after this many seconds. If not set, a default of 45 + // seconds will be used. If this timeout occurs before the overall RPC timeout, a partial + // result will be returned with ProcessTopologyResponse.timed_out set to true. Processing + // can be continued by calling ProcessTopology again. double timeout_seconds = 7; + // Controls whether and how the service performs sparse feature matching. + FeatureMatchingParams feature_matching_params = 8; } // Standard message header. RequestHeader header = 1; @@ -144,11 +154,15 @@ message ProcessTopologyResponse { ResponseHeader header = 1; enum Status { - STATUS_UNKNOWN = 0; // Programming error. - STATUS_OK = 1; // Success. - STATUS_MISSING_WAYPOINT_SNAPSHOTS = 2; // Not all of the waypoint snapshots exist on the server. Upload them to continue. - STATUS_INVALID_GRAPH = 3; // The graph is invalid topologically, for example containing missing waypoints referenced by edges. - STATUS_MAP_MODIFIED_DURING_PROCESSING = 4; // Tried to write the anchoring after processing, but another client may have modified the map. Try again + STATUS_UNKNOWN = 0; // Programming error. + STATUS_OK = 1; // Success. + STATUS_MISSING_WAYPOINT_SNAPSHOTS = + 2; // Not all of the waypoint snapshots exist on the server. Upload them to continue. + STATUS_INVALID_GRAPH = 3; // The graph is invalid topologically, for example containing + // missing waypoints referenced by edges. + STATUS_MAP_MODIFIED_DURING_PROCESSING = + 4; // Tried to write the anchoring after processing, but another client may have + // modified the map. Try again } // Result of the processing. Status status = 2; @@ -159,10 +173,10 @@ message ProcessTopologyResponse { Graph new_subgraph = 3; // If modify_map_on_server was set to true in the request, then the map currently on the server - // was modified using map processing. If this is set to false, then either an error occurred during - // processing, or modify_map_on_server was set to false in the request. - // When map_on_server_was_modified is set to false, the client is expected to upload the results - // back to the server to commit the changes. + // was modified using map processing. If this is set to false, then either an error occurred + // during processing, or modify_map_on_server was set to false in the request. When + // map_on_server_was_modified is set to false, the client is expected to upload the results back + // to the server to commit the changes. bool map_on_server_was_modified = 4; // When there are missing waypoint snapshots, these are the IDs of the missing snapshots. // Upload them to continue. @@ -170,8 +184,8 @@ message ProcessTopologyResponse { // When there are missing waypoints, these are the IDs of the missing waypoints. Upload them // to continue. repeated string missing_waypoint_ids = 11; - // If true, the processing timed out. Note that this is not considered an error. Run topology processing again - // to continue adding edges. + // If true, the processing timed out. Note that this is not considered an error. Run topology + // processing again to continue adding edges. bool timed_out = 12; } @@ -188,10 +202,11 @@ message PoseBounds { // Bounds on the z position in meters. double z_bounds = 3; // Bounds on the yaw (rotation around z axis) in radians. - double yaw_bounds= 4; + double yaw_bounds = 4; } -// Controls how certain the user is of an anchor's pose. If left empty, a reasonable default will be chosen. +// Controls how certain the user is of an anchor's pose. If left empty, a reasonable default will be +// chosen. message AnchorHintUncertainty { oneof uncertainty { // A full 6x6 Gaussian covariance matrix representing uncertainty of an anchoring. @@ -205,11 +220,11 @@ message AnchorHintUncertainty { // Waypoints may be anchored to a particular seed frame. The user may request that a waypoint // be anchored in a particular place with some Gaussian uncertainty. -// Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -// orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -// the orientation of the waypoint is correct with respect to gravity. By convention, waypoints' orientation -// is defined as: Z up, X forward, Y left. So, if the robot is flat on the ground, the waypoint's z axis should -// align with the seed frame's z axis. +// Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +// default, the orientation of the seed frame assumes gravity is pointing in the negative z +// direction. Take care to ensure that the orientation of the waypoint is correct with respect to +// gravity. By convention, waypoints' orientation is defined as: Z up, X forward, Y left. So, if the +// robot is flat on the ground, the waypoint's z axis should align with the seed frame's z axis. // z z // ^ ^ // | | @@ -224,21 +239,21 @@ message WaypointAnchorHint { // This is the uncertainty of the anchor's pose in the seed frame. // If left empty, a reasonable default uncertainty will be generated. AnchorHintUncertainty seed_tform_waypoint_uncertainty = 2; - // Normally, the optimizer will move the anchorings of waypoints based on context, to minimize the - // overall cost of the optimization problem. By providing a constraint on pose, the user can ensure - // that the anchors stay within a certain region in the seed frame. - // Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. + // Normally, the optimizer will move the anchorings of waypoints based on context, to minimize + // the overall cost of the optimization problem. By providing a constraint on pose, the user can + // ensure that the anchors stay within a certain region in the seed frame. Leaving this empty + // will allow the optimizer to move the anchoring from the hint as far as it likes. PoseBounds seed_tform_waypoint_constraint = 3; } -// World objects (such as fiducials) may be anchored to a particular seed frame. The user may request that an object -// be anchored in a particular place with some Gaussian uncertainty. -// Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -// orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -// the orientation of the world object is correct with respect to gravity. By convention, fiducials' orientation -// is defined as: Z out of the page, X up and Y left (when looking at the fiducial). So, if a fiducial is mounted -// perfectly flat against a wall, its orientation w.r.t the seed frame would have the top of the fiducial facing -// positive Z. +// World objects (such as fiducials) may be anchored to a particular seed frame. The user may +// request that an object be anchored in a particular place with some Gaussian uncertainty. Note on +// gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +// default, the orientation of the seed frame assumes gravity is pointing in the negative z +// direction. Take care to ensure that the orientation of the world object is correct with respect +// to gravity. By convention, fiducials' orientation is defined as: Z out of the page, X up and Y +// left (when looking at the fiducial). So, if a fiducial is mounted perfectly flat against a wall, +// its orientation w.r.t the seed frame would have the top of the fiducial facing positive Z. // +-----------+ z // | ^x | ^ // | | | | @@ -256,14 +271,14 @@ message WorldObjectAnchorHint { // If left empty, a reasonable default uncertainty will be generated. AnchorHintUncertainty seed_tform_object_uncertainty = 2; // Normally, the optimizer will move the anchorings of object based on context, to minimize the - // overall cost of the optimization problem. By providing a constraint on pose, the user can ensure - // that the anchors stay within a certain region in the seed frame. - // Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. + // overall cost of the optimization problem. By providing a constraint on pose, the user can + // ensure that the anchors stay within a certain region in the seed frame. Leaving this empty + // will allow the optimizer to move the anchoring from the hint as far as it likes. PoseBounds seed_tform_object_constraint = 3; } -// The user may assign a number of world objects and waypoints a guess at where they are in the seed frame. -// These hints will be respected by the ProcessAnchoringRequest. +// The user may assign a number of world objects and waypoints a guess at where they are in the seed +// frame. These hints will be respected by the ProcessAnchoringRequest. message AnchoringHint { // List of waypoints and hints as to where they are in the seed frame. repeated WaypointAnchorHint waypoint_anchors = 1; @@ -271,11 +286,12 @@ message AnchoringHint { repeated WorldObjectAnchorHint world_objects = 2; } -// Causes the server to optimize an existing anchoring, or generate a new anchoring for the map using the given parameters. -// In general, if parameters are not provided, reasonable defaults will be used. -// The new anchoring will be streamed back to the client, or modified on the server if desired. +// Causes the server to optimize an existing anchoring, or generate a new anchoring for the map +// using the given parameters. In general, if parameters are not provided, reasonable defaults will +// be used. The new anchoring will be streamed back to the client, or modified on the server if +// desired. message ProcessAnchoringRequest { - // Parameters for procesing an anchoring. + // Parameters for processing an anchoring. message Params { // Parameters affecting the underlying optimizer. message OptimizerParams { @@ -284,7 +300,7 @@ message ProcessAnchoringRequest { // Maximum time the optimizer is allowed to run before giving up. google.protobuf.DoubleValue max_time_seconds = 2; } - // Parameters which affect the measurements the optimzier uses to process the anchoring. + // Parameters which affect the measurements the optimizer uses to process the anchoring. message MeasurementParams { // If true, waypoints which share the same kinematic odometry // frame will be constrained to one another using it. @@ -305,9 +321,9 @@ message ProcessAnchoringRequest { // help constrain the anchoring. google.protobuf.BoolValue use_gps = 6; } - // Relative weights to use for each of the optimizer's terms. These can be any positive value. - // If set to zero, a reasonable default will be used. In general, the higher the weight, the more - // the optimizer will care about that particular measurement. + // Relative weights to use for each of the optimizer's terms. These can be any positive + // value. If set to zero, a reasonable default will be used. In general, the higher the + // weight, the more the optimizer will care about that particular measurement. message Weights { double kinematic_odometry_weight = 1; double visual_odometry_weight = 2; @@ -343,32 +359,43 @@ message ProcessAnchoringRequest { // If true, the anchoring will be streamed back to the user after every iteration. // This is useful for debug visualization. bool stream_intermediate_results = 5; - // If true, the GPSSettings inside waypoint annotations will be modified based on the optimization. - // Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint applied form this - // optimization. To get these results, call the DownloadGraph RPC. Alternatively, the ecef_tform_waypoint - // can be found using: response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id]. - // Note that after this operation completes successfully, all waypoints in the graph can be used to navigate - // using GPS, even if they didn't have GPS data in their waypoint snapshots. + // If true, the GPSSettings inside waypoint annotations will be modified based on the + // optimization. Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint + // applied form this optimization. To get these results, call the DownloadGraph RPC. + // Alternatively, the ecef_tform_waypoint can be found using: + // response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id]. Note that after this + // operation completes successfully, all waypoints in the graph can be used to navigate using + // GPS, even if they didn't have GPS data in their waypoint snapshots. bool apply_gps_result_to_waypoints_on_server = 6; } -// Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is complete. -// New anchorings will be streamed as they become available. +// Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is +// complete. New anchorings will be streamed as they become available. message ProcessAnchoringResponse { ResponseHeader header = 1; enum Status { - STATUS_UNKNOWN = 0; // Programming error. - STATUS_OK = 1; // Success. - STATUS_MISSING_WAYPOINT_SNAPSHOTS = 2; // Not all of the waypoint snapshots exist on the server. Upload them to continue. - STATUS_INVALID_GRAPH = 3; // The graph is invalid topologically, for example containing missing waypoints referenced by edges. - STATUS_OPTIMIZATION_FAILURE = 4; // The optimization failed due to local minima or an ill-conditioned problem definition. - STATUS_INVALID_PARAMS = 5; // The parameters passed to the optimizer do not make sense (e.g negative weights). - STATUS_CONSTRAINT_VIOLATION = 6; // One or more anchors were moved outside of the desired constraints. - STATUS_MAX_ITERATIONS = 7; // The optimizer reached the maximum number of iterations before converging. - STATUS_MAX_TIME = 8; // The optimizer timed out before converging. - STATUS_INVALID_HINTS = 9; // One or more of the hints passed in to the optimizer are invalid (do not correspond to real waypoints or objects). - STATUS_MAP_MODIFIED_DURING_PROCESSING = 10; // Tried to write the anchoring after processing, but another client may have modified the map. Try again. - STATUS_INVALID_GRAVITY_ALIGNMENT = 11; // An anchor hint (waypoint or fiducial) had an invalid orientation with respect to gravity. + STATUS_UNKNOWN = 0; // Programming error. + STATUS_OK = 1; // Success. + STATUS_MISSING_WAYPOINT_SNAPSHOTS = + 2; // Not all of the waypoint snapshots exist on the server. Upload them to continue. + STATUS_INVALID_GRAPH = 3; // The graph is invalid topologically, for example containing + // missing waypoints referenced by edges. + STATUS_OPTIMIZATION_FAILURE = 4; // The optimization failed due to local minima or an + // ill-conditioned problem definition. + STATUS_INVALID_PARAMS = + 5; // The parameters passed to the optimizer do not make sense (e.g negative weights). + STATUS_CONSTRAINT_VIOLATION = + 6; // One or more anchors were moved outside of the desired constraints. + STATUS_MAX_ITERATIONS = + 7; // The optimizer reached the maximum number of iterations before converging. + STATUS_MAX_TIME = 8; // The optimizer timed out before converging. + STATUS_INVALID_HINTS = 9; // One or more of the hints passed in to the optimizer are + // invalid (do not correspond to real waypoints or objects). + STATUS_MAP_MODIFIED_DURING_PROCESSING = + 10; // Tried to write the anchoring after processing, but another client may have + // modified the map. Try again. + STATUS_INVALID_GRAVITY_ALIGNMENT = 11; // An anchor hint (waypoint or fiducial) had an + // invalid orientation with respect to gravity. } Status status = 2; // Contains new anchorings for waypoint(s) processed by the server. @@ -377,11 +404,11 @@ message ProcessAnchoringResponse { // Contains new anchorings for object(s) (e.g april tags) processed by the server. // These will be streamed back to the user as they become available repeated AnchoredWorldObject world_object_results = 4; - // If modify_anchoring_on_server was set to true in the request, then the anchoring currently on the server - // was modified using map processing. If this is set to false, then either an error occurred during - // processing, or modify_anchoring_on_server was set to false in the request. - // When anchoring_on_server_was_modified is set to false, the client is expected to upload the results - // back to the server to commit the changes. + // If modify_anchoring_on_server was set to true in the request, then the anchoring currently on + // the server was modified using map processing. If this is set to false, then either an error + // occurred during processing, or modify_anchoring_on_server was set to false in the request. + // When anchoring_on_server_was_modified is set to false, the client is expected to upload the + // results back to the server to commit the changes. bool anchoring_on_server_was_modified = 5; // The current optimizer iteration that produced these data. int32 iteration = 6; @@ -405,26 +432,28 @@ message ProcessAnchoringResponse { // Unorganized list of waypoints and object IDs which were invalid (missing from the map). repeated string invalid_hints = 13; // List of edges that are inconsistent with the optimized result. This can happen when incorrect - // loop closures have been made before optimization, when inconsistent anchoring hints were passed in, - // or because the optmizer ended up in a local minimum. + // loop closures have been made before optimization, when inconsistent anchoring hints were + // passed in, or because the optimizer ended up in a local minimum. repeated Edge.Id inconsistent_edges = 14; message GPSResult { // Status of the GPS embedding optimization. enum GPSStatus { GPS_STATUS_UNKNOWN = 0; - GPS_STATUS_OK = 1; // Managed to find an ECEF transform. - GPS_STATUS_NOT_ENOUGH_MEASUREMENTS = 2; // Not enough high quality GPS measurements in the map. + GPS_STATUS_OK = 1; // Managed to find an ECEF transform. + GPS_STATUS_NOT_ENOUGH_MEASUREMENTS = + 2; // Not enough high quality GPS measurements in the map. } // Overall status of the GPS embedding optimization. GPSStatus status = 1; - // Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF) frame. - // This can be used to estimate the pose of every waypoint in the ECEF frame via: - // ecef_tform_waypoint = ecef_tform_seed * anchoring.waypoints[waypoint_id].seed_tform_waypoint + // Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF) + // frame. This can be used to estimate the pose of every waypoint in the ECEF frame via: + // ecef_tform_waypoint = ecef_tform_seed * + // anchoring.waypoints[waypoint_id].seed_tform_waypoint api.SE3Pose ecef_tform_seed = 2; // This is the number of GPS measurements actually used to compute the GPS embedding. int32 num_measurements_used = 3; }; - // If GPS embedding optimzation was enabled, this is the result of that process. + // If GPS embedding optimization was enabled, this is the result of that process. GPSResult gps_result = 15; } diff --git a/protos/bosdyn/api/graph_nav/map_processing_service.proto b/protos/bosdyn/api/graph_nav/map_processing_service.proto index 342d71a73..96b30ae0d 100644 --- a/protos/bosdyn/api/graph_nav/map_processing_service.proto +++ b/protos/bosdyn/api/graph_nav/map_processing_service.proto @@ -14,7 +14,6 @@ import "bosdyn/api/graph_nav/map_processing.proto"; // Defines services for processing an existing GraphNav map. service MapProcessingService { - // Processes a GraphNav map by creating additional edges or waypoints. After processing, // a new subgraph is created containing additional waypoints or edges to add to the map. rpc ProcessTopology(ProcessTopologyRequest) returns (stream ProcessTopologyResponse) {} diff --git a/protos/bosdyn/api/graph_nav/nav.proto b/protos/bosdyn/api/graph_nav/nav.proto index 68a17f1e1..d6e9ca945 100644 --- a/protos/bosdyn/api/graph_nav/nav.proto +++ b/protos/bosdyn/api/graph_nav/nav.proto @@ -18,7 +18,6 @@ import "google/protobuf/timestamp.proto"; // Route that the robot should follow or is currently following. message Route { - // Ordered list of waypoints to traverse, starting from index 0. repeated string waypoint_id = 2; diff --git a/protos/bosdyn/api/graph_nav/recording.proto b/protos/bosdyn/api/graph_nav/recording.proto index 77e46366e..004b84195 100644 --- a/protos/bosdyn/api/graph_nav/recording.proto +++ b/protos/bosdyn/api/graph_nav/recording.proto @@ -73,13 +73,13 @@ message StartRecordingRequest { // that the robot is where the user thinks it is in an area with known fiducials. repeated int32 require_fiducials = 4; // If provided, this timestamp will be used in every waypoint snapshot as the - // "started_recording_on" timestamp. Otherwise, a new timestmap will be generated + // "started_recording_on" timestamp. Otherwise, a new timestamp will be generated // after "StartRecording" is called. This is to allow association between waypoint // snapshots based on recording session time. google.protobuf.Timestamp session_start_time = 5; } -// The StartRecording response messge returns the first created waypoint, which is made at the +// The StartRecording response message returns the first created waypoint, which is made at the // location the robot was standing when the request was made, in addition to any status information. message StartRecordingResponse { // Common response header. @@ -316,7 +316,7 @@ message GetRecordStatusRequest { } // The GetRecordStatus response message returns whether the service is currently recording and what -// the persistent recording environment is at the time the request was recieved. +// the persistent recording environment is at the time the request was received. message GetRecordStatusResponse { // Common response header. ResponseHeader header = 1; diff --git a/protos/bosdyn/api/graph_nav/recording_service.proto b/protos/bosdyn/api/graph_nav/recording_service.proto index 3095daafd..9a8cd0e95 100644 --- a/protos/bosdyn/api/graph_nav/recording_service.proto +++ b/protos/bosdyn/api/graph_nav/recording_service.proto @@ -12,7 +12,6 @@ import "bosdyn/api/graph_nav/recording.proto"; option java_outer_classname = "RecordingServiceProto"; - // The recording service can be used to record a Graph Nav map (containing waypoints and edges). // The recorded map can consist of the following: // * Chain: a topological arrangement of waypoints/edges where every waypoint has at least 1 @@ -25,28 +24,29 @@ option java_outer_classname = "RecordingServiceProto"; // * While recording, call GetMapStatus to determine what waypoints have been created. // * Optionally call CreateWaypoint to create waypoints in specific locations. // * Call StopRecording to pause the recording service and create branches. -// * While recording (or after completing recording), call DownloadWaypoint/Edge Snapshot rpc's +// * While recording (or after completing recording), call DownloadWaypoint/Edge Snapshot rpcs // from the GraphNavService to download the large sensor data with the map. service GraphNavRecordingService { // Start recording the map from the current localization. // Creates a waypoint if you are starting to record. Otherwise, waits until you are // sufficiently far away from the previous waypoint. - rpc StartRecording (StartRecordingRequest) returns (StartRecordingResponse) {} + rpc StartRecording(StartRecordingRequest) returns (StartRecordingResponse) {} // Stop recording the map from the current localization. - rpc StopRecording (StopRecordingRequest) returns (StopRecordingResponse) {} + rpc StopRecording(StopRecordingRequest) returns (StopRecordingResponse) {} // Create a new waypoint at the current localization. - rpc CreateWaypoint (CreateWaypointRequest) returns (CreateWaypointResponse) {} + rpc CreateWaypoint(CreateWaypointRequest) returns (CreateWaypointResponse) {} - // Set the environmnent and name prefix to use for the recording. - rpc SetRecordingEnvironment (SetRecordingEnvironmentRequest) returns (SetRecordingEnvironmentResponse) {} + // Set the environment and name prefix to use for the recording. + rpc SetRecordingEnvironment(SetRecordingEnvironmentRequest) + returns (SetRecordingEnvironmentResponse) {} // Create an arbitrary edge between two waypoints. - rpc CreateEdge (CreateEdgeRequest) returns (CreateEdgeResponse) {} + rpc CreateEdge(CreateEdgeRequest) returns (CreateEdgeResponse) {} - // Tells the client the internal state of the record service, and the structure of the map that has been recorded - // so far. - rpc GetRecordStatus (GetRecordStatusRequest) returns (GetRecordStatusResponse) {} + // Tells the client the internal state of the record service, and the structure of the map that + // has been recorded so far. + rpc GetRecordStatus(GetRecordStatusRequest) returns (GetRecordStatusResponse) {} } \ No newline at end of file diff --git a/protos/bosdyn/api/graph_nav/visual_features.proto b/protos/bosdyn/api/graph_nav/visual_features.proto new file mode 100644 index 000000000..aeae49af7 --- /dev/null +++ b/protos/bosdyn/api/graph_nav/visual_features.proto @@ -0,0 +1,154 @@ +// Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +// +// Downloading, reproducing, distributing or otherwise using the SDK Software +// is subject to the terms and conditions of the Boston Dynamics Software +// Development Kit License (20191101-BDSDK-SL). + +syntax = "proto3"; + +package bosdyn.api.graph_nav; +option java_outer_classname = "VisualFeaturesProto"; + +import "bosdyn/api/geometry.proto"; +import "bosdyn/api/image.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +// Generic sparse visual descriptor with a byte blob and a descriptor name. +message GenericDescriptor { + // Name of the descriptor which identifies how it is to be interpreted. + string name = 1; + // Binary blob representing the descriptor. + bytes data = 2; +} +// Represents a visual descriptor of a feature, usually a sparse visual feature. +message VisualDescriptor { + oneof visual_descriptor { + // Oriented Brief (ORB) sparse visual feature. + bytes orb = 1; + // Place to put other descriptors not explicitly captured above. + GenericDescriptor other = 100; + } +} + +// Represents a 2d (pixel-based) detection of a feature in an image. +message VisualKeypoint { + // The descriptor of the sparse feature, used to match it to other features. + VisualDescriptor visual_descriptor = 1; + // Position (pixels) in the image. + bosdyn.api.Vec2 position = 2; + // Size of the feature in pixels. If the feature is circular, this is the radius of the circle. + // If the feature is square, this is the side length of the square. + float size_pixels = 3; + // Orientation of the feature in the image plane, radians. Counterclockwise. + float orientation = 4; + // The depth (in meters) from the camera if it exists, or empty otherwise. + google.protobuf.DoubleValue depth_measurement = 5; + // 2x2 Covariance matrix of the position measurement's uncertainty. + bosdyn.api.Matrixf position_covariance = 6; + // Expected variance of the depth measurement, if it exists. + google.protobuf.DoubleValue depth_variance = 7; +} + +// Represents a set of visual features collected at a particular time from a particular camera +// source. Associates an image geometry + pixel data with visual features extracted there. +message VisualKeyFrame { + // The visual features extracted at the camera image. + repeated VisualKeypoint keypoints = 1; + // Contains the actual data in the image capture (may be compressed), and information + // about the source. Note that the raw data may be omitted if visual features are already + // extracted. + ImageCaptureAndSource image_capture_and_source = 2; + // Transformation from a bundle frame to the image. Depending on the context, + // the bundle frame may be the body, odometry, etc. + bosdyn.api.SE3Pose bundle_tform_image = 3; +} + +// Represents a bundle of visual KeyFrames taken around the same time. For example, if the robot has +// many cameras, this represents all of the cameras captured at around the same time/location. +message VisualKeyFrameBundle { + // A number of key frames, possibly from different sources. + repeated VisualKeyFrame key_frames = 1; + // Reference frame that the keyframes' poses are expressed in. + string bundle_frame_name = 2; + // Frame tree snapshot mapping common poses at record time (odom, body, etc.) to each other and + // the bundle frame. + bosdyn.api.FrameTreeSnapshot frame_tree_snapshot = 3; +} + +// A 3D position with a covariance estimate. +message PositionWithCovariance { + // The vector is to be interpreted as a 3D position in a frame. + bosdyn.api.Vec3 position = 1; + // 3x3 covariance matrix representing uncertainty in the position. + bosdyn.api.Matrixf covariance = 2; +} + +// A 3D direction with a covariance estimate. +message DirectionWithCovariance { + // The vector is to be interpreted as a 3D normalized direction in a frame. + bosdyn.api.Vec3 direction = 1; + // 2x2 covariance matrix representing uncertainty in the direction (in a local tangent frame). + bosdyn.api.Matrixf covariance = 2; +} + +// Indexes an observation of a landmark at a particular bundle, keyframe and keypoint. +// Waypoint snapshots have bundles of keyframes, each keyframe has a number of extracted keypoints. +// Observations are structured as: +// bundle_0 ... +// bundle_1 +// .... keyframe_0 +// .... keyframe_1 +// ........ keypoint_0 +// ........ keypoint_1 +// ........ ... +// ........ keypoint_J +// .... ... +// .... keyframe_K +// ... +// bundle_N +message LandmarkObservationIndex { + // The bundle from within the waypoint snapshot that this + // landmark observation came from. + int32 bundle_id = 1; + // The keyframe from within the bundle that this observation came from. + int32 keyframe_id = 2; + // The keypoint within the keyframe that this observation came from. + int32 keypoint_id = 3; + // Time of the camera image which observed this landmark. + google.protobuf.Timestamp timestamp = 4; +} + +// Represents a 3D landmark that has some visual descriptor attached to it. +message VisualLandmark { + // Unique ID of the landmark. Ids of landmarks are unique only in a particular instance of a + // graph nav map. Ids of landmarks may change as maps update. + int64 id = 1; + // The landmark may either be a full 3D landmark (in which case it is a point), or an + // orientation-only landmark (in which case it is a normalized direction). The frame of the + // landmark is left ambiguous here; generally the container of the landmark will specify which + // frame it is in. Note that landmarks may have *both* position and direction. A 3D position + // with covariance. + PositionWithCovariance position_with_covariance = 2; + // The vector is to be interpreted as a normalized 3D direction in the landmark frame. This + // represents the direction "into" the landmark from where it was first observed. + DirectionWithCovariance direction_with_covariance = 3; + // The canonical descriptor associated with this landmark. If a landmark looks different from + // different angles, then multiple landmarks are likely to be created for it. This will be set + // whenever the first observation is made of a landmark to create it. + VisualDescriptor visual_descriptor = 4; + // Indices of the observations that support this landmark. + repeated LandmarkObservationIndex landmark_observations = 5; +} + +// A group of 3D landmarks. These landmarks may be associated with a single waypoint, or with groups +// of waypoints. +message VisualLandmarks { + // Unorganized 3d landmark cloud. + repeated VisualLandmark landmarks = 1; + // Name of the reference frame that the landmarks are in. + string landmark_frame = 2; + // The frame tree must contain, at minimum, the landmark_frame and some other frame that the + // waypoint or current robot body knows about (for example, "odom" or "vision"). + FrameTreeSnapshot frame_tree_snapshot = 3; +} diff --git a/protos/bosdyn/api/gripper_camera_param.proto b/protos/bosdyn/api/gripper_camera_param.proto index de9273d28..c6303162e 100644 --- a/protos/bosdyn/api/gripper_camera_param.proto +++ b/protos/bosdyn/api/gripper_camera_param.proto @@ -92,7 +92,7 @@ message GripperCameraParams { google.protobuf.FloatValue saturation = 4; // Set the image gain level. - // This paramater is only effective when manual exposure is used. + // This parameter is only effective when manual exposure is used. // Min 0, max 1 google.protobuf.FloatValue gain = 7; @@ -155,16 +155,15 @@ message GripperCameraParams { // Min 0, max 1 google.protobuf.FloatValue gamma = 6; - // Manually set the white balance focus. This value is only used if white_balance_temperature_auto is false. - // Min 0, max 1 - // 0 corresponds to focus at infinity, 1 corresponds to a focal point close to the camera. + // Manually set the white balance focus. This value is only used if + // white_balance_temperature_auto is false. Min 0, max 1 0 corresponds to focus at infinity, 1 + // corresponds to a focal point close to the camera. google.protobuf.FloatValue white_balance_temperature = 8; - + // Set the image sharpness level. // Min 0, max 1 google.protobuf.FloatValue sharpness = 9; - } // High dynamic range (HDR) modes available. HDR sets the camera to take multiple frames to diff --git a/protos/bosdyn/api/gripper_command.proto b/protos/bosdyn/api/gripper_command.proto index 1f653f5d5..b487d51d3 100644 --- a/protos/bosdyn/api/gripper_command.proto +++ b/protos/bosdyn/api/gripper_command.proto @@ -22,6 +22,7 @@ message GripperCommand { oneof command { // Control opening and closing the gripper. ClawGripperCommand.Request claw_gripper_command = 1; + } } @@ -31,6 +32,7 @@ message GripperCommand { oneof command { // Feedback for the claw gripper command. ClawGripperCommand.Feedback claw_gripper_feedback = 1; + } RobotCommandFeedbackStatus.Status status = 2; @@ -90,3 +92,4 @@ message ClawGripperCommand { Status status = 1; } } + diff --git a/protos/bosdyn/api/image.proto b/protos/bosdyn/api/image.proto index a2d1cf0c6..341449e35 100644 --- a/protos/bosdyn/api/image.proto +++ b/protos/bosdyn/api/image.proto @@ -85,12 +85,13 @@ message ImageCapture { // The time at which the image data was acquired in the robot's time basis. google.protobuf.Timestamp acquisition_time = 30; - // A tree-based collection of transformations, which will include the transformations to each image's - // sensor in addition to transformations to the common frames ("vision", "body", "odom"). - // All transforms within the snapshot are at the acquistion time of the image. + // A tree-based collection of transformations, which will include the transformations to each + // image's sensor in addition to transformations to the common frames ("vision", "body", + // "odom"). All transforms within the snapshot are at the acquisition time of the image. FrameTreeSnapshot transforms_snapshot = 31; - // The frame name for the image's sensor source. This will be included in the transform snapshot. + // The frame name for the image's sensor source. This will be included in the transform + // snapshot. string frame_name_image_sensor = 5; // Image data. @@ -105,7 +106,6 @@ message ImageCapture { // Proto for a description of an image source on the robot. message ImageSource { - // The camera can be modeled as a pinhole camera described with a matrix. // Camera Matrix can be constructed by the camera intrinsics: // [[focal_length.x, skew.x, principal_point.x], @@ -121,10 +121,49 @@ message ImageSource { // The skew for the intrinsic matrix. Vec2 skew = 3; } - // The camera intrinsics are necessary for descrbing the pinhole camera matrix. + // The camera intrinsics are necessary for describing the pinhole camera matrix. CameraIntrinsics intrinsics = 1; } + // The 5 parameter Brown-Conrady or "radtan" model is used to correct radial and + // tangential distortions. Original paper: + // http://close-range.com/docs/Decentering_Distortion_of_Lenses_Brown_1966_may_444-462.pdf + // We use the opencv convention for naming the distortion coefficients: k1, k2, p1, p2, k3. Here + // k1, k2, and k3 are radial distortion terms. p1 and p2 are tangential terms. + message PinholeBrownConrady { + message PinholeBrownConradyIntrinsics { + // Pinhole intrinsics of the camera. + PinholeModel.CameraIntrinsics pinhole_intrinsics = 1; + // The Brown-Conrady distortion coefficients for the camera. + float k1 = 2; + float k2 = 3; + float p1 = 4; + float p2 = 5; + float k3 = 6; + } + // The camera intrinsics are necessary for describing the KB4 camera matrix. + PinholeBrownConradyIntrinsics intrinsics = 1; + } + + // The Kannala-Brandt camera model, also called the fisheye camera model in OpenCV + // (https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html) and the equidistant + // distortion model (https://github.com/ethz-asl/kalibr/wiki/supported-models), fits cameras + // with fisheye lenses well. The projection and un-projection equations for this model can be + // found at: https://arxiv.org/pdf/1807.08957.pdf. + message KannalaBrandtModel { + message KannalaBrandtIntrinsics { + // Pinhole intrinsics of the camera. + PinholeModel.CameraIntrinsics pinhole_intrinsics = 1; + // The Kannala-Brandt distortion coefficients for the camera. + float k1 = 2; + float k2 = 3; + float k3 = 4; + float k4 = 5; + } + // The camera intrinsics are necessary for describing the KB4 camera matrix. + KannalaBrandtIntrinsics intrinsics = 1; + } + // The name of this image source used to get images. string name = 2; @@ -143,6 +182,10 @@ message ImageSource { oneof camera_models { // Rectilinear camera model. PinholeModel pinhole = 8; + // The pinhole camera model with the 5 parameter brown Conrady distortion model. + PinholeBrownConrady pinhole_brown_conrady = 13; + // The Kannala-Brandt camera model for modeling fisheye lenses. + KannalaBrandtModel kannala_brandt = 14; } enum ImageType { @@ -193,21 +236,26 @@ message ImageRequest { // Note that jpeg quality 100 is still lossy. double quality_percent = 2; - // Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g. FORMAT_UNKNOWN), the image - // service will choose the best format for the data. + // Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g. + // FORMAT_UNKNOWN), the image service will choose the best format for the data. Image.Format image_format = 3; // Optional specification of the desired image dimensions. - // If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size 1280x720 - // The range is clipped to [0.01, 1] while maintaining the original aspect ratio. - // For backwards compatibliity, a value of 0 means no resizing. - // Note: this field is not supported by the robot body cameras image service (`image`). + // If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size + // 1280x720 The range is clipped to [0.01, 1] while maintaining the original aspect ratio. For + // backwards compatibility, a value of 0 means no resizing. Note: this field is not supported by + // the robot body cameras image service (`image`). double resize_ratio = 4; // Specify the desired pixel format (e.g. GREYSCALE_U8, RGB_U8). If no format is specified // (e.g. PIXEL_FORMAT_UNKNOWN), the image service will choose the best format for the data. Image.PixelFormat pixel_format = 5; + // Specify a pixel format that will be used if the format specified in the pixel_format field is + // invalid. If multiple formats are specified the valid format with the lowest index will be + // preferred. + repeated Image.PixelFormat fallback_formats = 7; + // Parameters unique to the servicer that do not match any of the above fields. // Whether or not these are valid may depend on the values of the above fields. DictParam custom_params = 6; @@ -224,11 +272,12 @@ message GetImageRequest { // The image response for each request, that includes image data and image source information. message ImageResponse { - // The image capture contains the image data and information about the state of the camera and robot - // at the time the image was collected. + // The image capture contains the image data and information about the state of the camera and + // robot at the time the image was collected. ImageCapture shot = 1; - // The source describes general information about the camera source the image data was collected from. + // The source describes general information about the camera source the image data was collected + // from. ImageSource source = 2; enum Status { @@ -250,8 +299,8 @@ message ImageResponse { STATUS_IMAGE_DATA_ERROR = 4; // The requested image format is unsupported for the image-source named. The image data will - // not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should choose the - // best format to provide the data in. + // not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should + // choose the best format to provide the data in. STATUS_UNSUPPORTED_IMAGE_FORMAT_REQUESTED = 5; // The requested pixel format is unsupported for the image-source named. The image data will diff --git a/protos/bosdyn/api/image_geometry.proto b/protos/bosdyn/api/image_geometry.proto index 297d02fb5..f62f600a4 100644 --- a/protos/bosdyn/api/image_geometry.proto +++ b/protos/bosdyn/api/image_geometry.proto @@ -11,9 +11,9 @@ package bosdyn.api; option go_package = "bosdyn/api"; option java_outer_classname = "ImageGeometryProto"; -// geometry.proto is standarized to use double fields. There are some primatives already specified +// geometry.proto is standardized to use double fields. There are some primitives already specified // in geometry.proto that want int fields, for example a rectangle that represents the area on an -// image. This file is for primatives that have int fields. +// image. This file is for primitives that have int fields. // Represents a rectangle, with integer indices. message RectangleI { diff --git a/protos/bosdyn/api/ir_enable_disable.proto b/protos/bosdyn/api/ir_enable_disable.proto index cb0b8a507..67c425601 100644 --- a/protos/bosdyn/api/ir_enable_disable.proto +++ b/protos/bosdyn/api/ir_enable_disable.proto @@ -13,7 +13,7 @@ import "bosdyn/api/header.proto"; message IREnableDisableRequest { RequestHeader header = 1; ///< Common request header. - + enum Request { // Unspecified value -- should not be used. REQUEST_UNKNOWN = 0; @@ -23,13 +23,10 @@ message IREnableDisableRequest { // Enable emissions. REQUEST_ON = 2; - } + } Request request = 2; } - message IREnableDisableResponse { ResponseHeader header = 1; ///< Common response header. } - - diff --git a/protos/bosdyn/api/lease.proto b/protos/bosdyn/api/lease.proto index ecc6798ad..c0eb511e6 100644 --- a/protos/bosdyn/api/lease.proto +++ b/protos/bosdyn/api/lease.proto @@ -31,7 +31,7 @@ message Lease { // Logical vector clock indicating when the Lease was generated. repeated uint32 sequence = 3; - // The set of different clients which have sent/receieved the lease. + // The set of different clients which have sent/received the lease. repeated string client_names = 4; } @@ -241,7 +241,7 @@ message ListLeasesRequest { bool include_full_lease_info = 2; } -// Describes all information about a sepcific lease: including the resource it covers, the +// Describes all information about a specific lease: including the resource it covers, the // active lease, and which application is the owner of a lease. message LeaseResource { // The resource name. diff --git a/protos/bosdyn/api/lease_service.proto b/protos/bosdyn/api/lease_service.proto index 1ce269c69..d6a9ad63b 100644 --- a/protos/bosdyn/api/lease_service.proto +++ b/protos/bosdyn/api/lease_service.proto @@ -21,7 +21,6 @@ import "bosdyn/api/lease.proto"; // does not check in frequently to the LeaseService, or if another client // force-acquires a Lease. service LeaseService { - // Acquire a lease to a specific resource if the resource is available. rpc AcquireLease(AcquireLeaseRequest) returns (AcquireLeaseResponse); diff --git a/protos/bosdyn/api/license.proto b/protos/bosdyn/api/license.proto index db63b7343..a0593fb07 100644 --- a/protos/bosdyn/api/license.proto +++ b/protos/bosdyn/api/license.proto @@ -43,10 +43,10 @@ message LicenseInfo { // message GetLicenseInfoRequest { - RequestHeader header = 1; // Common request header. + RequestHeader header = 1; // Common request header. } message GetLicenseInfoResponse { - ResponseHeader header = 1; // Common response header + ResponseHeader header = 1; // Common response header // The details about the current license that is uploaded to the robot. LicenseInfo license = 2; diff --git a/protos/bosdyn/api/license_service.proto b/protos/bosdyn/api/license_service.proto index 91b0aa18c..8b9a06798 100644 --- a/protos/bosdyn/api/license_service.proto +++ b/protos/bosdyn/api/license_service.proto @@ -18,7 +18,7 @@ service LicenseService { // currently uploaded on the robot. rpc GetLicenseInfo(GetLicenseInfoRequest) returns (GetLicenseInfoResponse) {} - // Check if specific features (identified by string names) are enabled under the currently loaded - // license for this robot. + // Check if specific features (identified by string names) are enabled under the currently + // loaded license for this robot. rpc GetFeatureEnabled(GetFeatureEnabledRequest) returns (GetFeatureEnabledResponse) {} } diff --git a/protos/bosdyn/api/local_grid.proto b/protos/bosdyn/api/local_grid.proto index a9d58f4b9..f1f6c3868 100644 --- a/protos/bosdyn/api/local_grid.proto +++ b/protos/bosdyn/api/local_grid.proto @@ -36,7 +36,7 @@ message LocalGridExtent { int32 num_cells_x = 3; // Number of cells along y extent of local grid (number of rows in local grid). - // Note, that the (num_cells_x)x(num_cells_y) represents the totla number of grid + // Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid // cells in the local grid. int32 num_cells_y = 4; @@ -54,13 +54,14 @@ message LocalGrid { google.protobuf.Timestamp acquisition_time = 30; // A tree-based collection of transformations, which will include the transformations to each of - // the returned local grids in addition to transformations to the common frames ("vision", "body", "odom"). - // All transforms within the snapshot are at the acquistion time of the local grid. + // the returned local grids in addition to transformations to the common frames ("vision", + // "body", "odom"). All transforms within the snapshot are at the acquisition time of the local + // grid. FrameTreeSnapshot transforms_snapshot = 31; - // The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such that - // the map data is in the +x, +y quadrant. - // The cell data is packed in x-y order, so the cell at: + // The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such + // that the map data is in the +x, +y quadrant. The cell data is packed in x-y order, so the + // cell at: // data[xi + extent.num_cells_x * yj] // has its center at position: // {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}. @@ -92,6 +93,7 @@ message LocalGrid { // Each cell of the local grid is encoded as a little-endian unsigned 16-bit integer. CELL_FORMAT_UINT16 = 6; + // Only reserving these values for now, until they are used. // Each cell of the local grid is encoded as a little-endian signed 32-bit integer. @@ -126,9 +128,9 @@ message LocalGrid { Encoding encoding = 5; // The encoded local grid representation. - // Cells are encoded according to the encoding enum, and are stored in in row-major order (x-major). - // This means that the data field has data entered row by row. The grid cell located at (i, j) will be - // at the (index = i * num_cells_x + j) within the data array. + // Cells are encoded according to the encoding enum, and are stored in in row-major order + // (x-major). This means that the data field has data entered row by row. The grid cell located + // at (i, j) will be at the (index = i * num_cells_x + j) within the data array. bytes data = 6; // RLE pixel repetition counts: use data[i] repeated rle_counts[i] times when decoding the @@ -139,8 +141,16 @@ message LocalGrid { double cell_value_scale = 8; // A fixed value offset that is applied to each value of the cell data. - // Actual values in local grid are: (({value from data} * cell_value_scale) + cell_value_offset). + // Actual values in local grid are: (({value from data} * cell_value_scale) + + // cell_value_offset). double cell_value_offset = 9; + + // Map of unknown cells. + // If unknown_cells[i] = 0, then data[i] is known. If unknown_cells[i] = 1, then data[i] is + // unknown. Each cell is encoded as a uint8_t. Cells are stored in row-major order (x-major). + // This means that the data field has data entered row by row. The grid cell located at (i, j) + // will be at the (index = i * num_cells_x + j) within the data array. + bytes unknown_cells = 10; } // The local grid response message will contain either the local grid or an error status. @@ -171,14 +181,14 @@ message LocalGridResponse { LocalGrid local_grid = 3; } - // The GetLocalGridTypes request message asks to the local grid types. message GetLocalGridTypesRequest { // Common request header. RequestHeader header = 1; } -// The GetLocalGridTypes response message returns to get all known string names for local grid types. +// The GetLocalGridTypes response message returns to get all known string names for local grid +// types. message GetLocalGridTypesResponse { // Common response header. ResponseHeader header = 1; @@ -187,7 +197,8 @@ message GetLocalGridTypesResponse { repeated LocalGridType local_grid_type = 2; } -// The GetLocalGrid request message can request for multiple different types of local grids at one time. +// The GetLocalGrid request message can request for multiple different types of local grids at one +// time. message GetLocalGridsRequest { // Common request header. RequestHeader header = 1; @@ -196,8 +207,9 @@ message GetLocalGridsRequest { repeated LocalGridRequest local_grid_requests = 2; } -// The GetLocalGrid response message replies with all of the local grid data for the requested types, and -// a numerical count representing the amount of status errors that occurred when getting this data. +// The GetLocalGrid response message replies with all of the local grid data for the requested +// types, and a numerical count representing the amount of status errors that occurred when getting +// this data. message GetLocalGridsResponse { // Common response header. ResponseHeader header = 1; diff --git a/protos/bosdyn/api/log_status/log_status.proto b/protos/bosdyn/api/log_status/log_status.proto index 9654038f8..8b12be98e 100644 --- a/protos/bosdyn/api/log_status/log_status.proto +++ b/protos/bosdyn/api/log_status/log_status.proto @@ -13,24 +13,24 @@ import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; message LogStatus { - // Status of a previous request for log bundler generation. Terminal statuses start at 100, such // that if a status >= DONE, it can be concluded that the request is no longer active. enum Status { - STATUS_UNKNOWN = 0; // The status was not set, so something went wrong. - STATUS_RECEIVED = 1; // Request received, thread is not created for bundling the logs. - STATUS_IN_PROGRESS = 2; // Request in progress, thread is actively creating the bundle. - STATUS_SYNCING = 3; // Log end_time has passed, server post processing taking place. - STATUS_DONE = 100; // Bundling process is complete with no failures and was terminated by API. - STATUS_FAILED = 101; // Failure encountered while generating bundle. - STATUS_TERMINATED = 102; // Bundle creation was terminated by API prior to completion. + STATUS_UNKNOWN = 0; // The status was not set, so something went wrong. + STATUS_RECEIVED = 1; // Request received, thread is not created for bundling the logs. + STATUS_IN_PROGRESS = 2; // Request in progress, thread is actively creating the bundle. + STATUS_SYNCING = 3; // Log end_time has passed, server post processing taking place. + STATUS_DONE = + 100; // Bundling process is complete with no failures and was terminated by API. + STATUS_FAILED = 101; // Failure encountered while generating bundle. + STATUS_TERMINATED = 102; // Bundle creation was terminated by API prior to completion. } // Types of logs enum Type { TYPE_UNKNOWN = 0; - TYPE_EXPERIMENT = 1; // A log into the future. - TYPE_RETRO = 2; // A retroactive log. + TYPE_EXPERIMENT = 1; // A log into the future. + TYPE_RETRO = 2; // A retroactive log. } // Id of the response log. @@ -52,11 +52,10 @@ message GetLogStatusRequest { } message GetLogStatusResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot. + STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot. } // Common response header. @@ -75,7 +74,6 @@ message GetActiveLogStatusesRequest { } message GetActiveLogStatusesResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; @@ -92,7 +90,6 @@ message GetActiveLogStatusesResponse { } message StartRetroLogRequest { - // Common request header. bosdyn.api.RequestHeader header = 1; @@ -101,12 +98,11 @@ message StartRetroLogRequest { } message StartRetroLogResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_EXPERIMENT_LOG_RUNNING = 2; // An experiment log is already running. - STATUS_CONCURRENCY_LIMIT_REACHED = 3; // Maximum retro logs running concurrently. + STATUS_EXPERIMENT_LOG_RUNNING = 2; // An experiment log is already running. + STATUS_CONCURRENCY_LIMIT_REACHED = 3; // Maximum retro logs running concurrently. } // Common response header. @@ -123,7 +119,6 @@ message StartRetroLogResponse { } message StartExperimentLogRequest { - // Common request header. bosdyn.api.RequestHeader header = 1; @@ -132,11 +127,11 @@ message StartExperimentLogRequest { } message StartExperimentLogResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_EXPERIMENT_LOG_RUNNING = 2; // Cannot start another experiment log, one is already running. + STATUS_EXPERIMENT_LOG_RUNNING = + 2; // Cannot start another experiment log, one is already running. } // Common response header. @@ -164,12 +159,11 @@ message UpdateExperimentLogRequest { } message UpdateExperimentLogResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot - STATUS_LOG_TERMINATED = 3; // Log has already terminated + STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot + STATUS_LOG_TERMINATED = 3; // Log has already terminated } // Common response header. @@ -194,11 +188,10 @@ message TerminateLogRequest { } message TerminateLogResponse { - enum Status { STATUS_UNKNOWN = 0; STATUS_OK = 1; - STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot. + STATUS_ID_NOT_FOUND = 2; // This log is not available on the robot. } // Common response header. diff --git a/protos/bosdyn/api/log_status/log_status_service.proto b/protos/bosdyn/api/log_status/log_status_service.proto index dc99e17ed..64443e26b 100644 --- a/protos/bosdyn/api/log_status/log_status_service.proto +++ b/protos/bosdyn/api/log_status/log_status_service.proto @@ -17,16 +17,15 @@ import "bosdyn/api/log_status/log_status.proto"; // - Start, extend and stop experiment logs // - Terminate logs before their expiration time service LogStatusService { - // Retrieve log status by id. rpc GetLogStatus(GetLogStatusRequest) returns (GetLogStatusResponse); // View statuses of active logs. rpc GetActiveLogStatuses(GetActiveLogStatusesRequest) returns (GetActiveLogStatusesResponse); - // Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime, t_rpc], - // where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception, - // and t_buffer = time of first log on the buffer. + // Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime, + // t_rpc], where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception, and + // t_buffer = time of first log on the buffer. rpc StartRetroLog(StartRetroLogRequest) returns (StartRetroLogResponse); // Given a duration T, StartExperimentLog(T) starts logging all data to @@ -37,7 +36,6 @@ service LogStatusService { // Only one experiment log can be run at a time. rpc StartExperimentLog(StartExperimentLogRequest) returns (StartExperimentLogResponse); - // UpdateExperimentLog(id, T) will update the keepalive/watchdog timer of // the log with the provided id if the log is active. The updated duration // of the log will be [t_rpc, t_rpc + T] where t_rpc = time of RPC reception. diff --git a/protos/bosdyn/api/manipulation_api.proto b/protos/bosdyn/api/manipulation_api.proto index 10d2af744..87692d17b 100644 --- a/protos/bosdyn/api/manipulation_api.proto +++ b/protos/bosdyn/api/manipulation_api.proto @@ -116,7 +116,7 @@ message PickObjectInImage { // A tree-based collection of transformations, which will include the transformations to each // image's sensor in addition to transformations to the common frames ("vision", "body", - // "odom"). All transforms within the snapshot are at the acquistion time of the image. + // "odom"). All transforms within the snapshot are at the acquisition time of the image. FrameTreeSnapshot transforms_snapshot_for_camera = 2; // The frame name for the image's sensor source. This must be included in the transform diff --git a/protos/bosdyn/api/metrics_logging/metrics_logging_robot.proto b/protos/bosdyn/api/metrics_logging/metrics_logging_robot.proto index 8eaf03d1e..7763a4363 100644 --- a/protos/bosdyn/api/metrics_logging/metrics_logging_robot.proto +++ b/protos/bosdyn/api/metrics_logging/metrics_logging_robot.proto @@ -31,7 +31,6 @@ message GetStoreSequenceRangeResponse { int32 last_sequence_number = 3; } - message GetAbsoluteMetricSnapshotRequest { // Common request header. RequestHeader header = 1; @@ -41,7 +40,6 @@ message GetAbsoluteMetricSnapshotRequest { repeated int32 sequence_numbers = 2; } - message GetAbsoluteMetricSnapshotResponse { // Common response header. ResponseHeader header = 1; @@ -49,7 +47,8 @@ message GetAbsoluteMetricSnapshotResponse { // Signed AbsoluteMetricsSnapshot messages corresponding to the request timestamps. // The robot will exclude snapshots if: // * They don't exist on the robot - // * If included, the snapshot would push the total response message size over the GRPC limit. + // * If included, the snapshot would push the total response message size over the GRPC + // limit. repeated SignedProto snapshots = 2; } @@ -69,7 +68,7 @@ message GetMetricsResponse { // Common response header. ResponseHeader header = 1; - // Current parameters for metrics. + // Current parameters for metrics. repeated Parameter parameters = 2; // If any keys specified in the GetMetricsRequest are not present in the database, diff --git a/protos/bosdyn/api/metrics_logging/metrics_logging_robot_service.proto b/protos/bosdyn/api/metrics_logging/metrics_logging_robot_service.proto index d26a20225..88173f352 100644 --- a/protos/bosdyn/api/metrics_logging/metrics_logging_robot_service.proto +++ b/protos/bosdyn/api/metrics_logging/metrics_logging_robot_service.proto @@ -13,7 +13,9 @@ import "bosdyn/api/metrics_logging/metrics_logging_robot.proto"; option java_outer_classname = "MetricsLoggingRobotServiceProto"; service MetricsLoggingRobotService { - rpc GetStoreSequenceRange(GetStoreSequenceRangeRequest) returns (GetStoreSequenceRangeResponse) { } - rpc GetAbsoluteMetricSnapshot(GetAbsoluteMetricSnapshotRequest) returns (GetAbsoluteMetricSnapshotResponse) { } - rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) { } + rpc GetStoreSequenceRange(GetStoreSequenceRangeRequest) + returns (GetStoreSequenceRangeResponse) {} + rpc GetAbsoluteMetricSnapshot(GetAbsoluteMetricSnapshotRequest) + returns (GetAbsoluteMetricSnapshotResponse) {} + rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) {} } \ No newline at end of file diff --git a/protos/bosdyn/api/metrics_logging/signed_proto.proto b/protos/bosdyn/api/metrics_logging/signed_proto.proto index 2da7445a7..7969ad72a 100644 --- a/protos/bosdyn/api/metrics_logging/signed_proto.proto +++ b/protos/bosdyn/api/metrics_logging/signed_proto.proto @@ -18,14 +18,14 @@ option java_outer_classname = "SignedProtoProto"; * 512 bytes signature * X bytes data. * - * header -> When this format changes, we'll use the header to delminate which + * header -> When this format changes, we'll use the header to deliminate which * format was used to generate this data. * * fingerprint -> The fingerprint of public key corresponding to the private key * that was used to generate the signature. As keys rotate, this will allow * the signature verifier to know what key to use to verify the signature. * - * signature -> singnature of the data field. + * signature -> signature of the data field. * * data -> Contents specified by parent container. Usually contains a serialized * protobuf. diff --git a/protos/bosdyn/api/mission/mission.proto b/protos/bosdyn/api/mission/mission.proto index 9a6757074..8bf6ce117 100644 --- a/protos/bosdyn/api/mission/mission.proto +++ b/protos/bosdyn/api/mission/mission.proto @@ -13,6 +13,7 @@ option java_outer_classname = "MissionProto"; import "bosdyn/api/alerts.proto"; import "bosdyn/api/geometry.proto"; import "bosdyn/api/graph_nav/map.proto"; +import "bosdyn/api/graph_nav/graph_nav.proto"; import "bosdyn/api/header.proto"; import "bosdyn/api/lease.proto"; import "bosdyn/api/mission/nodes.proto"; @@ -128,7 +129,10 @@ message State { // The mission's ID. // -1 indicates no mission has been loaded. int64 mission_id = 7; - + + // MissionText which is currently active. + repeated MissionText active_mission_text = 9; + } // A question posed by a Prompt node, or by the internal operation of another node. @@ -153,8 +157,8 @@ message Question { // human. Clients should usually avoid generating a UI element to ask such a question. bool for_autonomous_processing = 5; - // Severity for this question. See comment in Prompt message in nodes.proto for a better understanding - // of what levels mean. + // Severity for this question. See comment in Prompt message in nodes.proto for a better + // understanding of what levels mean. AlertData.SeverityLevel severity = 6; } @@ -167,7 +171,8 @@ message AnswerQuestionRequest { oneof answer { // The answer_code from the Question corresponding to the user's choice. int64 code = 3; - // The answers for the Question corresponding to custom_params specification from the Question. + // The answers for the Question corresponding to custom_params specification from the + // Question. DictParam custom_params = 4; } } @@ -257,7 +262,6 @@ message PlayMissionRequest { } - // "Global" settings to use while a mission is running. // Some of these settings are not globally applicable. For example, the velocity_limit // does not change the speed at which the robot poses the body. @@ -276,8 +280,10 @@ message PlaySettings { // Specify whether or not to enable ground clutter avoidance, and which type. bosdyn.api.graph_nav.Edge.Annotations.GroundClutterAvoidanceMode ground_clutter_mode = 5; -} + // Specify the path planner mode. + bosdyn.api.graph_nav.TravelParams.PathPlannerMode planner_mode = 6; +} // The PlayMission response message will return the status of the play mission request. message PlayMissionResponse { @@ -358,8 +364,8 @@ message LoadMissionRequest { repeated bosdyn.api.Lease leases = 3; } -// The LoadMission response returns the mission info generated by the service if successfully loaded, and -// a status and other inforamtion if the request fails. +// The LoadMission response returns the mission info generated by the service if successfully +// loaded, and a status and other information if the request fails. message LoadMissionResponse { // Common response header. ResponseHeader header = 1; @@ -389,7 +395,6 @@ message LoadMissionResponse { repeated FailedNode failed_nodes = 5; } - // Request mission information. // This covers information that stays static until a new mission is loaded. message GetInfoRequest { @@ -407,7 +412,8 @@ message GetInfoResponse { MissionInfo mission_info = 2; } -// The PauseMission request message will pause the mission that is currently executing, if there is one. +// The PauseMission request message will pause the mission that is currently executing, if there is +// one. message PauseMissionRequest { // Common request header. RequestHeader header = 1; diff --git a/protos/bosdyn/api/mission/mission_service.proto b/protos/bosdyn/api/mission/mission_service.proto index 261c71df9..825bdd10e 100644 --- a/protos/bosdyn/api/mission/mission_service.proto +++ b/protos/bosdyn/api/mission/mission_service.proto @@ -13,23 +13,25 @@ option java_outer_classname = "MissionServiceProto"; import "bosdyn/api/data_chunk.proto"; import "bosdyn/api/mission/mission.proto"; -// The MissionService can be used to specify high level autonomous behaviors for Spot using behavior trees. +// The MissionService can be used to specify high level autonomous behaviors for Spot using behavior +// trees. service MissionService { // RPCs for loading missions to the robot. NOTE: LoadMission and LoadMissionAsChunks may fail // for large missions because the request and response may exceed the maximum message size. Use // LoadMissionAsChunks2 instead. rpc LoadMission(LoadMissionRequest) returns (LoadMissionResponse) {} - // This RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead. Non-preferred - // method for loading large missions to the robot because only the request is a streaming RPC. The data - // chunks are deserialized into a LoadMissionRequest. NOTE: LoadMissionAsChunks may fail for large missions - // because the response may exceed the maximum message size. - rpc LoadMissionAsChunks (stream DataChunk) returns (LoadMissionResponse) {} + // This RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead. + // Non-preferred method for loading large missions to the robot because only the request is a + // streaming RPC. The data chunks are deserialized into a LoadMissionRequest. NOTE: + // LoadMissionAsChunks may fail for large missions because the response may exceed the maximum + // message size. + rpc LoadMissionAsChunks(stream DataChunk) returns (LoadMissionResponse) {} // Preferred RPC for loading large missions to the robot because both the request and response // are streaming RPCs, allowing you to break the message up into multiple streamed messages. The // data chunks are deserialized into a LoadMissionRequest and LoadMissionResponse. - rpc LoadMissionAsChunks2 (stream DataChunk) returns (stream DataChunk) {} + rpc LoadMissionAsChunks2(stream DataChunk) returns (stream DataChunk) {} // Start executing a loaded mission. // Will not restart a mission that has run to completion. Use RestartMission to do that. @@ -50,13 +52,13 @@ service MissionService { rpc GetState(GetStateRequest) returns (GetStateResponse) {} // RPCs for getting static information regarding the mission. Used to interpret mission state. - // NOTE: GetInfo may fail for large missions because the response may exceed the maximum message size. - // Use GetInfoAsChunks instead. + // NOTE: GetInfo may fail for large missions because the response may exceed the maximum message + // size. Use GetInfoAsChunks instead. rpc GetInfo(GetInfoRequest) returns (GetInfoResponse) {} - // Preferred RPC for getting the status of large missions from the robot because the response is a streaming - // streaming RPC, allowing you to break the message up into multiple streamed messages. THe data chunks are - // deserialized into a GetInfoResponse. + // Preferred RPC for getting the status of large missions from the robot because the response is + // a streaming streaming RPC, allowing you to break the message up into multiple streamed + // messages. THe data chunks are deserialized into a GetInfoResponse. rpc GetInfoAsChunks(GetInfoRequest) returns (stream DataChunk) {} // Download the mission as it was uploaded to the service. diff --git a/protos/bosdyn/api/mission/nodes.proto b/protos/bosdyn/api/mission/nodes.proto index 7a6ba2bf3..224c41f2f 100644 --- a/protos/bosdyn/api/mission/nodes.proto +++ b/protos/bosdyn/api/mission/nodes.proto @@ -25,6 +25,7 @@ import "bosdyn/api/spot_cam/ptz.proto"; import "bosdyn/api/robot_command.proto"; import "bosdyn/api/power.proto"; import "bosdyn/api/data_acquisition.proto"; +import "bosdyn/api/data_acquisition_store.proto"; import "bosdyn/api/data_buffer.proto"; import "bosdyn/api/graph_nav/graph_nav.proto"; import "bosdyn/api/graph_nav/nav.proto"; @@ -94,6 +95,8 @@ message Node { SetGraspOverride set_grasp_override = 55; ExecuteChoreography execute_choreography = 56; MissionUploadChoreography mission_upload_choreography = 57; + CreateMissionText create_mission_text = 59; + BosdynQueryStoredCaptures bosdyn_query_stored_captures = 60; } // Defines parameters, used by this node or its children. @@ -133,16 +136,16 @@ message Selector { // Run a specific child based on a specified pivot_value. // -// This node exists because of a subtle implmentation detail in Selector(always_restart = true). +// This node exists because of a subtle implementation detail in Selector(always_restart = true). // The astute reader might believe that they can construct a switch node by using a selector // with sequences & conditions as children. This is ALMOST true, EXCEPT that a selector // (with always_restart = true) can leave multiple children in the running state IF: // // - A later selector child was RUNNING last tick -// - An eariler selector child returns RUNNING this tick +// - An earlier selector child returns RUNNING this tick // // Even though the later selector child won't be ticked, it will still be left in the running state -// and not restart when the selector advances to it again later. Sometimes this is desireable, +// and not restart when the selector advances to it again later. Sometimes this is desirable, // sometimes it isn't. Switch is constrained to only have one child running, and if the switch ever // switches children and return to a previously running child, that child will be restarted. message Switch { @@ -199,7 +202,13 @@ message Retry { // timeout_child. message ForDuration { // Maximum duration of mission execution time. - google.protobuf.Duration duration = 1; + oneof duration_type { + google.protobuf.Duration duration = 1; + + // Blackboard variable name that specifies duration. The value of this variable should be of + // type google.protobuf.Duration. + string duration_name_in_blackboard = 5; + } // Child to execute for the duration. Node child = 2; @@ -390,6 +399,10 @@ message BosdynNavigateRoute { // If provided, this will write the last NavigateRouteResponse message to // a blackboard variable with this name. string navigate_route_response_blackboard_key = 7; + + // If provided, parameters from this request will be merged with the other parameters defined in + // the node and be used in the NavigateRoute RPC. + string navigate_route_request_blackboard_key = 8; } // Get GraphNav state from the robot and save it to the blackboard. @@ -424,12 +437,16 @@ message BosdynGraphNavLocalize { // Note that ko_tform_body in the request will be ignored (it will be recalculated at runtime). bosdyn.api.graph_nav.SetLocalizationRequest localization_request = 3; // If true, a poor quality check will not result in the node returning FAILURE. - // If false, the localization will be checked for quality by comparing agains the map data, and + // If false, the localization will be checked for quality by comparing against the map data, and // if the localization is poor quality, the node returns FAILURE. bool allow_bad_quality = 4; // If non-empty, the blackboard variable with this name will contain the response of the // graph nav SetLocalization request after this node receives it. string response_bb_key = 5; + // If specified, the value of this blackboard variable will be merged with the + // localization_request. The value of this variable must be a + // bosdyn.api.graph_nav.SetLocalizationRequest proto. + string localization_request_bb_key = 6; } // Record an APIEvent @@ -477,7 +494,7 @@ message RemoteGrpc { // a group_name. If a value is specified in this field, it will override the group_name value // specified in the group_name of the TickRequest. Values from the blackboard will // replace the keys in braces {}. - // Example: "telop-{date}", where "date" is a blackboard variable. + // Example: "teleop-{date}", where "date" is a blackboard variable. // Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a // Repeat node. string group_name_format = 8; @@ -489,8 +506,13 @@ message RemoteGrpc { // When started, begins a sleep timer for X seconds. Returns "success" after the timer elapses, // "running" otherwise. message Sleep { - // Number of seconds to sleep for. - float seconds = 1; + oneof duration { + // Number of seconds to sleep for. + float seconds = 1; + // Blackboard variable name that specifies duration. The value of this variable should be of + // type google.protobuf.Duration. + string duration_name_in_blackboard = 5; + } // If this node is stopped, should it restart the timer? bool restart_after_stop = 2; } @@ -553,10 +575,12 @@ message Prompt { // The set of options that can be chosen for this prompt. repeated Option options = 4 [deprecated = true]; - oneof answer_spec { // The set of options that can be chosen for this prompt. OptionsList options_list = 9; + // Key to an OptionsList protobuf object on the blackboard. The variable is only read when + // the node starts meaning options cannot change while the node is running. + string options_list_in_blackboard = 11; // Custom parameter specification for the answer expected for this prompt. DictParam.Spec custom_params = 10; } @@ -716,7 +740,12 @@ message Dock { string host = 2; // ID of docking station to dock at. - uint32 docking_station_id = 3; + oneof id { + uint32 docking_station_id = 3; + + // Blackboard variable key that contains the docking station id. + string docking_station_id_blackboard_key = 11; + } // Optional child node. Children will have access to the status variables gathered by this node. // If specified, child node will determine success/failure of this node. @@ -810,7 +839,7 @@ message DataAcquisition { // a group_name. If a value is specified in this field, it will override the group_name value // specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard will // replace the keys in braces {}. - // Example: "telop-{date}", where "date" is a blackboard variable. + // Example: "teleop-{date}", where "date" is a blackboard variable. // Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a // Repeat node. string group_name_format = 5; @@ -837,7 +866,7 @@ message DataAcquisition { // // If set to true, this node will NOT cancel outgoing AcquireDataRequest's when the node is // paused / stopped. When the node is resumed, it will check feedback on the original outgoing - // AcquireDataReqeust. + // AcquireDataRequest. bool disable_cancel_on_pause_or_stop = 8; // If true, metadata string values may contain formatted blackboard variables. @@ -863,6 +892,10 @@ message RetainLease { message DefineBlackboard { // The list of variables that should be defined for this subtree, // with initial values. + // + // Note: Currently the mission service supports blackboard variable keys that contain ".", "[]", + // and "()". In a future release, this will no longer be supported. Boston Dynamics recommends + // using letters, numbers, and underscores for blackboard keys. repeated KeyValue blackboard_variables = 1; // The blackboard variables will only persist in the subtree defined by this // child node. The child's tick() will be called on the child until it @@ -878,7 +911,12 @@ message SetBlackboard { // variable, that variable will be evaluated at tick time, and then stored into // the blackboard. If the value is another blackboard variable, that blackboard // variable's value will be copied into the variable specified by the key. + // + // Note: Currently the mission service supports blackboard variable keys that contain ".", "[]", + // and "()". In a future release, this will no longer be supported. Boston Dynamics recommends + // using letters, numbers, and underscores for blackboard keys. repeated KeyValue blackboard_variables = 1; + } // Sets a blackboard variable to a formatted string, reading from other blackboard vars. @@ -895,7 +933,7 @@ message FormatBlackboard { // // Select examples: // - // Format String: "telop-{date}" + // Format String: "teleop-{date}" // Blackboard: "date" is a blackboard variable with string value: "2021-05-13" // Output: "teleop-2021-05-13" // @@ -929,6 +967,30 @@ message DateToBlackboard { } +// Write the QueryStoredCapturesResponse for a given QueryParameters message to the blackboard. +message BosdynQueryStoredCaptures { + // Name of the service to use. + string service_name = 1; + + // Host machine of the directory server that the data acquisition service is registered with. + string host = 2; + + // The key of the variable that the QueryStoredCapturesResponse will be written to. + string key = 3; + + // The QueryParameters message for the QueryStoredCapturesRequest that will be made. + QueryParameters query_params = 4; + + // Format strings that will be used together with the blackboard to generate + // a CaptureActionId. + message CaptureActionIdFormat { + string action_name_format = 1; + string group_name_format = 2; + } + // If specified, these CaptureActionIds will be added to the QueryParameters at runtime. + repeated CaptureActionIdFormat capture_action_ids_format = 5; +} + // Just returns a constant when calling tick(). message ConstantResult { // This result is always returned when calling tick(). @@ -943,7 +1005,7 @@ message RestartWhenPaused { } // Send an AcquireDataRequest to the data acquisition service when the mission is interrupted. -// Interuptions are anything that causes the mission to stop ticking automatically. +// Interruptions are anything that causes the mission to stop ticking automatically. message DataAcquisitionOnInterruption { // Child to run when node starts. If mission is interrupted while the child is still running, // the mission service will send an AcquireDataRequest to the data acquisition service. The @@ -960,7 +1022,7 @@ message DataAcquisitionOnInterruption { reserved 3; // Clients can specify a chunk of metadata for each possible interruption reason (fields 4-11). - // When an interruption occurs the metdata corresponding to the interruption reason will be + // When an interruption occurs the metadata corresponding to the interruption reason will be // merged with request_when_interrupted.request.metadata. // Interruption reason: PauseMission RPC called. @@ -975,7 +1037,7 @@ message DataAcquisitionOnInterruption { // Interruption reason: StopMission RPC called. Metadata stop_mission_metadata = 7; - // Interruption reason: Lease use error occured. + // Interruption reason: Lease use error occurred. Metadata lease_use_error_metadata = 8; // Interruption reason: Play mission timeout exceeded. @@ -1020,3 +1082,26 @@ message ClearBehaviorFaults { string cleared_cause_lease_timeout_blackboard_name = 6; } +// Creates a message, puts it in the current tick state messages, then ticks the child node. +// The MissionText will remain active while the node is ticked and RUNNING. +// Clients can retrieve active mission text through the GetState RPC. +message CreateMissionText { + // The mission text to create. The mission text may contain blackboard variable formatting. + string mission_text = 1; + + // Severity level of the text message. + // Here are guidelines for severity as it pertains to missions: + // INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to + // download. + // WARN: Something went wrong, but the mission will try to recover autonomously. + // ERROR: Something went wrong, and the mission can't recover without human intervention. + // Intervention is not time sensitive and can be resolved when convenient. + // CRITICAL: Something went wrong, and the mission can't recover without human intervention. + // Human needs to rescue the robot before battery runs out because it's not charging. + AlertData.SeverityLevel severity = 2; + + // Child to tick after creating the mission text + // The MissionText will be active as long as the child is ticked and RUNNING. + Node child = 3; +} + diff --git a/protos/bosdyn/api/mission/util.proto b/protos/bosdyn/api/mission/util.proto index ab092c2e6..0f817fdde 100644 --- a/protos/bosdyn/api/mission/util.proto +++ b/protos/bosdyn/api/mission/util.proto @@ -12,6 +12,8 @@ option java_outer_classname = "UtilProto"; import "google/protobuf/any.proto"; +import "bosdyn/api/alerts.proto"; + // Key/Value pair, used in other messages. message KeyValue { string key = 1; @@ -21,13 +23,12 @@ message KeyValue { // A value of a run-time or compile-time variable. message Value { oneof source { - ConstantValue constant = 2; // A constant value. + ConstantValue constant = 2; // A constant value. VariableDeclaration runtime_var = 3; // Look up a variable provided at run-time. - VariableDeclaration parameter = 4; // Look up a Node Parameter. + VariableDeclaration parameter = 4; // Look up a Node Parameter. } } - // Declaration of a run-time or compile-time variable. message VariableDeclaration { // Name of the variable, to be used as the key in KeyValue pairs. @@ -45,7 +46,6 @@ message VariableDeclaration { Type type = 2; } - // A constant value. Corresponds to the VariableDeclaration Type enum. message ConstantValue { oneof value { @@ -57,6 +57,26 @@ message ConstantValue { } } +// Nodes can pass arbitrary text back through the mission state. +message MissionText { + // The text of the message. + string text = 1; + + // Severity level of the text message. + // Here are guidelines for severity as it pertains to missions: + // INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to + // download. + // WARN: Something went wrong, but the mission will try to recover autonomously. + // ERROR: Something went wrong, and the mission can't recover without human intervention. + // Intervention is not time sensitive and can be resolved when convenient. + // CRITICAL: Something went wrong, and the mission can't recover without human intervention. + // Human needs to rescue the robot before battery runs out because it's not charging. + AlertData.SeverityLevel severity = 2; + + // The node which produced the update message. + int64 node_id = 3; +} + // Data a user can associate with a node. message UserData { @@ -71,7 +91,6 @@ message UserData { // - Nothing // - A [bosdyn.api.autowalk.Walk] if the mission was compiled using the Autowalk service. google.protobuf.Any source_representation = 4; - } // Results from executing / ticking / running a single node. diff --git a/protos/bosdyn/api/mobility_command.proto b/protos/bosdyn/api/mobility_command.proto index 15b39671d..9422530da 100644 --- a/protos/bosdyn/api/mobility_command.proto +++ b/protos/bosdyn/api/mobility_command.proto @@ -14,13 +14,10 @@ import "bosdyn/api/basic_command.proto"; import "google/protobuf/any.proto"; - // The robot command message to specify a basic command that moves the robot. message MobilityCommand { - // The mobility request must be one of the basic command primitives. message Request { - // Only one mobility command can be requested at a time. oneof command { // Command to move the robot along a trajectory. @@ -47,11 +44,9 @@ message MobilityCommand { // The feedback for the mobility command that will provide information on the progress // of the robot command. message Feedback { - // The feedback message associated with the requested command. Some commands may have // an empty feedback message if they do not provide any updates/progress. oneof feedback { - // Feedback for the trajectory command. SE2TrajectoryCommand.Feedback se2_trajectory_feedback = 1; diff --git a/protos/bosdyn/api/network_compute_bridge.proto b/protos/bosdyn/api/network_compute_bridge.proto index 9b6d1e47d..92ad71d56 100644 --- a/protos/bosdyn/api/network_compute_bridge.proto +++ b/protos/bosdyn/api/network_compute_bridge.proto @@ -156,7 +156,7 @@ message ComputeParameters { string model_name = 4; // For some computer vision operations a number of reference images are required along with the - // input image. These images might have been taken months ago, not neccessarilly taken right + // input image. These images might have been taken months ago, not necessarily taken right // now. repeated ImageCaptureAndSource reference_images = 6; diff --git a/protos/bosdyn/api/network_compute_bridge_service.proto b/protos/bosdyn/api/network_compute_bridge_service.proto index c790d04a0..3af5aa56b 100644 --- a/protos/bosdyn/api/network_compute_bridge_service.proto +++ b/protos/bosdyn/api/network_compute_bridge_service.proto @@ -16,7 +16,7 @@ service NetworkComputeBridge { rpc ListAvailableModels(ListAvailableModelsRequest) returns (ListAvailableModelsResponse) {} } -// Set of RPCs for workers of the network compute bridge. This is seperate from the RPCs for the +// Set of RPCs for workers of the network compute bridge. This is separate from the RPCs for the // on-robot network compute bridge so that if they need to diverge in the future it is possible // to do so. service NetworkComputeBridgeWorker { diff --git a/protos/bosdyn/api/payload.proto b/protos/bosdyn/api/payload.proto index 148c942ec..1e09e43ee 100644 --- a/protos/bosdyn/api/payload.proto +++ b/protos/bosdyn/api/payload.proto @@ -100,7 +100,7 @@ message PayloadMassVolumeProperties { repeated JointLimits joint_limits = 6; } -// Structure describing the moment of intertia of a body. The xx, yy, zz fields +// Structure describing the moment of inertia of a body. The xx, yy, zz fields // are the diagonal of the MOI tensor, and the xy, xz, and yz fields are the // off diagonal terms. message MomentOfIntertia { diff --git a/protos/bosdyn/api/payload_estimation.proto b/protos/bosdyn/api/payload_estimation.proto index fe5e953cc..751dec865 100644 --- a/protos/bosdyn/api/payload_estimation.proto +++ b/protos/bosdyn/api/payload_estimation.proto @@ -17,7 +17,7 @@ import "bosdyn/api/payload.proto"; message PayloadEstimationCommand { message Request { // PayloadEstimation command request takes no additional arguments. The estimation routine - // takes about ~1min to run. Subsequent PayloadEstimationCommand requests issued while the + // takes about ~1min to run. Subsequent PayloadEstimationCommand requests issued while the // routine is in progress are ignored until the routine is completed. } @@ -36,7 +36,7 @@ message PayloadEstimationCommand { STATUS_SMALL_MASS = 2; // Estimation routine is currently running; estimated_payload is empty. STATUS_IN_PROGRESS = 3; - // Error occurred during the routine; estaimted_payload is empty. + // Error occurred during the routine; estimated_payload is empty. STATUS_ERROR = 4; } // Status of the estimation routine. diff --git a/protos/bosdyn/api/payload_registration.proto b/protos/bosdyn/api/payload_registration.proto index 7754cc484..88022fc59 100644 --- a/protos/bosdyn/api/payload_registration.proto +++ b/protos/bosdyn/api/payload_registration.proto @@ -88,7 +88,7 @@ message UpdatePayloadVersionResponse { // UpdatePayload failed because a payload with this GUID does not yet exist. STATUS_DOES_NOT_EXIST = 2; - // UpdatePayload failed because the paylod guid & secret do not match any registered + // UpdatePayload failed because the payload guid & secret do not match any registered // payloads. STATUS_INVALID_CREDENTIALS = 3; } @@ -128,11 +128,11 @@ message GetPayloadAuthTokenResponse { // Success. The token is available. STATUS_OK = 1; - // GetPayloadAuthToken failed because the paylod guid & secret do not match any registered + // GetPayloadAuthToken failed because the payload guid & secret do not match any registered // payloads. STATUS_INVALID_CREDENTIALS = 2; - // GetPayloadAuthToken failed because the paylod has not been authorized by an admin. + // GetPayloadAuthToken failed because the payload has not been authorized by an admin. STATUS_PAYLOAD_NOT_AUTHORIZED = 3; } // Return status for the request. @@ -178,8 +178,8 @@ message UpdatePayloadAttachedResponse { // UpdatePayloadAttached failed because a payload with this GUID does not yet exist. STATUS_DOES_NOT_EXIST = 2; - // UpdatePayloadAttached failed because the paylod guid & secret do not match any registered - // payloads. + // UpdatePayloadAttached failed because the payload guid & secret do not match any + // registered payloads. STATUS_INVALID_CREDENTIALS = 3; // UpdatePayloadAttached failed because the requested payload has not yet been authorized. diff --git a/protos/bosdyn/api/payload_service.proto b/protos/bosdyn/api/payload_service.proto index 43a28db55..0760ae02d 100644 --- a/protos/bosdyn/api/payload_service.proto +++ b/protos/bosdyn/api/payload_service.proto @@ -17,4 +17,3 @@ service PayloadService { // List all payloads the robot knows about. rpc ListPayloads(ListPayloadsRequest) returns (ListPayloadsResponse); } - diff --git a/protos/bosdyn/api/point_cloud.proto b/protos/bosdyn/api/point_cloud.proto index 80fbbe393..d5bab0b52 100644 --- a/protos/bosdyn/api/point_cloud.proto +++ b/protos/bosdyn/api/point_cloud.proto @@ -15,8 +15,8 @@ import "google/protobuf/timestamp.proto"; // Information about a sensor or process that produces point clouds. message PointCloudSource { - // The name of the point cloud source. This is intended to be unique accross all point cloud sources, - // and should be human readable. + // The name of the point cloud source. This is intended to be unique across all point cloud + // sources, and should be human readable. string name = 1; // The frame name of the sensor. The transformation from vision_tform_sensor can be computed @@ -44,9 +44,10 @@ message PointCloud { enum Encoding { // The point cloud has an unknown encoding. ENCODING_UNKNOWN = 0; - // Each point is x,y,z float32 value (12 bytes, little-endian) stored sequentially. This allows - // the point cloud to be expressed in any range and resolution represented by floating point - // numbers, but the point cloud will be larger than if one of the other encodings is used. + // Each point is x,y,z float32 value (12 bytes, little-endian) stored sequentially. This + // allows the point cloud to be expressed in any range and resolution represented by + // floating point numbers, but the point cloud will be larger than if one of the other + // encodings is used. ENCODING_XYZ_32F = 1; // Each point is 3 signed int8s plus an extra shared signed int8s (4 byte). // byte layout: [..., p1_x, p1_y, p1_z, x, ...] @@ -117,13 +118,15 @@ message ListPointCloudSourcesRequest { RequestHeader header = 1; } -// The GetPointCloud response message which returns any point cloud data associated with that service. +// The GetPointCloud response message which returns any point cloud data associated with that +// service. message ListPointCloudSourcesResponse { // Common response Header. ResponseHeader header = 1; // The set of PointCloudSources available from this service. - // May be empty if the service serves no point clouds (e.g., if no sensors were found on startup). + // May be empty if the service serves no point clouds (e.g., if no sensors were found on + // startup). repeated PointCloudSource point_cloud_sources = 2; } @@ -143,7 +146,6 @@ message GetPointCloudRequest { } message PointCloudResponse { - enum Status { // UNKNOWN should never be used. // An internal PointCloudService issue has happened if UNKNOWN is set. diff --git a/protos/bosdyn/api/point_cloud_service.proto b/protos/bosdyn/api/point_cloud_service.proto index 2b263984e..bb1d4bac4 100644 --- a/protos/bosdyn/api/point_cloud_service.proto +++ b/protos/bosdyn/api/point_cloud_service.proto @@ -17,9 +17,10 @@ import "bosdyn/api/point_cloud.proto"; // and it supports requesting the latest point cloud data for each source by name. service PointCloudService { // Obtain the list of PointCloudSources for this given service. - // Note that there may be multiple PointCloudServices running, each with their own set of sources - // The name field keys access to individual point clouds when calling GetPointCloud. - rpc ListPointCloudSources(ListPointCloudSourcesRequest) returns (ListPointCloudSourcesResponse) {} + // Note that there may be multiple PointCloudServices running, each with their own set of + // sources The name field keys access to individual point clouds when calling GetPointCloud. + rpc ListPointCloudSources(ListPointCloudSourcesRequest) + returns (ListPointCloudSourcesResponse) {} // Request point clouds by source name. rpc GetPointCloud(GetPointCloudRequest) returns (GetPointCloudResponse) {} diff --git a/protos/bosdyn/api/power.proto b/protos/bosdyn/api/power.proto index e9f9059d1..f617c0ba7 100644 --- a/protos/bosdyn/api/power.proto +++ b/protos/bosdyn/api/power.proto @@ -163,7 +163,7 @@ message FanPowerCommandResponse { // Status is not specified. STATUS_UNKNOWN = 0; - // Fan Power command succeeded. May still get overriden later in duration + // Fan Power command succeeded. May still get overridden later in duration STATUS_OK = 1; // ERROR: Fan Power command rejected because temperature above safe threshold @@ -217,7 +217,7 @@ message FanPowerCommandFeedbackResponse { Status status = 2; // Based on duration, the time that this command was intended to stop being in effect. If - // stopped/overriden prematurely, early_stop_time will reflect the actual time the command + // stopped/overridden prematurely, early_stop_time will reflect the actual time the command // stopped being in effect google.protobuf.Timestamp desired_end_time = 3; diff --git a/protos/bosdyn/api/proto_reference.md b/protos/bosdyn/api/proto_reference.md index decbe50ef..2b2a5a530 100644 --- a/protos/bosdyn/api/proto_reference.md +++ b/protos/bosdyn/api/proto_reference.md @@ -132,6 +132,7 @@ - [FailureBehavior.ReturnToStartAndTryAgainLater](#bosdyn-api-autowalk-FailureBehavior-ReturnToStartAndTryAgainLater) - [FailureBehavior.SafePowerOff](#bosdyn-api-autowalk-FailureBehavior-SafePowerOff) - [GlobalParameters](#bosdyn-api-autowalk-GlobalParameters) + - [HriBehaviors](#bosdyn-api-autowalk-HriBehaviors) - [PlaybackMode](#bosdyn-api-autowalk-PlaybackMode) - [PlaybackMode.Continuous](#bosdyn-api-autowalk-PlaybackMode-Continuous) - [PlaybackMode.Once](#bosdyn-api-autowalk-PlaybackMode-Once) @@ -308,7 +309,10 @@ - [StoreImageResponse](#bosdyn-api-StoreImageResponse) - [StoreMetadataRequest](#bosdyn-api-StoreMetadataRequest) - [StoreMetadataResponse](#bosdyn-api-StoreMetadataResponse) + - [StoreStreamRequest](#bosdyn-api-StoreStreamRequest) + - [StoreStreamResponse](#bosdyn-api-StoreStreamResponse) - [StoredCapturedData](#bosdyn-api-StoredCapturedData) + - [StoredLargeCapturedData](#bosdyn-api-StoredLargeCapturedData) - [TimeRangeQuery](#bosdyn-api-TimeRangeQuery) - [bosdyn/api/data_acquisition_store_service.proto](#bosdyn_api_data_acquisition_store_service-proto) @@ -485,6 +489,7 @@ - [Box3](#bosdyn-api-Box3) - [Box3WithFrame](#bosdyn-api-Box3WithFrame) - [Circle](#bosdyn-api-Circle) + - [CircleWithFrame](#bosdyn-api-CircleWithFrame) - [CylindricalCoordinate](#bosdyn-api-CylindricalCoordinate) - [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) - [FrameTreeSnapshot.ChildToParentEdgeMapEntry](#bosdyn-api-FrameTreeSnapshot-ChildToParentEdgeMapEntry) @@ -493,6 +498,7 @@ - [MatrixInt32](#bosdyn-api-MatrixInt32) - [MatrixInt64](#bosdyn-api-MatrixInt64) - [Matrixf](#bosdyn-api-Matrixf) + - [OrientedBox2](#bosdyn-api-OrientedBox2) - [Plane](#bosdyn-api-Plane) - [PolyLine](#bosdyn-api-PolyLine) - [Polygon](#bosdyn-api-Polygon) @@ -605,12 +611,14 @@ - [DownloadEdgeSnapshotResponse](#bosdyn-api-graph_nav-DownloadEdgeSnapshotResponse) - [DownloadGraphRequest](#bosdyn-api-graph_nav-DownloadGraphRequest) - [DownloadGraphResponse](#bosdyn-api-graph_nav-DownloadGraphResponse) + - [DownloadGraphStreamingResponse](#bosdyn-api-graph_nav-DownloadGraphStreamingResponse) - [DownloadWaypointSnapshotRequest](#bosdyn-api-graph_nav-DownloadWaypointSnapshotRequest) - [DownloadWaypointSnapshotResponse](#bosdyn-api-graph_nav-DownloadWaypointSnapshotResponse) - [GPSNavigationParams](#bosdyn-api-graph_nav-GPSNavigationParams) - [GetLocalizationStateRequest](#bosdyn-api-graph_nav-GetLocalizationStateRequest) - [GetLocalizationStateResponse](#bosdyn-api-graph_nav-GetLocalizationStateResponse) - [LostDetectorState](#bosdyn-api-graph_nav-LostDetectorState) + - [LostDetectorState.Params](#bosdyn-api-graph_nav-LostDetectorState-Params) - [ModifyNavigationResponse](#bosdyn-api-graph_nav-ModifyNavigationResponse) - [NavigateRouteRequest](#bosdyn-api-graph_nav-NavigateRouteRequest) - [NavigateRouteResponse](#bosdyn-api-graph_nav-NavigateRouteResponse) @@ -636,6 +644,7 @@ - [UploadGraphRequest](#bosdyn-api-graph_nav-UploadGraphRequest) - [UploadGraphResponse](#bosdyn-api-graph_nav-UploadGraphResponse) - [UploadGraphResponse.ValidationStatus](#bosdyn-api-graph_nav-UploadGraphResponse-ValidationStatus) + - [UploadGraphStreamingRequest](#bosdyn-api-graph_nav-UploadGraphStreamingRequest) - [UploadWaypointSnapshotRequest](#bosdyn-api-graph_nav-UploadWaypointSnapshotRequest) - [UploadWaypointSnapshotResponse](#bosdyn-api-graph_nav-UploadWaypointSnapshotResponse) - [ValidateGraphRequest](#bosdyn-api-graph_nav-ValidateGraphRequest) @@ -662,6 +671,7 @@ - [SetLocalizationResponse.QualityCheckResult](#bosdyn-api-graph_nav-SetLocalizationResponse-QualityCheckResult) - [SetLocalizationResponse.Status](#bosdyn-api-graph_nav-SetLocalizationResponse-Status) - [TravelParams.FeatureQualityTolerance](#bosdyn-api-graph_nav-TravelParams-FeatureQualityTolerance) + - [TravelParams.PathPlannerMode](#bosdyn-api-graph_nav-TravelParams-PathPlannerMode) - [UploadGraphResponse.Status](#bosdyn-api-graph_nav-UploadGraphResponse-Status) - [UploadWaypointSnapshotResponse.Status](#bosdyn-api-graph_nav-UploadWaypointSnapshotResponse-Status) - [ValidateGraphResponse.Status](#bosdyn-api-graph_nav-ValidateGraphResponse-Status) @@ -669,6 +679,9 @@ - [bosdyn/api/graph_nav/graph_nav_service.proto](#bosdyn_api_graph_nav_graph_nav_service-proto) - [GraphNavService](#bosdyn-api-graph_nav-GraphNavService) +- [bosdyn/api/graph_nav/lost_detection.proto](#bosdyn_api_graph_nav_lost_detection-proto) + - [LostDetectorStrictness](#bosdyn-api-graph_nav-LostDetectorStrictness) + - [bosdyn/api/graph_nav/map.proto](#bosdyn_api_graph_nav_map-proto) - [Anchor](#bosdyn-api-graph_nav-Anchor) - [AnchoredWorldObject](#bosdyn-api-graph_nav-AnchoredWorldObject) @@ -686,6 +699,8 @@ - [Graph](#bosdyn-api-graph_nav-Graph) - [MapStats](#bosdyn-api-graph_nav-MapStats) - [MapStats.Stat](#bosdyn-api-graph_nav-MapStats-Stat) + - [Region](#bosdyn-api-graph_nav-Region) + - [RegionWithFrame](#bosdyn-api-graph_nav-RegionWithFrame) - [Waypoint](#bosdyn-api-graph_nav-Waypoint) - [Waypoint.Annotations](#bosdyn-api-graph_nav-Waypoint-Annotations) - [Waypoint.Annotations.GPSSettings](#bosdyn-api-graph_nav-Waypoint-Annotations-GPSSettings) @@ -702,6 +717,7 @@ - [Edge.Annotations.PathFollowingMode](#bosdyn-api-graph_nav-Edge-Annotations-PathFollowingMode) - [Edge.Annotations.StairData.DescentPreference](#bosdyn-api-graph_nav-Edge-Annotations-StairData-DescentPreference) - [Edge.EdgeSource](#bosdyn-api-graph_nav-Edge-EdgeSource) + - [Region.DataFilter](#bosdyn-api-graph_nav-Region-DataFilter) - [Waypoint.WaypointSource](#bosdyn-api-graph_nav-Waypoint-WaypointSource) - [bosdyn/api/graph_nav/map_processing.proto](#bosdyn_api_graph_nav_map_processing-proto) @@ -717,6 +733,7 @@ - [ProcessAnchoringResponse.GPSResult](#bosdyn-api-graph_nav-ProcessAnchoringResponse-GPSResult) - [ProcessTopologyRequest](#bosdyn-api-graph_nav-ProcessTopologyRequest) - [ProcessTopologyRequest.CollisionCheckingParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-CollisionCheckingParams) + - [ProcessTopologyRequest.FeatureMatchingParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-FeatureMatchingParams) - [ProcessTopologyRequest.FiducialLoopClosureParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-FiducialLoopClosureParams) - [ProcessTopologyRequest.ICPParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-ICPParams) - [ProcessTopologyRequest.OdometryLoopClosureParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-OdometryLoopClosureParams) @@ -763,6 +780,18 @@ - [bosdyn/api/graph_nav/recording_service.proto](#bosdyn_api_graph_nav_recording_service-proto) - [GraphNavRecordingService](#bosdyn-api-graph_nav-GraphNavRecordingService) +- [bosdyn/api/graph_nav/visual_features.proto](#bosdyn_api_graph_nav_visual_features-proto) + - [DirectionWithCovariance](#bosdyn-api-graph_nav-DirectionWithCovariance) + - [GenericDescriptor](#bosdyn-api-graph_nav-GenericDescriptor) + - [LandmarkObservationIndex](#bosdyn-api-graph_nav-LandmarkObservationIndex) + - [PositionWithCovariance](#bosdyn-api-graph_nav-PositionWithCovariance) + - [VisualDescriptor](#bosdyn-api-graph_nav-VisualDescriptor) + - [VisualKeyFrame](#bosdyn-api-graph_nav-VisualKeyFrame) + - [VisualKeyFrameBundle](#bosdyn-api-graph_nav-VisualKeyFrameBundle) + - [VisualKeypoint](#bosdyn-api-graph_nav-VisualKeypoint) + - [VisualLandmark](#bosdyn-api-graph_nav-VisualLandmark) + - [VisualLandmarks](#bosdyn-api-graph_nav-VisualLandmarks) + - [bosdyn/api/gripper_camera_param.proto](#bosdyn_api_gripper_camera_param-proto) - [GripperCameraGetParamRequest](#bosdyn-api-GripperCameraGetParamRequest) - [GripperCameraGetParamResponse](#bosdyn-api-GripperCameraGetParamResponse) @@ -806,6 +835,10 @@ - [ImageRequest](#bosdyn-api-ImageRequest) - [ImageResponse](#bosdyn-api-ImageResponse) - [ImageSource](#bosdyn-api-ImageSource) + - [ImageSource.KannalaBrandtModel](#bosdyn-api-ImageSource-KannalaBrandtModel) + - [ImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics](#bosdyn-api-ImageSource-KannalaBrandtModel-KannalaBrandtIntrinsics) + - [ImageSource.PinholeBrownConrady](#bosdyn-api-ImageSource-PinholeBrownConrady) + - [ImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics](#bosdyn-api-ImageSource-PinholeBrownConrady-PinholeBrownConradyIntrinsics) - [ImageSource.PinholeModel](#bosdyn-api-ImageSource-PinholeModel) - [ImageSource.PinholeModel.CameraIntrinsics](#bosdyn-api-ImageSource-PinholeModel-CameraIntrinsics) - [ListImageSourcesRequest](#bosdyn-api-ListImageSourcesRequest) @@ -1034,6 +1067,8 @@ - [BosdynNavigateRoute](#bosdyn-api-mission-BosdynNavigateRoute) - [BosdynNavigateTo](#bosdyn-api-mission-BosdynNavigateTo) - [BosdynPowerRequest](#bosdyn-api-mission-BosdynPowerRequest) + - [BosdynQueryStoredCaptures](#bosdyn-api-mission-BosdynQueryStoredCaptures) + - [BosdynQueryStoredCaptures.CaptureActionIdFormat](#bosdyn-api-mission-BosdynQueryStoredCaptures-CaptureActionIdFormat) - [BosdynRecordEvent](#bosdyn-api-mission-BosdynRecordEvent) - [BosdynRecordEvent.AdditionalParametersEntry](#bosdyn-api-mission-BosdynRecordEvent-AdditionalParametersEntry) - [BosdynRobotCommand](#bosdyn-api-mission-BosdynRobotCommand) @@ -1042,6 +1077,7 @@ - [Condition](#bosdyn-api-mission-Condition) - [Condition.Operand](#bosdyn-api-mission-Condition-Operand) - [ConstantResult](#bosdyn-api-mission-ConstantResult) + - [CreateMissionText](#bosdyn-api-mission-CreateMissionText) - [DataAcquisition](#bosdyn-api-mission-DataAcquisition) - [DataAcquisitionOnInterruption](#bosdyn-api-mission-DataAcquisitionOnInterruption) - [DateToBlackboard](#bosdyn-api-mission-DateToBlackboard) @@ -1106,6 +1142,7 @@ - [bosdyn/api/mission/util.proto](#bosdyn_api_mission_util-proto) - [ConstantValue](#bosdyn-api-mission-ConstantValue) - [KeyValue](#bosdyn-api-mission-KeyValue) + - [MissionText](#bosdyn-api-mission-MissionText) - [UserData](#bosdyn-api-mission-UserData) - [Value](#bosdyn-api-mission-Value) - [VariableDeclaration](#bosdyn-api-mission-VariableDeclaration) @@ -1285,6 +1322,7 @@ - [BatteryState](#bosdyn-api-BatteryState) - [BehaviorFault](#bosdyn-api-BehaviorFault) - [BehaviorFaultState](#bosdyn-api-BehaviorFaultState) + - [BehaviorState](#bosdyn-api-BehaviorState) - [CombinedJointStates](#bosdyn-api-CombinedJointStates) - [CommsState](#bosdyn-api-CommsState) - [EStopState](#bosdyn-api-EStopState) @@ -1328,6 +1366,7 @@ - [BatteryState.Status](#bosdyn-api-BatteryState-Status) - [BehaviorFault.Cause](#bosdyn-api-BehaviorFault-Cause) - [BehaviorFault.Status](#bosdyn-api-BehaviorFault-Status) + - [BehaviorState.State](#bosdyn-api-BehaviorState-State) - [EStopState.State](#bosdyn-api-EStopState-State) - [EStopState.Type](#bosdyn-api-EStopState-Type) - [FootState.Contact](#bosdyn-api-FootState-Contact) @@ -1415,6 +1454,7 @@ - [BodyHoldParams](#bosdyn-api-spot-BodyHoldParams) - [BourreeParams](#bosdyn-api-spot-BourreeParams) - [ButtCircleParams](#bosdyn-api-spot-ButtCircleParams) + - [BuzzerNoteParams](#bosdyn-api-spot-BuzzerNoteParams) - [ChickenHeadParams](#bosdyn-api-spot-ChickenHeadParams) - [ClapParams](#bosdyn-api-spot-ClapParams) - [Color](#bosdyn-api-spot-Color) @@ -1444,6 +1484,8 @@ - [RippleColorParams](#bosdyn-api-spot-RippleColorParams) - [RotateBodyParams](#bosdyn-api-spot-RotateBodyParams) - [RunningManParams](#bosdyn-api-spot-RunningManParams) + - [SetAllColorParams](#bosdyn-api-spot-SetAllColorParams) + - [SetAudioVisualColorParams](#bosdyn-api-spot-SetAudioVisualColorParams) - [SetColorParams](#bosdyn-api-spot-SetColorParams) - [SideParams](#bosdyn-api-spot-SideParams) - [StanceShape](#bosdyn-api-spot-StanceShape) @@ -1456,6 +1498,7 @@ - [WorkspaceArmMoveParams](#bosdyn-api-spot-WorkspaceArmMoveParams) - [ArmMoveFrame](#bosdyn-api-spot-ArmMoveFrame) + - [BuzzerNoteParams.Note](#bosdyn-api-spot-BuzzerNoteParams-Note) - [Easing](#bosdyn-api-spot-Easing) - [FidgetStandParams.FidgetPreset](#bosdyn-api-spot-FidgetStandParams-FidgetPreset) - [FrameSnapshotParams.Inclusion](#bosdyn-api-spot-FrameSnapshotParams-Inclusion) @@ -1602,6 +1645,7 @@ - [BodyControlParams.RotationSetting](#bosdyn-api-spot-BodyControlParams-RotationSetting) - [BodyExternalForceParams.ExternalForceIndicator](#bosdyn-api-spot-BodyExternalForceParams-ExternalForceIndicator) - [LocomotionHint](#bosdyn-api-spot-LocomotionHint) + - [MobilityParams.HazardDetectionMode](#bosdyn-api-spot-MobilityParams-HazardDetectionMode) - [MobilityParams.StairsMode](#bosdyn-api-spot-MobilityParams-StairsMode) - [SwingHeight](#bosdyn-api-spot-SwingHeight) - [TerrainParams.GratedSurfacesMode](#bosdyn-api-spot-TerrainParams-GratedSurfacesMode) @@ -1613,10 +1657,6 @@ - [CameraCalibrationFeedbackResponse](#bosdyn-api-spot-CameraCalibrationFeedbackResponse) - [DepthPlaneSpotCheckResult](#bosdyn-api-spot-DepthPlaneSpotCheckResult) - [FootHeightCheckResult](#bosdyn-api-spot-FootHeightCheckResult) - - [GripperCameraCalibrationCommandRequest](#bosdyn-api-spot-GripperCameraCalibrationCommandRequest) - - [GripperCameraCalibrationCommandResponse](#bosdyn-api-spot-GripperCameraCalibrationCommandResponse) - - [GripperCameraCalibrationFeedbackRequest](#bosdyn-api-spot-GripperCameraCalibrationFeedbackRequest) - - [GripperCameraCalibrationFeedbackResponse](#bosdyn-api-spot-GripperCameraCalibrationFeedbackResponse) - [HipRangeOfMotionResult](#bosdyn-api-spot-HipRangeOfMotionResult) - [JointKinematicCheckResult](#bosdyn-api-spot-JointKinematicCheckResult) - [LegPairCheckResult](#bosdyn-api-spot-LegPairCheckResult) @@ -1635,8 +1675,6 @@ - [CameraCalibrationFeedbackResponse.Status](#bosdyn-api-spot-CameraCalibrationFeedbackResponse-Status) - [DepthPlaneSpotCheckResult.Status](#bosdyn-api-spot-DepthPlaneSpotCheckResult-Status) - [FootHeightCheckResult.Status](#bosdyn-api-spot-FootHeightCheckResult-Status) - - [GripperCameraCalibrationCommandRequest.Command](#bosdyn-api-spot-GripperCameraCalibrationCommandRequest-Command) - - [GripperCameraCalibrationFeedbackResponse.Status](#bosdyn-api-spot-GripperCameraCalibrationFeedbackResponse-Status) - [HipRangeOfMotionResult.Error](#bosdyn-api-spot-HipRangeOfMotionResult-Error) - [JointKinematicCheckResult.Error](#bosdyn-api-spot-JointKinematicCheckResult-Error) - [LegPairCheckResult.Status](#bosdyn-api-spot-LegPairCheckResult-Status) @@ -2694,14 +2732,14 @@ details. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| root_frame_name | [string](#string) | | The root frame is used to set the optional task frame that all trajectories are
                                                                                                                                    specified with respect to. If the optional task frame is left un-specified it defaults
                                                                                                                                    to the identity transform and the root frame becomes the task frame. | -| wrist_tform_tool | [SE3Pose](#bosdyn-api-SE3Pose) | | The tool pose relative to the parent link (wrist).
                                                                                                                                    Defaults to
                                                                                                                                    [0.19557 0 0]
                                                                                                                                    [1 0 0 0]
                                                                                                                                    a frame with it's origin slightly in front of the gripper's palm plate aligned with wrists orientation. | -| root_tform_task | [SE3Pose](#bosdyn-api-SE3Pose) | | The fields below are specified in this optional task frame. If unset int defaults
                                                                                                                                    to the identity transform and all quantities are therefore expressed in the root_frame_name. | -| pose_trajectory_in_task | [SE3Trajectory](#bosdyn-api-SE3Trajectory) | | A 3D pose trajectory for the tool expressed in the task frame, e.g. task_T_tool.
                                                                                                                                    This pose trajectory is optional if requesting a pure wrench at the end-effector,
                                                                                                                                    otherwise required for position or mixed force/position end-effector requests. | +| root_frame_name | [string](#string) | | The root frame is used to set the optional task frame that all trajectories are
                                                                                                                                    specified with respect to. If the optional task frame is left un-specified it defaults
                                                                                                                                    to the identity transform and the root frame becomes the task frame. | +| wrist_tform_tool | [SE3Pose](#bosdyn-api-SE3Pose) | | The tool pose relative to the parent link (wrist).
                                                                                                                                    Defaults to
                                                                                                                                    [0.19557 0 0]
                                                                                                                                    [1 0 0 0]
                                                                                                                                    a frame with it's origin slightly in front of the gripper's palm plate aligned with
                                                                                                                                    wrists orientation. | +| root_tform_task | [SE3Pose](#bosdyn-api-SE3Pose) | | The fields below are specified in this optional task frame. If unset int defaults
                                                                                                                                    to the identity transform and all quantities are therefore expressed in the
                                                                                                                                    root_frame_name. | +| pose_trajectory_in_task | [SE3Trajectory](#bosdyn-api-SE3Trajectory) | | A 3D pose trajectory for the tool expressed in the task frame, e.g. task_T_tool.
                                                                                                                                    This pose trajectory is optional if requesting a pure wrench at the end-effector,
                                                                                                                                    otherwise required for position or mixed force/position end-effector requests. | | maximum_acceleration | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Optional Maximum acceleration magnitude of the end-effector.
                                                                                                                                    Valid ranges (0, 20] | | max_linear_velocity | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Optional Maximum linear velocity magnitude of the end-effector. (m/s) | | max_angular_velocity | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Optional Maximum angular velocity magnitude of the end-effector. (rad/s) | -| max_pos_tracking_error | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Maximum allowable tracking error of the tool frame from the desired trajectory
                                                                                                                                    before the arm will stop moving and cancel the rest of the trajectory. When this limit is exceeded, the
                                                                                                                                    hand will stay at the pose it was at when it exceeded the tracking error, and any other part of the
                                                                                                                                    trajectory specified in the rest of this message will be ignored.
                                                                                                                                    max position tracking error in meters | +| max_pos_tracking_error | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Maximum allowable tracking error of the tool frame from the desired trajectory
                                                                                                                                    before the arm will stop moving and cancel the rest of the trajectory. When this limit is
                                                                                                                                    exceeded, the hand will stay at the pose it was at when it exceeded the tracking error,
                                                                                                                                    and any other part of the trajectory specified in the rest of this message will be
                                                                                                                                    ignored. max position tracking error in meters | | max_rot_tracking_error | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | max orientation tracking error in radians | | force_remain_near_current_joint_configuration | [bool](#bool) | | | | preferred_joint_configuration | [ArmJointPosition](#bosdyn-api-ArmJointPosition) | | | @@ -2711,8 +2749,8 @@ details. | press_force_percentage | [Vec3](#bosdyn-api-Vec3) | | Amount of force to use on each axis, from 0 (no force) to 1.0 (maximum force), can also
                                                                                                                                    be negative. Full range: [-1.0, 1.0] | | xy_admittance | [ArmSurfaceContact.Request.AdmittanceSetting](#bosdyn-api-ArmSurfaceContact-Request-AdmittanceSetting) | | Admittance settings for each axis in the admittance frame. | | z_admittance | [ArmSurfaceContact.Request.AdmittanceSetting](#bosdyn-api-ArmSurfaceContact-Request-AdmittanceSetting) | | | -| xy_to_z_cross_term_admittance | [ArmSurfaceContact.Request.AdmittanceSetting](#bosdyn-api-ArmSurfaceContact-Request-AdmittanceSetting) | | Cross term, making force in the XY axis cause movement in the z-axis.
                                                                                                                                    By default is OFF
                                                                                                                                    Setting this value will make the arm move in the negative Z-axis whenever it feels force in
                                                                                                                                    the XY axis. | -| bias_force_ewrt_body | [Vec3](#bosdyn-api-Vec3) | | Specifies a force that the body should expect to feel. This allows the robot to "lean into"
                                                                                                                                    an external force. Be careful using this field, because if you lie to the robot, it can
                                                                                                                                    fall over. | +| xy_to_z_cross_term_admittance | [ArmSurfaceContact.Request.AdmittanceSetting](#bosdyn-api-ArmSurfaceContact-Request-AdmittanceSetting) | | Cross term, making force in the XY axis cause movement in the z-axis.
                                                                                                                                    By default is OFF
                                                                                                                                    Setting this value will make the arm move in the negative Z-axis whenever it feels force
                                                                                                                                    in the XY axis. | +| bias_force_ewrt_body | [Vec3](#bosdyn-api-Vec3) | | Specifies a force that the body should expect to feel. This allows the robot to "lean
                                                                                                                                    into" an external force. Be careful using this field, because if you lie to the robot,
                                                                                                                                    it can fall over. | | gripper_command | [ClawGripperCommand.Request](#bosdyn-api-ClawGripperCommand-Request) | | Gripper control | | is_robot_following_hand | [bool](#bool) | | Set to true to have robot is walk around to follow the hand. | @@ -3370,7 +3408,7 @@ For actions associated with the Data Acquisition Service. | acquire_data_request | [bosdyn.api.AcquireDataRequest](#bosdyn-api-AcquireDataRequest) | | The autowalk service replaces the action_name field in the CaptureActionId with the
                                                                                                                                    element name. | | completion_behavior | [bosdyn.api.mission.DataAcquisition.CompletionBehavior](#bosdyn-api-mission-DataAcquisition-CompletionBehavior) | | | | last_known_capabilities | [bosdyn.api.AcquisitionCapabilityList](#bosdyn-api-AcquisitionCapabilityList) | | Last known Data Acquisition capabilities. | -| record_time_images | [bosdyn.api.ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | Any images taken at action creation time. For DataAcquisition actions, this includes:
                                                                                                                                    - Any images in the Data Acquisition capture.
                                                                                                                                    - Any images that are inputs to NCB workers that are in the Data Acquisition capture.
                                                                                                                                    - Any images that a Data Acquisition plugin in the Data Acquisition capture requests a
                                                                                                                                    region of interest for.

                                                                                                                                    Note that both this message and AcquisitionCapabilityList will contain the
                                                                                                                                    Spec for images sources. This message will contain the spec at record time,
                                                                                                                                    while last_known_capabilities should be updated as time progresses and services
                                                                                                                                    evolve.

                                                                                                                                    This data is meant to allow UI's to give users context about their actions, AND
                                                                                                                                    provide them a canvas to edit region of interests with after the fact. It is
                                                                                                                                    not used at mission playback time. | +| record_time_images | [bosdyn.api.ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | Any images taken at action creation time. For DataAcquisition actions, this includes:
                                                                                                                                    - Any images in the Data Acquisition capture.
                                                                                                                                    - Any images that are inputs to NCB workers that are in the Data Acquisition capture.
                                                                                                                                    - Any images that a Data Acquisition plugin in the Data Acquisition capture requests a
                                                                                                                                    region of interest for.

                                                                                                                                    Note that both this message and AcquisitionCapabilityList will contain the
                                                                                                                                    Spec for images sources. This message will contain the spec at record time,
                                                                                                                                    while last_known_capabilities should be updated as time progresses and services
                                                                                                                                    evolve.

                                                                                                                                    This data is meant to allow UIs to give users context about their actions, AND
                                                                                                                                    provide them a canvas to edit region of interests with after the fact. It is
                                                                                                                                    not used at mission playback time. | @@ -3405,7 +3443,7 @@ For actions associated with the Data Acquisition Service. | lease_resources | [string](#string) | repeated | Resources that we will need leases on. | | inputs | [bosdyn.api.mission.KeyValue](#bosdyn-api-mission-KeyValue) | repeated | **Deprecated.** The list of variables the remote host should receive.
                                                                                                                                    Variables given can be available at either run-time or compile-time.
                                                                                                                                    The "key" in KeyValue is the name of the variable as used by the remote system.
                                                                                                                                    DEPRECATED as of 3.3. Please use 'parameters' instead. | | parameters | [bosdyn.api.CustomParamCollection](#bosdyn-api-CustomParamCollection) | | All specifications and any values chosen at record time. | -| record_time_images | [bosdyn.api.ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | Any images taken at action creation time. For RemoteGRPC's, this will only happen
                                                                                                                                    if the RemoteGRPC advertises parameters that require a region of interest for a specific
                                                                                                                                    camera.

                                                                                                                                    This data is meant to allow UI's to give users context about their actions, AND
                                                                                                                                    provide them a canvas to edit region of interests with after the fact. It is
                                                                                                                                    not used at mission playback time. | +| record_time_images | [bosdyn.api.ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | Any images taken at action creation time. For RemoteGRPC's, this will only happen
                                                                                                                                    if the RemoteGRPC advertises parameters that require a region of interest for a specific
                                                                                                                                    camera.

                                                                                                                                    This data is meant to allow UIs to give users context about their actions, AND
                                                                                                                                    provide them a canvas to edit region of interests with after the fact. It is
                                                                                                                                    not used at mission playback time. | @@ -3661,6 +3699,8 @@ The dock itself and the target associated with it | docked_waypoint_id | [string](#string) | | To maximize reliability, at record time, the client should dock the robot
                                                                                                                                    while graph_nav is still recording. When the robot is finished docking,
                                                                                                                                    the client should create a waypoint on top of the dock, while the robot is
                                                                                                                                    docked, and then stop recording. The waypoint created while the
                                                                                                                                    robot is sitting on the dock should be specified here. | | target_prep_pose | [Target](#bosdyn-api-autowalk-Target) | | When it is time for the robot to dock, it will approach this target
                                                                                                                                    before issuing docking commands. If the user is using graph_nav, the
                                                                                                                                    final waypoint in the NavigateRoute OR the waypoint ID in the
                                                                                                                                    NavigateTo MUST be at the docking prep pose. To do this, send a docking
                                                                                                                                    command to move the robot to the docking prep pose. Then, create a
                                                                                                                                    waypoint at the docking prep pose location. Graph_nav is responsible for
                                                                                                                                    navigating the robot to the docking prep pose. Once the robot is in the
                                                                                                                                    docking prep pose, the docking service does the rest. | | prompt_duration | [google.protobuf.Duration](#google-protobuf-Duration) | | At mission playback, if the robot is unable to reach the dock OR successfully
                                                                                                                                    dock, the mission will let the operator know with a user question. If the operator
                                                                                                                                    does not answer, the robot will safely power off. This parameter controls
                                                                                                                                    how long the operator has to answer.
                                                                                                                                    This parameter also controls how long robot will wait to retry to undock on
                                                                                                                                    a failed undock. | +| disable_recharge | [bool](#bool) | | Whether the robot can use this dock for recharging or executing a return to dock and try
                                                                                                                                    again later failure behavior. | +| disable_end | [bool](#bool) | | Whether the robot can end a mission on this dock. | @@ -3784,6 +3824,24 @@ These parameters apply to the entire autowalk. | self_right_attempts | [int32](#int32) | | The mission can automatically self-right the robot. Autonomous self-rights
                                                                                                                                    can damage the robot, its payloads, and its surroundings. If the user
                                                                                                                                    does not want the robot to self-right on its own, set this number to 0.
                                                                                                                                    If the user does want the robot to self-right itself, the user may set a
                                                                                                                                    maximum number of attempts so that the robot does not destroy itself by
                                                                                                                                    repeatedly falling and getting up and falling again. | | post_mission_callbacks | [Action.RemoteGrpc](#bosdyn-api-autowalk-Action-RemoteGrpc) | repeated | The callbacks that will be executed at the end of the mission. Functionality that
                                                                                                                                    is often found in post-mission callbacks includes uploading data to the cloud or
                                                                                                                                    sending an email. The callbacks will be executed serially (first in, first executed). | | skip_actions | [bool](#bool) | | It can be useful to have the robot run a walk without collecting data.
                                                                                                                                    If this boolean is set to true, the compiled mission will still navigate to the
                                                                                                                                    target of each element, however it will not actually perform the associated
                                                                                                                                    action & action wrappers. | +| hri_behaviors | [HriBehaviors](#bosdyn-api-autowalk-HriBehaviors) | | Configurable options for Spot to perform extra behaviors in missions to
                                                                                                                                    communicate with nearby observers. | + + + + + + + + +### HriBehaviors +Options for Spot to perform additional human-robot interaction behaviors in missions +to help communicate with observers. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| play_alert_behaviors | [bool](#bool) | | If true, Spot will tap its front-left foot twice if anomalies are discovered
                                                                                                                                    during an inspection. Alerts can be viewed in Orbit. | +| play_undock_behaviors | [bool](#bool) | | If true, Spot will lift its legs twice before undocking. | @@ -3829,7 +3887,7 @@ The mission should be played back once. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| skip_docking_after_completion | [bool](#bool) | | Boolean to allow the robot to not dock after completing a mission. | +| skip_docking_after_completion | [bool](#bool) | | **Deprecated.** Deprecated as of 4.1. To skip docking after completion, set disable_end
                                                                                                                                    to true for all docks in the walk proto.
                                                                                                                                    Boolean to allow the robot to not dock after completing a mission. | @@ -3932,9 +3990,9 @@ Tell the robot to navigate to a waypoint. It will choose its route. | map_name | [string](#string) | | The name of the map this mission corresponds to. | | mission_name | [string](#string) | | The name of the mission. | | elements | [Element](#bosdyn-api-autowalk-Element) | repeated | The list of actions and their associated locations. | -| docks | [Dock](#bosdyn-api-autowalk-Dock) | repeated | The docks the mission can dock at.
                                                                                                                                    AT THE MOMENT AUTOWALK ONLY SUPPORTS A SINGLE DOCK.
                                                                                                                                    However, this is subject to change. | +| docks | [Dock](#bosdyn-api-autowalk-Dock) | repeated | The docks the mission can dock at. | | id | [string](#string) | | Unique identifier for this walk. This will be embedded in various Data Acquisition captures
                                                                                                                                    and various logging bundles. This should be globally unique across all walks. | -| choreography_items | [ChoreographyItems](#bosdyn-api-autowalk-ChoreographyItems) | | Choreography related dependencies (any sequences and animations a robot needs to play this walk). | +| choreography_items | [ChoreographyItems](#bosdyn-api-autowalk-ChoreographyItems) | | Choreography related dependencies (any sequences and animations a robot needs to play this
                                                                                                                                    walk). | @@ -4213,7 +4271,7 @@ Freeze command request takes no additional arguments. ### JointCommand.Request -Empty message, no paramaters required to activate. +Empty message, no parameters required to activate. @@ -4306,7 +4364,7 @@ the final point of the trajectory. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The timestamp (in robot time) by which a command must finish executing.
                                                                                                                                    This is a required field and used to prevent runaway commands. | -| se2_frame_name | [string](#string) | | The name of the frame that trajectory is relative to. The trajectory
                                                                                                                                    must be expressed in a gravity aligned frame, so either "vision",
                                                                                                                                    "odom", or "body". Any other provided se2_frame_name will be rejected
                                                                                                                                    and the trajectory command will not be exectuted. | +| se2_frame_name | [string](#string) | | The name of the frame that trajectory is relative to. The trajectory
                                                                                                                                    must be expressed in a gravity aligned frame, so either "vision",
                                                                                                                                    "odom", or "body". Any other provided se2_frame_name will be rejected
                                                                                                                                    and the trajectory command will not be executed. | | trajectory | [SE2Trajectory](#bosdyn-api-SE2Trajectory) | | The trajectory that the robot should follow, expressed in the frame
                                                                                                                                    identified by se2_frame_name. | @@ -4711,8 +4769,8 @@ ground (CONTACT_MADE): ADVICE_NOT_IN_CONTACT: leg will enter CONTACT_LOST state on receipt. If a leg is not on the ground (CONTACT_LOST): ADVICE_NONE: leg will enter CONTACT_MADE if any collision is detected on the foot. - ADVICE_IN_CONTACT: leg will enter CONTACT_MADE if any collision is deteced on the foot. - ADVICE_NOT_IN_CONTACT: no change + ADVICE_IN_CONTACT: leg will enter CONTACT_MADE if any collision is detected on the + foot. ADVICE_NOT_IN_CONTACT: no change Contact states may be used by the robot to improve state estimation. | Name | Number | Description | @@ -5312,7 +5370,7 @@ Message sent by main Data Acquisition service to all data acquisition plugin ser | ----- | ---- | ----- | ----------- | | header | [RequestHeader](#bosdyn-api-RequestHeader) | | Common request header | | data_id | [DataIdentifier](#bosdyn-api-DataIdentifier) | repeated | Metadata acquirers use these DataIdentifier objects to associate them with the acquired
                                                                                                                                    metadata when storing them in the DataBuffer.
                                                                                                                                    Data acquirers simply get the timestamp from these DataIdentifier objects to use when
                                                                                                                                    storing the data in the DataBuffer. | -| metadata | [Metadata](#bosdyn-api-Metadata) | | Metadata specified by the requestor. | +| metadata | [Metadata](#bosdyn-api-Metadata) | | Metadata specified by the requester. | | action_id | [CaptureActionId](#bosdyn-api-CaptureActionId) | | Id to be associated with all the data buffered for this request. It will be stored
                                                                                                                                    in the DataIdentifier field of each piece of data buffered from this request. | | acquisition_requests | [AcquisitionRequestList](#bosdyn-api-AcquisitionRequestList) | | List of capability requests specific for this Data Acquisition plugin. | @@ -6216,6 +6274,8 @@ the ListData requests. | include_data | [bool](#bool) | | | | include_metadata | [bool](#bool) | | | | include_alerts | [bool](#bool) | | | +| include_large | [bool](#bool) | | Setting this value will return results that are classified as large data. If this value is
                                                                                                                                    not set these captures will not be returned even when none of the other captures types are
                                                                                                                                    set. | +| order_descending | [bool](#bool) | | Boolean that specifies how to order the query results based on capture id field, ascending
                                                                                                                                    (default) or descending.
                                                                                                                                    Ascending: Captures with lowest id are first, meaning oldest stored captures are ordered
                                                                                                                                    first.
                                                                                                                                    Descending: Captures with highest id are first, meaning newest stored captures are
                                                                                                                                    ordered first. | @@ -6235,6 +6295,7 @@ the ListData requests. | metadata | [AssociatedMetadata](#bosdyn-api-AssociatedMetadata) | | | | alert_data | [AssociatedAlertData](#bosdyn-api-AssociatedAlertData) | | | | data | [StoredCapturedData](#bosdyn-api-StoredCapturedData) | | | +| large_data | [StoredLargeCapturedData](#bosdyn-api-StoredLargeCapturedData) | | | @@ -6408,6 +6469,40 @@ the ListData requests. + + +### StoreStreamRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | +| data_id | [DataIdentifier](#bosdyn-api-DataIdentifier) | | Data identifier of the data. | +| file_extension | [string](#string) | | File extension to use when writing the data to file. | +| chunk | [DataChunk](#bosdyn-api-DataChunk) | | The piece of the data to store. | + + + + + + + + +### StoreStreamResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | +| id | [uint64](#uint64) | | | + + + + + + ### StoredCapturedData @@ -6424,6 +6519,23 @@ the ListData requests. + + +### StoredLargeCapturedData + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| chunk | [DataChunk](#bosdyn-api-DataChunk) | | Data related to capture. | +| offset | [uint64](#uint64) | | Start index of resulting bytes. | +| file_extension | [string](#string) | | File extension to use for writing the data to a file. | + + + + + + ### TimeRangeQuery @@ -6476,6 +6588,7 @@ entire capture actions which match query parameters, such as time ranges or acti | ListCaptureActions | [ListCaptureActionsRequest](#bosdyn-api-ListCaptureActionsRequest) | [ListCaptureActionsResponse](#bosdyn-api-ListCaptureActionsResponse) | List all CaptureActionIds (which identify an entire AcquireData RPC's data captures)
                                                                                                                                    that match the query parameters provided in the request. | | ListStoredData | [ListStoredDataRequest](#bosdyn-api-ListStoredDataRequest) | [ListStoredDataResponse](#bosdyn-api-ListStoredDataResponse) | List data identifiers (which identify specific pieces of data from
                                                                                                                                    an action) for stored data that satisfy the query parameters in the request. | | StoreData | [StoreDataRequest](#bosdyn-api-StoreDataRequest) | [StoreDataResponse](#bosdyn-api-StoreDataResponse) | Store arbitrary data associated with a DataIdentifier. | +| StoreDataStream | [StoreStreamRequest](#bosdyn-api-StoreStreamRequest) stream | [StoreStreamResponse](#bosdyn-api-StoreStreamResponse) | Store arbitrary data associated with a DataIdentifier through a stream. Supports files > 100
                                                                                                                                    MB and below the Data Acquisition Store capacity. | | ListStoredImages | [ListStoredImagesRequest](#bosdyn-api-ListStoredImagesRequest) | [ListStoredImagesResponse](#bosdyn-api-ListStoredImagesResponse) | Type-safe to images: list data identifiers (which identify specific images
                                                                                                                                    from an action) for stored images that satisfy the
                                                                                                                                    query parameters in the request. | | StoreImage | [StoreImageRequest](#bosdyn-api-StoreImageRequest) | [StoreImageResponse](#bosdyn-api-StoreImageResponse) | Type-safe to images: store image data associated with a DataIdentifier. | | ListStoredMetadata | [ListStoredMetadataRequest](#bosdyn-api-ListStoredMetadataRequest) | [ListStoredMetadataResponse](#bosdyn-api-ListStoredMetadataResponse) | Type-safe to JSON metadata: list data identifiers (which identify specific metadata from
                                                                                                                                    an action) for stored metadata that satisfy the query parameters in the request. | @@ -7737,7 +7850,7 @@ The ListServiceEntries request message will ask the robot for all services. ### ListServiceEntriesResponse The ListServiceEntries response message returns all known services at the time the request -was recieved. +was received. | Field | Type | Label | Description | @@ -7806,8 +7919,8 @@ some server. ### RegisterServiceRequest -The RegisterService request message sends the service's entry and endpoint to the robot's directory. -This Request serves as a heartbeat to the Directory. +The RegisterService request message sends the service's entry and endpoint to the robot's +directory. This Request serves as a heartbeat to the Directory. | Field | Type | Label | Description | @@ -7824,7 +7937,8 @@ This Request serves as a heartbeat to the Directory. ### RegisterServiceResponse -The RegisterService response message has information of whether the service was registered correctly. +The RegisterService response message has information of whether the service was registered +correctly. | Field | Type | Label | Description | @@ -7872,8 +7986,8 @@ The UnregisterService response message has information of whether the service wa ### UpdateServiceRequest -The UpdateService request message will update a service based on name to include the new endpoint and service entry. -This Request serves as a heartbeat to the Directory. +The UpdateService request message will update a service based on name to include the new endpoint +and service entry. This Request serves as a heartbeat to the Directory. | Field | Type | Label | Description | @@ -7912,7 +8026,7 @@ The UpdateService response message has information of whether the service was up | Name | Number | Description | | ---- | ------ | ----------- | -| STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set. | +| STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened
                                                                                                                                    if UNKNOWN is set. | | STATUS_OK | 1 | Success. The new service record is available. | | STATUS_ALREADY_EXISTS | 2 | RegisterService failed because a service with this name already exists. | @@ -7938,7 +8052,7 @@ The UpdateService response message has information of whether the service was up | Name | Number | Description | | ---- | ------ | ----------- | -| STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set. | +| STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened
                                                                                                                                    if UNKNOWN is set. | | STATUS_OK | 1 | Success. The new service record is available. | | STATUS_NONEXISTENT_SERVICE | 2 | The provided service name was not found. | @@ -8075,7 +8189,7 @@ Message to get the status of a previously issued DockingCommand ### DockingCommandFeedbackResponse -Response to a DockingCommandFeedbackRequest for a particualar docking command ID +Response to a DockingCommandFeedbackRequest for a particular docking command ID | Field | Type | Label | Description | @@ -8263,7 +8377,7 @@ Type of dock | STATUS_IN_PROGRESS | 1 | Docking command is executing. | | STATUS_DOCKED | 2 | Docking command succeeded, the robot is docked. | | STATUS_AT_PREP_POSE | 11 | Final success state for `PREP_POSE_ONLY_POSE` or `PREP_POSE_UNDOCK`. | -| STATUS_MISALIGNED | 10 | Misaligned was detected between the robot and the dock.
                                                                                                                                    The docking command was aborted to save an ending up in an unrecoverable state, please try again. | +| STATUS_MISALIGNED | 10 | Misaligned was detected between the robot and the dock.
                                                                                                                                    The docking command was aborted to save an ending up in an unrecoverable state, please
                                                                                                                                    try again. | | STATUS_OLD_DOCKING_COMMAND | 3 | This DockingCommand overridden by new docking command. | | STATUS_ERROR_DOCK_LOST | 4 | ERROR: The sensed dock has been lost and is no longer found. | | STATUS_ERROR_LEASE | 5 | ERROR: Lease rejected. | @@ -8379,7 +8493,7 @@ Response to E-Stop endpoint deregistration request. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| header | [ResponseHeader](#bosdyn-api-ResponseHeader) | | Common resonse header. | +| header | [ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | | request | [DeregisterEstopEndpointRequest](#bosdyn-api-DeregisterEstopEndpointRequest) | | Copy of the initial request. | | status | [DeregisterEstopEndpointResponse.Status](#bosdyn-api-DeregisterEstopEndpointResponse-Status) | | Status code for the response. | @@ -8732,7 +8846,8 @@ The software robot E-Stop system: 1. Uses challenge-style communication to enforce end user (aka "originators") connection for Authority to Operate (ATO). 2. Offers the ability to issue a direct denial of ATO. -The EstopService provides a service interface for the robot EStop/Authority to operate the system. +The EstopService provides a service interface for the robot EStop/Authority to operate the +system. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| @@ -8969,10 +9084,27 @@ Represents a circular 2D area. + + +### CircleWithFrame +Geometric primitive to describe a 2D circle in a specific frame. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| circle | [Circle](#bosdyn-api-Circle) | | The circle is specified with a radius and center point in x-y coordinates. | +| frame_name | [string](#string) | | The pose of the circle is in 'frame_name'. | +| frame_name_tform_circle | [SE3Pose](#bosdyn-api-SE3Pose) | | The transformation of the circle into the desired frame
                                                                                                                                    (specified above). | + + + + + + ### CylindricalCoordinate -Cylindrical coordinates are a generalization of polar coordiates, adding a +Cylindrical coordinates are a generalization of polar coordinates, adding a height axis. See (http://mathworld.wolfram.com/CylindricalCoordinates.html) for more details. @@ -8982,7 +9114,7 @@ more details. | ----- | ---- | ----- | ----------- | | r | [double](#double) | | Radial coordinate | | theta | [double](#double) | | Azimuthal coordinate | -| z | [double](#double) | | Vertical coordiante | +| z | [double](#double) | | Vertical coordinate | @@ -9045,8 +9177,8 @@ to find where the "hand" is relative to the "body" do: \ The two properties above reduce data size. Instead of having to send N^2 edge_map entries to represent all relationships between N frames, only N edge_map entries need to be sent. Clients will need to determine -the chain of edges to follow to get from one frame to another frae, -and then do inversion and concatentation to generate the appropriate pose. \ +the chain of edges to follow to get from one frame to another frame, +and then do inversion and concatenation to generate the appropriate pose. \ Note that all FrameTreeSnapshots are expected to be a single rooted tree. The syntax for FrameTreeSnapshot could also support graphs with @@ -9163,6 +9295,22 @@ Represents a row-major order matrix of floats. + + +### OrientedBox2 +Two-dimensional box with an angle + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| box | [Box2](#bosdyn-api-Box2) | | | +| angle | [float](#float) | | | + + + + + + ### Plane @@ -9846,7 +9994,7 @@ Types of fixes possible. | ----- | ---- | ----- | ----------- | | latest_data | [GpsDataPoint](#bosdyn-api-gps-GpsDataPoint) | | Latest data from the GPS device. | | gps_device | [GpsDevice](#bosdyn-api-gps-GpsDevice) | | What GPS device generated the latest data | -| ecef_p_body | [bosdyn.api.Vec3](#bosdyn-api-Vec3) | | Estimate of where the robot's body is in the ECEF frame given this measurement. Note this must be a position
                                                                                                                                    and not a pose because of the lack of orientation data. | +| ecef_p_body | [bosdyn.api.Vec3](#bosdyn-api-Vec3) | | Estimate of where the robot's body is in the ECEF frame given this measurement. Note this
                                                                                                                                    must be a position and not a pose because of the lack of orientation data. | | historical_data | [GpsDataPoint](#bosdyn-api-gps-GpsDataPoint) | repeated | Collection of all GPS data received by this device within some window. | @@ -9957,7 +10105,7 @@ Quality of registration status. ### RegistrationService The RegistrationService consumes data sent to the Gps/AggregatorService. -It calculates where the robot is in the world, and the transfroms from +It calculates where the robot is in the world, and the transforms from the robots internal frames to the world frame. | Method Name | Request Type | Response Type | Description | @@ -10061,8 +10209,9 @@ Message for providing information about a area callback implementation. | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | | region_info | [RegionInformation](#bosdyn-api-graph_nav-RegionInformation) | | Description of the region we are going to cross. | | end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The timestamp (in robot time) by which a command must finish executing.
                                                                                                                                    If unset, a AreaCallback implementation may pick a reasonable value. | -| recorded_data | [AreaCallbackData](#bosdyn-api-graph_nav-AreaCallbackData) | | Configuration data associated with this area callback region | +| recorded_data | [AreaCallbackData](#bosdyn-api-graph_nav-AreaCallbackData) | | **Deprecated.** Deprecated in 4.1, the relevant data is set in custom_params and config_data instead.
                                                                                                                                    Configuration data associated with this area callback region | | custom_params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | Any other custom parameters to the callback. | +| config_data | [google.protobuf.Any](#google-protobuf-Any) | | Custom config data used by the service to do its job. | @@ -10164,6 +10313,7 @@ Description of an Area Callback region at the time of crossing | region_id | [string](#string) | | The unique id of the region we are entering. | | description | [string](#string) | | Human-readable description of the region we are entering. | | route | [Route](#bosdyn-api-graph_nav-Route) | | The planned route through the region. | +| starting_inside_region | [bool](#bool) | | Flag that indicates that the robot is already inside the callback region at the beginning of
                                                                                                                                    the callback, rather than starting from the edge of the region as usual. This can happen in
                                                                                                                                    some cases when the robot gets stuck inside the region, and restarts with a new navigation
                                                                                                                                    command. | @@ -10547,7 +10697,8 @@ Data for a AreaCallback to be stored in the map | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | config_data | [google.protobuf.Any](#google-protobuf-Any) | | Custom config data used by the service to do its job. | -| custom_params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | Any other custom parameters to the callback. This will be copied into
                                                                                                                                    custom_params inside the BeginCallback RPC if it exists. | +| custom_params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | **Deprecated.** Deprecated in 4.1, use param_collection instead so that the
                                                                                                                                    parameter specs are available for building editors.
                                                                                                                                    Any other custom parameters to the callback. This will be copied into
                                                                                                                                    custom_params inside the BeginCallback RPC if it exists. | +| parameters | [bosdyn.api.CustomParamCollection](#bosdyn-api-CustomParamCollection) | | Any other custom parameters to the callback. This will be copied into
                                                                                                                                    custom_params inside the BeginCallback RPC if it exists. | | map_config | [AreaCallbackMapConfig](#bosdyn-api-graph_nav-AreaCallbackMapConfig) | | Configuration data for how this area callback should be treated in the map. | @@ -10622,7 +10773,7 @@ Info about GPS localization if the robot has this capability. | ----- | ---- | ----- | ----------- | | live_gps_state | [GPSLocalization.State](#bosdyn-api-graph_nav-GPSLocalization-State) | | State of the live GPS data. | | map_gps_state | [GPSLocalization.State](#bosdyn-api-graph_nav-GPSLocalization-State) | | State of GPS data at the current waypoint. | -| ecef_tform_body | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the time
                                                                                                                                    of localization. | +| ecef_tform_body | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Estimate of where the robot body is in the Earth-Centered-Earth-Fixed (ECEF) frame at the
                                                                                                                                    time of localization. | | latitude_longitude_height | [bosdyn.api.gps.LLH](#bosdyn-api-gps-LLH) | | Estimate of the latitude/longitude/height of the robot at the time of localization. | @@ -10670,7 +10821,7 @@ Info about GPS localization if the robot has this capability. ### AreaCallbackServiceError -Information about problems Area Callback services specifified in a map or on a route. +Information about problems Area Callback services specified in a map or on a route. | Field | Type | Label | Description | @@ -10790,6 +10941,22 @@ The DownloadGraph response message includes the current graph on the robot. + + +### DownloadGraphStreamingResponse +Streaming version of the DownloadGraphResponse. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | +| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Chunk of data to download. Responses are sent in sequence until the
                                                                                                                                    data chunk is complete. After receiving all chunks, concatenate them
                                                                                                                                    into a single byte string. Then, deserialize the byte string into a
                                                                                                                                    DownloadGraphResponse object. | + + + + + + ### DownloadWaypointSnapshotRequest @@ -10841,8 +11008,8 @@ Parameters controlling how the robot will navigate to a GPS coordinate. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | goal_llh | [bosdyn.api.gps.LLH](#bosdyn-api-gps-LLH) | | The goal position as latitude/longitude. Height is ignored. | -| goal_yaw | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve at the goal. This is a bearing
                                                                                                                                    around the "up" axis such that East points to zero yaw, and West is pi radians yaw. If not provided, the robot will try to
                                                                                                                                    achieve any allowable orientation at the goal. | -| max_distance_from_map | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | The maximum distance we are willing to accept for the LLH coordinate from the mapped data in meters. This
                                                                                                                                    is a 2 dimensional measurement (height is not considered). If not filled out, Spot will decide based on
                                                                                                                                    internal defaults. | +| goal_yaw | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Counter-clockwise rotation in radians around the "up" axis that the robot will try to achieve
                                                                                                                                    at the goal. This is a bearing around the "up" axis such that East points to zero yaw, and
                                                                                                                                    West is pi radians yaw. If not provided, the robot will try to achieve any allowable
                                                                                                                                    orientation at the goal. | +| max_distance_from_map | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | The maximum distance we are willing to accept for the LLH coordinate from the mapped data in
                                                                                                                                    meters. This is a 2 dimensional measurement (height is not considered). If not filled out,
                                                                                                                                    Spot will decide based on internal defaults. | @@ -10864,7 +11031,7 @@ pose of the robot with respect to that waypoint. | request_live_point_cloud | [bool](#bool) | | If true, request the live edge-segmented point cloud that was used
                                                                                                                                    to generate this localization. | | request_live_images | [bool](#bool) | | If true, request the live images from realsense cameras at the time of
                                                                                                                                    localization. | | request_live_terrain_maps | [bool](#bool) | | If true, request the live terrain maps at the time of localization. | -| request_live_world_objects | [bool](#bool) | | If true, reqeuest the live world objects at the time of localization. | +| request_live_world_objects | [bool](#bool) | | If true, request the live world objects at the time of localization. | | request_live_robot_state | [bool](#bool) | | If true, requests the full live robot state at the time of localization. | | compress_live_point_cloud | [bool](#bool) | | If true, the smallest available encoding will be used for the live point cloud
                                                                                                                                    data. If false, three 32 bit floats will be used per point in the point cloud. | | request_gps_state | [bool](#bool) | | If true, request data about the robot's GPS localization. | @@ -10877,19 +11044,19 @@ pose of the robot with respect to that waypoint. ### GetLocalizationStateResponse -The GetLocalizationState response message returns the current localization and robot state, as well -as any requested live data information. +The GetLocalizationState response message returns the current localization and robot state, as +well as any requested live data information. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | -| localization | [Localization](#bosdyn-api-graph_nav-Localization) | | Where the robot currently is. If a waypoint_id was specified in the request, this localization
                                                                                                                                    will be relative to that waypoint. | +| localization | [Localization](#bosdyn-api-graph_nav-Localization) | | Where the robot currently is. If a waypoint_id was specified in the request, this
                                                                                                                                    localization will be relative to that waypoint. | | robot_kinematics | [bosdyn.api.KinematicState](#bosdyn-api-KinematicState) | | Robot kinematic state at time of localization. | | remote_cloud_status | [RemotePointCloudStatus](#bosdyn-api-graph_nav-RemotePointCloudStatus) | repeated | Status of one or more remote point cloud services (such as velodyne). | | live_data | [WaypointSnapshot](#bosdyn-api-graph_nav-WaypointSnapshot) | | Contains live data at the time of localization, with elements only filled out
                                                                                                                                    if requested. | | lost_detector_state | [LostDetectorState](#bosdyn-api-graph_nav-LostDetectorState) | | If the robot drives around without a good localization for a while, eventually
                                                                                                                                    it becomes "lost." I.E. it has a localization, but it no longer trusts
                                                                                                                                    that the localization it has is accurate. Lost detector state is
                                                                                                                                    available through this message. | -| gps | [GPSLocalization](#bosdyn-api-graph_nav-GPSLocalization) | | If the robot has GPS capability and the map was recorded with GPS, this message will show graph nav's estimate of
                                                                                                                                    the robot location in earth-centered frames. To see the raw GPS data, look at the WorldObject list. | +| gps | [GPSLocalization](#bosdyn-api-graph_nav-GPSLocalization) | | If the robot has GPS capability and the map was recorded with GPS, this message will show
                                                                                                                                    graph nav's estimate of the robot location in earth-centered frames. To see the raw GPS data,
                                                                                                                                    look at the WorldObject list. | @@ -10907,7 +11074,39 @@ If robot is lost, this state can be reset by either: | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| is_lost | [bool](#bool) | | Whether or not the robot is currently lost. If this is true, graph nav will reject
                                                                                                                                    NavigateTo or NavigateRoute RPC's. | +| is_lost | [bool](#bool) | | Whether or not the robot is currently lost. If this is true, graph nav will reject
                                                                                                                                    NavigateTo or NavigateRoute RPCs. | +| total_num_accepted_localizations | [int32](#int32) | | The lost detector either accepts or rejects localizations based on a scoring criteria.
                                                                                                                                    This is the total number of localizations that have been accepted since the last
                                                                                                                                    SetLocalization RPC. | +| total_num_rejected_localizations | [int32](#int32) | | This is the total number of localizations that have been rejected since the last
                                                                                                                                    SetLocalization RPC. | +| num_rejected_localizations_since_accepted | [int32](#int32) | | This is the total number of localizations that have been rejected by the lost detector since
                                                                                                                                    either a localization was accepted, or a SetLocalization RPC. | +| distance_traveled_with_rejected_localization | [float](#float) | | This is the number of meters (3d translation of the robot body) the lost detector believes
                                                                                                                                    the robot to have traveled since it had a rejected localization. | +| last_accepted_localization | [Localization](#bosdyn-api-graph_nav-Localization) | | This is the most recent localization the lost detector accepted. | +| last_rejected_localization | [Localization](#bosdyn-api-graph_nav-Localization) | | This is the most recent localization that the lost detector rejected. | +| num_consecutive_bad_edges | [int32](#int32) | | The number of edges the LostDetector believes the robot has crossed without first getting an
                                                                                                                                    accepted localization. | +| params | [LostDetectorState.Params](#bosdyn-api-graph_nav-LostDetectorState-Params) | | Parameters the lost detector is using. | + + + + + + + + +### LostDetectorState.Params +Parameters for the lost detector which control when it determines that we are lost. +In general, when we start seeing "bad" localizations, (based on sensor data and map data +agreement) we start counting the amount of time and distance the robot has traveled before we +see a "good" localization. If this distance exceeds a threshold, we then start counting the +number of edges that the robot has crossed with a "bad" localization. Once a number of edges +crosses a threshold, we then declare the robot lost. Note that these thresholds are +hierarchical; so we first start counting time, then distance, then number of edges. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| max_time_with_bad_localization | [double](#double) | | Maximum time (seconds) that the robot can walk with a bad localization before we start
                                                                                                                                    counting distance/edges with bad localization. | +| max_distance_with_bad_localization | [double](#double) | | The maximum distance the robot can walk (m) with a bad localization before we start
                                                                                                                                    counting the number of edges with bad localization. | +| max_num_edges_with_bad_localization | [int32](#int32) | | The maximum number of edges the robot can walk with a bad localization before we declare
                                                                                                                                    the robot to be lost. | +| strictness | [LostDetectorStrictness](#bosdyn-api-graph_nav-LostDetectorStrictness) | | Determines how "strict" the lost detector is about declaring lost. This value is used to
                                                                                                                                    set the other thresholds. | @@ -10936,8 +11135,9 @@ If robot is lost, this state can be reset by either: ### NavigateRouteRequest A NavigateRoute request message specifies a route of waypoints/edges and parameters about how to get there. Like NavigateTo, this command returns immediately upon -processing and provides a command_id that the user can use along with a NavigationFeedbackRequest RPC to -poll the system for feedback on this command. The RPC does not block until the route is completed. +processing and provides a command_id that the user can use along with a NavigationFeedbackRequest +RPC to poll the system for feedback on this command. The RPC does not block until the route is +completed. | Field | Type | Label | Description | @@ -10950,7 +11150,7 @@ poll the system for feedback on this command. The RPC does not block until the r | end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The timestamp (in robot time) that the navigation command is valid until. | | clock_identifier | [string](#string) | | Identifier provided by the time sync service to verify time sync between robot and client. | | destination_waypoint_tform_body_goal | [bosdyn.api.SE2Pose](#bosdyn-api-SE2Pose) | | If provided, graph_nav will move the robot to an SE2 pose relative to the final waypoint
                                                                                                                                    in the route.
                                                                                                                                    Note that the robot will treat this as a simple goto request. It will first arrive at the
                                                                                                                                    destination waypoint, and then travel in a straight line from the destination waypoint to the
                                                                                                                                    offset goal, attempting to avoid obstacles along the way. | -| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation
                                                                                                                                    of an existing command. | +| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a
                                                                                                                                    continuation of an existing command. | @@ -10960,8 +11160,9 @@ poll the system for feedback on this command. The RPC does not block until the r ### NavigateRouteResponse -Response to a NavigateRouteRequest. This is returned immediately after the request is processed. A command_id -is provided to specify the ID that the user may use to poll the system for feedback on the NavigateRoute command. +Response to a NavigateRouteRequest. This is returned immediately after the request is processed. +A command_id is provided to specify the ID that the user may use to poll the system for feedback +on the NavigateRoute command. | Field | Type | Label | Description | @@ -10971,8 +11172,8 @@ is provided to specify the ID that the user may use to poll the system for feedb | status | [NavigateRouteResponse.Status](#bosdyn-api-graph_nav-NavigateRouteResponse-Status) | | Return status for the request. | | impaired_state | [bosdyn.api.RobotImpairedState](#bosdyn-api-RobotImpairedState) | | If the status is ROBOT_IMPAIRED, this is why the robot is impaired. | | command_id | [uint32](#uint32) | | Unique identifier for the command, If 0, command was not accepted. | -| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. | -| error_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | On a relevant error status code (STATUS_INVALID_EDGE), this is populated with the edge ID's that cased the error. | +| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the
                                                                                                                                    error. | +| error_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | On a relevant error status code (STATUS_INVALID_EDGE), this is populated with the edge ID's
                                                                                                                                    that cased the error. | | area_callback_error | [AreaCallbackServiceError](#bosdyn-api-graph_nav-AreaCallbackServiceError) | | Errors about Area Callbacks in the map. | @@ -10999,14 +11200,14 @@ of the NavigateToAnchor command using the NavigationFeedbackRequest RPC. | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | | leases | [bosdyn.api.Lease](#bosdyn-api-Lease) | repeated | The Leases to show ownership of the robot and the graph. | -| seed_tform_goal | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | The goal, expressed with respect to the seed frame of the current anchoring.
                                                                                                                                    The robot will use the z value to find the goal waypoint, but the final z height the robot
                                                                                                                                    achieves will depend on the terrain height at the offset from the goal. | -| gps_navigation_params | [GPSNavigationParams](#bosdyn-api-graph_nav-GPSNavigationParams) | | If given, the NavigateToAnchor request will instead be interpreted as a command to navigate to GPS coordinates.
                                                                                                                                    When given, the seed_tform_goal will be ignored,and instead the parameters in this message will be used. Otherwise,
                                                                                                                                    the NavigateToAnchorRequest works identically to when seed_tform_goal is used instead. For example, the TravelParams
                                                                                                                                    will be respected for this kind of goal. | +| seed_tform_goal | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | The goal, expressed with respect to the seed frame of the current anchoring.
                                                                                                                                    The robot will use the z value to find the goal waypoint, but the final z height the
                                                                                                                                    robot achieves will depend on the terrain height at the offset from the goal. | +| gps_navigation_params | [GPSNavigationParams](#bosdyn-api-graph_nav-GPSNavigationParams) | | If given, the NavigateToAnchor request will instead be interpreted as a command to
                                                                                                                                    navigate to GPS coordinates. When given, the seed_tform_goal will be ignored,and instead
                                                                                                                                    the parameters in this message will be used. Otherwise, the NavigateToAnchorRequest works
                                                                                                                                    identically to when seed_tform_goal is used instead. For example, the TravelParams will
                                                                                                                                    be respected for this kind of goal. | | goal_waypoint_rt_seed_ewrt_seed_tolerance | [bosdyn.api.Vec3](#bosdyn-api-Vec3) | | These parameters control selection of the goal waypoint. In seed frame, they are the x, y,
                                                                                                                                    and z tolerances with respect to the goal pose within which waypoints will be considered.
                                                                                                                                    If these values are negative, or too small, reasonable defaults will be used. | | route_params | [RouteGenParams](#bosdyn-api-graph_nav-RouteGenParams) | | Preferences on how to pick the route. | | travel_params | [TravelParams](#bosdyn-api-graph_nav-TravelParams) | | Parameters that define how to traverse and end the route. | | end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The timestamp (in robot time) that the navigation command is valid until. | | clock_identifier | [string](#string) | | Identifier provided by the time sync service to verify time sync between robot and client. | -| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation
                                                                                                                                    of an existing command. If this is a continuation of an existing command, all parameters will be
                                                                                                                                    ignored, and the old parameters will be preserved. | +| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a
                                                                                                                                    continuation of an existing command. If this is a continuation of an existing command, all
                                                                                                                                    parameters will be ignored, and the old parameters will be preserved. | @@ -11028,7 +11229,7 @@ for feedback on the NavigateTo command. | status | [NavigateToAnchorResponse.Status](#bosdyn-api-graph_nav-NavigateToAnchorResponse-Status) | | Return status for the request. | | impaired_state | [bosdyn.api.RobotImpairedState](#bosdyn-api-RobotImpairedState) | | If the status is ROBOT_IMPAIRED, this is why the robot is impaired. | | command_id | [uint32](#uint32) | | Unique identifier for the command, If 0, command was not accepted. | -| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. | +| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the
                                                                                                                                    error. | | area_callback_error | [AreaCallbackServiceError](#bosdyn-api-graph_nav-AreaCallbackServiceError) | | Errors about Area Callbacks in the map. | | gps_status | [NavigateToAnchorResponse.GPSStatus](#bosdyn-api-graph_nav-NavigateToAnchorResponse-GPSStatus) | | Result of the GPS command. | @@ -11041,11 +11242,11 @@ for feedback on the NavigateTo command. ### NavigateToRequest The NavigateToRequest can be used to command GraphNav to drive the robot to a specific waypoint. -GraphNav will plan a path through the map which most efficiently gets the robot to the specified goal waypoint. -Parameters are provided which influence how GraphNav will generate and follow the path. -This RPC returns immediately after the request is processed. It does not block until GraphNav completes the path -to the goal waypoint. The user is expected to periodically check the status of the NavigateTo command using -the NavigationFeedbackRequest RPC. +GraphNav will plan a path through the map which most efficiently gets the robot to the specified +goal waypoint. Parameters are provided which influence how GraphNav will generate and follow the +path. This RPC returns immediately after the request is processed. It does not block until +GraphNav completes the path to the goal waypoint. The user is expected to periodically check the +status of the NavigateTo command using the NavigationFeedbackRequest RPC. | Field | Type | Label | Description | @@ -11058,7 +11259,7 @@ the NavigationFeedbackRequest RPC. | end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The timestamp (in robot time) that the navigation command is valid until. | | clock_identifier | [string](#string) | | Identifier provided by the time sync service to verify time sync between robot and client. | | destination_waypoint_tform_body_goal | [bosdyn.api.SE2Pose](#bosdyn-api-SE2Pose) | | If provided, graph_nav will move the robot to an SE2 pose relative to the waypoint.
                                                                                                                                    Note that the robot will treat this as a simple goto request. It will first arrive at the
                                                                                                                                    destination waypoint, and then travel in a straight line from the destination waypoint to the
                                                                                                                                    offset goal, attempting to avoid obstacles along the way. | -| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a continuation
                                                                                                                                    of an existing command. If this is a continuation of an existing command, all parameters will be
                                                                                                                                    ignored, and the old parameters will be preserved. | +| command_id | [uint32](#uint32) | | Unique identifier for the command. If 0, this is a new command, otherwise it is a
                                                                                                                                    continuation of an existing command. If this is a continuation of an existing command, all
                                                                                                                                    parameters will be ignored, and the old parameters will be preserved. | | route_blocked_behavior | [RouteFollowingParams.RouteBlockedBehavior](#bosdyn-api-graph_nav-RouteFollowingParams-RouteBlockedBehavior) | | Defines robot behavior when route is blocked. Defaults to reroute when route is blocked. | @@ -11069,8 +11270,9 @@ the NavigationFeedbackRequest RPC. ### NavigateToResponse -Response to a NavigateToRequest. This is returned immediately after the request is processed. A command_id -is provided to specify the ID that the user may use to poll the system for feedback on the NavigateTo command. +Response to a NavigateToRequest. This is returned immediately after the request is processed. A +command_id is provided to specify the ID that the user may use to poll the system for feedback on +the NavigateTo command. | Field | Type | Label | Description | @@ -11080,7 +11282,7 @@ is provided to specify the ID that the user may use to poll the system for feedb | status | [NavigateToResponse.Status](#bosdyn-api-graph_nav-NavigateToResponse-Status) | | Return status for the request. | | impaired_state | [bosdyn.api.RobotImpairedState](#bosdyn-api-RobotImpairedState) | | If the status is ROBOT_IMPAIRED, this is why the robot is impaired. | | command_id | [uint32](#uint32) | | Unique identifier for the command, If 0, command was not accepted. | -| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the error. | +| error_waypoint_ids | [string](#string) | repeated | On a relevant error status code, these fields contain the waypoint/edge IDs that caused the
                                                                                                                                    error. | | area_callback_error | [AreaCallbackServiceError](#bosdyn-api-graph_nav-AreaCallbackServiceError) | | Errors about Area Callbacks in the map. | @@ -11092,9 +11294,9 @@ is provided to specify the ID that the user may use to poll the system for feedb ### NavigationFeedbackRequest The NavigationFeedback request message uses the command_id of a navigation request to get -the robot's progress and current status for the command. Note that all commands return immediately -after they are processed, and the robot will continue to execute the command asynchronously until -it times out or completes. New commands override old ones. +the robot's progress and current status for the command. Note that all commands return +immediately after they are processed, and the robot will continue to execute the command +asynchronously until it times out or completes. New commands override old ones. | Field | Type | Label | Description | @@ -11129,7 +11331,7 @@ progress and current status for the command. | path_following_mode | [Edge.Annotations.PathFollowingMode](#bosdyn-api-graph_nav-Edge-Annotations-PathFollowingMode) | | Path following mode | | active_region_information | [NavigationFeedbackResponse.ActiveRegionInformationEntry](#bosdyn-api-graph_nav-NavigationFeedbackResponse-ActiveRegionInformationEntry) | repeated | Map of Region IDs with relevant information | | route_following_status | [NavigationFeedbackResponse.RouteFollowingStatus](#bosdyn-api-graph_nav-NavigationFeedbackResponse-RouteFollowingStatus) | | Additional information about what kind of route the robot is following and why. | -| blockage_status | [NavigationFeedbackResponse.BlockageStatus](#bosdyn-api-graph_nav-NavigationFeedbackResponse-BlockageStatus) | | Additional information about whether or not the robot believes the current route to be blocked. | +| blockage_status | [NavigationFeedbackResponse.BlockageStatus](#bosdyn-api-graph_nav-NavigationFeedbackResponse-BlockageStatus) | | Additional information about whether or not the robot believes the current route to be
                                                                                                                                    blocked. | | stuck_reason | [NavigationFeedbackResponse.StuckReason](#bosdyn-api-graph_nav-NavigationFeedbackResponse-StuckReason) | | Only filled out if status is STATUS_STUCK to provide additional context. | @@ -11254,9 +11456,9 @@ in the map. ### SetLocalizationRequest The SetLocalization request is used to initialize or reset the localization of GraphNav -to a map. A localization consists of a waypoint ID, and a pose of the robot relative to that waypoint. -GraphNav uses the localization to decide how to navigate through a map. -The SetLocalizationRequest contains parameters to help find a correct localization. For example, +to a map. A localization consists of a waypoint ID, and a pose of the robot relative to that +waypoint. GraphNav uses the localization to decide how to navigate through a map. The +SetLocalizationRequest contains parameters to help find a correct localization. For example, AprilTags (fiducials) may be used to set the localization, or the caller can provide an explicit guess of the localization. Once the SetLocalizationRequest completes, the current localization to the map @@ -11266,15 +11468,15 @@ will be modified, and can be retrieved using a GetLocalizationStateRequest. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | -| initial_guess | [Localization](#bosdyn-api-graph_nav-Localization) | | Operator-supplied guess at localization. | +| initial_guess | [Localization](#bosdyn-api-graph_nav-Localization) | | Operator-supplied guess at localization. In this localization message, only waypoint_id and
                                                                                                                                    waypoint_tform_body will be used. All other fields are ignored. If the message is not
                                                                                                                                    provided, the initial guess will be assumed to be the identity transform to whatever waypoint
                                                                                                                                    was requested for methods that require it. Use initial_guess.waypoint_id to restrict the
                                                                                                                                    SetLocalizationRequest to specific waypoints. | | ko_tform_body | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Robot pose when the initial_guess was made.
                                                                                                                                    This overcomes the race that occurs when the client is trying to initialize a moving robot.
                                                                                                                                    GraphNav will use its local ko_tform_body and this ko_tform_body to update the initial
                                                                                                                                    localization guess, if necessary. | -| max_distance | [double](#double) | | The max distance [meters] is how far away the robot is allowed to localize from the position supplied
                                                                                                                                    in the initial guess. If not specified, the offset is used directly. Otherwise it searches a neighborhood
                                                                                                                                    of the given size. | -| max_yaw | [double](#double) | | The max yaw [radians] is how different the localized yaw is allowed to be from the supplied yaw
                                                                                                                                    in the initial guess. If not specified, the offset is used directly. Otherwise it searches a neighborhood
                                                                                                                                    of the given size. | +| max_distance | [double](#double) | | The max distance [meters] is how far away the robot is allowed to localize from the position
                                                                                                                                    supplied in the initial guess. If not specified, the offset is used directly. Otherwise it
                                                                                                                                    searches a neighborhood of the given size. | +| max_yaw | [double](#double) | | The max yaw [radians] is how different the localized yaw is allowed to be from the supplied
                                                                                                                                    yaw in the initial guess. If not specified, the offset is used directly. Otherwise it
                                                                                                                                    searches a neighborhood of the given size. | | fiducial_init | [SetLocalizationRequest.FiducialInit](#bosdyn-api-graph_nav-SetLocalizationRequest-FiducialInit) | | Tells the initializer whether to use fiducials, and how to use them. | -| use_fiducial_id | [int32](#int32) | | If using FIDUCIAL_INIT_SPECIFIC, this is the specific fiducial ID to use for initialization.
                                                                                                                                    If no detection of this fiducial exists, the service will return STATUS_NO_MATCHING_FIDUCIAL.
                                                                                                                                    If detections exist, but are low quality, STATUS_FIDUCIAL_TOO_FAR_AWAY, FIDUCIAL_TOO_OLD, or FIDUCIAL_POSE_UNCERTAIN will be returned. | +| use_fiducial_id | [int32](#int32) | | If using FIDUCIAL_INIT_SPECIFIC, this is the specific fiducial ID to use for initialization.
                                                                                                                                    If no detection of this fiducial exists, the service will return STATUS_NO_MATCHING_FIDUCIAL.
                                                                                                                                    If detections exist, but are low quality, STATUS_FIDUCIAL_TOO_FAR_AWAY, FIDUCIAL_TOO_OLD, or
                                                                                                                                    FIDUCIAL_POSE_UNCERTAIN will be returned. | | do_ambiguity_check | [bool](#bool) | | If true, consider how nearby localizations appear (like turned 180). | | restrict_fiducial_detections_to_target_waypoint | [bool](#bool) | | If using FIDUCIAL_INIT_SPECIFIC and this is true, the initializer will only consider
                                                                                                                                    fiducial detections from the target waypoint (from initial_guess). Otherwise, if the
                                                                                                                                    target waypoint does not contain a good measurement of the desired fiducial, nearby waypoints
                                                                                                                                    may be used to infer the robot's location. | -| refine_fiducial_result_with_icp | [bool](#bool) | | If true, and we are using fiducials during initialization, will run ICP after the fiducial
                                                                                                                                    was used for an initial guess. | +| refine_fiducial_result_with_icp | [bool](#bool) | | If true, and we are using fiducials during initialization, will run ICP after the
                                                                                                                                    fiducial was used for an initial guess. | | refine_with_visual_features | [VisualRefinementOptions](#bosdyn-api-graph_nav-VisualRefinementOptions) | | Improve localization based on images from body cameras | @@ -11298,7 +11500,7 @@ The SetLocalization response message contains the resulting localization to the | suspected_ambiguity | [SetLocalizationResponse.SuspectedAmbiguity](#bosdyn-api-graph_nav-SetLocalizationResponse-SuspectedAmbiguity) | | Alternative information if the localization is ambiguous. | | impaired_state | [bosdyn.api.RobotImpairedState](#bosdyn-api-RobotImpairedState) | | If the status is ROBOT_IMPAIRED, this is why the robot is impaired. | | sensor_status | [SensorCompatibilityStatus](#bosdyn-api-graph_nav-SensorCompatibilityStatus) | | This status determines whether the robot has compatible sensors for the
                                                                                                                                    map that was recorded. Note that if sensors aren't working, STATUS_IMPAIRED
                                                                                                                                    will be returned, rather than STATUS_INCOMPATIBLE_SENSORS. | -| quality_check_result | [SetLocalizationResponse.QualityCheckResult](#bosdyn-api-graph_nav-SetLocalizationResponse-QualityCheckResult) | | Graph Nav will check the quality of the resulting localization and report the status
                                                                                                                                    here. Note that to preserve backwards compatability with 3.2 and earlier, a poor quality check
                                                                                                                                    does not result in this RPC failing. | +| quality_check_result | [SetLocalizationResponse.QualityCheckResult](#bosdyn-api-graph_nav-SetLocalizationResponse-QualityCheckResult) | | Graph Nav will check the quality of the resulting localization and report the status
                                                                                                                                    here. Note that to preserve backwards compatability with 3.2 and earlier, a poor quality
                                                                                                                                    check does not result in this RPC failing. | @@ -11328,16 +11530,20 @@ Parameters describing how to travel along a route. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| max_distance | [double](#double) | | Threshold for the maximum distance [meters] that defines when we have reached
                                                                                                                                    the final waypoint. | +| max_distance | [double](#double) | | Threshold for the maximum distance [meters] that defines a circular region for when we
                                                                                                                                    have reached the final waypoint. | +| box_region | [bosdyn.api.OrientedBox2](#bosdyn-api-OrientedBox2) | | Oriented 2D bounding box [meters & radians] that defines an rectangular region for when
                                                                                                                                    we have reached the final waypoint. | | max_yaw | [double](#double) | | Threshold for the maximum yaw [radians] that defines when we have reached
                                                                                                                                    the final waypoint (ignored if ignore_final_yaw is set to true). | | velocity_limit | [bosdyn.api.SE2VelocityLimit](#bosdyn-api-SE2VelocityLimit) | | Speed the robot should use.
                                                                                                                                    Omit to let the robot choose. | | ignore_final_yaw | [bool](#bool) | | If true, the robot will only try to achieve
                                                                                                                                    the final translation of the route. Otherwise,
                                                                                                                                    it will attempt to achieve the yaw as well. | +| max_corridor_distance | [double](#double) | | Max distance from the recorded edge that the robot is allowed to travel when avoiding
                                                                                                                                    obstacles or optimized its path. This is half of the full width of the corridor the robot may
                                                                                                                                    walk within. If this value is not set, the robot will choose a default corridor width. | | feature_quality_tolerance | [TravelParams.FeatureQualityTolerance](#bosdyn-api-graph_nav-TravelParams-FeatureQualityTolerance) | | | | disable_directed_exploration | [bool](#bool) | | Disable directed exploration to skip blocked portions of route | | disable_alternate_route_finding | [bool](#bool) | | Disable alternate-route-finding; overrides the per-edge setting in the map. | | path_following_mode | [Edge.Annotations.PathFollowingMode](#bosdyn-api-graph_nav-Edge-Annotations-PathFollowingMode) | | Path following mode | | blocked_path_wait_time | [google.protobuf.Duration](#google-protobuf-Duration) | | Time to wait for blocked path to clear (seconds) | | ground_clutter_mode | [Edge.Annotations.GroundClutterAvoidanceMode](#bosdyn-api-graph_nav-Edge-Annotations-GroundClutterAvoidanceMode) | | Ground clutter avoidance mode. | +| lost_detector_strictness | [LostDetectorStrictness](#bosdyn-api-graph_nav-LostDetectorStrictness) | | The strictness at which the lost detector will declare the robot lost during this command.
                                                                                                                                    Note that this level of strictness will continue to apply even if the robot is teleoperated
                                                                                                                                    by the user. Changing the level of strictness also resets the lost detector. So if the robot
                                                                                                                                    is lost, issuing a new command with a lower level of strictness will cause the robot to
                                                                                                                                    continue as if it were not lost. Issuing a command with LOST_DETECTOR_STRICTNESS_UNKNOWN
                                                                                                                                    results in no change. | +| planner_mode | [TravelParams.PathPlannerMode](#bosdyn-api-graph_nav-TravelParams-PathPlannerMode) | | | @@ -11356,7 +11562,7 @@ overwhelming gRPC with large http requests. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common response header. | -| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Serialized bytes of a EdgeSnapshot message, restricted to a chunk no larger than 4MB in size.
                                                                                                                                    To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects.
                                                                                                                                    The chunks will be concatenated together on the server, and deserialized | +| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Serialized bytes of a EdgeSnapshot message, restricted to a chunk no larger than 4MB in size.
                                                                                                                                    To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as
                                                                                                                                    DataChunk objects. The chunks will be concatenated together on the server, and deserialized | | lease | [bosdyn.api.Lease](#bosdyn-api-Lease) | | The Leases to show ownership of the graph-nav service. | @@ -11395,7 +11601,7 @@ currently exists on the server. | graph | [Graph](#bosdyn-api-graph_nav-Graph) | | Structure of the graph containing waypoints and edges without
                                                                                                                                    underlying sensor data. | | lease | [bosdyn.api.Lease](#bosdyn-api-Lease) | | The Lease to show ownership of graph-nav service. | | generate_new_anchoring | [bool](#bool) | | If this is true, generate an (overwrite the) anchoring on upload. | -| treat_validation_warnings_as_errors | [bool](#bool) | | If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be returned. This is false by
                                                                                                                                    default. | +| treat_validation_warnings_as_errors | [bool](#bool) | | If true, validation warnings will be treated as errors, and STATUS_INVALID_GRAPH will be
                                                                                                                                    returned. This is false by default. | @@ -11424,7 +11630,7 @@ be uploaded by the client. | sensor_status | [SensorCompatibilityStatus](#bosdyn-api-graph_nav-SensorCompatibilityStatus) | | | | area_callback_error | [AreaCallbackServiceError](#bosdyn-api-graph_nav-AreaCallbackServiceError) | | Errors about Area Callbacks in the map. | | map_stats | [MapStats](#bosdyn-api-graph_nav-MapStats) | | General map statistics. | -| validation_status | [UploadGraphResponse.ValidationStatus](#bosdyn-api-graph_nav-UploadGraphResponse-ValidationStatus) | | If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about why the
                                                                                                                                    graph was invalid. Note that some graph validation errors are warnings and the robot will be able to navigate
                                                                                                                                    on the graph even when they are present. | +| validation_status | [UploadGraphResponse.ValidationStatus](#bosdyn-api-graph_nav-UploadGraphResponse-ValidationStatus) | | If the returned status is STATUS_INVALID_GRAPH, this contains the detailed information about
                                                                                                                                    why the graph was invalid. Note that some graph validation errors are warnings and the robot
                                                                                                                                    will be able to navigate on the graph even when they are present. | @@ -11442,19 +11648,35 @@ contain information if the UploadGraph request could not be validated. | ----- | ---- | ----- | ----------- | | missing_waypoint_ids_in_edges | [string](#string) | repeated | One or more edges references a waypoint that doesn't exist. There are the waypoint IDs
                                                                                                                                    referenced by edges that do not exist. This is an error. Fix the graph and re-upload. | | missing_waypoint_ids_in_anchors | [string](#string) | repeated | The anchoring uploaded referenced waypoint IDs that do not exist. These
                                                                                                                                    are the missing IDs. This is a warning. The anchorings will be ignored. | -| edge_ids_invalid_transform | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | One or more edges had an invalid from_tform_to transform. These are the edge IDs uploaded
                                                                                                                                    that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                                                                                                                                    This is a warning. Edges with invalid transforms will be fixed on upload. | -| waypoint_anchors_invalid_transform | [string](#string) | repeated | One or more waypoint anchors in the anchoring have an invalid transform. These are the waypoint IDs
                                                                                                                                    that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                                                                                                                                    This is a warning. Anchors with invalid transforms will be fixed on upload. | -| object_anchors_invalid_transform | [string](#string) | repeated | One or more of the object achors in the anchoring have an invalid transform. These are the object IDs
                                                                                                                                    that have an invalid transform. Valid transforms have quaternion rotations that are normalized.
                                                                                                                                    This is a warning. Anchors with invalid transforms will be fixed on upload. | -| duplicate_waypoint_ids | [string](#string) | repeated | The Graph in the UploadGraph request contained more than one waypoint with the same ID. These are the
                                                                                                                                    waypoint IDs which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list
                                                                                                                                    the same number of times they are duplicated in the request.
                                                                                                                                    This is an error. Fix the graph and re-upload. | -| duplicate_waypoint_anchor_ids | [string](#string) | repeated | The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are duplicated in this list
                                                                                                                                    the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. | -| duplicate_object_anchor_ids | [string](#string) | repeated | The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs are duplicated in this list
                                                                                                                                    the same number of times they are duplicated in the request. This is a warning. Only the first anchor will be used. | -| duplicate_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | The Graph in the UploadGraph request contained more than one edge with the equivalent ID. These are the edge IDs
                                                                                                                                    which occur in the UploadGraph request more than once. Note that IDs are duplicated in this list the same number
                                                                                                                                    of times that they are duplicated in the request. Note that edges are *not* directional, and it is impossible
                                                                                                                                    to have both a->b *and* b->a in the same map. This is an error. Fix the graph and re-upload. | -| invalid_waypoint_ids_self_edges | [string](#string) | repeated | Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint IDs which have self
                                                                                                                                    edges in the UploadGraph request. This is an error. Fix the graph and re-upload. | -| has_empty_waypoint_ids | [bool](#bool) | | At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and re-upload. | +| edge_ids_invalid_transform | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | One or more edges had an invalid from_tform_to transform. These are the edge IDs uploaded
                                                                                                                                    that have an invalid transform. Valid transforms have quaternion rotations that are
                                                                                                                                    normalized. This is a warning. Edges with invalid transforms will be fixed on upload. | +| waypoint_anchors_invalid_transform | [string](#string) | repeated | One or more waypoint anchors in the anchoring have an invalid transform. These are the
                                                                                                                                    waypoint IDs that have an invalid transform. Valid transforms have quaternion rotations
                                                                                                                                    that are normalized. This is a warning. Anchors with invalid transforms will be fixed on
                                                                                                                                    upload. | +| object_anchors_invalid_transform | [string](#string) | repeated | One or more of the object anchors in the anchoring have an invalid transform. These are
                                                                                                                                    the object IDs that have an invalid transform. Valid transforms have quaternion rotations
                                                                                                                                    that are normalized. This is a warning. Anchors with invalid transforms will be fixed on
                                                                                                                                    upload. | +| duplicate_waypoint_ids | [string](#string) | repeated | The Graph in the UploadGraph request contained more than one waypoint with the same ID.
                                                                                                                                    These are the waypoint IDs which occur in the UploadGraph request more than once. Note
                                                                                                                                    that IDs are duplicated in this list the same number of times they are duplicated in the
                                                                                                                                    request. This is an error. Fix the graph and re-upload. | +| duplicate_waypoint_anchor_ids | [string](#string) | repeated | The anchoring contains one or more anchor IDs that are duplicated. Note that IDs are
                                                                                                                                    duplicated in this list the same number of times they are duplicated in the request. This
                                                                                                                                    is a warning. Only the first anchor will be used. | +| duplicate_object_anchor_ids | [string](#string) | repeated | The anchoring contains one or more object anchor IDs that are duplicated. Note that IDs
                                                                                                                                    are duplicated in this list the same number of times they are duplicated in the request.
                                                                                                                                    This is a warning. Only the first anchor will be used. | +| duplicate_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | The Graph in the UploadGraph request contained more than one edge with the equivalent ID.
                                                                                                                                    These are the edge IDs which occur in the UploadGraph request more than once. Note that
                                                                                                                                    IDs are duplicated in this list the same number of times that they are duplicated in the
                                                                                                                                    request. Note that edges are *not* directional, and it is impossible to have both a->b
                                                                                                                                    *and* b->a in the same map. This is an error. Fix the graph and re-upload. | +| invalid_waypoint_ids_self_edges | [string](#string) | repeated | Edges are not allowed to have the same "from" and "to" waypoint. These are the waypoint
                                                                                                                                    IDs which have self edges in the UploadGraph request. This is an error. Fix the graph and
                                                                                                                                    re-upload. | +| has_empty_waypoint_ids | [bool](#bool) | | At least one waypoint in the graph has an empty ID. This is an error. Fix the graph and
                                                                                                                                    re-upload. | | has_empty_edge_ids | [bool](#bool) | | At least one edge in the graph references a waypoint with an empty ID.
                                                                                                                                    This is an error. Fix the graph and re-upload. | -| has_empty_waypoint_anchor_ids | [bool](#bool) | | At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. | -| has_empty_object_anchor_ids | [bool](#bool) | | At least one object anchor in the anchoring has an empty ID. This is a warning. Empty anchors will be ignored. | -| malformed_staircase_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | One or more edges had a malformed staircase annotation. This is an error. Remove, rerecord, or fix the annotation. | +| has_empty_waypoint_anchor_ids | [bool](#bool) | | At least one waypoint anchor in the anchoring has an empty ID. This is a warning. Empty
                                                                                                                                    anchors will be ignored. | +| has_empty_object_anchor_ids | [bool](#bool) | | At least one object anchor in the anchoring has an empty ID. This is a warning. Empty
                                                                                                                                    anchors will be ignored. | +| malformed_staircase_edge_ids | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | One or more edges had a malformed staircase annotation. This is an error. Remove,
                                                                                                                                    rerecord, or fix the annotation. | + + + + + + + + +### UploadGraphStreamingRequest +This is a streaming version of the UploadGraph request. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | +| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Serialized bytes of a UploadGraphRequest message, restricted to a chunk no larger than 4MB in
                                                                                                                                    size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in
                                                                                                                                    order as DataChunk objects. The chunks will be concatenated together on the server, and
                                                                                                                                    deserialized. | @@ -11473,7 +11695,7 @@ overwhelming gRPC with large http requests. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common response header. | -| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in size.
                                                                                                                                    To break the data into chunks, first serialize it to bytes. Then, send the bytes in order as DataChunk objects.
                                                                                                                                    The chunks will be concatenated together on the server, and deserialized. | +| chunk | [bosdyn.api.DataChunk](#bosdyn-api-DataChunk) | | Serialized bytes of a WaypointSnapshot message, restricted to a chunk no larger than 4MB in
                                                                                                                                    size. To break the data into chunks, first serialize it to bytes. Then, send the bytes in
                                                                                                                                    order as DataChunk objects. The chunks will be concatenated together on the server, and
                                                                                                                                    deserialized. | | lease | [bosdyn.api.Lease](#bosdyn-api-Lease) | | The Leases to show ownership of the graph-nav service. | @@ -11615,7 +11837,7 @@ Report possible errors with the loaded map. | STATUS_NO_TIMESYNC | 2 | [Time Error] Client has not done timesync with robot. | | STATUS_EXPIRED | 3 | [Time Error] The command was received after its end time had already passed. | | STATUS_TOO_DISTANT | 4 | [Time Error] The command end time was too far in the future. | -| STATUS_ROBOT_IMPAIRED | 5 | [Robot State Error] Cannot navigate a route if the robot has a crtical
                                                                                                                                    perception fault, or behavior fault, or LIDAR not working. | +| STATUS_ROBOT_IMPAIRED | 5 | [Robot State Error] Cannot navigate a route if the robot has a critical
                                                                                                                                    perception fault, or behavior fault, or LIDAR not working. | | STATUS_RECORDING | 6 | [Robot State Error] Cannot navigate a route while recording a map. | | STATUS_UNKNOWN_ROUTE_ELEMENTS | 8 | [Route Error] One or more waypoints/edges are not in the map. | | STATUS_INVALID_EDGE | 9 | [Route Error] One or more edges do not connect to expected waypoints. | @@ -11624,11 +11846,11 @@ Report possible errors with the loaded map. | STATUS_FEATURE_DESERT | 13 | [Route Error] Route contained too many waypoints with low-quality features. | | STATUS_LOST | 14 | [Route Error] Happens when you try to issue a navigate route while the robot is lost. | | STATUS_NOT_LOCALIZED_TO_ROUTE | 16 | [Route Error] Happens when the current localization doesn't refer to any waypoint
                                                                                                                                    in the route (possibly uninitialized localization). | -| STATUS_NOT_LOCALIZED_TO_MAP | 19 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). | -| STATUS_COULD_NOT_UPDATE_ROUTE | 15 | [Wrestling Errors] Happens when graph nav refuses to follow the route you specified. Try saying please? | -| STATUS_STUCK | 17 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate a different
                                                                                                                                    route, or clear the route and try again. | -| STATUS_UNRECOGNIZED_COMMAND | 18 | [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. | -| STATUS_AREA_CALLBACK_ERROR | 21 | [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. | +| STATUS_NOT_LOCALIZED_TO_MAP | 19 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the
                                                                                                                                    map (possibly uninitialized localization). | +| STATUS_COULD_NOT_UPDATE_ROUTE | 15 | [Wrestling Errors] Happens when graph nav refuses to follow the route you specified. Try
                                                                                                                                    saying please? | +| STATUS_STUCK | 17 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck.
                                                                                                                                    Navigate a different route, or clear the route and try again. | +| STATUS_UNRECOGNIZED_COMMAND | 18 | [Request Error] Happens when you try to continue a command that was either expired, or
                                                                                                                                    had an unrecognized id. | +| STATUS_AREA_CALLBACK_ERROR | 21 | [Route Error] Happens when you try to navigate along a route and a needed callback is no
                                                                                                                                    longer available. | @@ -11641,8 +11863,8 @@ The result of the GPS command, if relevant. | ---- | ------ | ----------- | | GPS_STATUS_UNKNOWN | 0 | An unknown/unexpected error occurred. | | GPS_STATUS_OK | 1 | The GPS command was valid and can be executed. | -| GPS_STATUS_NO_COORDS_IN_MAP | 2 | The GPS command could not be completed because the map does not have GPS coordinates, neither in
                                                                                                                                    waypoint annotations nor in the waypoint snapshot data. Please record the map using a GPS-enabled robot,
                                                                                                                                    or annotate the waypoints with custom GPS coordinates. | -| GPS_STATUS_TOO_FAR_FROM_MAP | 3 | The GPS command could not be completed because the coordinates passed in were too far from any mapped GPS
                                                                                                                                    data. | +| GPS_STATUS_NO_COORDS_IN_MAP | 2 | The GPS command could not be completed because the map does not have GPS coordinates,
                                                                                                                                    neither in waypoint annotations nor in the waypoint snapshot data. Please record the map
                                                                                                                                    using a GPS-enabled robot, or annotate the waypoints with custom GPS coordinates. | +| GPS_STATUS_TOO_FAR_FROM_MAP | 3 | The GPS command could not be completed because the coordinates passed in were too far
                                                                                                                                    from any mapped GPS data. | @@ -11664,13 +11886,13 @@ The result of the GPS command, if relevant. | STATUS_NO_PATH | 8 | [Route Error] There is no path to a waypoint near the specified goal.
                                                                                                                                    If any waypoints were found (but no path), the error_waypoint_ids field
                                                                                                                                    will be filled. | | STATUS_FEATURE_DESERT | 10 | [Route Error] Route contained too many waypoints with low-quality features. | | STATUS_LOST | 11 | [Route Error] Happens when you try to issue a navigate to while the robot is lost. | -| STATUS_NOT_LOCALIZED_TO_MAP | 13 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). | +| STATUS_NOT_LOCALIZED_TO_MAP | 13 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the
                                                                                                                                    map (possibly uninitialized localization). | | STATUS_COULD_NOT_UPDATE_ROUTE | 12 | [Wrestling error] Happens when graph nav refuses to follow the route you specified. | -| STATUS_STUCK | 14 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate to a different
                                                                                                                                    waypoint, or clear the route and try again. | -| STATUS_UNRECOGNIZED_COMMAND | 15 | [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. | +| STATUS_STUCK | 14 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck.
                                                                                                                                    Navigate to a different waypoint, or clear the route and try again. | +| STATUS_UNRECOGNIZED_COMMAND | 15 | [Request Error] Happens when you try to continue a command that was either expired, or
                                                                                                                                    had an unrecognized id. | | STATUS_INVALID_POSE | 16 | [Route Error] The pose is invalid, or known to be unachievable (upside-down, etc). | -| STATUS_AREA_CALLBACK_ERROR | 17 | [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. | -| STATUS_INVALID_GPS_COMMAND | 18 | [Route Error] The command contained an invalid GPS request. See gps_status for more details. | +| STATUS_AREA_CALLBACK_ERROR | 17 | [Route Error] Happens when you try to navigate along a route and a needed callback is no
                                                                                                                                    longer available. | +| STATUS_INVALID_GPS_COMMAND | 18 | [Route Error] The command contained an invalid GPS request. See gps_status for more
                                                                                                                                    details. | @@ -11692,11 +11914,11 @@ The result of the GPS command, if relevant. | STATUS_NO_PATH | 8 | [Route Error] There is no path to the specified waypoint. | | STATUS_FEATURE_DESERT | 10 | [Route Error] Route contained too many waypoints with low-quality features. | | STATUS_LOST | 11 | [Route Error] Happens when you try to issue a navigate to while the robot is lost. | -| STATUS_NOT_LOCALIZED_TO_MAP | 13 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the map (possibly uninitialized localization). | +| STATUS_NOT_LOCALIZED_TO_MAP | 13 | [Route Error] Happens when the current localization doesn't refer to any waypoint in the
                                                                                                                                    map (possibly uninitialized localization). | | STATUS_COULD_NOT_UPDATE_ROUTE | 12 | [Wrestling error] Happens when graph nav refuses to follow the route you specified. | -| STATUS_STUCK | 14 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck. Navigate to a different
                                                                                                                                    waypoint, or clear the route and try again. | -| STATUS_UNRECOGNIZED_COMMAND | 15 | [Request Error] Happens when you try to continue a command that was either expired, or had an unrecognized id. | -| STATUS_AREA_CALLBACK_ERROR | 16 | [Route Error] Happens when you try to navigate along a route and a needed callback is no longer available. | +| STATUS_STUCK | 14 | [Route Error] Happens when you try to issue a navigate to while the robot is stuck.
                                                                                                                                    Navigate to a different waypoint, or clear the route and try again. | +| STATUS_UNRECOGNIZED_COMMAND | 15 | [Request Error] Happens when you try to continue a command that was either expired, or
                                                                                                                                    had an unrecognized id. | +| STATUS_AREA_CALLBACK_ERROR | 16 | [Route Error] Happens when you try to navigate along a route and a needed callback is no
                                                                                                                                    longer available. | @@ -11717,24 +11939,25 @@ The result of the GPS command, if relevant. ### NavigationFeedbackResponse.BlockageStatus -Indicates whether the robot thinks its current path is blocked by an obstacle. This will be set when -Status is STATUS_FOLLOWING_ROUTE, or STATUS_STUCK, and will be BLOCKAGE_STATUS_UNKNOWN in all other cases. +Indicates whether the robot thinks its current path is blocked by an obstacle. This will be +set when Status is STATUS_FOLLOWING_ROUTE, or STATUS_STUCK, and will be +BLOCKAGE_STATUS_UNKNOWN in all other cases. | Name | Number | Description | | ---- | ------ | ----------- | | BLOCKAGE_STATUS_UNKNOWN | 0 | | | BLOCKAGE_STATUS_ROUTE_CLEAR | 1 | The robot believes the path forward to be clear of obstacles. | -| BLOCKAGE_STATUS_ROUTE_BLOCKED_TEMPORARILY | 2 | The robot believes there is an obstacle in the path which it can't get around easily.
                                                                                                                                    It will attempt to get around the obstacle, and if all else fails it will declare itself stuck. | -| BLOCKAGE_STATUS_STUCK | 3 | The robot has given up trying to get around perceived obstacles in the path and has declared itself stuck.
                                                                                                                                    This will only ever be set when Status is STATUS_STUCK. | +| BLOCKAGE_STATUS_ROUTE_BLOCKED_TEMPORARILY | 2 | The robot believes there is an obstacle in the path which it can't get around easily.
                                                                                                                                    It will attempt to get around the obstacle, and if all else fails it will declare itself
                                                                                                                                    stuck. | +| BLOCKAGE_STATUS_STUCK | 3 | The robot has given up trying to get around perceived obstacles in the path and has
                                                                                                                                    declared itself stuck. This will only ever be set when Status is STATUS_STUCK. | ### NavigationFeedbackResponse.RouteFollowingStatus -When the robot is following a route (and Status is STATUS_FOLLOWING_ROUTE), this gives additional -detail about what the robot is doing to follow that route. When Status is not STATUS_FOLLOWING_ROUTE, -this will be set to ROUTE_FOLLOWING_STATUS_UNKNOWN. +When the robot is following a route (and Status is STATUS_FOLLOWING_ROUTE), this gives +additional detail about what the robot is doing to follow that route. When Status is not +STATUS_FOLLOWING_ROUTE, this will be set to ROUTE_FOLLOWING_STATUS_UNKNOWN. | Name | Number | Description | | ---- | ------ | ----------- | @@ -11759,9 +11982,9 @@ this will be set to ROUTE_FOLLOWING_STATUS_UNKNOWN. | STATUS_NO_ROUTE | 3 | There's no route currently being navigated.
                                                                                                                                    This can happen if no command has been issued, or if the graph has been changed during
                                                                                                                                    navigation. | | STATUS_NO_LOCALIZATION | 4 | Robot is not localized to a route. | | STATUS_LOST | 5 | Robot appears to be lost. | -| STATUS_STUCK | 6 | Robot appears stuck and unable to make progress, but can still navigate to other destinations.
                                                                                                                                    stuck_reason provides more details on the reason that caused the robot to become stuck. | +| STATUS_STUCK | 6 | Robot appears stuck and unable to make progress, but can still navigate to other
                                                                                                                                    destinations. stuck_reason provides more details on the reason that caused the robot to
                                                                                                                                    become stuck. | | STATUS_COMMAND_TIMED_OUT | 7 | The command expired. | -| STATUS_ROBOT_IMPAIRED | 8 | Cannot navigate a route if the robot has a crtical perception fault, or behavior fault,
                                                                                                                                    or LIDAR not working. See impared_status for details. | +| STATUS_ROBOT_IMPAIRED | 8 | Cannot navigate a route if the robot has a critical perception fault, or behavior fault,
                                                                                                                                    or LIDAR not working. See impaired_status for details. | | STATUS_CONSTRAINT_FAULT | 11 | The route constraints were not feasible. | | STATUS_COMMAND_OVERRIDDEN | 12 | The command was replaced by a new command | | STATUS_NOT_LOCALIZED_TO_ROUTE | 13 | The localization or route changed mid-traverse. | @@ -11809,7 +12032,7 @@ This setting applies when the robot discovers that the route is blocked. | Name | Number | Description | | ---- | ------ | ----------- | | ROUTE_BLOCKED_UNKNOWN | 0 | The mode is unset. | -| ROUTE_BLOCKED_REROUTE | 1 | For NavigateToRequests, the robot will find the shortest path to the desination
                                                                                                                                    that avoids the blockage.
                                                                                                                                    For NavigateRouteRequests, the robot will find the shortest path to any point
                                                                                                                                    after the furthest-along blockage, and after the furthest-along traversed edge,
                                                                                                                                    and go to the point that gives that shortest path. Then, the robot will follow
                                                                                                                                    the rest of the route from that point. If multiple points on the route are
                                                                                                                                    similarly close to the robot, the robot will prefer the earliest on the route.
                                                                                                                                    This is the default. | +| ROUTE_BLOCKED_REROUTE | 1 | For NavigateToRequests, the robot will find the shortest path to the destination
                                                                                                                                    that avoids the blockage.
                                                                                                                                    For NavigateRouteRequests, the robot will find the shortest path to any point
                                                                                                                                    after the furthest-along blockage, and after the furthest-along traversed edge,
                                                                                                                                    and go to the point that gives that shortest path. Then, the robot will follow
                                                                                                                                    the rest of the route from that point. If multiple points on the route are
                                                                                                                                    similarly close to the robot, the robot will prefer the earliest on the route.
                                                                                                                                    This is the default. | | ROUTE_BLOCKED_FAIL | 2 | The robot will fail the command with status STATUS_STUCK; | @@ -11840,7 +12063,7 @@ final-waypoint-offset), and command_id indicates a new command. | FIDUCIAL_INIT_NO_FIDUCIAL | 1 | Ignore fiducials during initialization. | | FIDUCIAL_INIT_NEAREST | 2 | Localize to the nearest fiducial in any waypoint. | | FIDUCIAL_INIT_NEAREST_AT_TARGET | 3 | Localize to nearest fiducial at the target waypoint (from initial_guess). | -| FIDUCIAL_INIT_SPECIFIC | 4 | Localize to the given fiducial at the target waypoint (from initial_guess) if it exists, or any waypoint otherwise. | +| FIDUCIAL_INIT_SPECIFIC | 4 | Localize to the given fiducial at the target waypoint (from | @@ -11854,9 +12077,9 @@ final-waypoint-offset), and command_id indicates a new command. | QUALITY_CHECK_UNKNOWN | 0 | Unset. Note that the quality check is only performed if the overall Status
                                                                                                                                    enum returns STATUS_SUCCESS, and will be unset otherwise. | | QUALITY_CHECK_SUCCESS | 1 | The quality check passed. | | QUALITY_CHECK_POOR_POINT_CLOUD_MATCH | 2 | After applying the localization, a poor point cloud match to the map was detected.
                                                                                                                                    This can happen if, for example, the map has changed, or the starting location
                                                                                                                                    of the robot is now very different than it was at recording time. | -| QUALITY_CHECK_POOR_GRAVITY_ALIGNMENT | 3 | After applying the localization, Graph Nav checked the localization, and found that
                                                                                                                                    the robot's gravity vector does not align with the map's. This can happen if a fiducial
                                                                                                                                    being used to align to the map was detected wrongly during recording, or if the robot's
                                                                                                                                    IMU is miscalibrated. It can also occur when the inital guess passed in to the SetLocalization
                                                                                                                                    RPC is in the incorrect reference frame. | +| QUALITY_CHECK_POOR_GRAVITY_ALIGNMENT | 3 | After applying the localization, Graph Nav checked the localization, and found that
                                                                                                                                    the robot's gravity vector does not align with the map's. This can happen if a fiducial
                                                                                                                                    being used to align to the map was detected wrongly during recording, or if the robot's
                                                                                                                                    IMU is miscalibrated. It can also occur when the initial guess passed in to the
                                                                                                                                    SetLocalization RPC is in the incorrect reference frame. | | QUALITY_CHECK_SKIPPED | 4 | There wasn't enough data to make a determination about quality. | -| QUALITY_CHECK_BAD_HEIGHT | 5 | The prior passed in is too different from the expected height of the robot e.w.r.t the waypoint. | +| QUALITY_CHECK_BAD_HEIGHT | 5 | The prior passed in is too different from the expected height of the robot e.w.r.t the
                                                                                                                                    waypoint. | @@ -11873,12 +12096,13 @@ final-waypoint-offset), and command_id indicates a new command. | STATUS_UNKNOWN_WAYPOINT | 3 | The given waypoint is unknown by the system.
                                                                                                                                    This could be due to a client error, or because the graph was changed out from under the
                                                                                                                                    client. | | STATUS_ABORTED | 4 | Localization was aborted, likely because of a new request. | | STATUS_FAILED | 5 | Failed to localize for some other reason; see the error_report for details.
                                                                                                                                    This is often because the initial guess was incorrect. | -| STATUS_FIDUCIAL_TOO_FAR_AWAY | 6 | Failed to localize because the fiducial requested by 'use_fiducial_id' was too far away from
                                                                                                                                    the robot. | -| STATUS_FIDUCIAL_TOO_OLD | 7 | Failed to localize because the fiducial requested by 'use_fiducial_id' had a detection time that was too
                                                                                                                                    far in the past. | -| STATUS_NO_MATCHING_FIDUCIAL | 8 | Failed to localize because the fiducial requested by 'use_fiducial_id' did not exist in the map at
                                                                                                                                    the required location. | -| STATUS_FIDUCIAL_POSE_UNCERTAIN | 9 | Failed to localize because the fiducial requested by 'use_fiducial_id' had an unreliable
                                                                                                                                    pose estimation, either in the current detection of that fiducial, or in detections that
                                                                                                                                    were saved in the map. Note that when using FIDUCIAL_INIT_SPECIFIC, fiducial detections at
                                                                                                                                    the target waypoint will be used so long as they are not uncertain -- otherwise, detections
                                                                                                                                    at adjacent waypoints may be used. If there exists no uncertain detection of the fiducial
                                                                                                                                    near the target waypoint in the map, the service returns this status. | +| STATUS_FIDUCIAL_TOO_FAR_AWAY | 6 | Failed to localize because the fiducial requested by 'use_fiducial_id' was too far away
                                                                                                                                    from the robot. | +| STATUS_FIDUCIAL_TOO_OLD | 7 | Failed to localize because the fiducial requested by 'use_fiducial_id' had a detection
                                                                                                                                    time that was too far in the past. | +| STATUS_NO_MATCHING_FIDUCIAL | 8 | Failed to localize because the fiducial requested by 'use_fiducial_id' did not exist in
                                                                                                                                    the map at the required location. | +| STATUS_FIDUCIAL_POSE_UNCERTAIN | 9 | Failed to localize because the fiducial requested by 'use_fiducial_id' had an unreliable
                                                                                                                                    pose estimation, either in the current detection of that fiducial, or in detections that
                                                                                                                                    were saved in the map. Note that when using FIDUCIAL_INIT_SPECIFIC, fiducial detections
                                                                                                                                    at the target waypoint will be used so long as they are not uncertain -- otherwise,
                                                                                                                                    detections at adjacent waypoints may be used. If there exists no uncertain detection of
                                                                                                                                    the fiducial near the target waypoint in the map, the service returns this status. | | STATUS_INCOMPATIBLE_SENSORS | 10 | The localization could not be set, because the map was recorded using a different sensor
                                                                                                                                    setup than the robot currently has onboard. See SensorStatus for more details. | | STATUS_VISUAL_ALIGNMENT_FAILED | 11 | Visual feature based alignment failed or the pose solution was considered unreliable. | +| STATUS_NO_MAP_LOADED | 12 | Failed to localize because there is no map loaded. | @@ -11895,6 +12119,20 @@ Indicates whether robot will navigate through areas with poor quality features + + +### TravelParams.PathPlannerMode +Determines which local path planner to use. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| PLANNER_MODE_UNKNOWN | 0 | Unknown value. | +| PLANNER_MODE_DEFAULT | 1 | Use default path planner. Currently this is the short range planner. | +| PLANNER_MODE_SHORT_RANGE | 2 | Use short range planner. | +| PLANNER_MODE_LONG_RANGE | 3 | Use long range planner. This is an experimental feature that helps the robot navigate
                                                                                                                                    around large obstacles that were not present during mission recording.
                                                                                                                                    NOTE: Alternate route-finding waypoints are disabled when using the long range planner. | + + + ### UploadGraphResponse.Status @@ -11906,7 +12144,7 @@ Indicates whether robot will navigate through areas with poor quality features | STATUS_OK | 1 | | | STATUS_MAP_TOO_LARGE_LICENSE | 3 | Can't upload the graph because it was too large for the license. | | STATUS_INVALID_GRAPH | 4 | The graph or its anchoring are invalid. See the ValidationStatus for more details. | -| STATUS_INCOMPATIBLE_SENSORS | 5 | The sensor data associated with this graph is incompatible with the current robot. A common example
                                                                                                                                    would be trying to upload a map recorded on a robot that had LIDAR to a robot that did not, or vice
                                                                                                                                    versa. | +| STATUS_INCOMPATIBLE_SENSORS | 5 | The sensor data associated with this graph is incompatible with the current robot. A
                                                                                                                                    common example would be trying to upload a map recorded on a robot that had LIDAR to a
                                                                                                                                    robot that did not, or vice versa. | | STATUS_AREA_CALLBACK_ERROR | 6 | There is an error associated with one of the area callbacks in this graph. | @@ -11961,9 +12199,9 @@ Indicates whether robot will navigate through areas with poor quality features ### GraphNavService -The GraphNav service service is a place-based localization and locomotion service. The service can -be used to get/set the localization, upload and download the current graph nav maps, and send navigation -requests to move around the map. +The GraphNav service service is a place-based localization and locomotion service. The service +can be used to get/set the localization, upload and download the current graph nav maps, and send +navigation requests to move around the map. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| @@ -11975,12 +12213,45 @@ requests to move around the map. | GetLocalizationState | [GetLocalizationStateRequest](#bosdyn-api-graph_nav-GetLocalizationStateRequest) | [GetLocalizationStateResponse](#bosdyn-api-graph_nav-GetLocalizationStateResponse) | Get the localization status and data. | | ClearGraph | [ClearGraphRequest](#bosdyn-api-graph_nav-ClearGraphRequest) | [ClearGraphResponse](#bosdyn-api-graph_nav-ClearGraphResponse) | Clears the local graph structure. Also erases any snapshots currently in RAM. | | DownloadGraph | [DownloadGraphRequest](#bosdyn-api-graph_nav-DownloadGraphRequest) | [DownloadGraphResponse](#bosdyn-api-graph_nav-DownloadGraphResponse) | Download the graph structure. | -| UploadGraph | [UploadGraphRequest](#bosdyn-api-graph_nav-UploadGraphRequest) | [UploadGraphResponse](#bosdyn-api-graph_nav-UploadGraphResponse) | Upload the full list of waypoint IDs, graph topology and other small info. | +| DownloadGraphStreaming | [DownloadGraphRequest](#bosdyn-api-graph_nav-DownloadGraphRequest) | [DownloadGraphStreamingResponse](#bosdyn-api-graph_nav-DownloadGraphStreamingResponse) stream | This is a streaming version of the DownloadGraph RPC. | +| UploadGraph | [UploadGraphRequest](#bosdyn-api-graph_nav-UploadGraphRequest) | [UploadGraphResponse](#bosdyn-api-graph_nav-UploadGraphResponse) | Upload the full list of waypoint IDs, graph topology and other small info.
                                                                                                                                    Note: if multiple clients/RPCs are attempting to upload a graph at the same time, uploads
                                                                                                                                    will be performed synchronously in the order in which they are received, and the later
                                                                                                                                    UploadGraph request will block until the earlier completes. | +| UploadGraphStreaming | [UploadGraphStreamingRequest](#bosdyn-api-graph_nav-UploadGraphStreamingRequest) stream | [UploadGraphResponse](#bosdyn-api-graph_nav-UploadGraphResponse) | This is a streaming version of UploadGraph to allow uploading larger graphs.
                                                                                                                                    Note: as with UploadWaypointSnapshot, this streaming process involves serializing a full
                                                                                                                                    UploadGraph message from chunks. After all the chunks have been uploaded, a regular
                                                                                                                                    UploadGraph RPC will be performed internally, so UploadGraphStreaming has the same semantics
                                                                                                                                    as UploadGraph when it completes. That is, UploadGraphStreaming is *not* to be used for
                                                                                                                                    incrementally uploading graph data as the robot is navigating -- this is merely a streaming
                                                                                                                                    wrapper around UploadGraph. | | UploadWaypointSnapshot | [UploadWaypointSnapshotRequest](#bosdyn-api-graph_nav-UploadWaypointSnapshotRequest) stream | [UploadWaypointSnapshotResponse](#bosdyn-api-graph_nav-UploadWaypointSnapshotResponse) | Uploads large waypoint snapshot as a stream for a particular waypoint. | | UploadEdgeSnapshot | [UploadEdgeSnapshotRequest](#bosdyn-api-graph_nav-UploadEdgeSnapshotRequest) stream | [UploadEdgeSnapshotResponse](#bosdyn-api-graph_nav-UploadEdgeSnapshotResponse) | Uploads large edge snapshot as a stream for a particular edge. | -| DownloadWaypointSnapshot | [DownloadWaypointSnapshotRequest](#bosdyn-api-graph_nav-DownloadWaypointSnapshotRequest) | [DownloadWaypointSnapshotResponse](#bosdyn-api-graph_nav-DownloadWaypointSnapshotResponse) stream | Download waypoint data from the server. If the snapshot exists in disk cache, it will be loaded. | +| DownloadWaypointSnapshot | [DownloadWaypointSnapshotRequest](#bosdyn-api-graph_nav-DownloadWaypointSnapshotRequest) | [DownloadWaypointSnapshotResponse](#bosdyn-api-graph_nav-DownloadWaypointSnapshotResponse) stream | Download waypoint data from the server. If the snapshot exists in disk cache, it will be
                                                                                                                                    loaded. | | DownloadEdgeSnapshot | [DownloadEdgeSnapshotRequest](#bosdyn-api-graph_nav-DownloadEdgeSnapshotRequest) | [DownloadEdgeSnapshotResponse](#bosdyn-api-graph_nav-DownloadEdgeSnapshotResponse) stream | Download edge data from the server. If the snapshot exists in disk cache, it will be loaded. | -| ValidateGraph | [ValidateGraphRequest](#bosdyn-api-graph_nav-ValidateGraphRequest) | [ValidateGraphResponse](#bosdyn-api-graph_nav-ValidateGraphResponse) | Verify that the graph is still valid and all required external services are still available.
                                                                                                                                    A map that was valid at upload time may not still be valid if required services are no longer running. | +| ValidateGraph | [ValidateGraphRequest](#bosdyn-api-graph_nav-ValidateGraphRequest) | [ValidateGraphResponse](#bosdyn-api-graph_nav-ValidateGraphResponse) | Verify that the graph is still valid and all required external services are still available.
                                                                                                                                    A map that was valid at upload time may not still be valid if required services are no longer
                                                                                                                                    running. | + + + + + + +

                                                                                                                                    Top

                                                                                                                                    + +## bosdyn/api/graph_nav/lost_detection.proto + + + + + + + +### LostDetectorStrictness +Determines how "strict" the lost detector is about declaring lost. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| LOST_DETECTOR_STRICTNESS_UNKNOWN | 0 | Unset (defaults to STRICTNESS_DEFAULT). | +| LOST_DETECTOR_STRICTNESS_DISABLED | 1 | Never declares lost. | +| LOST_DETECTOR_STRICTNESS_PERMISSIVE | 2 | Declares lost less readily than default. | +| LOST_DETECTOR_STRICTNESS_DEFAULT | 3 | Default lost detector strictness. | +| LOST_DETECTOR_STRICTNESS_STRICT | 4 | Declares lost more readily than default. | + + + + + @@ -12108,13 +12379,14 @@ Annotations understood by BostonDynamics systems. | stairs | [Edge.Annotations.StairData](#bosdyn-api-graph_nav-Edge-Annotations-StairData) | | Stairs information/parameters specific to the edge. | | direction_constraint | [Edge.Annotations.DirectionConstraint](#bosdyn-api-graph_nav-Edge-Annotations-DirectionConstraint) | | Direction constraints for how the robot must move and the directions it can face
                                                                                                                                    when traversing the edge. | | require_alignment | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | If true, the robot must be aligned with the edge in yaw before traversing it. | -| flat_ground | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | **Deprecated.** If true, the edge crosses flat ground and the robot shouldn't try to climb over
                                                                                                                                    obstacles.
                                                                                                                                    DEPRECATED as of 3.3. Replaced by ground_clutter_mode. | +| flat_ground | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | **Deprecated.** If true, the edge crosses flat ground and the robot shouldn't try to climb over
                                                                                                                                    obstacles.
                                                                                                                                    DEPRECATED as of 3.3. Replaced by ground_clutter_mode.
                                                                                                                                    As of 4.1, no longer functional. | | override_mobility_params | [google.protobuf.FieldMask](#google-protobuf-FieldMask) | | Overrides the following fields of the mobility parameters to whatever is
                                                                                                                                    stored in the map. For example, if this FieldMask contains "stairs_mode" and
                                                                                                                                    "terrain_params.enable_grated_floor", then the map will be
                                                                                                                                    annotated with "stairs_mode" and "enable_grated_floor" settings. An empty FieldMask means
                                                                                                                                    all fields are active annotations. Note that the more conservative of the velocity limit
                                                                                                                                    stored in the mobility parameters and the TravelParams of the entire route will be used
                                                                                                                                    for this edge (regardless of what override_mobility_params says). | | mobility_params | [bosdyn.api.spot.MobilityParams](#bosdyn-api-spot-MobilityParams) | | Contains terrain parameters, swing height, obstacle avoidance parameters, etc.
                                                                                                                                    When the robot crosses this edge, it will use the mobility parameters here. | | cost | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Assign edges a cost; used when finding the "shortest" (lowest cost) path. | | edge_source | [Edge.EdgeSource](#bosdyn-api-graph_nav-Edge-EdgeSource) | | How this edge was made. | | disable_alternate_route_finding | [bool](#bool) | | If true, disables alternate-route-finding for this edge. | | path_following_mode | [Edge.Annotations.PathFollowingMode](#bosdyn-api-graph_nav-Edge-Annotations-PathFollowingMode) | | Path following mode for this edge. | +| max_corridor_distance | [double](#double) | | Max distance from the recorded edge that the robot is allowed to travel when avoiding
                                                                                                                                    obstacles or optimized its path. This is half of the full width of the corridor the robot
                                                                                                                                    may walk within. If this value is not set, the robot will choose a default corridor
                                                                                                                                    width. | | disable_directed_exploration | [bool](#bool) | | Disable directed exploration for this edge. | | area_callbacks | [Edge.Annotations.AreaCallbacksEntry](#bosdyn-api-graph_nav-Edge-Annotations-AreaCallbacksEntry) | repeated | Reference to area callback regions needed to cross this edge.
                                                                                                                                    The string is a unique id for this region, which may be shared
                                                                                                                                    across multiple edges. | | ground_clutter_mode | [Edge.Annotations.GroundClutterAvoidanceMode](#bosdyn-api-graph_nav-Edge-Annotations-GroundClutterAvoidanceMode) | | | @@ -12291,6 +12563,48 @@ Statistics from a particular type of object stored in the GraphNav map. + + +### Region +Defines a region in a map. Regions are shapes, commonly they are boxes. Many waypoints may share +the same regions. Regions do not need to cover the waypoint itself. A common use for such regions +is to define certain parts of the point cloud as being unreliable for localization. Note that +this is a different concept than the LocalizeRegion, which is used to determine where the robot's +body must be relative to the waypoint for it to localize -- the RegionWithFrame instead can be +used to label data near the waypoint. *Regions and Reference Frames* -- regions are stored inside +waypoint annotations as "RegionWithFrames". These consist of a region and a named reference frame +relative to the waypoint (such as "odom" or "seed", or "waypoint" etc). + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| region_id | [string](#string) | | Unique identifier of the region within a map. This will be used to deduplicate
                                                                                                                                    regions that many waypoints may reference. Note that the transform of the region is
                                                                                                                                    defined with respect to this waypoint's KO frame, so the same region may exist in several
                                                                                                                                    waypoints while having different transforms in each case. Regions with the same ID are not
                                                                                                                                    guaranteed to be unique. Graph Nav will use whatever regions exist in the current waypoint
                                                                                                                                    only, and will ignore all other regions; so if you want Graph Nav to use a region in multiple
                                                                                                                                    waypoints, you must duplicate the region into each waypoint in which it is to be used. | +| bounding_box | [bosdyn.api.Box3](#bosdyn-api-Box3) | | Oriented bounding box defining the region. The axes are defined relative to the "base
                                                                                                                                    frame" for this region. See RegionWithFrame for how this frame may be defined. | +| data_filter | [Region.DataFilter](#bosdyn-api-graph_nav-Region-DataFilter) | | How (if at all) the region affects data filtering for scan matching. | + + + + + + + + +### RegionWithFrame +Defines a region and a transform near a specific waypoint. Regions will only be used if they are +attached to waypoint annotations. Regions may be duplicated over many waypoints. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| region | [Region](#bosdyn-api-graph_nav-Region) | | The region attached to this waypoint. | +| base_frame_name | [string](#string) | | Reference frame that the region's transform is defined with respect to. For example,
                                                                                                                                    "waypoint" for the waypoint's reference frame, or "odom" for the odometry frame at the time
                                                                                                                                    of waypoint recording. | +| base_frame_tform_region | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Transform of the region in the base frame. | + + + + + + ### Waypoint @@ -12326,6 +12640,8 @@ Annotations understood by BostonDynamics systems. | client_metadata | [ClientMetadata](#bosdyn-api-graph_nav-ClientMetadata) | | Information about the state of the client when this waypoint was created. | | loop_closure_settings | [Waypoint.Annotations.LoopClosureSettings](#bosdyn-api-graph_nav-Waypoint-Annotations-LoopClosureSettings) | | This waypoint may have specific settings to help with loop closure. This
                                                                                                                                    Is useful for example when trying to ensure that a loop closure occurs at
                                                                                                                                    a particular intersection or near a dock. | | gps_settings | [Waypoint.Annotations.GPSSettings](#bosdyn-api-graph_nav-Waypoint-Annotations-GPSSettings) | | Optional GPS navigation settings for this waypoint. | +| regions | [RegionWithFrame](#bosdyn-api-graph_nav-RegionWithFrame) | repeated | Regions may be defined around the waypoint which affect how scan matching or other
                                                                                                                                    parameters work. | +| lost_detector_strictness | [LostDetectorStrictness](#bosdyn-api-graph_nav-LostDetectorStrictness) | | Strictness of the lost detector to use while traversing this waypoint. If unset, the
                                                                                                                                    default strictness will be used. | @@ -12335,15 +12651,15 @@ Annotations understood by BostonDynamics systems. ### Waypoint.Annotations.GPSSettings -Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) frame, which -can aid in localization. +Waypoints can optionally define where they are in an Earth-Centered-Earth-Fixed (ECEF) +frame, which can aid in localization. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| state | [AnnotationState](#bosdyn-api-graph_nav-AnnotationState) | | If the annotation state is set, the GPS settings will be applied. Otherwise, they will be ignored.
                                                                                                                                    If ignored, GPS will only be used at this waypoint if data from a GPS exists in the waypoint snapshot, and the
                                                                                                                                    robot has a GPS payload installed and running. Set the annotation state to override this behavior. | +| state | [AnnotationState](#bosdyn-api-graph_nav-AnnotationState) | | If the annotation state is set, the GPS settings will be applied. Otherwise, they
                                                                                                                                    will be ignored. If ignored, GPS will only be used at this waypoint if data from a
                                                                                                                                    GPS exists in the waypoint snapshot, and the robot has a GPS payload installed and
                                                                                                                                    running. Set the annotation state to override this behavior. | | ecef_tform_waypoint | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | This defines the pose of the waypoint in the Earth-Centered-Earth-Fixed (ECEF) frame. | -| disable_gps_localization | [bool](#bool) | | If true, GPS localization will be disabled at this waypoint. If false, the robot will use GPS when available
                                                                                                                                    to localize to this waypoint. | +| disable_gps_localization | [bool](#bool) | | If true, GPS localization will be disabled at this waypoint. If false, the robot will
                                                                                                                                    use GPS when available to localize to this waypoint. | @@ -12545,6 +12861,27 @@ Path following mode + + +### Region.DataFilter +Defines how scan match data is filtered near this waypoint. Data filters are logical set +operators expressed on sets of data near the waypoint. Notes on interactions: If there are +multiple regions marked as INCLUDE_ONLY, data that falls within any of these regions will be +used, that is the operation of many DATA_FILTER_INCLUDE_ONLY regions is a logical set union. +Conversely, DATA_FILTER_IGNORE operators override DATA_FILTER_INCLUDE_ONLY. +For example, if there are 3 regions, A, B and C; and region A is marked as INCLUDE_ONLY, B is +marked as INCLUDE_ONLY, and C is marked as IGNORE, the data that will be used for scan +matching is: (A _u_ B) ~ C (that is, union(A, B) excluding C). + +| Name | Number | Description | +| ---- | ------ | ----------- | +| DATA_FILTER_UNKNOWN | 0 | Defaults to DATA_FILTER_NONE. | +| DATA_FILTER_NONE | 1 | No special considerations for scan matching in this region. | +| DATA_FILTER_IGNORE | 2 | No scan match data falling within this region will be used. | +| DATA_FILTER_INCLUDE_ONLY | 3 | Only data from within this region will be used. | + + + ### Waypoint.WaypointSource @@ -12576,7 +12913,8 @@ Path following mode ### AnchorHintUncertainty -Controls how certain the user is of an anchor's pose. If left empty, a reasonable default will be chosen. +Controls how certain the user is of an anchor's pose. If left empty, a reasonable default will be +chosen. | Field | Type | Label | Description | @@ -12592,8 +12930,8 @@ Controls how certain the user is of an anchor's pose. If left empty, a reasonabl ### AnchoringHint -The user may assign a number of world objects and waypoints a guess at where they are in the seed frame. -These hints will be respected by the ProcessAnchoringRequest. +The user may assign a number of world objects and waypoints a guess at where they are in the seed +frame. These hints will be respected by the ProcessAnchoringRequest. | Field | Type | Label | Description | @@ -12631,9 +12969,10 @@ is packaged with. ### ProcessAnchoringRequest -Causes the server to optimize an existing anchoring, or generate a new anchoring for the map using the given parameters. -In general, if parameters are not provided, reasonable defaults will be used. -The new anchoring will be streamed back to the client, or modified on the server if desired. +Causes the server to optimize an existing anchoring, or generate a new anchoring for the map +using the given parameters. In general, if parameters are not provided, reasonable defaults will +be used. The new anchoring will be streamed back to the client, or modified on the server if +desired. | Field | Type | Label | Description | @@ -12643,7 +12982,7 @@ The new anchoring will be streamed back to the client, or modified on the server | initial_hint | [AnchoringHint](#bosdyn-api-graph_nav-AnchoringHint) | | Initial guess at some number of waypoints and world objects and their anchorings. | | modify_anchoring_on_server | [bool](#bool) | | If true, the map currently uploaded to the server will have its anchoring modified.
                                                                                                                                    Otherwise, the user is expected to re-upload the anchoring. | | stream_intermediate_results | [bool](#bool) | | If true, the anchoring will be streamed back to the user after every iteration.
                                                                                                                                    This is useful for debug visualization. | -| apply_gps_result_to_waypoints_on_server | [bool](#bool) | | If true, the GPSSettings inside waypoint annotations will be modified based on the optimization.
                                                                                                                                    Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint applied form this
                                                                                                                                    optimization. To get these results, call the DownloadGraph RPC. Alternatively, the ecef_tform_waypoint
                                                                                                                                    can be found using: response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id].
                                                                                                                                    Note that after this operation completes successfully, all waypoints in the graph can be used to navigate
                                                                                                                                    using GPS, even if they didn't have GPS data in their waypoint snapshots. | +| apply_gps_result_to_waypoints_on_server | [bool](#bool) | | If true, the GPSSettings inside waypoint annotations will be modified based on the
                                                                                                                                    optimization. Every waypoint will have waypoint.gps_settings set, with ecef_tform_waypoint
                                                                                                                                    applied form this optimization. To get these results, call the DownloadGraph RPC.
                                                                                                                                    Alternatively, the ecef_tform_waypoint can be found using:
                                                                                                                                    response.gps_result.ecef_tform_seed * seed_tform_waypoint[waypoint_id]. Note that after this
                                                                                                                                    operation completes successfully, all waypoints in the graph can be used to navigate using
                                                                                                                                    GPS, even if they didn't have GPS data in their waypoint snapshots. | @@ -12653,7 +12992,7 @@ The new anchoring will be streamed back to the client, or modified on the server ### ProcessAnchoringRequest.Params -Parameters for procesing an anchoring. +Parameters for processing an anchoring. | Field | Type | Label | Description | @@ -12672,7 +13011,7 @@ Parameters for procesing an anchoring. ### ProcessAnchoringRequest.Params.MeasurementParams -Parameters which affect the measurements the optimzier uses to process the anchoring. +Parameters which affect the measurements the optimizer uses to process the anchoring. | Field | Type | Label | Description | @@ -12708,9 +13047,9 @@ Parameters affecting the underlying optimizer. ### ProcessAnchoringRequest.Params.Weights -Relative weights to use for each of the optimizer's terms. These can be any positive value. -If set to zero, a reasonable default will be used. In general, the higher the weight, the more -the optimizer will care about that particular measurement. +Relative weights to use for each of the optimizer's terms. These can be any positive +value. If set to zero, a reasonable default will be used. In general, the higher the +weight, the more the optimizer will care about that particular measurement. | Field | Type | Label | Description | @@ -12731,8 +13070,8 @@ the optimizer will care about that particular measurement. ### ProcessAnchoringResponse -Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is complete. -New anchorings will be streamed as they become available. +Streamed response from the ProcessAnchoringRequest. These will be streamed until optimization is +complete. New anchorings will be streamed as they become available. | Field | Type | Label | Description | @@ -12741,7 +13080,7 @@ New anchorings will be streamed as they become available. | status | [ProcessAnchoringResponse.Status](#bosdyn-api-graph_nav-ProcessAnchoringResponse-Status) | | | | waypoint_results | [Anchor](#bosdyn-api-graph_nav-Anchor) | repeated | Contains new anchorings for waypoint(s) processed by the server.
                                                                                                                                    These will be streamed back to the user as they become available. | | world_object_results | [AnchoredWorldObject](#bosdyn-api-graph_nav-AnchoredWorldObject) | repeated | Contains new anchorings for object(s) (e.g april tags) processed by the server.
                                                                                                                                    These will be streamed back to the user as they become available | -| anchoring_on_server_was_modified | [bool](#bool) | | If modify_anchoring_on_server was set to true in the request, then the anchoring currently on the server
                                                                                                                                    was modified using map processing. If this is set to false, then either an error occurred during
                                                                                                                                    processing, or modify_anchoring_on_server was set to false in the request.
                                                                                                                                    When anchoring_on_server_was_modified is set to false, the client is expected to upload the results
                                                                                                                                    back to the server to commit the changes. | +| anchoring_on_server_was_modified | [bool](#bool) | | If modify_anchoring_on_server was set to true in the request, then the anchoring currently on
                                                                                                                                    the server was modified using map processing. If this is set to false, then either an error
                                                                                                                                    occurred during processing, or modify_anchoring_on_server was set to false in the request.
                                                                                                                                    When anchoring_on_server_was_modified is set to false, the client is expected to upload the
                                                                                                                                    results back to the server to commit the changes. | | iteration | [int32](#int32) | | The current optimizer iteration that produced these data. | | cost | [double](#double) | | The current nonlinear optimization cost. | | final_iteration | [bool](#bool) | | If true, this is the result of the final iteration of optimization.
                                                                                                                                    This will always be true when stream_intermediate_results in the request is false. | @@ -12750,8 +13089,8 @@ New anchorings will be streamed as they become available. | missing_snapshot_ids | [string](#string) | repeated | When there are missing waypoint snapshots, these are the IDs of the missing snapshots.
                                                                                                                                    Upload them to continue. | | missing_waypoint_ids | [string](#string) | repeated | When there are missing waypoints, these are the IDs of the missing waypoints. Upload them
                                                                                                                                    to continue. | | invalid_hints | [string](#string) | repeated | Unorganized list of waypoints and object IDs which were invalid (missing from the map). | -| inconsistent_edges | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | List of edges that are inconsistent with the optimized result. This can happen when incorrect
                                                                                                                                    loop closures have been made before optimization, when inconsistent anchoring hints were passed in,
                                                                                                                                    or because the optmizer ended up in a local minimum. | -| gps_result | [ProcessAnchoringResponse.GPSResult](#bosdyn-api-graph_nav-ProcessAnchoringResponse-GPSResult) | | If GPS embedding optimzation was enabled, this is the result of that process. | +| inconsistent_edges | [Edge.Id](#bosdyn-api-graph_nav-Edge-Id) | repeated | List of edges that are inconsistent with the optimized result. This can happen when incorrect
                                                                                                                                    loop closures have been made before optimization, when inconsistent anchoring hints were
                                                                                                                                    passed in, or because the optimizer ended up in a local minimum. | +| gps_result | [ProcessAnchoringResponse.GPSResult](#bosdyn-api-graph_nav-ProcessAnchoringResponse-GPSResult) | | If GPS embedding optimization was enabled, this is the result of that process. | @@ -12767,7 +13106,7 @@ New anchorings will be streamed as they become available. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | status | [ProcessAnchoringResponse.GPSResult.GPSStatus](#bosdyn-api-graph_nav-ProcessAnchoringResponse-GPSResult-GPSStatus) | | Overall status of the GPS embedding optimization. | -| ecef_tform_seed | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF) frame.
                                                                                                                                    This can be used to estimate the pose of every waypoint in the ECEF frame via:
                                                                                                                                    ecef_tform_waypoint = ecef_tform_seed * anchoring.waypoints[waypoint_id].seed_tform_waypoint | +| ecef_tform_seed | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Pose of the "seed" frame of this optimization in the Earth-Centered-Earth-Fixed (ECEF)
                                                                                                                                    frame. This can be used to estimate the pose of every waypoint in the ECEF frame via:
                                                                                                                                    ecef_tform_waypoint = ecef_tform_seed *
                                                                                                                                    anchoring.waypoints[waypoint_id].seed_tform_waypoint | | num_measurements_used | [int32](#int32) | | This is the number of GPS measurements actually used to compute the GPS embedding. | @@ -12817,6 +13156,21 @@ the presence of nearby obstacles. + + +### ProcessTopologyRequest.FeatureMatchingParams +Parameters to control point cloud sparse feature matching. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| do_feature_matching | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | If true, feature matching will be performed. If both ICP and Feature matching are used,
                                                                                                                                    feature matching
                                                                                                                                    will be performed first for a coarse alignment, followed by ICP for a local refinement. | + + + + + + ### ProcessTopologyRequest.FiducialLoopClosureParams @@ -12844,7 +13198,8 @@ can be merged this way. ### ProcessTopologyRequest.ICPParams Parameters for how to refine loop closure edges using iterative -closest point matching. +closest point matching. If both ICP and Feature matching are used, feature matching +will be performed first for a coarse alignment, followed by ICP for a local refinement. | Field | Type | Label | Description | @@ -12893,7 +13248,8 @@ will be replaced by reasonable defaults. | do_fiducial_loop_closure | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | True by default -- generate loop closure candidates using fiducials. | | fiducial_loop_closure_params | [ProcessTopologyRequest.FiducialLoopClosureParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-FiducialLoopClosureParams) | | Parameters for generating loop closure candidates using fiducials. | | collision_check_params | [ProcessTopologyRequest.CollisionCheckingParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-CollisionCheckingParams) | | Parameters which control rejecting loop closure candidates which
                                                                                                                                    collide with obstacles. | -| timeout_seconds | [double](#double) | | Causes the processing to time out after this many seconds. If not set, a default of 45 seconds
                                                                                                                                    will be used. If this timeout occurs before the overall RPC timeout, a partial result will be
                                                                                                                                    returned with ProcessTopologyResponse.timed_out set to true. Processing can be continued by
                                                                                                                                    calling ProcessTopology again. | +| timeout_seconds | [double](#double) | | Causes the processing to time out after this many seconds. If not set, a default of 45
                                                                                                                                    seconds will be used. If this timeout occurs before the overall RPC timeout, a partial
                                                                                                                                    result will be returned with ProcessTopologyResponse.timed_out set to true. Processing
                                                                                                                                    can be continued by calling ProcessTopology again. | +| feature_matching_params | [ProcessTopologyRequest.FeatureMatchingParams](#bosdyn-api-graph_nav-ProcessTopologyRequest-FeatureMatchingParams) | | Controls whether and how the service performs sparse feature matching. | @@ -12912,10 +13268,10 @@ waypoints or edges created by this process. | header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Standard message header. | | status | [ProcessTopologyResponse.Status](#bosdyn-api-graph_nav-ProcessTopologyResponse-Status) | | Result of the processing. | | new_subgraph | [Graph](#bosdyn-api-graph_nav-Graph) | | This graph contains the new edge(s) created by map processing. Note that these edges will be
                                                                                                                                    annotated with their creation method. Note that several subgraphs may be returned via
                                                                                                                                    streaming as the map is processed. | -| map_on_server_was_modified | [bool](#bool) | | If modify_map_on_server was set to true in the request, then the map currently on the server
                                                                                                                                    was modified using map processing. If this is set to false, then either an error occurred during
                                                                                                                                    processing, or modify_map_on_server was set to false in the request.
                                                                                                                                    When map_on_server_was_modified is set to false, the client is expected to upload the results
                                                                                                                                    back to the server to commit the changes. | +| map_on_server_was_modified | [bool](#bool) | | If modify_map_on_server was set to true in the request, then the map currently on the server
                                                                                                                                    was modified using map processing. If this is set to false, then either an error occurred
                                                                                                                                    during processing, or modify_map_on_server was set to false in the request. When
                                                                                                                                    map_on_server_was_modified is set to false, the client is expected to upload the results back
                                                                                                                                    to the server to commit the changes. | | missing_snapshot_ids | [string](#string) | repeated | When there are missing waypoint snapshots, these are the IDs of the missing snapshots.
                                                                                                                                    Upload them to continue. | | missing_waypoint_ids | [string](#string) | repeated | When there are missing waypoints, these are the IDs of the missing waypoints. Upload them
                                                                                                                                    to continue. | -| timed_out | [bool](#bool) | | If true, the processing timed out. Note that this is not considered an error. Run topology processing again
                                                                                                                                    to continue adding edges. | +| timed_out | [bool](#bool) | | If true, the processing timed out. Note that this is not considered an error. Run topology
                                                                                                                                    processing again to continue adding edges. | @@ -12927,11 +13283,11 @@ waypoints or edges created by this process. ### WaypointAnchorHint Waypoints may be anchored to a particular seed frame. The user may request that a waypoint be anchored in a particular place with some Gaussian uncertainty. -Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -the orientation of the waypoint is correct with respect to gravity. By convention, waypoints' orientation -is defined as: Z up, X forward, Y left. So, if the robot is flat on the ground, the waypoint's z axis should -align with the seed frame's z axis. +Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +default, the orientation of the seed frame assumes gravity is pointing in the negative z +direction. Take care to ensure that the orientation of the waypoint is correct with respect to +gravity. By convention, waypoints' orientation is defined as: Z up, X forward, Y left. So, if the +robot is flat on the ground, the waypoint's z axis should align with the seed frame's z axis. z z ^ ^ | | @@ -12945,7 +13301,7 @@ Waypoint Seed | ----- | ---- | ----- | ----------- | | waypoint_anchor | [Anchor](#bosdyn-api-graph_nav-Anchor) | | This is to be interpreted as the mean of a Gaussian distribution, representing
                                                                                                                                    the pose of the waypoint in the seed frame. | | seed_tform_waypoint_uncertainty | [AnchorHintUncertainty](#bosdyn-api-graph_nav-AnchorHintUncertainty) | | This is the uncertainty of the anchor's pose in the seed frame.
                                                                                                                                    If left empty, a reasonable default uncertainty will be generated. | -| seed_tform_waypoint_constraint | [PoseBounds](#bosdyn-api-graph_nav-PoseBounds) | | Normally, the optimizer will move the anchorings of waypoints based on context, to minimize the
                                                                                                                                    overall cost of the optimization problem. By providing a constraint on pose, the user can ensure
                                                                                                                                    that the anchors stay within a certain region in the seed frame.
                                                                                                                                    Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. | +| seed_tform_waypoint_constraint | [PoseBounds](#bosdyn-api-graph_nav-PoseBounds) | | Normally, the optimizer will move the anchorings of waypoints based on context, to minimize
                                                                                                                                    the overall cost of the optimization problem. By providing a constraint on pose, the user can
                                                                                                                                    ensure that the anchors stay within a certain region in the seed frame. Leaving this empty
                                                                                                                                    will allow the optimizer to move the anchoring from the hint as far as it likes. | @@ -12955,14 +13311,14 @@ Waypoint Seed ### WorldObjectAnchorHint -World objects (such as fiducials) may be anchored to a particular seed frame. The user may request that an object -be anchored in a particular place with some Gaussian uncertainty. -Note on gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By default, the -orientation of the seed frame assumes gravity is pointing in the negative z direction. Take care to ensure that -the orientation of the world object is correct with respect to gravity. By convention, fiducials' orientation -is defined as: Z out of the page, X up and Y left (when looking at the fiducial). So, if a fiducial is mounted -perfectly flat against a wall, its orientation w.r.t the seed frame would have the top of the fiducial facing -positive Z. +World objects (such as fiducials) may be anchored to a particular seed frame. The user may +request that an object be anchored in a particular place with some Gaussian uncertainty. Note on +gravity alignment: optimization is sensitive to bad alignment with respect to gravity. By +default, the orientation of the seed frame assumes gravity is pointing in the negative z +direction. Take care to ensure that the orientation of the world object is correct with respect +to gravity. By convention, fiducials' orientation is defined as: Z out of the page, X up and Y +left (when looking at the fiducial). So, if a fiducial is mounted perfectly flat against a wall, +its orientation w.r.t the seed frame would have the top of the fiducial facing positive Z. +-----------+ z | ^x | ^ | | | | @@ -12978,7 +13334,7 @@ positive Z. | ----- | ---- | ----- | ----------- | | object_anchor | [AnchoredWorldObject](#bosdyn-api-graph_nav-AnchoredWorldObject) | | This is to be interpreted as the mean of a Gaussian distribution, representing
                                                                                                                                    the pose of the object in the seed frame. | | seed_tform_object_uncertainty | [AnchorHintUncertainty](#bosdyn-api-graph_nav-AnchorHintUncertainty) | | This is the uncertainty of the anchor's pose in the seed frame.
                                                                                                                                    If left empty, a reasonable default uncertainty will be generated. | -| seed_tform_object_constraint | [PoseBounds](#bosdyn-api-graph_nav-PoseBounds) | | Normally, the optimizer will move the anchorings of object based on context, to minimize the
                                                                                                                                    overall cost of the optimization problem. By providing a constraint on pose, the user can ensure
                                                                                                                                    that the anchors stay within a certain region in the seed frame.
                                                                                                                                    Leaving this empty will allow the optimizer to move the anchoring from the hint as far as it likes. | +| seed_tform_object_constraint | [PoseBounds](#bosdyn-api-graph_nav-PoseBounds) | | Normally, the optimizer will move the anchorings of object based on context, to minimize the
                                                                                                                                    overall cost of the optimization problem. By providing a constraint on pose, the user can
                                                                                                                                    ensure that the anchors stay within a certain region in the seed frame. Leaving this empty
                                                                                                                                    will allow the optimizer to move the anchoring from the hint as far as it likes. | @@ -13010,15 +13366,15 @@ Status of the GPS embedding optimization. | STATUS_UNKNOWN | 0 | Programming error. | | STATUS_OK | 1 | Success. | | STATUS_MISSING_WAYPOINT_SNAPSHOTS | 2 | Not all of the waypoint snapshots exist on the server. Upload them to continue. | -| STATUS_INVALID_GRAPH | 3 | The graph is invalid topologically, for example containing missing waypoints referenced by edges. | -| STATUS_OPTIMIZATION_FAILURE | 4 | The optimization failed due to local minima or an ill-conditioned problem definition. | -| STATUS_INVALID_PARAMS | 5 | The parameters passed to the optimizer do not make sense (e.g negative weights). | +| STATUS_INVALID_GRAPH | 3 | The graph is invalid topologically, for example containing | +| STATUS_OPTIMIZATION_FAILURE | 4 | missing waypoints referenced by edges.

                                                                                                                                    The optimization failed due to local minima or an | +| STATUS_INVALID_PARAMS | 5 | ill-conditioned problem definition.

                                                                                                                                    The parameters passed to the optimizer do not make sense (e.g negative weights). | | STATUS_CONSTRAINT_VIOLATION | 6 | One or more anchors were moved outside of the desired constraints. | | STATUS_MAX_ITERATIONS | 7 | The optimizer reached the maximum number of iterations before converging. | | STATUS_MAX_TIME | 8 | The optimizer timed out before converging. | -| STATUS_INVALID_HINTS | 9 | One or more of the hints passed in to the optimizer are invalid (do not correspond to real waypoints or objects). | -| STATUS_MAP_MODIFIED_DURING_PROCESSING | 10 | Tried to write the anchoring after processing, but another client may have modified the map. Try again. | -| STATUS_INVALID_GRAVITY_ALIGNMENT | 11 | An anchor hint (waypoint or fiducial) had an invalid orientation with respect to gravity. | +| STATUS_INVALID_HINTS | 9 | One or more of the hints passed in to the optimizer are | +| STATUS_MAP_MODIFIED_DURING_PROCESSING | 10 | invalid (do not correspond to real waypoints or objects).

                                                                                                                                    Tried to write the anchoring after processing, but another client may have | +| STATUS_INVALID_GRAVITY_ALIGNMENT | 11 | modified the map. Try again.

                                                                                                                                    An anchor hint (waypoint or fiducial) had an | @@ -13032,8 +13388,8 @@ Status of the GPS embedding optimization. | STATUS_UNKNOWN | 0 | Programming error. | | STATUS_OK | 1 | Success. | | STATUS_MISSING_WAYPOINT_SNAPSHOTS | 2 | Not all of the waypoint snapshots exist on the server. Upload them to continue. | -| STATUS_INVALID_GRAPH | 3 | The graph is invalid topologically, for example containing missing waypoints referenced by edges. | -| STATUS_MAP_MODIFIED_DURING_PROCESSING | 4 | Tried to write the anchoring after processing, but another client may have modified the map. Try again | +| STATUS_INVALID_GRAPH | 3 | The graph is invalid topologically, for example containing | +| STATUS_MAP_MODIFIED_DURING_PROCESSING | 4 | missing waypoints referenced by edges.

                                                                                                                                    Tried to write the anchoring after processing, but another client may have | @@ -13264,7 +13620,7 @@ The GetRecordStatus request message asks for the current state of the recording ### GetRecordStatusResponse The GetRecordStatus response message returns whether the service is currently recording and what -the persistent recording environment is at the time the request was recieved. +the persistent recording environment is at the time the request was received. | Field | Type | Label | Description | @@ -13349,7 +13705,7 @@ specified recording_environment. | lease | [bosdyn.api.Lease](#bosdyn-api-Lease) | | The recording service is protected by a lease. The client must have a
                                                                                                                                    lease to the recording service to modify its internal state. | | recording_environment | [RecordingEnvironment](#bosdyn-api-graph_nav-RecordingEnvironment) | | This will be merged into a copy of the existing persistent recording
                                                                                                                                    environment and used as the environment for the created waypoint
                                                                                                                                    and the edge from the previous waypoint to the new one.
                                                                                                                                    It will not affect the persistent environment. | | require_fiducials | [int32](#int32) | repeated | If filled out, asks that the record service verify that the given fiducial IDs
                                                                                                                                    are presently visible before starting to record. This is useful for verifying
                                                                                                                                    that the robot is where the user thinks it is in an area with known fiducials. | -| session_start_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | If provided, this timestamp will be used in every waypoint snapshot as the
                                                                                                                                    "started_recording_on" timestamp. Otherwise, a new timestmap will be generated
                                                                                                                                    after "StartRecording" is called. This is to allow association between waypoint
                                                                                                                                    snapshots based on recording session time. | +| session_start_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | If provided, this timestamp will be used in every waypoint snapshot as the
                                                                                                                                    "started_recording_on" timestamp. Otherwise, a new timestamp will be generated
                                                                                                                                    after "StartRecording" is called. This is to allow association between waypoint
                                                                                                                                    snapshots based on recording session time. | @@ -13359,7 +13715,7 @@ specified recording_environment. ### StartRecordingResponse -The StartRecording response messge returns the first created waypoint, which is made at the +The StartRecording response message returns the first created waypoint, which is made at the location the robot was standing when the request was made, in addition to any status information. @@ -13553,7 +13909,7 @@ When recording a map using the recording service, a common pattern is: * While recording, call GetMapStatus to determine what waypoints have been created. * Optionally call CreateWaypoint to create waypoints in specific locations. * Call StopRecording to pause the recording service and create branches. -* While recording (or after completing recording), call DownloadWaypoint/Edge Snapshot rpc's +* While recording (or after completing recording), call DownloadWaypoint/Edge Snapshot rpcs from the GraphNavService to download the large sensor data with the map. | Method Name | Request Type | Response Type | Description | @@ -13561,9 +13917,215 @@ from the GraphNavService to download the large sensor data with the map. | StartRecording | [StartRecordingRequest](#bosdyn-api-graph_nav-StartRecordingRequest) | [StartRecordingResponse](#bosdyn-api-graph_nav-StartRecordingResponse) | Start recording the map from the current localization.
                                                                                                                                    Creates a waypoint if you are starting to record. Otherwise, waits until you are
                                                                                                                                    sufficiently far away from the previous waypoint. | | StopRecording | [StopRecordingRequest](#bosdyn-api-graph_nav-StopRecordingRequest) | [StopRecordingResponse](#bosdyn-api-graph_nav-StopRecordingResponse) | Stop recording the map from the current localization. | | CreateWaypoint | [CreateWaypointRequest](#bosdyn-api-graph_nav-CreateWaypointRequest) | [CreateWaypointResponse](#bosdyn-api-graph_nav-CreateWaypointResponse) | Create a new waypoint at the current localization. | -| SetRecordingEnvironment | [SetRecordingEnvironmentRequest](#bosdyn-api-graph_nav-SetRecordingEnvironmentRequest) | [SetRecordingEnvironmentResponse](#bosdyn-api-graph_nav-SetRecordingEnvironmentResponse) | Set the environmnent and name prefix to use for the recording. | +| SetRecordingEnvironment | [SetRecordingEnvironmentRequest](#bosdyn-api-graph_nav-SetRecordingEnvironmentRequest) | [SetRecordingEnvironmentResponse](#bosdyn-api-graph_nav-SetRecordingEnvironmentResponse) | Set the environment and name prefix to use for the recording. | | CreateEdge | [CreateEdgeRequest](#bosdyn-api-graph_nav-CreateEdgeRequest) | [CreateEdgeResponse](#bosdyn-api-graph_nav-CreateEdgeResponse) | Create an arbitrary edge between two waypoints. | -| GetRecordStatus | [GetRecordStatusRequest](#bosdyn-api-graph_nav-GetRecordStatusRequest) | [GetRecordStatusResponse](#bosdyn-api-graph_nav-GetRecordStatusResponse) | Tells the client the internal state of the record service, and the structure of the map that has been recorded
                                                                                                                                    so far. | +| GetRecordStatus | [GetRecordStatusRequest](#bosdyn-api-graph_nav-GetRecordStatusRequest) | [GetRecordStatusResponse](#bosdyn-api-graph_nav-GetRecordStatusResponse) | Tells the client the internal state of the record service, and the structure of the map that
                                                                                                                                    has been recorded so far. | + + + + + + +

                                                                                                                                    Top

                                                                                                                                    + +## bosdyn/api/graph_nav/visual_features.proto + + + + + +### DirectionWithCovariance +A 3D direction with a covariance estimate. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| direction | [bosdyn.api.Vec3](#bosdyn-api-Vec3) | | The vector is to be interpreted as a 3D normalized direction in a frame. | +| covariance | [bosdyn.api.Matrixf](#bosdyn-api-Matrixf) | | 2x2 covariance matrix representing uncertainty in the direction (in a local tangent frame). | + + + + + + + + +### GenericDescriptor +Generic sparse visual descriptor with a byte blob and a descriptor name. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | Name of the descriptor which identifies how it is to be interpreted. | +| data | [bytes](#bytes) | | Binary blob representing the descriptor. | + + + + + + + + +### LandmarkObservationIndex +Indexes an observation of a landmark at a particular bundle, keyframe and keypoint. +Waypoint snapshots have bundles of keyframes, each keyframe has a number of extracted keypoints. +Observations are structured as: +bundle_0 ... +bundle_1 +.... keyframe_0 +.... keyframe_1 +........ keypoint_0 +........ keypoint_1 +........ ... +........ keypoint_J +.... ... +.... keyframe_K +... +bundle_N + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| bundle_id | [int32](#int32) | | The bundle from within the waypoint snapshot that this
                                                                                                                                    landmark observation came from. | +| keyframe_id | [int32](#int32) | | The keyframe from within the bundle that this observation came from. | +| keypoint_id | [int32](#int32) | | The keypoint within the keyframe that this observation came from. | +| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Time of the camera image which observed this landmark. | + + + + + + + + +### PositionWithCovariance +A 3D position with a covariance estimate. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| position | [bosdyn.api.Vec3](#bosdyn-api-Vec3) | | The vector is to be interpreted as a 3D position in a frame. | +| covariance | [bosdyn.api.Matrixf](#bosdyn-api-Matrixf) | | 3x3 covariance matrix representing uncertainty in the position. | + + + + + + + + +### VisualDescriptor +Represents a visual descriptor of a feature, usually a sparse visual feature. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| orb | [bytes](#bytes) | | Oriented Brief (ORB) sparse visual feature. | +| other | [GenericDescriptor](#bosdyn-api-graph_nav-GenericDescriptor) | | Place to put other descriptors not explicitly captured above. | + + + + + + + + +### VisualKeyFrame +Represents a set of visual features collected at a particular time from a particular camera +source. Associates an image geometry + pixel data with visual features extracted there. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| keypoints | [VisualKeypoint](#bosdyn-api-graph_nav-VisualKeypoint) | repeated | The visual features extracted at the camera image. | +| image_capture_and_source | [bosdyn.api.ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | | Contains the actual data in the image capture (may be compressed), and information
                                                                                                                                    about the source. Note that the raw data may be omitted if visual features are already
                                                                                                                                    extracted. | +| bundle_tform_image | [bosdyn.api.SE3Pose](#bosdyn-api-SE3Pose) | | Transformation from a bundle frame to the image. Depending on the context,
                                                                                                                                    the bundle frame may be the body, odometry, etc. | + + + + + + + + +### VisualKeyFrameBundle +Represents a bundle of visual KeyFrames taken around the same time. For example, if the robot has +many cameras, this represents all of the cameras captured at around the same time/location. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| key_frames | [VisualKeyFrame](#bosdyn-api-graph_nav-VisualKeyFrame) | repeated | A number of key frames, possibly from different sources. | +| bundle_frame_name | [string](#string) | | Reference frame that the keyframes' poses are expressed in. | +| frame_tree_snapshot | [bosdyn.api.FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | Frame tree snapshot mapping common poses at record time (odom, body, etc.) to each other and
                                                                                                                                    the bundle frame. | + + + + + + + + +### VisualKeypoint +Represents a 2d (pixel-based) detection of a feature in an image. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| visual_descriptor | [VisualDescriptor](#bosdyn-api-graph_nav-VisualDescriptor) | | The descriptor of the sparse feature, used to match it to other features. | +| position | [bosdyn.api.Vec2](#bosdyn-api-Vec2) | | Position (pixels) in the image. | +| size_pixels | [float](#float) | | Size of the feature in pixels. If the feature is circular, this is the radius of the circle.
                                                                                                                                    If the feature is square, this is the side length of the square. | +| orientation | [float](#float) | | Orientation of the feature in the image plane, radians. Counterclockwise. | +| depth_measurement | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | The depth (in meters) from the camera if it exists, or empty otherwise. | +| position_covariance | [bosdyn.api.Matrixf](#bosdyn-api-Matrixf) | | 2x2 Covariance matrix of the position measurement's uncertainty. | +| depth_variance | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Expected variance of the depth measurement, if it exists. | + + + + + + + + +### VisualLandmark +Represents a 3D landmark that has some visual descriptor attached to it. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [int64](#int64) | | Unique ID of the landmark. Ids of landmarks are unique only in a particular instance of a
                                                                                                                                    graph nav map. Ids of landmarks may change as maps update. | +| position_with_covariance | [PositionWithCovariance](#bosdyn-api-graph_nav-PositionWithCovariance) | | The landmark may either be a full 3D landmark (in which case it is a point), or an
                                                                                                                                    orientation-only landmark (in which case it is a normalized direction). The frame of the
                                                                                                                                    landmark is left ambiguous here; generally the container of the landmark will specify which
                                                                                                                                    frame it is in. Note that landmarks may have *both* position and direction. A 3D position
                                                                                                                                    with covariance. | +| direction_with_covariance | [DirectionWithCovariance](#bosdyn-api-graph_nav-DirectionWithCovariance) | | The vector is to be interpreted as a normalized 3D direction in the landmark frame. This
                                                                                                                                    represents the direction "into" the landmark from where it was first observed. | +| visual_descriptor | [VisualDescriptor](#bosdyn-api-graph_nav-VisualDescriptor) | | The canonical descriptor associated with this landmark. If a landmark looks different from
                                                                                                                                    different angles, then multiple landmarks are likely to be created for it. This will be set
                                                                                                                                    whenever the first observation is made of a landmark to create it. | +| landmark_observations | [LandmarkObservationIndex](#bosdyn-api-graph_nav-LandmarkObservationIndex) | repeated | Indices of the observations that support this landmark. | + + + + + + + + +### VisualLandmarks +A group of 3D landmarks. These landmarks may be associated with a single waypoint, or with groups +of waypoints. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| landmarks | [VisualLandmark](#bosdyn-api-graph_nav-VisualLandmark) | repeated | Unorganized 3d landmark cloud. | +| landmark_frame | [string](#string) | | Name of the reference frame that the landmarks are in. | +| frame_tree_snapshot | [bosdyn.api.FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | The frame tree must contain, at minimum, the landmark_frame and some other frame that the
                                                                                                                                    waypoint or current robot body knows about (for example, "odom" or "vision"). | + + + + + + + + + + @@ -13653,7 +14215,7 @@ parameters do not persist across reboots. | brightness | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image brightness level.
                                                                                                                                    Min 0, max 1 | | contrast | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image contrast level.
                                                                                                                                    Min 0, max 1 | | saturation | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image saturation level.
                                                                                                                                    Min 0, max 1 | -| gain | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image gain level.
                                                                                                                                    This paramater is only effective when manual exposure is used.
                                                                                                                                    Min 0, max 1 | +| gain | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image gain level.
                                                                                                                                    This parameter is only effective when manual exposure is used.
                                                                                                                                    Min 0, max 1 | | exposure_auto | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | Whether the camera should use auto exposure.
                                                                                                                                    Unset is equivalent to setting exposure_auto = true | | exposure_absolute | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Manually set the image exposure level. This value is only used if exposure_auto is false.
                                                                                                                                    Min 0, max 1 | | exposure_roi | [RoiParameters](#bosdyn-api-RoiParameters) | | Region of interest for exposure. Specify a spot exposure on a
                                                                                                                                    certain part of the image. Only used in auto-exposure mode. | @@ -13666,7 +14228,7 @@ parameters do not persist across reboots. | led_torch_brightness | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Brightness of the LED in torch mode. Min = 0, max = 1.
                                                                                                                                    Note: A brightness value of 0 is *not* off, but is the minimum brightness.
                                                                                                                                    To turn off the LED, set the led_mode to LED_MODE_OFF | | white_balance_temperature_auto | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | Whether the camera should use auto white balance
                                                                                                                                    Unset is equivalent to setting white_balance_temperature_auto = true | | gamma | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image gamma level.
                                                                                                                                    Min 0, max 1 | -| white_balance_temperature | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Manually set the white balance focus. This value is only used if white_balance_temperature_auto is false.
                                                                                                                                    Min 0, max 1
                                                                                                                                    0 corresponds to focus at infinity, 1 corresponds to a focal point close to the camera. | +| white_balance_temperature | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Manually set the white balance focus. This value is only used if
                                                                                                                                    white_balance_temperature_auto is false. Min 0, max 1 0 corresponds to focus at infinity, 1
                                                                                                                                    corresponds to a focal point close to the camera. | | sharpness | [google.protobuf.FloatValue](#google-protobuf-FloatValue) | | Set the image sharpness level.
                                                                                                                                    Min 0, max 1 | @@ -14086,8 +14648,8 @@ Rectangular color/greyscale images. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | acquisition_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The time at which the image data was acquired in the robot's time basis. | -| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each image's
                                                                                                                                    sensor in addition to transformations to the common frames ("vision", "body", "odom").
                                                                                                                                    All transforms within the snapshot are at the acquistion time of the image. | -| frame_name_image_sensor | [string](#string) | | The frame name for the image's sensor source. This will be included in the transform snapshot. | +| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each
                                                                                                                                    image's sensor in addition to transformations to the common frames ("vision", "body",
                                                                                                                                    "odom"). All transforms within the snapshot are at the acquisition time of the image. | +| frame_name_image_sensor | [string](#string) | | The frame name for the image's sensor source. This will be included in the transform
                                                                                                                                    snapshot. | | image | [Image](#bosdyn-api-Image) | | Image data. | | capture_params | [CaptureParameters](#bosdyn-api-CaptureParameters) | | Sensor parameters associated with this image capture. | @@ -14124,9 +14686,10 @@ The image request specifying the image source and data format desired. | ----- | ---- | ----- | ----------- | | image_source_name | [string](#string) | | The string name of the image source to get image data from. | | quality_percent | [double](#double) | | Image quality: a number from 0 (worst) to 100 (highest).
                                                                                                                                    Note that jpeg quality 100 is still lossy. | -| image_format | [Image.Format](#bosdyn-api-Image-Format) | | Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g. FORMAT_UNKNOWN), the image
                                                                                                                                    service will choose the best format for the data. | -| resize_ratio | [double](#double) | | Optional specification of the desired image dimensions.
                                                                                                                                    If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size 1280x720
                                                                                                                                    The range is clipped to [0.01, 1] while maintaining the original aspect ratio.
                                                                                                                                    For backwards compatibliity, a value of 0 means no resizing.
                                                                                                                                    Note: this field is not supported by the robot body cameras image service (`image`). | +| image_format | [Image.Format](#bosdyn-api-Image-Format) | | Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g.
                                                                                                                                    FORMAT_UNKNOWN), the image service will choose the best format for the data. | +| resize_ratio | [double](#double) | | Optional specification of the desired image dimensions.
                                                                                                                                    If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size
                                                                                                                                    1280x720 The range is clipped to [0.01, 1] while maintaining the original aspect ratio. For
                                                                                                                                    backwards compatibility, a value of 0 means no resizing. Note: this field is not supported by
                                                                                                                                    the robot body cameras image service (`image`). | | pixel_format | [Image.PixelFormat](#bosdyn-api-Image-PixelFormat) | | Specify the desired pixel format (e.g. GREYSCALE_U8, RGB_U8). If no format is specified
                                                                                                                                    (e.g. PIXEL_FORMAT_UNKNOWN), the image service will choose the best format for the data. | +| fallback_formats | [Image.PixelFormat](#bosdyn-api-Image-PixelFormat) | repeated | Specify a pixel format that will be used if the format specified in the pixel_format field is
                                                                                                                                    invalid. If multiple formats are specified the valid format with the lowest index will be
                                                                                                                                    preferred. | | custom_params | [DictParam](#bosdyn-api-DictParam) | | Parameters unique to the servicer that do not match any of the above fields.
                                                                                                                                    Whether or not these are valid may depend on the values of the above fields. | @@ -14142,8 +14705,8 @@ The image response for each request, that includes image data and image source i | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| shot | [ImageCapture](#bosdyn-api-ImageCapture) | | The image capture contains the image data and information about the state of the camera and robot
                                                                                                                                    at the time the image was collected. | -| source | [ImageSource](#bosdyn-api-ImageSource) | | The source describes general information about the camera source the image data was collected from. | +| shot | [ImageCapture](#bosdyn-api-ImageCapture) | | The image capture contains the image data and information about the state of the camera and
                                                                                                                                    robot at the time the image was collected. | +| source | [ImageSource](#bosdyn-api-ImageSource) | | The source describes general information about the camera source the image data was collected
                                                                                                                                    from. | | status | [ImageResponse.Status](#bosdyn-api-ImageResponse-Status) | | Return status of the request. | | custom_param_error | [CustomParamError](#bosdyn-api-CustomParamError) | | Filled out if status is STATUS_CUSTOM_PARAMS_ERROR. | @@ -14165,6 +14728,8 @@ Proto for a description of an image source on the robot. | rows | [int32](#int32) | | Number of rows in the image (in pixels). | | depth_scale | [double](#double) | | For depth images, the pixel value that represents a depth of one meter.
                                                                                                                                    Depth in meters can be computed by dividing the raw pixel value by this scale factor. | | pinhole | [ImageSource.PinholeModel](#bosdyn-api-ImageSource-PinholeModel) | | Rectilinear camera model. | +| pinhole_brown_conrady | [ImageSource.PinholeBrownConrady](#bosdyn-api-ImageSource-PinholeBrownConrady) | | The pinhole camera model with the 5 parameter brown Conrady distortion model. | +| kannala_brandt | [ImageSource.KannalaBrandtModel](#bosdyn-api-ImageSource-KannalaBrandtModel) | | The Kannala-Brandt camera model for modeling fisheye lenses. | | image_type | [ImageSource.ImageType](#bosdyn-api-ImageSource-ImageType) | | The kind of images returned by this image source. | | pixel_formats | [Image.PixelFormat](#bosdyn-api-Image-PixelFormat) | repeated | The pixel formats a specific image source supports. | | image_formats | [Image.Format](#bosdyn-api-Image-Format) | repeated | The image formats a specific image source supports. | @@ -14175,6 +14740,83 @@ Proto for a description of an image source on the robot. + + +### ImageSource.KannalaBrandtModel +The Kannala-Brandt camera model, also called the fisheye camera model in OpenCV +(https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html) and the equidistant +distortion model (https://github.com/ethz-asl/kalibr/wiki/supported-models), fits cameras +with fisheye lenses well. The projection and un-projection equations for this model can be +found at: https://arxiv.org/pdf/1807.08957.pdf. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| intrinsics | [ImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics](#bosdyn-api-ImageSource-KannalaBrandtModel-KannalaBrandtIntrinsics) | | The camera intrinsics are necessary for describing the KB4 camera matrix. | + + + + + + + + +### ImageSource.KannalaBrandtModel.KannalaBrandtIntrinsics + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| pinhole_intrinsics | [ImageSource.PinholeModel.CameraIntrinsics](#bosdyn-api-ImageSource-PinholeModel-CameraIntrinsics) | | Pinhole intrinsics of the camera. | +| k1 | [float](#float) | | The Kannala-Brandt distortion coefficients for the camera. | +| k2 | [float](#float) | | | +| k3 | [float](#float) | | | +| k4 | [float](#float) | | | + + + + + + + + +### ImageSource.PinholeBrownConrady +The 5 parameter Brown-Conrady or "radtan" model is used to correct radial and +tangential distortions. Original paper: +http://close-range.com/docs/Decentering_Distortion_of_Lenses_Brown_1966_may_444-462.pdf +We use the opencv convention for naming the distortion coefficients: k1, k2, p1, p2, k3. Here +k1, k2, and k3 are radial distortion terms. p1 and p2 are tangential terms. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| intrinsics | [ImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics](#bosdyn-api-ImageSource-PinholeBrownConrady-PinholeBrownConradyIntrinsics) | | The camera intrinsics are necessary for describing the KB4 camera matrix. | + + + + + + + + +### ImageSource.PinholeBrownConrady.PinholeBrownConradyIntrinsics + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| pinhole_intrinsics | [ImageSource.PinholeModel.CameraIntrinsics](#bosdyn-api-ImageSource-PinholeModel-CameraIntrinsics) | | Pinhole intrinsics of the camera. | +| k1 | [float](#float) | | The Brown-Conrady distortion coefficients for the camera. | +| k2 | [float](#float) | | | +| p1 | [float](#float) | | | +| p2 | [float](#float) | | | +| k3 | [float](#float) | | | + + + + + + ### ImageSource.PinholeModel @@ -14187,7 +14829,7 @@ Camera Matrix can be constructed by the camera intrinsics: | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| intrinsics | [ImageSource.PinholeModel.CameraIntrinsics](#bosdyn-api-ImageSource-PinholeModel-CameraIntrinsics) | | The camera intrinsics are necessary for descrbing the pinhole camera matrix. | +| intrinsics | [ImageSource.PinholeModel.CameraIntrinsics](#bosdyn-api-ImageSource-PinholeModel-CameraIntrinsics) | | The camera intrinsics are necessary for describing the pinhole camera matrix. | @@ -14286,7 +14928,7 @@ The ListImageSources response message which contains all known image sources for | STATUS_UNKNOWN_CAMERA | 2 | Image source name in request is unknown. Other fields are not filled out. | | STATUS_SOURCE_DATA_ERROR | 3 | Failed to fill out ImageSource. All the other fields are not filled out. | | STATUS_IMAGE_DATA_ERROR | 4 | There was a problem with the image data. Only the ImageSource is filled out. | -| STATUS_UNSUPPORTED_IMAGE_FORMAT_REQUESTED | 5 | The requested image format is unsupported for the image-source named. The image data will
                                                                                                                                    not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should choose the
                                                                                                                                    best format to provide the data in. | +| STATUS_UNSUPPORTED_IMAGE_FORMAT_REQUESTED | 5 | The requested image format is unsupported for the image-source named. The image data will
                                                                                                                                    not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should
                                                                                                                                    choose the best format to provide the data in. | | STATUS_UNSUPPORTED_PIXEL_FORMAT_REQUESTED | 6 | The requested pixel format is unsupported for the image-source named. The image data will
                                                                                                                                    not be filled out. Note, if an image request has "PIXEL_FORMAT_UNKNOWN", the service
                                                                                                                                    should choose the best format to provide the data in. | | STATUS_UNSUPPORTED_RESIZE_RATIO_REQUESTED | 7 | The requested ratio is out of bounds [0,1] or unsupported by the image service | | STATUS_CUSTOM_PARAMS_ERROR | 8 | One or more keys or values in custom_params are unsupported by the image service.
                                                                                                                                    See the custom_param_error for details. | @@ -14854,7 +15496,7 @@ services. | resource | [string](#string) | | The resource that the Lease is for. | | epoch | [string](#string) | | The epoch for the Lease. The sequences field are scoped to a particular epoch.
                                                                                                                                    One example of where this can be used is to generate a random epoch
                                                                                                                                    at LeaseService startup. | | sequence | [uint32](#uint32) | repeated | Logical vector clock indicating when the Lease was generated. | -| client_names | [string](#string) | repeated | The set of different clients which have sent/receieved the lease. | +| client_names | [string](#string) | repeated | The set of different clients which have sent/received the lease. | @@ -14880,7 +15522,7 @@ Details about who currently owns the Lease for a resource. ### LeaseResource -Describes all information about a sepcific lease: including the resource it covers, the +Describes all information about a specific lease: including the resource it covers, the active lease, and which application is the owner of a lease. @@ -15338,7 +15980,7 @@ The LicenseService allows clients to query the currently installed license on ro | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | GetLicenseInfo | [GetLicenseInfoRequest](#bosdyn-api-GetLicenseInfoRequest) | [GetLicenseInfoResponse](#bosdyn-api-GetLicenseInfoResponse) | Get information, such as the license number, dates of validity, and features for the license
                                                                                                                                    currently uploaded on the robot. | -| GetFeatureEnabled | [GetFeatureEnabledRequest](#bosdyn-api-GetFeatureEnabledRequest) | [GetFeatureEnabledResponse](#bosdyn-api-GetFeatureEnabledResponse) | Check if specific features (identified by string names) are enabled under the currently loaded
                                                                                                                                    license for this robot. | +| GetFeatureEnabled | [GetFeatureEnabledRequest](#bosdyn-api-GetFeatureEnabledRequest) | [GetFeatureEnabledResponse](#bosdyn-api-GetFeatureEnabledResponse) | Check if specific features (identified by string names) are enabled under the currently
                                                                                                                                    loaded license for this robot. | @@ -15369,7 +16011,8 @@ The GetLocalGridTypes request message asks to the local grid types. ### GetLocalGridTypesResponse -The GetLocalGridTypes response message returns to get all known string names for local grid types. +The GetLocalGridTypes response message returns to get all known string names for local grid +types. | Field | Type | Label | Description | @@ -15385,7 +16028,8 @@ The GetLocalGridTypes response message returns to get all known string names for ### GetLocalGridsRequest -The GetLocalGrid request message can request for multiple different types of local grids at one time. +The GetLocalGrid request message can request for multiple different types of local grids at one +time. | Field | Type | Label | Description | @@ -15401,8 +16045,9 @@ The GetLocalGrid request message can request for multiple different types of loc ### GetLocalGridsResponse -The GetLocalGrid response message replies with all of the local grid data for the requested types, and -a numerical count representing the amount of status errors that occurred when getting this data. +The GetLocalGrid response message replies with all of the local grid data for the requested +types, and a numerical count representing the amount of status errors that occurred when getting +this data. | Field | Type | Label | Description | @@ -15427,15 +16072,16 @@ or obstacle data. | ----- | ---- | ----- | ----------- | | local_grid_type_name | [string](#string) | | The human readable string name that is used to identify the type of local grid data. | | acquisition_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | The time at which the local grid data was computed and last valid at. | -| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each of
                                                                                                                                    the returned local grids in addition to transformations to the common frames ("vision", "body", "odom").
                                                                                                                                    All transforms within the snapshot are at the acquistion time of the local grid. | -| frame_name_local_grid_data | [string](#string) | | The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such that
                                                                                                                                    the map data is in the +x, +y quadrant.
                                                                                                                                    The cell data is packed in x-y order, so the cell at:
                                                                                                                                    data[xi + extent.num_cells_x * yj]
                                                                                                                                    has its center at position:
                                                                                                                                    {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}. | +| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each of
                                                                                                                                    the returned local grids in addition to transformations to the common frames ("vision",
                                                                                                                                    "body", "odom"). All transforms within the snapshot are at the acquisition time of the local
                                                                                                                                    grid. | +| frame_name_local_grid_data | [string](#string) | | The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such
                                                                                                                                    that the map data is in the +x, +y quadrant. The cell data is packed in x-y order, so the
                                                                                                                                    cell at:
                                                                                                                                    data[xi + extent.num_cells_x * yj]
                                                                                                                                    has its center at position:
                                                                                                                                    {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}. | | extent | [LocalGridExtent](#bosdyn-api-LocalGridExtent) | | Location, size and resolution of the local grid. | | cell_format | [LocalGrid.CellFormat](#bosdyn-api-LocalGrid-CellFormat) | | The data type of all individual cells in the local grid. | | encoding | [LocalGrid.Encoding](#bosdyn-api-LocalGrid-Encoding) | | The encoding for the 'data' field of the local grid message. | -| data | [bytes](#bytes) | | The encoded local grid representation.
                                                                                                                                    Cells are encoded according to the encoding enum, and are stored in in row-major order (x-major).
                                                                                                                                    This means that the data field has data entered row by row. The grid cell located at (i, j) will be
                                                                                                                                    at the (index = i * num_cells_x + j) within the data array. | +| data | [bytes](#bytes) | | The encoded local grid representation.
                                                                                                                                    Cells are encoded according to the encoding enum, and are stored in in row-major order
                                                                                                                                    (x-major). This means that the data field has data entered row by row. The grid cell located
                                                                                                                                    at (i, j) will be at the (index = i * num_cells_x + j) within the data array. | | rle_counts | [int32](#int32) | repeated | RLE pixel repetition counts: use data[i] repeated rle_counts[i] times when decoding the
                                                                                                                                    bytes data field. | | cell_value_scale | [double](#double) | | The scale for the cell value data; only valid if it is a non-zero number. | -| cell_value_offset | [double](#double) | | A fixed value offset that is applied to each value of the cell data.
                                                                                                                                    Actual values in local grid are: (({value from data} * cell_value_scale) + cell_value_offset). | +| cell_value_offset | [double](#double) | | A fixed value offset that is applied to each value of the cell data.
                                                                                                                                    Actual values in local grid are: (({value from data} * cell_value_scale) +
                                                                                                                                    cell_value_offset). | +| unknown_cells | [bytes](#bytes) | | Map of unknown cells.
                                                                                                                                    If unknown_cells[i] = 0, then data[i] is known. If unknown_cells[i] = 1, then data[i] is
                                                                                                                                    unknown. Each cell is encoded as a uint8_t. Cells are stored in row-major order (x-major).
                                                                                                                                    This means that the data field has data entered row by row. The grid cell located at (i, j)
                                                                                                                                    will be at the (index = i * num_cells_x + j) within the data array. | @@ -15453,7 +16099,7 @@ the size of each cell. | ----- | ---- | ----- | ----------- | | cell_size | [double](#double) | | Size of each side of the individual cells in the local grid (in meters).
                                                                                                                                    The area of a grid cell will be (cell_size x cell_size). | | num_cells_x | [int32](#int32) | | Number of cells along x extent of local grid (number of columns in local grid/ the local
                                                                                                                                    grid width). Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid
                                                                                                                                    cells in the local grid. | -| num_cells_y | [int32](#int32) | | Number of cells along y extent of local grid (number of rows in local grid).
                                                                                                                                    Note, that the (num_cells_x)x(num_cells_y) represents the totla number of grid
                                                                                                                                    cells in the local grid. | +| num_cells_y | [int32](#int32) | | Number of cells along y extent of local grid (number of rows in local grid).
                                                                                                                                    Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid
                                                                                                                                    cells in the local grid. | @@ -15961,7 +16607,7 @@ The LogStatusService provides clients the ability to | ----------- | ------------ | ------------- | ------------| | GetLogStatus | [GetLogStatusRequest](#bosdyn-api-log_status-GetLogStatusRequest) | [GetLogStatusResponse](#bosdyn-api-log_status-GetLogStatusResponse) | Retrieve log status by id. | | GetActiveLogStatuses | [GetActiveLogStatusesRequest](#bosdyn-api-log_status-GetActiveLogStatusesRequest) | [GetActiveLogStatusesResponse](#bosdyn-api-log_status-GetActiveLogStatusesResponse) | View statuses of active logs. | -| StartRetroLog | [StartRetroLogRequest](#bosdyn-api-log_status-StartRetroLogRequest) | [StartRetroLogResponse](#bosdyn-api-log_status-StartRetroLogResponse) | Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime, t_rpc],
                                                                                                                                    where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception,
                                                                                                                                    and t_buffer = time of first log on the buffer. | +| StartRetroLog | [StartRetroLogRequest](#bosdyn-api-log_status-StartRetroLogRequest) | [StartRetroLogResponse](#bosdyn-api-log_status-StartRetroLogResponse) | Given a duration T, StartRetroLog(T) triggers a log covering the timespan [logStartTime,
                                                                                                                                    t_rpc], where logStartTime = max(t_rpc - T, t_buffer), t_rpc = time of RPC reception, and
                                                                                                                                    t_buffer = time of first log on the buffer. | | StartExperimentLog | [StartExperimentLogRequest](#bosdyn-api-log_status-StartExperimentLogRequest) | [StartExperimentLogResponse](#bosdyn-api-log_status-StartExperimentLogResponse) | Given a duration T, StartExperimentLog(T) starts logging all data to
                                                                                                                                    disk with a keepalive/watchdog timer of T. The duration of the log will be [t_rpc, t_rpc + T]
                                                                                                                                    where t_rpc = time of RPC reception. The duration of this log can be extended by calling
                                                                                                                                    UpdateExperimentLog before the log's status reaches a terminal state.
                                                                                                                                    If any retro logs are running, they will be terminated by starting an experiment log.
                                                                                                                                    Only one experiment log can be run at a time. | | UpdateExperimentLog | [UpdateExperimentLogRequest](#bosdyn-api-log_status-UpdateExperimentLogRequest) | [UpdateExperimentLogResponse](#bosdyn-api-log_status-UpdateExperimentLogResponse) | UpdateExperimentLog(id, T) will update the keepalive/watchdog timer of
                                                                                                                                    the log with the provided id if the log is active. The updated duration
                                                                                                                                    of the log will be [t_rpc, t_rpc + T] where t_rpc = time of RPC reception. | | TerminateLog | [TerminateLogRequest](#bosdyn-api-log_status-TerminateLogRequest) | [TerminateLogResponse](#bosdyn-api-log_status-TerminateLogResponse) | Terminate Log before it is complete. | @@ -16215,7 +16861,7 @@ No data | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | pixel_xy | [Vec2](#bosdyn-api-Vec2) | | Pickup an object that is at a pixel location in an image. | -| transforms_snapshot_for_camera | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each
                                                                                                                                    image's sensor in addition to transformations to the common frames ("vision", "body",
                                                                                                                                    "odom"). All transforms within the snapshot are at the acquistion time of the image. | +| transforms_snapshot_for_camera | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations to each
                                                                                                                                    image's sensor in addition to transformations to the common frames ("vision", "body",
                                                                                                                                    "odom"). All transforms within the snapshot are at the acquisition time of the image. | | frame_name_image_sensor | [string](#string) | | The frame name for the image's sensor source. This must be included in the transform
                                                                                                                                    snapshot. | | camera_model | [ImageSource.PinholeModel](#bosdyn-api-ImageSource-PinholeModel) | | Camera model. | | grasp_params | [GraspParams](#bosdyn-api-GraspParams) | | Optional parameters for the grasp. | @@ -16537,7 +17183,7 @@ are meant to be cumulative. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | -| snapshots | [SignedProto](#bosdyn-api-metrics_logging-SignedProto) | repeated | Signed AbsoluteMetricsSnapshot messages corresponding to the request timestamps.
                                                                                                                                    The robot will exclude snapshots if:
                                                                                                                                    * They don't exist on the robot
                                                                                                                                    * If included, the snapshot would push the total response message size over the GRPC limit. | +| snapshots | [SignedProto](#bosdyn-api-metrics_logging-SignedProto) | repeated | Signed AbsoluteMetricsSnapshot messages corresponding to the request timestamps.
                                                                                                                                    The robot will exclude snapshots if:
                                                                                                                                    * They don't exist on the robot
                                                                                                                                    * If included, the snapshot would push the total response message size over the GRPC
                                                                                                                                    limit. | @@ -16665,14 +17311,14 @@ A custom signed format. Sequentially laid out: 512 bytes signature X bytes data. -header -> When this format changes, we'll use the header to delminate which +header -> When this format changes, we'll use the header to deliminate which format was used to generate this data. fingerprint -> The fingerprint of public key corresponding to the private key that was used to generate the signature. As keys rotate, this will allow the signature verifier to know what key to use to verify the signature. -signature -> singnature of the data field. +signature -> signature of the data field. data -> Contents specified by parent container. Usually contains a serialized protobuf. @@ -16714,7 +17360,7 @@ Answer one of the outstanding questions. | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | | question_id | [int64](#int64) | | Identifier of the question being answered. | | code | [int64](#int64) | | The answer_code from the Question corresponding to the user's choice. | -| custom_params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | The answers for the Question corresponding to custom_params specification from the Question. | +| custom_params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | The answers for the Question corresponding to custom_params specification from the
                                                                                                                                    Question. | @@ -16874,8 +17520,8 @@ The LoadMission request specifies a root node for the mission that should be use ### LoadMissionResponse -The LoadMission response returns the mission info generated by the service if successfully loaded, and -a status and other inforamtion if the request fails. +The LoadMission response returns the mission info generated by the service if successfully +loaded, and a status and other information if the request fails. | Field | Type | Label | Description | @@ -16928,7 +17574,8 @@ Provides children and metadata of a single node within the mission. ### PauseMissionRequest -The PauseMission request message will pause the mission that is currently executing, if there is one. +The PauseMission request message will pause the mission that is currently executing, if there is +one. | Field | Type | Label | Description | @@ -17008,6 +17655,7 @@ does not change the speed at which the robot poses the body. | disable_alternate_route_finding | [bool](#bool) | | Disable alternate-route-finding; overrides the per-edge setting in the map. | | path_following_mode | [bosdyn.api.graph_nav.Edge.Annotations.PathFollowingMode](#bosdyn-api-graph_nav-Edge-Annotations-PathFollowingMode) | | Specifies whether to use default or strict path following mode. | | ground_clutter_mode | [bosdyn.api.graph_nav.Edge.Annotations.GroundClutterAvoidanceMode](#bosdyn-api-graph_nav-Edge-Annotations-GroundClutterAvoidanceMode) | | Specify whether or not to enable ground clutter avoidance, and which type. | +| planner_mode | [bosdyn.api.graph_nav.TravelParams.PathPlannerMode](#bosdyn-api-graph_nav-TravelParams-PathPlannerMode) | | Specify the path planner mode. | @@ -17028,7 +17676,7 @@ A question posed by a Prompt node, or by the internal operation of another node. | options | [Prompt.Option](#bosdyn-api-mission-Prompt-Option) | repeated | Options to choose from.
                                                                                                                                    Uses the submessage from the "prompt" node message. | | custom_params | [bosdyn.api.DictParam.Spec](#bosdyn-api-DictParam-Spec) | | Custom parameter specification for the answer expected for this question. | | for_autonomous_processing | [bool](#bool) | | Set to true if this question was meant to be answered by some automated system, not a
                                                                                                                                    human. Clients should usually avoid generating a UI element to ask such a question. | -| severity | [bosdyn.api.AlertData.SeverityLevel](#bosdyn-api-AlertData-SeverityLevel) | | Severity for this question. See comment in Prompt message in nodes.proto for a better understanding
                                                                                                                                    of what levels mean. | +| severity | [bosdyn.api.AlertData.SeverityLevel](#bosdyn-api-AlertData-SeverityLevel) | | Severity for this question. See comment in Prompt message in nodes.proto for a better
                                                                                                                                    understanding of what levels mean. | @@ -17086,6 +17734,7 @@ State of the mission service. | error | [string](#string) | | Describes the unexpected error encountered by the mission service.
                                                                                                                                    Only filled out if STATUS_ERROR is set. | | tick_counter | [int64](#int64) | | The mission's tick counter when this state was generated.
                                                                                                                                    -1 indicates no mission has been started. | | mission_id | [int64](#int64) | | The mission's ID.
                                                                                                                                    -1 indicates no mission has been loaded. | +| active_mission_text | [MissionText](#bosdyn-api-mission-MissionText) | repeated | MissionText which is currently active. | @@ -17319,20 +17968,21 @@ Possible results of a stop request. ### MissionService -The MissionService can be used to specify high level autonomous behaviors for Spot using behavior trees. +The MissionService can be used to specify high level autonomous behaviors for Spot using behavior +trees. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | LoadMission | [LoadMissionRequest](#bosdyn-api-mission-LoadMissionRequest) | [LoadMissionResponse](#bosdyn-api-mission-LoadMissionResponse) | RPCs for loading missions to the robot. NOTE: LoadMission and LoadMissionAsChunks may fail
                                                                                                                                    for large missions because the request and response may exceed the maximum message size. Use
                                                                                                                                    LoadMissionAsChunks2 instead. | -| LoadMissionAsChunks | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | [LoadMissionResponse](#bosdyn-api-mission-LoadMissionResponse) | This RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead. Non-preferred
                                                                                                                                    method for loading large missions to the robot because only the request is a streaming RPC. The data
                                                                                                                                    chunks are deserialized into a LoadMissionRequest. NOTE: LoadMissionAsChunks may fail for large missions
                                                                                                                                    because the response may exceed the maximum message size. | +| LoadMissionAsChunks | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | [LoadMissionResponse](#bosdyn-api-mission-LoadMissionResponse) | This RPC may be deprecated in the future, please use LoadMissionAsChunks2 instead.
                                                                                                                                    Non-preferred method for loading large missions to the robot because only the request is a
                                                                                                                                    streaming RPC. The data chunks are deserialized into a LoadMissionRequest. NOTE:
                                                                                                                                    LoadMissionAsChunks may fail for large missions because the response may exceed the maximum
                                                                                                                                    message size. | | LoadMissionAsChunks2 | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | Preferred RPC for loading large missions to the robot because both the request and response
                                                                                                                                    are streaming RPCs, allowing you to break the message up into multiple streamed messages. The
                                                                                                                                    data chunks are deserialized into a LoadMissionRequest and LoadMissionResponse. | | PlayMission | [PlayMissionRequest](#bosdyn-api-mission-PlayMissionRequest) | [PlayMissionResponse](#bosdyn-api-mission-PlayMissionResponse) | Start executing a loaded mission.
                                                                                                                                    Will not restart a mission that has run to completion. Use RestartMission to do that. | | PauseMission | [PauseMissionRequest](#bosdyn-api-mission-PauseMissionRequest) | [PauseMissionResponse](#bosdyn-api-mission-PauseMissionResponse) | Pause mission execution. | | StopMission | [StopMissionRequest](#bosdyn-api-mission-StopMissionRequest) | [StopMissionResponse](#bosdyn-api-mission-StopMissionResponse) | Stop a running mission.
                                                                                                                                    Must use RestartMission, not PlayMission, to begin from the beginning. | | RestartMission | [RestartMissionRequest](#bosdyn-api-mission-RestartMissionRequest) | [RestartMissionResponse](#bosdyn-api-mission-RestartMissionResponse) | Start executing a loaded mission from the beginning.
                                                                                                                                    Does not need to be called after LoadMission. | | GetState | [GetStateRequest](#bosdyn-api-mission-GetStateRequest) | [GetStateResponse](#bosdyn-api-mission-GetStateResponse) | Get the state of the mission. | -| GetInfo | [GetInfoRequest](#bosdyn-api-mission-GetInfoRequest) | [GetInfoResponse](#bosdyn-api-mission-GetInfoResponse) | RPCs for getting static information regarding the mission. Used to interpret mission state.
                                                                                                                                    NOTE: GetInfo may fail for large missions because the response may exceed the maximum message size.
                                                                                                                                    Use GetInfoAsChunks instead. | -| GetInfoAsChunks | [GetInfoRequest](#bosdyn-api-mission-GetInfoRequest) | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | Preferred RPC for getting the status of large missions from the robot because the response is a streaming
                                                                                                                                    streaming RPC, allowing you to break the message up into multiple streamed messages. THe data chunks are
                                                                                                                                    deserialized into a GetInfoResponse. | +| GetInfo | [GetInfoRequest](#bosdyn-api-mission-GetInfoRequest) | [GetInfoResponse](#bosdyn-api-mission-GetInfoResponse) | RPCs for getting static information regarding the mission. Used to interpret mission state.
                                                                                                                                    NOTE: GetInfo may fail for large missions because the response may exceed the maximum message
                                                                                                                                    size. Use GetInfoAsChunks instead. | +| GetInfoAsChunks | [GetInfoRequest](#bosdyn-api-mission-GetInfoRequest) | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | Preferred RPC for getting the status of large missions from the robot because the response is
                                                                                                                                    a streaming streaming RPC, allowing you to break the message up into multiple streamed
                                                                                                                                    messages. THe data chunks are deserialized into a GetInfoResponse. | | GetMission | [GetMissionRequest](#bosdyn-api-mission-GetMissionRequest) | [GetMissionResponse](#bosdyn-api-mission-GetMissionResponse) | Download the mission as it was uploaded to the service. | | GetMissionAsChunks | [GetMissionRequest](#bosdyn-api-mission-GetMissionRequest) | [.bosdyn.api.DataChunk](#bosdyn-api-DataChunk) stream | Alternative method to download large missions that allows you to break
                                                                                                                                    the mission up into multiple streamed requests. Each data chunk message should be
                                                                                                                                    deserialized as a GetMissionResponse protobuf message. | | AnswerQuestion | [AnswerQuestionRequest](#bosdyn-api-mission-AnswerQuestionRequest) | [AnswerQuestionResponse](#bosdyn-api-mission-AnswerQuestionResponse) | Specify an answer to the question asked by the mission. | @@ -17378,8 +18028,9 @@ the current localization is. This can be useful to reinitialize the system at a | service_name | [string](#string) | | Name of the service to use. | | host | [string](#string) | | Host machine the service is running on. | | localization_request | [bosdyn.api.graph_nav.SetLocalizationRequest](#bosdyn-api-graph_nav-SetLocalizationRequest) | | If no localization_request is provided, the default options used
                                                                                                                                    are FIDUCIAL_INIT_NEAREST (the system will initialize to the nearest fiducial).
                                                                                                                                    Otherwise, the options inside the set_localization_request will be used.
                                                                                                                                    Note that ko_tform_body in the request will be ignored (it will be recalculated at runtime). | -| allow_bad_quality | [bool](#bool) | | If true, a poor quality check will not result in the node returning FAILURE.
                                                                                                                                    If false, the localization will be checked for quality by comparing agains the map data, and
                                                                                                                                    if the localization is poor quality, the node returns FAILURE. | +| allow_bad_quality | [bool](#bool) | | If true, a poor quality check will not result in the node returning FAILURE.
                                                                                                                                    If false, the localization will be checked for quality by comparing against the map data, and
                                                                                                                                    if the localization is poor quality, the node returns FAILURE. | | response_bb_key | [string](#string) | | If non-empty, the blackboard variable with this name will contain the response of the
                                                                                                                                    graph nav SetLocalization request after this node receives it. | +| localization_request_bb_key | [string](#string) | | If specified, the value of this blackboard variable will be merged with the
                                                                                                                                    localization_request. The value of this variable must be a
                                                                                                                                    bosdyn.api.graph_nav.SetLocalizationRequest proto. | @@ -17438,6 +18089,7 @@ Tell the robot to navigate a route. | travel_params | [bosdyn.api.graph_nav.TravelParams](#bosdyn-api-graph_nav-TravelParams) | | Parameters that define how to traverse and end the route. | | navigation_feedback_response_blackboard_key | [string](#string) | | If provided, this will write the last NavigationFeedbackResponse message
                                                                                                                                    to a blackboard variable with this name. | | navigate_route_response_blackboard_key | [string](#string) | | If provided, this will write the last NavigateRouteResponse message to
                                                                                                                                    a blackboard variable with this name. | +| navigate_route_request_blackboard_key | [string](#string) | | If provided, parameters from this request will be merged with the other parameters defined in
                                                                                                                                    the node and be used in the NavigateRoute RPC. | @@ -17483,6 +18135,42 @@ Make a robot power request + + +### BosdynQueryStoredCaptures +Write the QueryStoredCapturesResponse for a given QueryParameters message to the blackboard. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| service_name | [string](#string) | | Name of the service to use. | +| host | [string](#string) | | Host machine of the directory server that the data acquisition service is registered with. | +| key | [string](#string) | | The key of the variable that the QueryStoredCapturesResponse will be written to. | +| query_params | [bosdyn.api.QueryParameters](#bosdyn-api-QueryParameters) | | The QueryParameters message for the QueryStoredCapturesRequest that will be made. | +| capture_action_ids_format | [BosdynQueryStoredCaptures.CaptureActionIdFormat](#bosdyn-api-mission-BosdynQueryStoredCaptures-CaptureActionIdFormat) | repeated | If specified, these CaptureActionIds will be added to the QueryParameters at runtime. | + + + + + + + + +### BosdynQueryStoredCaptures.CaptureActionIdFormat +Format strings that will be used together with the blackboard to generate +a CaptureActionId. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| action_name_format | [string](#string) | | | +| group_name_format | [string](#string) | | | + + + + + + ### BosdynRecordEvent @@ -17627,6 +18315,25 @@ Just returns a constant when calling tick(). + + +### CreateMissionText +Creates a message, puts it in the current tick state messages, then ticks the child node. +The MissionText will remain active while the node is ticked and RUNNING. +Clients can retrieve active mission text through the GetState RPC. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| mission_text | [string](#string) | | The mission text to create. The mission text may contain blackboard variable formatting. | +| severity | [bosdyn.api.AlertData.SeverityLevel](#bosdyn-api-AlertData-SeverityLevel) | | Severity level of the text message.
                                                                                                                                    Here are guidelines for severity as it pertains to missions:
                                                                                                                                    INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to
                                                                                                                                    download.
                                                                                                                                    WARN: Something went wrong, but the mission will try to recover autonomously.
                                                                                                                                    ERROR: Something went wrong, and the mission can't recover without human intervention.
                                                                                                                                    Intervention is not time sensitive and can be resolved when convenient.
                                                                                                                                    CRITICAL: Something went wrong, and the mission can't recover without human intervention.
                                                                                                                                    Human needs to rescue the robot before battery runs out because it's not charging. | +| child | [Node](#bosdyn-api-mission-Node) | | Child to tick after creating the mission text
                                                                                                                                    The MissionText will be active as long as the child is ticked and RUNNING. | + + + + + + ### DataAcquisition @@ -17639,11 +18346,11 @@ Trigger the acquisition and storage of data. | host | [string](#string) | | Host machine of the directory server that the data acquisition service is registered with. | | request | [bosdyn.api.AcquireDataRequest](#bosdyn-api-AcquireDataRequest) | | Specification of the data and metadata to store. | | completion_behavior | [DataAcquisition.CompletionBehavior](#bosdyn-api-mission-DataAcquisition-CompletionBehavior) | | | -| group_name_format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    a group_name. If a value is specified in this field, it will override the group_name value
                                                                                                                                    specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard will
                                                                                                                                    replace the keys in braces {}.
                                                                                                                                    Example: "telop-{date}", where "date" is a blackboard variable.
                                                                                                                                    Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a
                                                                                                                                    Repeat node. | +| group_name_format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    a group_name. If a value is specified in this field, it will override the group_name value
                                                                                                                                    specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard will
                                                                                                                                    replace the keys in braces {}.
                                                                                                                                    Example: "teleop-{date}", where "date" is a blackboard variable.
                                                                                                                                    Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a
                                                                                                                                    Repeat node. | | request_name_in_blackboard | [string](#string) | | If populated, name of the variable in the blackboard in which to store the AcquireDataRequest
                                                                                                                                    after it's created, and sent to the Data Acquisition service. | | metadata_name_in_blackboard | [string](#string) | | The name of the metadata object in the blackboard to be stored.
                                                                                                                                    The metadata object can be any protobuf message.
                                                                                                                                    The metadata will be merged with the AcquireDataRequest's metadata field. | | action_name_format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    an action_name. If a value is specified in this field, it will override the action_name
                                                                                                                                    value specified in the CaptureActionId of the AcquireDataRequest. Values from the blackboard
                                                                                                                                    will replace the keys in braces {}.
                                                                                                                                    Example: "element 0 attempt {loop_counter}", where "loop_counter" is a blackboard variable
                                                                                                                                    from a Retry. | -| disable_cancel_on_pause_or_stop | [bool](#bool) | | If set to false (default), this node will cancel an outgoing AcquireDataRequest when the node
                                                                                                                                    is paused / stopped. When the node is resumed, it will restart the AcquireDataRequest.

                                                                                                                                    If set to true, this node will NOT cancel outgoing AcquireDataRequest's when the node is
                                                                                                                                    paused / stopped. When the node is resumed, it will check feedback on the original outgoing
                                                                                                                                    AcquireDataReqeust. | +| disable_cancel_on_pause_or_stop | [bool](#bool) | | If set to false (default), this node will cancel an outgoing AcquireDataRequest when the node
                                                                                                                                    is paused / stopped. When the node is resumed, it will restart the AcquireDataRequest.

                                                                                                                                    If set to true, this node will NOT cancel outgoing AcquireDataRequest's when the node is
                                                                                                                                    paused / stopped. When the node is resumed, it will check feedback on the original outgoing
                                                                                                                                    AcquireDataRequest. | | format_metadata | [bool](#bool) | | If true, metadata string values may contain formatted blackboard variables.
                                                                                                                                    Please see the documentation in FormatBlackboard for more information about supported string
                                                                                                                                    formats. | @@ -17655,7 +18362,7 @@ Trigger the acquisition and storage of data. ### DataAcquisitionOnInterruption Send an AcquireDataRequest to the data acquisition service when the mission is interrupted. -Interuptions are anything that causes the mission to stop ticking automatically. +Interruptions are anything that causes the mission to stop ticking automatically. | Field | Type | Label | Description | @@ -17666,7 +18373,7 @@ Interuptions are anything that causes the mission to stop ticking automatically. | restart_mission_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: RestartMission RPC called. | | load_mission_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: LoadMission RPC called. | | stop_mission_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: StopMission RPC called. | -| lease_use_error_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: Lease use error occured. | +| lease_use_error_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: Lease use error occurred. | | play_mission_timeout_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: Play mission timeout exceeded. | | child_node_error_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: Child node returned an error result. | | child_node_exception_metadata | [bosdyn.api.Metadata](#bosdyn-api-Metadata) | | Interruption reason: Child node threw an exception. | @@ -17702,7 +18409,7 @@ variables in the parent scope. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blackboard_variables | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | The list of variables that should be defined for this subtree,
                                                                                                                                    with initial values. | +| blackboard_variables | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | The list of variables that should be defined for this subtree,
                                                                                                                                    with initial values.

                                                                                                                                    Note: Currently the mission service supports blackboard variable keys that contain ".", "[]",
                                                                                                                                    and "()". In a future release, this will no longer be supported. Boston Dynamics recommends
                                                                                                                                    using letters, numbers, and underscores for blackboard keys. | | child | [Node](#bosdyn-api-mission-Node) | | The blackboard variables will only persist in the subtree defined by this
                                                                                                                                    child node. The child's tick() will be called on the child until it
                                                                                                                                    returns either SUCCESS or FAILURE. | @@ -17720,7 +18427,8 @@ variables in the parent scope. | ----- | ---- | ----- | ----------- | | service_name | [string](#string) | | Name of the service to use. | | host | [string](#string) | | Host machine of the directory server that the docking service is registered with. | -| docking_station_id | [uint32](#uint32) | | ID of docking station to dock at. | +| docking_station_id | [uint32](#uint32) | | | +| docking_station_id_blackboard_key | [string](#string) | | Blackboard variable key that contains the docking station id. | | child | [Node](#bosdyn-api-mission-Node) | | **Deprecated.** Optional child node. Children will have access to the status variables gathered by this node.
                                                                                                                                    If specified, child node will determine success/failure of this node.

                                                                                                                                    DEPRECATED as of 3.0.0. Use docking_command_response_blackboard_key and
                                                                                                                                    docking_command_feedback_response_blackboard_key instead. | | command_status_name | [string](#string) | | **Deprecated.** Name of the command status variable in the blackboard. This is the status of the docking
                                                                                                                                    command request made to the robot. Please refer to
                                                                                                                                    bosdyn.api.docking.DockingCommandResponse.Status for more details. Children can use this
                                                                                                                                    name to look up docking command status in the blackboard. If no name is provided, status will
                                                                                                                                    not be available.

                                                                                                                                    DEPRECATED as of 3.0.0. Use docking_command_response_blackboard_key and
                                                                                                                                    docking_command_feedback_response_blackboard_key instead. | | feedback_status_name | [string](#string) | | **Deprecated.** Name of the feedback status variable in the blackboard. This is the feedback provided while
                                                                                                                                    docking is in progress. Please refer to
                                                                                                                                    bosdyn.api.docking.DockingCommandFeedbackResponse.Status for a list of possible status
                                                                                                                                    values. Children can use this name to look up docking status in the blackboard. If no name
                                                                                                                                    is provided, status will not be available.

                                                                                                                                    DEPRECATED as of 3.0.0. Use docking_command_response_blackboard_key and
                                                                                                                                    docking_command_feedback_response_blackboard_key instead. | @@ -17764,7 +18472,8 @@ timeout_child. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| duration | [google.protobuf.Duration](#google-protobuf-Duration) | | Maximum duration of mission execution time. | +| duration | [google.protobuf.Duration](#google-protobuf-Duration) | | | +| duration_name_in_blackboard | [string](#string) | | Blackboard variable name that specifies duration. The value of this variable should be of
                                                                                                                                    type google.protobuf.Duration. | | child | [Node](#bosdyn-api-mission-Node) | | Child to execute for the duration. | | time_remaining_name | [string](#string) | | Optional blackboard variable name. If specified, this node will define a blackboard
                                                                                                                                    variable that its child has access to, and write the number of seconds remaining as
                                                                                                                                    a double to the blackboard under this name. | | timeout_child | [Node](#bosdyn-api-mission-Node) | | Optional node that will run if the child times out. If not specified, this node
                                                                                                                                    will return FAILURE when the child times out. If specified, and the
                                                                                                                                    child times out, this node will return the status of the timeout_child.
                                                                                                                                    The timeout_child does not respect the original timeout. | @@ -17783,7 +18492,7 @@ Sets a blackboard variable to a formatted string, reading from other blackboard | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | key | [string](#string) | | The key of the variable that will be written. | -| format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    string value. Values from the blackboard will replace the keys in braces {}, i.e.
                                                                                                                                    {blackboard_variable_name}. We also allow some string formatting options, namely:

                                                                                                                                    1) Floating point decimal places: {float_variable:.2f}
                                                                                                                                    2) TBD

                                                                                                                                    Select examples:

                                                                                                                                    Format String: "telop-{date}"
                                                                                                                                    Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                                                                                                                                    Output: "teleop-2021-05-13"

                                                                                                                                    Format String: "{date}_loop_{loop_counter}"
                                                                                                                                    Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                                                                                                                                    Blackboard: "loop_counter" is a blackboard variable with integer value: "3"
                                                                                                                                    Output: "2021-05-13_loop_3"

                                                                                                                                    Format String: "battery charge is: {state.power_state.locomotion_charge_percentage.value}"
                                                                                                                                    Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                                                                                                                                    the power_state submessage has a charge percentage of 30.2148320923085
                                                                                                                                    Output: "battery charge is: 30.2158320923085"

                                                                                                                                    Format String: "battery charge is:
                                                                                                                                    {state.power_state.locomotion_charge_percentage.value:.2f}"
                                                                                                                                    Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                                                                                                                                    the power_state submessage has a charge percentage of 30.2148320923085
                                                                                                                                    Output: "battery charge is: 30.21"

                                                                                                                                    Format String: "the value is {x:.0f}"
                                                                                                                                    Blackboard: "x" is a blackboard variable with float value: "2.71828"
                                                                                                                                    Output: "the value is 3" | +| format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    string value. Values from the blackboard will replace the keys in braces {}, i.e.
                                                                                                                                    {blackboard_variable_name}. We also allow some string formatting options, namely:

                                                                                                                                    1) Floating point decimal places: {float_variable:.2f}
                                                                                                                                    2) TBD

                                                                                                                                    Select examples:

                                                                                                                                    Format String: "teleop-{date}"
                                                                                                                                    Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                                                                                                                                    Output: "teleop-2021-05-13"

                                                                                                                                    Format String: "{date}_loop_{loop_counter}"
                                                                                                                                    Blackboard: "date" is a blackboard variable with string value: "2021-05-13"
                                                                                                                                    Blackboard: "loop_counter" is a blackboard variable with integer value: "3"
                                                                                                                                    Output: "2021-05-13_loop_3"

                                                                                                                                    Format String: "battery charge is: {state.power_state.locomotion_charge_percentage.value}"
                                                                                                                                    Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                                                                                                                                    the power_state submessage has a charge percentage of 30.2148320923085
                                                                                                                                    Output: "battery charge is: 30.2158320923085"

                                                                                                                                    Format String: "battery charge is:
                                                                                                                                    {state.power_state.locomotion_charge_percentage.value:.2f}"
                                                                                                                                    Blackboard: "state" is a protobuf message in the blackboard from a BosdynRobotState, and
                                                                                                                                    the power_state submessage has a charge percentage of 30.2148320923085
                                                                                                                                    Output: "battery charge is: 30.21"

                                                                                                                                    Format String: "the value is {x:.0f}"
                                                                                                                                    Blackboard: "x" is a blackboard variable with float value: "2.71828"
                                                                                                                                    Output: "the value is 3" | @@ -17865,6 +18574,8 @@ Specifics of what the node does are contained in the "impl" field. | set_grasp_override | [SetGraspOverride](#bosdyn-api-mission-SetGraspOverride) | | | | execute_choreography | [ExecuteChoreography](#bosdyn-api-mission-ExecuteChoreography) | | | | mission_upload_choreography | [MissionUploadChoreography](#bosdyn-api-mission-MissionUploadChoreography) | | | +| create_mission_text | [CreateMissionText](#bosdyn-api-mission-CreateMissionText) | | | +| bosdyn_query_stored_captures | [BosdynQueryStoredCaptures](#bosdyn-api-mission-BosdynQueryStoredCaptures) | | | | parameter_values | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | Defines parameters, used by this node or its children.
                                                                                                                                    The "key" in KeyValue is the name of the parameter being defined.
                                                                                                                                    The value can be a constant or another parameter value. | | overrides | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | Overwrites a protobuf field in this node's implementation.
                                                                                                                                    The "key" in KeyValue is the name of the field to override.
                                                                                                                                    The value to write can be sourced from a constant, or a parameter value. | | parameters | [VariableDeclaration](#bosdyn-api-mission-VariableDeclaration) | repeated | Declares parameters needed at compile time by this node, or children of this node.
                                                                                                                                    This is a way for a node to communicate what parameters its implementation and/or children
                                                                                                                                    require, without unpacking the entire subtree. | @@ -17905,6 +18616,7 @@ This node represents a request for information from ANY listeners that may be ou | source | [string](#string) | | Metadata describing the source of the question.
                                                                                                                                    The answer will be written into the state blackboard with this as the variable name. | | options | [Prompt.Option](#bosdyn-api-mission-Prompt-Option) | repeated | **Deprecated.** The set of options that can be chosen for this prompt. | | options_list | [Prompt.OptionsList](#bosdyn-api-mission-Prompt-OptionsList) | | The set of options that can be chosen for this prompt. | +| options_list_in_blackboard | [string](#string) | | Key to an OptionsList protobuf object on the blackboard. The variable is only read when
                                                                                                                                    the node starts meaning options cannot change while the node is running. | | custom_params | [bosdyn.api.DictParam.Spec](#bosdyn-api-DictParam-Spec) | | Custom parameter specification for the answer expected for this prompt. | | child | [Node](#bosdyn-api-mission-Node) | | Child node, run after the prompt has been responded to.
                                                                                                                                    Children will have access to the answer code provided by the response. | | for_autonomous_processing | [bool](#bool) | | Hint that Question posed by this Prompt is meant to be answered by some automated system.
                                                                                                                                    See the Question message for details. | @@ -17960,7 +18672,7 @@ Call out to another system using the RemoteMission service. | timeout | [float](#float) | | Timeout of any single RPC. If the timeout is exceeded, the RPC will fail. The mission service
                                                                                                                                    treats each failed RPC differently:
                                                                                                                                    - EstablishSession: An error is returned in LoadMission.
                                                                                                                                    - Tick: The RPC is retried.
                                                                                                                                    - Stop: The error is ignored, and the RPC is not retried.
                                                                                                                                    Omit for a default of 60 seconds. | | lease_resources | [string](#string) | repeated | Resources that we will need leases on. | | inputs | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | The list of variables the remote host should receive.
                                                                                                                                    Variables given can be available at either run-time or compile-time.
                                                                                                                                    The "key" in KeyValue is the name of the variable as used by the remote system. | -| group_name_format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    a group_name. If a value is specified in this field, it will override the group_name value
                                                                                                                                    specified in the group_name of the TickRequest. Values from the blackboard will
                                                                                                                                    replace the keys in braces {}.
                                                                                                                                    Example: "telop-{date}", where "date" is a blackboard variable.
                                                                                                                                    Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a
                                                                                                                                    Repeat node. | +| group_name_format | [string](#string) | | Define a format string that will be used together with the blackboard to generate
                                                                                                                                    a group_name. If a value is specified in this field, it will override the group_name value
                                                                                                                                    specified in the group_name of the TickRequest. Values from the blackboard will
                                                                                                                                    replace the keys in braces {}.
                                                                                                                                    Example: "teleop-{date}", where "date" is a blackboard variable.
                                                                                                                                    Example: "{date}_loop_{loop_counter}", where "loop_counter" is a blackboard variable from a
                                                                                                                                    Repeat node. | | params | [bosdyn.api.DictParam](#bosdyn-api-DictParam) | | Should match the advertised spec for the RemoteMissionService in question. | @@ -18078,7 +18790,7 @@ Sets existing blackboard variables within this scope to specific values, returni | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| blackboard_variables | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | The key of the KeyValue is the name of the blackboard variable.
                                                                                                                                    The value will be dereferenced and converted into a value type at runtime
                                                                                                                                    inside this node's tick function. For example, if the value is a runtime
                                                                                                                                    variable, that variable will be evaluated at tick time, and then stored into
                                                                                                                                    the blackboard. If the value is another blackboard variable, that blackboard
                                                                                                                                    variable's value will be copied into the variable specified by the key. | +| blackboard_variables | [KeyValue](#bosdyn-api-mission-KeyValue) | repeated | The key of the KeyValue is the name of the blackboard variable.
                                                                                                                                    The value will be dereferenced and converted into a value type at runtime
                                                                                                                                    inside this node's tick function. For example, if the value is a runtime
                                                                                                                                    variable, that variable will be evaluated at tick time, and then stored into
                                                                                                                                    the blackboard. If the value is another blackboard variable, that blackboard
                                                                                                                                    variable's value will be copied into the variable specified by the key.

                                                                                                                                    Note: Currently the mission service supports blackboard variable keys that contain ".", "[]",
                                                                                                                                    and "()". In a future release, this will no longer be supported. Boston Dynamics recommends
                                                                                                                                    using letters, numbers, and underscores for blackboard keys. | @@ -18147,6 +18859,7 @@ When started, begins a sleep timer for X seconds. Returns "success" after the ti | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | seconds | [float](#float) | | Number of seconds to sleep for. | +| duration_name_in_blackboard | [string](#string) | | Blackboard variable name that specifies duration. The value of this variable should be of
                                                                                                                                    type google.protobuf.Duration. | | restart_after_stop | [bool](#bool) | | If this node is stopped, should it restart the timer? | @@ -18299,16 +19012,16 @@ Triggers a StoreMetadataRequest to the data acquisition store. ### Switch Run a specific child based on a specified pivot_value. -This node exists because of a subtle implmentation detail in Selector(always_restart = true). +This node exists because of a subtle implementation detail in Selector(always_restart = true). The astute reader might believe that they can construct a switch node by using a selector with sequences & conditions as children. This is ALMOST true, EXCEPT that a selector (with always_restart = true) can leave multiple children in the running state IF: - A later selector child was RUNNING last tick - - An eariler selector child returns RUNNING this tick + - An earlier selector child returns RUNNING this tick Even though the later selector child won't be ticked, it will still be left in the running state -and not restart when the selector advances to it again later. Sometimes this is desireable, +and not restart when the selector advances to it again later. Sometimes this is desirable, sometimes it isn't. Switch is constrained to only have one child running, and if the switch ever switches children and return to a previously running child, that child will be restarted. @@ -18719,6 +19432,23 @@ Key/Value pair, used in other messages. + + +### MissionText +Nodes can pass arbitrary text back through the mission state. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| text | [string](#string) | | The text of the message. | +| severity | [bosdyn.api.AlertData.SeverityLevel](#bosdyn-api-AlertData-SeverityLevel) | | Severity level of the text message.
                                                                                                                                    Here are guidelines for severity as it pertains to missions:
                                                                                                                                    INFO: Normal operation. For example, waiting for charge; waiting on the dock for logs to
                                                                                                                                    download.
                                                                                                                                    WARN: Something went wrong, but the mission will try to recover autonomously.
                                                                                                                                    ERROR: Something went wrong, and the mission can't recover without human intervention.
                                                                                                                                    Intervention is not time sensitive and can be resolved when convenient.
                                                                                                                                    CRITICAL: Something went wrong, and the mission can't recover without human intervention.
                                                                                                                                    Human needs to rescue the robot before battery runs out because it's not charging. | +| node_id | [int64](#int64) | | The node which produced the update message. | + + + + + + ### UserData @@ -18912,7 +19642,7 @@ The mobility request must be one of the basic command primitives. | ----- | ---- | ----- | ----------- | | other_data | [google.protobuf.Any](#google-protobuf-Any) | | Other data that isn't an image. NetworkComputeBridge service will pass it through
                                                                                                                                    to the remote server so you can do computation on arbitrary data. | | model_name | [string](#string) | | Name of the model to be run on the input data. | -| reference_images | [ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | For some computer vision operations a number of reference images are required along with the
                                                                                                                                    input image. These images might have been taken months ago, not neccessarilly taken right
                                                                                                                                    now. | +| reference_images | [ImageCaptureAndSource](#bosdyn-api-ImageCaptureAndSource) | repeated | For some computer vision operations a number of reference images are required along with the
                                                                                                                                    input image. These images might have been taken months ago, not necessarily taken right
                                                                                                                                    now. | | custom_params | [DictParam](#bosdyn-api-DictParam) | | Input parameters unique to this worker that do not match any of the above fields. | @@ -19333,7 +20063,7 @@ RPCs for sending images or other data to networked server for computation. ### NetworkComputeBridgeWorker -Set of RPCs for workers of the network compute bridge. This is seperate from the RPCs for the +Set of RPCs for workers of the network compute bridge. This is separate from the RPCs for the on-robot network compute bridge so that if they need to diverge in the future it is possible to do so. @@ -19541,7 +20271,7 @@ The ListPayloads response message returns all payloads registered in the robot's ### MomentOfIntertia -Structure describing the moment of intertia of a body. The xx, yy, zz fields +Structure describing the moment of inertia of a body. The xx, yy, zz fields are the diagonal of the MOI tensor, and the xy, xz, and yz fields are the off diagonal terms. @@ -19699,7 +20429,7 @@ The PayloadEstimationCommand provides several pieces of feedback: ### PayloadEstimationCommand.Request PayloadEstimation command request takes no additional arguments. The estimation routine -takes about ~1min to run. Subsequent PayloadEstimationCommand requests issued while the +takes about ~1min to run. Subsequent PayloadEstimationCommand requests issued while the routine is in progress are ignored until the routine is completed. @@ -19734,7 +20464,7 @@ routine is in progress are ignored until the routine is completed. | STATUS_COMPLETED | 1 | Completed estimation routine successfully; estimated_payload is populated. | | STATUS_SMALL_MASS | 2 | Completed estimation routine successfully, but estimated mass is small enough to
                                                                                                                                    not significantly impact mobility; estimated_payload is empty. | | STATUS_IN_PROGRESS | 3 | Estimation routine is currently running; estimated_payload is empty. | -| STATUS_ERROR | 4 | Error occurred during the routine; estaimted_payload is empty. | +| STATUS_ERROR | 4 | Error occurred during the routine; estimated_payload is empty. | @@ -19925,8 +20655,8 @@ successful. | ---- | ------ | ----------- | | STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened
                                                                                                                                    if UNKNOWN is set. | | STATUS_OK | 1 | Success. The token is available. | -| STATUS_INVALID_CREDENTIALS | 2 | GetPayloadAuthToken failed because the paylod guid & secret do not match any registered
                                                                                                                                    payloads. | -| STATUS_PAYLOAD_NOT_AUTHORIZED | 3 | GetPayloadAuthToken failed because the paylod has not been authorized by an admin. | +| STATUS_INVALID_CREDENTIALS | 2 | GetPayloadAuthToken failed because the payload guid & secret do not match any registered
                                                                                                                                    payloads. | +| STATUS_PAYLOAD_NOT_AUTHORIZED | 3 | GetPayloadAuthToken failed because the payload has not been authorized by an admin. | @@ -19966,7 +20696,7 @@ successful. | STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened
                                                                                                                                    if UNKNOWN is set. | | STATUS_OK | 1 | Success. The payload version has been updated. | | STATUS_DOES_NOT_EXIST | 2 | UpdatePayloadAttached failed because a payload with this GUID does not yet exist. | -| STATUS_INVALID_CREDENTIALS | 3 | UpdatePayloadAttached failed because the paylod guid & secret do not match any registered
                                                                                                                                    payloads. | +| STATUS_INVALID_CREDENTIALS | 3 | UpdatePayloadAttached failed because the payload guid & secret do not match any
                                                                                                                                    registered payloads. | | STATUS_PAYLOAD_NOT_AUTHORIZED | 4 | UpdatePayloadAttached failed because the requested payload has not yet been authorized.
                                                                                                                                    Authorize the payload in the webserver first, then try again. | @@ -19981,7 +20711,7 @@ successful. | STATUS_UNKNOWN | 0 | UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened
                                                                                                                                    if UNKNOWN is set. | | STATUS_OK | 1 | Success. The payload version has been updated. | | STATUS_DOES_NOT_EXIST | 2 | UpdatePayload failed because a payload with this GUID does not yet exist. | -| STATUS_INVALID_CREDENTIALS | 3 | UpdatePayload failed because the paylod guid & secret do not match any registered
                                                                                                                                    payloads. | +| STATUS_INVALID_CREDENTIALS | 3 | UpdatePayload failed because the payload guid & secret do not match any registered
                                                                                                                                    payloads. | @@ -20104,13 +20834,14 @@ The GetPointCloud request message to ask a specific point cloud service for data ### ListPointCloudSourcesResponse -The GetPointCloud response message which returns any point cloud data associated with that service. +The GetPointCloud response message which returns any point cloud data associated with that +service. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response Header. | -| point_cloud_sources | [PointCloudSource](#bosdyn-api-PointCloudSource) | repeated | The set of PointCloudSources available from this service.
                                                                                                                                    May be empty if the service serves no point clouds (e.g., if no sensors were found on startup). | +| point_cloud_sources | [PointCloudSource](#bosdyn-api-PointCloudSource) | repeated | The set of PointCloudSources available from this service.
                                                                                                                                    May be empty if the service serves no point clouds (e.g., if no sensors were found on
                                                                                                                                    startup). | @@ -20195,7 +20926,7 @@ Information about a sensor or process that produces point clouds. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | | The name of the point cloud source. This is intended to be unique accross all point cloud sources,
                                                                                                                                    and should be human readable. | +| name | [string](#string) | | The name of the point cloud source. This is intended to be unique across all point cloud
                                                                                                                                    sources, and should be human readable. | | frame_name_sensor | [string](#string) | | The frame name of the sensor. The transformation from vision_tform_sensor can be computed
                                                                                                                                    by traversing the tree in the FrameTreeSnapshot. | | acquisition_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Time that the data was produced on the sensor in the robot's clock. | | transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations, which will include the transformations
                                                                                                                                    to the point cloud data frame and the point cloud sensor frame. | @@ -20215,7 +20946,7 @@ Point clouds may be encoded in different ways to preserve bandwidth or disk spac | Name | Number | Description | | ---- | ------ | ----------- | | ENCODING_UNKNOWN | 0 | The point cloud has an unknown encoding. | -| ENCODING_XYZ_32F | 1 | Each point is x,y,z float32 value (12 bytes, little-endian) stored sequentially. This allows
                                                                                                                                    the point cloud to be expressed in any range and resolution represented by floating point
                                                                                                                                    numbers, but the point cloud will be larger than if one of the other encodings is used. | +| ENCODING_XYZ_32F | 1 | Each point is x,y,z float32 value (12 bytes, little-endian) stored sequentially. This
                                                                                                                                    allows the point cloud to be expressed in any range and resolution represented by
                                                                                                                                    floating point numbers, but the point cloud will be larger than if one of the other
                                                                                                                                    encodings is used. | | ENCODING_XYZ_4SC | 2 | Each point is 3 signed int8s plus an extra shared signed int8s (4 byte).
                                                                                                                                    byte layout: [..., p1_x, p1_y, p1_z, x, ...]
                                                                                                                                    Each coordinate is mapped to a value between -1 and +1 (corresponding to a
                                                                                                                                    minimum and maximum range).
                                                                                                                                    The resulting point is:
                                                                                                                                    P = remap(p1 * f + p2, c * f, m)
                                                                                                                                    Where:
                                                                                                                                    p1 = the highest byte in each dimension of the point.
                                                                                                                                    p2 = a vector of "extra" bytes converted to metric units.
                                                                                                                                    = [mod (x, f), mod(x/f, f), mod(x/(f^2), f)] - f/2
                                                                                                                                    x = the "extra" byte for each point.
                                                                                                                                    f = An integer scale factor.
                                                                                                                                    m = [max_x, max_y, max_z], the point cloud max bounds in meters.
                                                                                                                                    c = a remapping constant.
                                                                                                                                    And:
                                                                                                                                    remap(a, b, c) = (a + b)/(2 * b) - c
                                                                                                                                    Point clouds use 1/3 the memory of XYZ_32F, but have limits on resolution
                                                                                                                                    and range. Points must not lie outside of the box of size [-m, m]. Within that box,
                                                                                                                                    the resolution of the point cloud will depend on the encoding parameters.
                                                                                                                                    For example if m = [10, 10, 10], and f = 5 with c = 127 the resolution is
                                                                                                                                    approximately 1.5 cm per point. | | ENCODING_XYZ_5SC | 3 | Each point is 3 signed int8s plus two extra shared signed int8s (5 byte).
                                                                                                                                    The encoding is the same as XYZ_4SC, except the "extra" value x is a 16 bit integer.
                                                                                                                                    This encoding has roughly double the resolution of XYZ_4SC, but takes up
                                                                                                                                    an additional byte for each point. | @@ -20265,7 +20996,7 @@ and it supports requesting the latest point cloud data for each source by name. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| ListPointCloudSources | [ListPointCloudSourcesRequest](#bosdyn-api-ListPointCloudSourcesRequest) | [ListPointCloudSourcesResponse](#bosdyn-api-ListPointCloudSourcesResponse) | Obtain the list of PointCloudSources for this given service.
                                                                                                                                    Note that there may be multiple PointCloudServices running, each with their own set of sources
                                                                                                                                    The name field keys access to individual point clouds when calling GetPointCloud. | +| ListPointCloudSources | [ListPointCloudSourcesRequest](#bosdyn-api-ListPointCloudSourcesRequest) | [ListPointCloudSourcesResponse](#bosdyn-api-ListPointCloudSourcesResponse) | Obtain the list of PointCloudSources for this given service.
                                                                                                                                    Note that there may be multiple PointCloudServices running, each with their own set of
                                                                                                                                    sources The name field keys access to individual point clouds when calling GetPointCloud. | | GetPointCloud | [GetPointCloudRequest](#bosdyn-api-GetPointCloudRequest) | [GetPointCloudResponse](#bosdyn-api-GetPointCloudResponse) | Request point clouds by source name. | @@ -20306,7 +21037,7 @@ The PowerCommandFeedback response message, which contains the progress of the po | ----- | ---- | ----- | ----------- | | header | [ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | | status | [FanPowerCommandFeedbackResponse.Status](#bosdyn-api-FanPowerCommandFeedbackResponse-Status) | | Current status of specified command. | -| desired_end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Based on duration, the time that this command was intended to stop being in effect. If
                                                                                                                                    stopped/overriden prematurely, early_stop_time will reflect the actual time the command
                                                                                                                                    stopped being in effect | +| desired_end_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Based on duration, the time that this command was intended to stop being in effect. If
                                                                                                                                    stopped/overridden prematurely, early_stop_time will reflect the actual time the command
                                                                                                                                    stopped being in effect | | early_stop_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | If the command was stopped or overridden before its desired end time, the time at which it
                                                                                                                                    was stopped. If command succeeded, this time is empty. | @@ -20482,7 +21213,7 @@ Feedback on the current state of a fan power command on the robot. | Name | Number | Description | | ---- | ------ | ----------- | | STATUS_UNKNOWN | 0 | Status is not specified. | -| STATUS_OK | 1 | Fan Power command succeeded. May still get overriden later in duration | +| STATUS_OK | 1 | Fan Power command succeeded. May still get overridden later in duration | | STATUS_TEMPERATURE_TOO_HIGH | 2 | ERROR: Fan Power command rejected because temperature above safe threshold | @@ -21099,7 +21830,7 @@ The software versioning number for a release. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| major_version | [int32](#int32) | | Signficant changes to software. | +| major_version | [int32](#int32) | | Significant changes to software. | | minor_version | [int32](#int32) | | Normal changes to software. | | patch_level | [int32](#int32) | | Fixes which should not change intended capabilities or affect compatibility. | @@ -21178,7 +21909,7 @@ battery temperature. ### BehaviorFault -The details of what the behavior fault consistents of, and the id for the fault. The unique +The details of what the behavior fault consists of, and the id for the fault. The unique behavior_fault_id can be used to clear the fault in robot command service ClearBehaviorFault rpc. @@ -21197,7 +21928,7 @@ behavior_fault_id can be used to clear the fault in robot command service ClearB ### BehaviorFaultState -This describes any current behaviror faults on the robot, which would block any robot commands +This describes any current behavior faults on the robot, which would block any robot commands from going through. These can be cleared using the ClearBehaviorFault rpc in the robot command service. @@ -21211,6 +21942,21 @@ service. + + +### BehaviorState +The current state of the behavior + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| state | [BehaviorState.State](#bosdyn-api-BehaviorState-State) | | | + + + + + + ### CombinedJointStates @@ -21220,7 +21966,7 @@ service. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | acquisition_timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Robot clock timestamp corresponding to these readings. | -| position | [float](#float) | repeated | The ordering of joints in these repeated fields are the same as (TODO where) | +| position | [float](#float) | repeated | The ordering of joints in these repeated fields follows the order defined by the
                                                                                                                                    bosdyn.api.spot.JointIndex enum. | | velocity | [float](#float) | repeated | | | load | [float](#float) | repeated | | @@ -21396,7 +22142,7 @@ as well as joint states and the velocity of the body. | ----- | ---- | ----- | ----------- | | joint_states | [JointState](#bosdyn-api-JointState) | repeated | Joint state of all robot joints. | | acquisition_timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Robot clock timestamp corresponding to these readings. | -| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations. See
                                                                                                                                    https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual
                                                                                                                                    documentation on frames. The snapshop will include the following frames:
                                                                                                                                    “odom”: An inertial frame that estimates the fixed location in the world (relative to where
                                                                                                                                    the robot is booted up) using the kinematics of the robot.

                                                                                                                                    “vision”: An inertial frame that estimates the fixed location in the world (relative to where
                                                                                                                                    the robot is booted up), and is calculated using visual analysis of the world and the robot’s
                                                                                                                                    odometry.

                                                                                                                                    “body”: A frame describing the robot body’s position and orientation. The frame’s origin is
                                                                                                                                    at the geometric center of the hips with the x-axis pointing from the hip center to the
                                                                                                                                    middle of the front hips.

                                                                                                                                    “flat_body”: A gravity-aligned frame describing the robot body’s position and orientation.
                                                                                                                                    The position is at the robot’s center, and the x/y-axes lie flat in the “odom” frame x-y
                                                                                                                                    plane. Specifically, the x-axis is the normalized projection of the robot’s “body” frame
                                                                                                                                    x-axis to the “odom” x-y plane.

                                                                                                                                    "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be
                                                                                                                                    converted into a plane (a point and normal).

                                                                                                                                    For robots with a SpotArm attached, see
                                                                                                                                    https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual
                                                                                                                                    documentation on SpotArm specific frames. The snaphot will also include the following frames:
                                                                                                                                    "hand": The hand frame is used by many of the ArmCommand requests available in the API. The
                                                                                                                                    origin is slightly in front of the gripper's palm plate and its oreination is aligned with
                                                                                                                                    'arm0.link_wr1'.

                                                                                                                                    "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation.
                                                                                                                                    The origin of the frame is at the end of the link on its rotational axis. It's x-axis is
                                                                                                                                    aligned with the rotational axis.

                                                                                                                                    All transforms within the snapshot are at the acquisition time of kinematic state. | +| transforms_snapshot | [FrameTreeSnapshot](#bosdyn-api-FrameTreeSnapshot) | | A tree-based collection of transformations. See
                                                                                                                                    https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual
                                                                                                                                    documentation on frames. The snapshot will include the following frames:
                                                                                                                                    “odom”: An inertial frame that estimates the fixed location in the world (relative to where
                                                                                                                                    the robot is booted up) using the kinematics of the robot.

                                                                                                                                    “vision”: An inertial frame that estimates the fixed location in the world (relative to where
                                                                                                                                    the robot is booted up), and is calculated using visual analysis of the world and the robot’s
                                                                                                                                    odometry.

                                                                                                                                    “body”: A frame describing the robot body’s position and orientation. The frame’s origin is
                                                                                                                                    at the geometric center of the hips with the x-axis pointing from the hip center to the
                                                                                                                                    middle of the front hips.

                                                                                                                                    “flat_body”: A gravity-aligned frame describing the robot body’s position and orientation.
                                                                                                                                    The position is at the robot’s center, and the x/y-axes lie flat in the “odom” frame x-y
                                                                                                                                    plane. Specifically, the x-axis is the normalized projection of the robot’s “body” frame
                                                                                                                                    x-axis to the “odom” x-y plane.

                                                                                                                                    "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be
                                                                                                                                    converted into a plane (a point and normal).

                                                                                                                                    “feet_center”: A gravity-aligned frame representing the robot's footprint. The position is at
                                                                                                                                    the geometric center of the robot's feet. The x-axis is aligned such that it points from the
                                                                                                                                    center of the rear feet to the center of the front feet in the x-y plane.

                                                                                                                                    For robots with a SpotArm attached, see
                                                                                                                                    https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual
                                                                                                                                    documentation on SpotArm specific frames. The snapshot will also include the following
                                                                                                                                    frames: "hand": The hand frame is used by many of the ArmCommand requests available in the
                                                                                                                                    API. The origin is slightly in front of the gripper's palm plate and its orientation is
                                                                                                                                    aligned with 'arm0.link_wr1'.

                                                                                                                                    "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation.
                                                                                                                                    The origin of the frame is at the end of the link on its rotational axis. It's x-axis is
                                                                                                                                    aligned with the rotational axis.

                                                                                                                                    All transforms within the snapshot are at the acquisition time of kinematic state. | | velocity_of_body_in_vision | [SE3Velocity](#bosdyn-api-SE3Velocity) | | Velocity of the body frame with respect to vision frame and expressed in vision frame.
                                                                                                                                    The linear velocity is applied at the origin of the body frame. | | velocity_of_body_in_odom | [SE3Velocity](#bosdyn-api-SE3Velocity) | | Velocity of the body frame with respect to odom frame and expressed in odom frame.
                                                                                                                                    Again, the linear velocity is applied at the origin of the body frame. | @@ -21527,7 +22273,7 @@ response to get the associated OBJ file. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | -| link_name | [string](#string) | | The link name of which the OBJ file shoould represent. | +| link_name | [string](#string) | | The link name of which the OBJ file should represent. | @@ -21537,7 +22283,7 @@ response to get the associated OBJ file. ### RobotLinkModelResponse -The RobotLinkModel response message returns the OBJ file for a specifc robot link. +The RobotLinkModel response message returns the OBJ file for a specific robot link. | Field | Type | Label | Description | @@ -21618,6 +22364,7 @@ The current state of the robot. | service_fault_state | [ServiceFaultState](#bosdyn-api-ServiceFaultState) | | Service faults for services registered with the robot. | | terrain_state | [TerrainState](#bosdyn-api-TerrainState) | | Relevant terrain data beneath and around the robot | | system_state | [SystemState](#bosdyn-api-SystemState) | | Temperature data for the motors. | +| behavior_state | [BehaviorState](#bosdyn-api-BehaviorState) | | Robot behavior states | @@ -21963,6 +22710,21 @@ Relevant terrain data beneath and around the robot + + +### BehaviorState.State + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| STATE_UNKNOWN | 0 | Unknown behavior state | +| STATE_NOT_READY | 1 | The robot is not ready to move | +| STATE_TRANSITION | 2 | The robot is in transition from sit to stand or from stand to sit | +| STATE_STANDING | 3 | The robot is standing in place | +| STATE_STEPPING | 4 | The robot is stepping | + + + ### EStopState.State @@ -22192,7 +22954,7 @@ robot at the current time. | GetRobotState | [RobotStateRequest](#bosdyn-api-RobotStateRequest) | [RobotStateResponse](#bosdyn-api-RobotStateResponse) | Get robot state information (such as kinematic state, power state, or faults). | | GetRobotMetrics | [RobotMetricsRequest](#bosdyn-api-RobotMetricsRequest) | [RobotMetricsResponse](#bosdyn-api-RobotMetricsResponse) | Get different robot metrics and parameters from the robot. | | GetRobotHardwareConfiguration | [RobotHardwareConfigurationRequest](#bosdyn-api-RobotHardwareConfigurationRequest) | [RobotHardwareConfigurationResponse](#bosdyn-api-RobotHardwareConfigurationResponse) | Get the hardware configuration of the robot, which describes the robot skeleton and urdf. | -| GetRobotLinkModel | [RobotLinkModelRequest](#bosdyn-api-RobotLinkModelRequest) | [RobotLinkModelResponse](#bosdyn-api-RobotLinkModelResponse) | Returns the OBJ file for a specifc robot link. Intended to be called after
                                                                                                                                    GetRobotHardwareConfiguration, using the link names returned by that call. | +| GetRobotLinkModel | [RobotLinkModelRequest](#bosdyn-api-RobotLinkModelRequest) | [RobotLinkModelResponse](#bosdyn-api-RobotLinkModelResponse) | Returns the OBJ file for a specific robot link. Intended to be called after
                                                                                                                                    GetRobotHardwareConfiguration, using the link names returned by that call. | @@ -22275,7 +23037,7 @@ A boolean parameter. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| dict_spec | [DictParam.Spec](#bosdyn-api-DictParam-Spec) | | This parameter is actually a set of sub-parameters.
                                                                                                                                    Useful for setting up a paramter hierarchy, e.g.
                                                                                                                                    param A
                                                                                                                                    / \
                                                                                                                                    / \
                                                                                                                                    param A.B param A.C | +| dict_spec | [DictParam.Spec](#bosdyn-api-DictParam-Spec) | | This parameter is actually a set of sub-parameters.
                                                                                                                                    Useful for setting up a parameter hierarchy, e.g.
                                                                                                                                    param A
                                                                                                                                    / \
                                                                                                                                    / \
                                                                                                                                    param A.B param A.C | | list_spec | [ListParam.Spec](#bosdyn-api-ListParam-Spec) | | This parameter is a list of things. | | int_spec | [Int64Param.Spec](#bosdyn-api-Int64Param-Spec) | | | | double_spec | [DoubleParam.Spec](#bosdyn-api-DoubleParam-Spec) | | | @@ -22510,11 +23272,11 @@ that have correlations. Example 1 - A camera that advertises an "exposure" parameter: OneOf Option 1: Auto exposure [no additional parameters] - OneOf Option 2: Manual exposure [additonal exposure double parameter from 0 - 100 ms] + OneOf Option 2: Manual exposure [additional exposure double parameter from 0 - 100 ms] Example 2 - A NCB worker that will alert if temperature outside a specified bound: OneOf Option 1: No alert [no additional parameters] - OneOf Option 2: Alert if above max [addional max_temp parameter] + OneOf Option 2: Alert if above max [additional max_temp parameter] OneOf Option 3: Alert if below min [additional min_temp parameter] OneOf Option 4: Alert if above max or below min [additional max_temp and min_temp parameters] @@ -22639,9 +23401,9 @@ Region of Interest parameter, region is associated with a specific image. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| service_and_source | [RegionOfInterestParam.ServiceAndSource](#bosdyn-api-RegionOfInterestParam-ServiceAndSource) | | Sometimes, which image the ROI will reference is obvious:
                                                                                                                                    - Image services
                                                                                                                                    - Network compute bridge workers that accept a single image

                                                                                                                                    Othertimes, it might not be clear which image an ROI is supposed to reference. In those
                                                                                                                                    cases, the Spec for the ROI can advertise which image it wants. | +| service_and_source | [RegionOfInterestParam.ServiceAndSource](#bosdyn-api-RegionOfInterestParam-ServiceAndSource) | | Sometimes, which image the ROI will reference is obvious:
                                                                                                                                    - Image services
                                                                                                                                    - Network compute bridge workers that accept a single image

                                                                                                                                    Other times, it might not be clear which image an ROI is supposed to reference. In those
                                                                                                                                    cases, the Spec for the ROI can advertise which image it wants. | | default_area | [AreaI](#bosdyn-api-AreaI) | | Default value. If unset, UIs can pick their own default OR force user to make a
                                                                                                                                    selection. | -| allows_rectangle | [bool](#bool) | | Area may eventually contain many shape primatives. In that case, services can constrain
                                                                                                                                    which primatives they accept. These will be opt in, so that adding new primative types
                                                                                                                                    won't be automatically advertised by older services. | +| allows_rectangle | [bool](#bool) | | Area may eventually contain many shape primitives. In that case, services can constrain
                                                                                                                                    which primitives they accept. These will be opt in, so that adding new primitive types
                                                                                                                                    won't be automatically advertised by older services. | @@ -22689,7 +23451,7 @@ Wraps specification-related messages, and contains fields for the value sent by | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| display_name | [string](#string) | | This string is an optional display name for the UI. If left unset, UI will use the
                                                                                                                                    DictParam key to label the corresponding UI element. DictParam key is meant to be
                                                                                                                                    machine readable, and shouldn't change accross releases. display_name is meant to be
                                                                                                                                    human readable, and can change from release to release if needed. | +| display_name | [string](#string) | | This string is an optional display name for the UI. If left unset, UI will use the
                                                                                                                                    DictParam key to label the corresponding UI element. DictParam key is meant to be
                                                                                                                                    machine readable, and shouldn't change across releases. display_name is meant to be
                                                                                                                                    human readable, and can change from release to release if needed. | | description | [string](#string) | | An optional description that provides additional information about the parameter. Use in
                                                                                                                                    combination with display_name. | | display_order | [int64](#int64) | | This is an optional sorting hint. UI elements will likely be shown in a list, and
                                                                                                                                    Dictionary children will be sorted by [display_order, display_name, dictionary key],
                                                                                                                                    in ascending numerical order and alphabetical string order. | @@ -22783,7 +23545,7 @@ The oldest matching fault will be maintained. | fault_id | [ServiceFaultId](#bosdyn-api-ServiceFaultId) | | Identifying information of the fault. | | error_message | [string](#string) | | User visible description of the fault (and possibly remedies). Will be
                                                                                                                                    displayed on tablet. | | attributes | [string](#string) | repeated | Fault attributes
                                                                                                                                    Each fault may be flagged with attribute metadata (strings in this case.)
                                                                                                                                    These attributes are useful to communicate that a particular fault may
                                                                                                                                    have significant effect on the operations of services. Some potential attributes
                                                                                                                                    may be "autowalk", "Spot CORE", "vision", or "gauge detection". These
                                                                                                                                    attributes enable the caller to flag a fault as indicating a problem with
                                                                                                                                    particular robot abstractions. A fault may have, zero, one, or more
                                                                                                                                    attributes attached to it. | -| severity | [ServiceFault.Severity](#bosdyn-api-ServiceFault-Severity) | | The severity level will have some indication of the potential breakage
                                                                                                                                    resulting from the fault. For example, a fault associated with payload
                                                                                                                                    X and severity level SEVERITY_INFO may indicate the payload is in an
                                                                                                                                    unexpected state but still operational. However, a fault with serverity
                                                                                                                                    level SEVERITY_CRITICAL may indicate the payload is no
                                                                                                                                    longer operational. | +| severity | [ServiceFault.Severity](#bosdyn-api-ServiceFault-Severity) | | The severity level will have some indication of the potential breakage
                                                                                                                                    resulting from the fault. For example, a fault associated with payload
                                                                                                                                    X and severity level SEVERITY_INFO may indicate the payload is in an
                                                                                                                                    unexpected state but still operational. However, a fault with severity
                                                                                                                                    level SEVERITY_CRITICAL may indicate the payload is no
                                                                                                                                    longer operational. | | onset_timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Time of robot local clock at fault onset. Set by robot-state service. | | duration | [google.protobuf.Duration](#google-protobuf-Duration) | | Time elapsed since onset of the fault. Set by robot-state service. | @@ -22797,7 +23559,7 @@ The oldest matching fault will be maintained. ### ServiceFaultId Information necessary to uniquely specify a service fault. A service fault typically is associated with a service running on the robot or a -payload. Occassionally, the fault may pertain to a payload but no specific service +payload. Occasionally, the fault may pertain to a payload but no specific service on the payload. In that situation, no service_name should not be specified and instead a payload_guid should be specified. Otherwise, in the standard case of a service originating fault, only the service_name should be specified and the payload_guid @@ -22886,7 +23648,7 @@ The TriggerServiceFault response message contains a header indicating success. | Name | Number | Description | | ---- | ------ | ----------- | | STATUS_UNKNOWN | 0 | UNKNOWN should never be used. | -| STATUS_OK | 1 | Success. The fault has been triggerd. | +| STATUS_OK | 1 | Success. The fault has been triggered. | | STATUS_FAULT_ALREADY_ACTIVE | 2 | ServiceFaultId already in active faults. | @@ -23203,6 +23965,15 @@ A set of keypoints detected in a single image. | enable_animation_duration | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | | enable_leg_timing | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | | enable_stance_shape | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| enable_body_offset | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| enable_body_motion | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| body_x_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| body_y_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| body_z_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| body_roll_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| body_pitch_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| body_yaw_multiplier | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| enable_swings_xy | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | @@ -23286,6 +24057,24 @@ Parameters specific to the ButtCircle DanceMove. + + +### BuzzerNoteParams + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| note | [BuzzerNoteParams.Note](#bosdyn-api-spot-BuzzerNoteParams-Note) | | | +| sharp | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| flat | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| octave | [google.protobuf.Int32Value](#google-protobuf-Int32Value) | | | + + + + + + ### ChickenHeadParams @@ -23417,7 +24206,7 @@ Parameters for the robot's crawling gait. | second_hr_swing | [SwingPhases](#bosdyn-api-spot-SwingPhases) | | | | show_stance_shape | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | Relative positions of feet. | | stance_shape | [StanceShape](#bosdyn-api-spot-StanceShape) | | | -| com_height | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Constant posture.
                                                                                                                                    For a phase-dependent posture, combine with a Body move. | +| com_height | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Constant posture.
                                                                                                                                    For a phase-dependent posture, combine with a Body move.
                                                                                                                                    Actually hip height regardless of payload configuration. | | body_translation_offset | [bosdyn.api.Vec3Value](#bosdyn-api-Vec3Value) | | | | body_rotation_offset | [EulerZYXValue](#bosdyn-api-spot-EulerZYXValue) | | | | low_speed_body_fraction | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | @@ -23442,7 +24231,8 @@ Parameters for the robot's crawling gait. | enable_perception_step_placement | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | | maximum_stumble_distance | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | How far the robot should stumble before giving up and freezing. | | trip_sensitivity | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | How sensitive we should be to trip detection.
                                                                                                                                    On the range [0, 1], where 1 is normal sensitivity and 0 is ignoring all trips.
                                                                                                                                    Useful for very aggressive gaits or when a costume is restricting leg motion. | -| animated_cycle_params | [AnimatedCycleParams](#bosdyn-api-spot-AnimatedCycleParams) | | Using an animated cycle to define the gait style | +| show_animated_cycle_params | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | Using an animated cycle to define the gait style | +| animated_cycle_params | [AnimatedCycleParams](#bosdyn-api-spot-AnimatedCycleParams) | | | @@ -23609,8 +24399,11 @@ Parameters specific to FrontUp move. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| absolute_position | [bosdyn.api.Vec2Value](#bosdyn-api-Vec2Value) | | | +| relative | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | If true, motion is specified relative to location at move start.
                                                                                                                                    If false, motion is specified in the dance frame. | +| absolute_position | [bosdyn.api.Vec2Value](#bosdyn-api-Vec2Value) | | Ignored if absolute = false. | | absolute_yaw | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| relative_position | [bosdyn.api.Vec2Value](#bosdyn-api-Vec2Value) | | Ignored if absolute = true; | +| relative_yaw | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | | step_position_stiffness | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | | duty_cycle | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | | link_to_next | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | Should we combine with the next move into a smooth trajectory. | @@ -23890,6 +24683,52 @@ Parameters specific to RunningMan move. + + +### SetAllColorParams + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| front_center_color | [Color](#bosdyn-api-spot-Color) | | | +| all_same_as_center | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| status_left_color | [Color](#bosdyn-api-spot-Color) | | | +| status_right_color | [Color](#bosdyn-api-spot-Color) | | | +| front_left_color | [Color](#bosdyn-api-spot-Color) | | | +| front_right_color | [Color](#bosdyn-api-spot-Color) | | | +| back_left_color | [Color](#bosdyn-api-spot-Color) | | | +| back_right_color | [Color](#bosdyn-api-spot-Color) | | | +| fade_in_slices | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| fade_out_slices | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | + + + + + + + + +### SetAudioVisualColorParams + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| front_center_color | [Color](#bosdyn-api-spot-Color) | | | +| all_same_as_center | [google.protobuf.BoolValue](#google-protobuf-BoolValue) | | | +| front_left_color | [Color](#bosdyn-api-spot-Color) | | | +| front_right_color | [Color](#bosdyn-api-spot-Color) | | | +| back_left_color | [Color](#bosdyn-api-spot-Color) | | | +| back_right_color | [Color](#bosdyn-api-spot-Color) | | | +| fade_in_slices | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | +| fade_out_slices | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | | + + + + + + ### SetColorParams @@ -23954,7 +24793,7 @@ Parameters for moves that can go to either side. | foot | [Leg](#bosdyn-api-spot-Leg) | | Which foot to use (FL = 1, FR = 2, HL = 3, HR = 4). | | offset | [bosdyn.api.Vec2Value](#bosdyn-api-Vec2Value) | | Offset of the foot from it's nominal position, in meters. | | second_foot | [Leg](#bosdyn-api-spot-Leg) | | Should we use a second foot? (None = 0, FL = 1, FR = 2, HL = 3, HR = 4). | -| swing_waypoint | [bosdyn.api.Vec3Value](#bosdyn-api-Vec3Value) | | Where should the swing foot go? This vector should be described in a gravity-aligned body
                                                                                                                                    frame relative to the centerpoint of the swing. If set to {0,0,0}, uses the default swing
                                                                                                                                    path. | +| swing_waypoint | [bosdyn.api.Vec3Value](#bosdyn-api-Vec3Value) | | Where should the swing foot go? This vector should be described in a gravity-aligned body
                                                                                                                                    frame relative to the center-point of the swing. If set to {0,0,0}, uses the default swing
                                                                                                                                    path. | | swing_height | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Parameters for altering swing.
                                                                                                                                    Note that these will have no effect if swing_waypoint is specified. As well, a zero (or
                                                                                                                                    nearly zero) value will be considered as an unspecified parameter.

                                                                                                                                    meters | | liftoff_velocity | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | m/s | | touchdown_velocity | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | m/s | @@ -24105,6 +24944,24 @@ Parameters specific to twerking + + +### BuzzerNoteParams.Note + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NOTE_UNKNOWN | 0 | | +| NOTE_C | 1 | | +| NOTE_D | 2 | | +| NOTE_E | 3 | | +| NOTE_F | 4 | | +| NOTE_G | 5 | | +| NOTE_A | 6 | | +| NOTE_B | 7 | | + + + ### Easing @@ -25125,8 +25982,10 @@ Defines properties of a choreography move. | controls_legs | [bool](#bool) | | | | controls_body | [bool](#bool) | | | | controls_gripper | [bool](#bool) | | | -| controls_lights | [bool](#bool) | | | +| controls_lights | [bool](#bool) | | Controls the face (status) lights. | | controls_annotations | [bool](#bool) | | | +| controls_audio_visual_lights | [bool](#bool) | | | +| controls_audio_visual_buzzer | [bool](#bool) | | | | is_looping | [bool](#bool) | | | | display | [ChoreographerDisplayInfo](#bosdyn-api-spot-ChoreographerDisplayInfo) | | Information for the GUI tool to visualize the sequence move info. | | animated_move_generated_id | [google.protobuf.StringValue](#google-protobuf-StringValue) | | Unique ID for the animated moves. This is sent with the UploadAnimatedMove request and use
                                                                                                                                    to track which version of the animated move is currently saved on robot. The ID can be unset,
                                                                                                                                    meaning the RPC which uploaded the animation did not provide an identifying hash. | @@ -25181,6 +26040,9 @@ Defines varying parameters for a particular instance of a move. | fade_color_params | [FadeColorParams](#bosdyn-api-spot-FadeColorParams) | | | | independent_color_params | [IndependentColorParams](#bosdyn-api-spot-IndependentColorParams) | | | | custom_gait_params | [CustomGaitParams](#bosdyn-api-spot-CustomGaitParams) | | | +| set_audio_visual_color_params | [SetAudioVisualColorParams](#bosdyn-api-spot-SetAudioVisualColorParams) | | | +| set_all_color_params | [SetAllColorParams](#bosdyn-api-spot-SetAllColorParams) | | | +| buzzer_note_params | [BuzzerNoteParams](#bosdyn-api-spot-BuzzerNoteParams) | | | | leg_joint_params | [LegJointParams](#bosdyn-api-spot-LegJointParams) | | | | animate_params | [AnimateParams](#bosdyn-api-spot-AnimateParams) | | | @@ -25406,6 +26268,8 @@ displayed with. | CATEGORY_MPC | 8 | | | CATEGORY_LIGHTS | 9 | | | CATEGORY_ANNOTATIONS | 10 | | +| CATEGORY_AUDIO_VISUAL_LIGHTS | 11 | | +| CATEGORY_AUDIO_VISUAL_BUZZER | 12 | | @@ -25676,8 +26540,8 @@ The status for the start recording request. | ListAllSequences | [ListAllSequencesRequest](#bosdyn-api-spot-ListAllSequencesRequest) | [ListAllSequencesResponse](#bosdyn-api-spot-ListAllSequencesResponse) | List the available choreography sequences currently on the robot. | | GetChoreographySequence | [GetChoreographySequenceRequest](#bosdyn-api-spot-GetChoreographySequenceRequest) | [GetChoreographySequenceResponse](#bosdyn-api-spot-GetChoreographySequenceResponse) | Return the ChoreographySequence with the given name and any requested animation data. | | GetAnimation | [GetAnimationRequest](#bosdyn-api-spot-GetAnimationRequest) | [GetAnimationResponse](#bosdyn-api-spot-GetAnimationResponse) | Return the full Animation message with the given name. | -| DeleteSequence | [DeleteSequenceRequest](#bosdyn-api-spot-DeleteSequenceRequest) | [DeleteSequenceResponse](#bosdyn-api-spot-DeleteSequenceResponse) | Delete a retained choreography sequence from the collection of user uploaded
                                                                                                                                    choreography sequences. | -| SaveSequence | [SaveSequenceRequest](#bosdyn-api-spot-SaveSequenceRequest) | [SaveSequenceResponse](#bosdyn-api-spot-SaveSequenceResponse) | Save a user uploaded choreography sequence to the robots collection of
                                                                                                                                    retained choreography sequences. | +| DeleteSequence | [DeleteSequenceRequest](#bosdyn-api-spot-DeleteSequenceRequest) | [DeleteSequenceResponse](#bosdyn-api-spot-DeleteSequenceResponse) | Delete a retained choreography sequence from the collection of user uploaded
                                                                                                                                    choreography sequences. | +| SaveSequence | [SaveSequenceRequest](#bosdyn-api-spot-SaveSequenceRequest) | [SaveSequenceResponse](#bosdyn-api-spot-SaveSequenceResponse) | Save a user uploaded choreography sequence to the robots collection of
                                                                                                                                    retained choreography sequences. | | ModifyChoreographyInfo | [ModifyChoreographyInfoRequest](#bosdyn-api-spot-ModifyChoreographyInfoRequest) | [ModifyChoreographyInfoResponse](#bosdyn-api-spot-ModifyChoreographyInfoResponse) | Modify the metadata of a choreography sequence. | | ClearAllSequenceFiles | [ClearAllSequenceFilesRequest](#bosdyn-api-spot-ClearAllSequenceFilesRequest) | [ClearAllSequenceFilesResponse](#bosdyn-api-spot-ClearAllSequenceFilesResponse) | Clear all retained choreography sequence files from robot memory. | | UploadChoreography | [UploadChoreographyRequest](#bosdyn-api-spot-UploadChoreographyRequest) | [UploadChoreographyResponse](#bosdyn-api-spot-UploadChoreographyResponse) | Upload a dance to the robot. | @@ -26243,7 +27107,7 @@ Parameters for offsetting the body from the normal default. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| base_offset_rt_footprint | [bosdyn.api.SE3Trajectory](#bosdyn-api-SE3Trajectory) | | Desired base offset relative to the footprint pseudo-frame.
                                                                                                                                    The footprint pseudo-frame is a gravity aligned frame with its origin located at the
                                                                                                                                    geometric center of the feet in the X-Y axis, and at the nominal height of the hips in
                                                                                                                                    the Z axis. The yaw of the frame (wrt the world) is calcuated by the average foot
                                                                                                                                    locations, and is aligned with the feet. | +| base_offset_rt_footprint | [bosdyn.api.SE3Trajectory](#bosdyn-api-SE3Trajectory) | | Desired base offset relative to the footprint pseudo-frame.
                                                                                                                                    The footprint pseudo-frame is a gravity aligned frame with its origin located at the
                                                                                                                                    geometric center of the feet in the X-Y axis, and at the nominal height of the hips in
                                                                                                                                    the Z axis. The yaw of the frame (wrt the world) is calculated by the average foot
                                                                                                                                    locations, and is aligned with the feet. | | body_assist_for_manipulation | [BodyControlParams.BodyAssistForManipulation](#bosdyn-api-spot-BodyControlParams-BodyAssistForManipulation) | | The base will adjust to assist with manipulation, adjusting its height, pitch, and yaw as
                                                                                                                                    a function of the hand's location. Note, manipulation assisted body control is only
                                                                                                                                    available for ArmCommand requests that control the end-effector, and are expressed in an
                                                                                                                                    inertial frame. For example, sending a ArmCartesianCommand request with root_frame_name
                                                                                                                                    set to "odom" will allow the robot to compute a body adjustment. However, sending a
                                                                                                                                    ArmCartesianCommand request with root_frame_name set to "body" or sending an
                                                                                                                                    ArmJointMoveCommand request is incompatible, and the body will reset to default height
                                                                                                                                    and orientation. | | body_pose | [BodyControlParams.BodyPose](#bosdyn-api-spot-BodyControlParams-BodyPose) | | An absolute desired position and orientation of the robot body origin. Command may be
                                                                                                                                    saturated to achievable or safe postures on receipt. Note: This parameter only has effect
                                                                                                                                    when coupled with a StandCommand. For other commands, the robot will fall back to
                                                                                                                                    defaults. | | rotation_setting | [BodyControlParams.RotationSetting](#bosdyn-api-spot-BodyControlParams-RotationSetting) | | The rotation setting for the robot body. Ignored if body_assist_for_manipulation or
                                                                                                                                    body_pose are enabled. | @@ -26257,7 +27121,7 @@ Parameters for offsetting the body from the normal default. ### BodyControlParams.BodyAssistForManipulation Instead of directly specify the base offset trajectory, these options allow the robot to -calcuate offsets based on the hand's location. If the robot does not have a SpotArm +calculate offsets based on the hand's location. If the robot does not have a SpotArm attached, sending this request will have no effect. @@ -26327,6 +27191,7 @@ Params common across spot movement and mobility. | external_force_params | [BodyExternalForceParams](#bosdyn-api-spot-BodyExternalForceParams) | | Robot Body External Force parameters | | disallow_non_stairs_pitch_limiting | [bool](#bool) | | Prevent the robot from pitching to get a better look at rearward terrain except in stairs
                                                                                                                                    mode. | | disable_nearmap_cliff_avoidance | [bool](#bool) | | Disable the secondary nearmap-based cliff avoidance that runs while on stairs. | +| hazard_detection_mode | [MobilityParams.HazardDetectionMode](#bosdyn-api-spot-MobilityParams-HazardDetectionMode) | | The selected option for hazard detection. | @@ -26361,7 +27226,7 @@ Ground contact parameters that describe the terrain. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| ground_mu_hint | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Terrain coefficient of friction user hint. This value must be postive and will clamped if
                                                                                                                                    necessary on the robot side. Best suggested values lie in the range between 0.4 and 0.8
                                                                                                                                    (which is the robot's default.) | +| ground_mu_hint | [google.protobuf.DoubleValue](#google-protobuf-DoubleValue) | | Terrain coefficient of friction user hint. This value must be positive and will be clamped if
                                                                                                                                    necessary on the robot side. Best suggested values lie in the range between 0.4 and 0.8
                                                                                                                                    (which is the robot's default.) | | enable_grated_floor | [bool](#bool) | | **Deprecated.** Deprecation Warning ***
                                                                                                                                    DEPRECATED as of 3.0.0: The boolean field has been replaced by the field grated_surfaces_mode
                                                                                                                                    The following field will be deprecated and moved to 'reserved' in a future release. | | grated_surfaces_mode | [TerrainParams.GratedSurfacesMode](#bosdyn-api-spot-TerrainParams-GratedSurfacesMode) | | The selected option for grated surfaces mode | @@ -26426,6 +27291,25 @@ The locomotion hint specifying the gait of the robot. + + +### MobilityParams.HazardDetectionMode +Semantic hazard detection can detect and classify objects or regions in the world as +obstacles or areas to avoid that would not normally be classified as such. Obstacle avoidance +still needs to be on for the robot to avoid these additional hazards. A CORE I/O is necessary +for semantic hazard detection. Using HAZARD_DETECTION_MODE_COST will prevent detected hazards +from becoming blocking obstacles, and instead add areas to try and avoid when navigating +autonomously. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| HAZARD_DETECTION_MODE_UNKNOWN | 0 | | +| HAZARD_DETECTION_MODE_OFF | 1 | | +| HAZARD_DETECTION_MODE_ON | 2 | | +| HAZARD_DETECTION_MODE_COST | 3 | | + + + ### MobilityParams.StairsMode @@ -26437,7 +27321,8 @@ defaults in order to optimize stair behavior. | STAIRS_MODE_UNKNOWN | 0 | Invalid; do not use. | | STAIRS_MODE_OFF | 1 | | | STAIRS_MODE_ON | 2 | | -| STAIRS_MODE_AUTO | 3 | Robot will automatically turn mode on or off | +| STAIRS_MODE_AUTO | 3 | Robot will automatically turn mode on or off. | +| STAIRS_MODE_PROHIBITED | 4 | Stairs will be detected and avoided. | @@ -26452,7 +27337,7 @@ The type of swing height for a step. | SWING_HEIGHT_LOW | 1 | Low-stepping. Robot will try to only swing legs a few cm away from ground. | | SWING_HEIGHT_MEDIUM | 2 | Default for most cases, use other values with caution. | | SWING_HEIGHT_HIGH | 3 | High-stepping. Possibly useful with degraded vision operation. | -| SWING_HEIGHT_AUTO | 4 | Swing height is automatically adjusted depending on the current state of the robot and environment. | +| SWING_HEIGHT_AUTO | 4 | Swing height is automatically adjusted depending on the current state | @@ -26584,72 +27469,6 @@ Results from foot height checks. - - -### GripperCameraCalibrationCommandRequest -Request for the GripperCameraCalibrationCommand service. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | -| lease | [bosdyn.api.Lease](#bosdyn-api-Lease) | | The Lease to show ownership of the robot. Lease required to issue any
                                                                                                                                    GripperCameraCalibration command. | -| command | [GripperCameraCalibrationCommandRequest.Command](#bosdyn-api-spot-GripperCameraCalibrationCommandRequest-Command) | | The command describing what the GripperCameraCalibration service should do. | - - - - - - - - -### GripperCameraCalibrationCommandResponse -Response for the GripperCameraCalibrationCommand service. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | -| lease_use_result | [bosdyn.api.LeaseUseResult](#bosdyn-api-LeaseUseResult) | | Details about how the lease was used. | - - - - - - - - -### GripperCameraCalibrationFeedbackRequest -Request for the GripperCameraCalibrationFeedback service. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | - - - - - - - - -### GripperCameraCalibrationFeedbackResponse -Response for the GripperCameraCalibrationFeedback service. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| header | [bosdyn.api.ResponseHeader](#bosdyn-api-ResponseHeader) | | Common response header. | -| status | [GripperCameraCalibrationFeedbackResponse.Status](#bosdyn-api-spot-GripperCameraCalibrationFeedbackResponse-Status) | | Status of camera calibration procedure. | -| progress | [float](#float) | | The approximate progress of the calibration routine, range [0-1].
                                                                                                                                    Status takes precedence over progress value. | -| lease_use_result | [bosdyn.api.LeaseUseResult](#bosdyn-api-LeaseUseResult) | | Details about how the lease was used. | - - - - - - ### HipRangeOfMotionResult @@ -26945,44 +27764,6 @@ Errors reflect an issue with robot calibration. - - -### GripperCameraCalibrationCommandRequest.Command - - -| Name | Number | Description | -| ---- | ------ | ----------- | -| COMMAND_UNKNOWN | 0 | Unused enum. | -| COMMAND_START | 1 | Start calibration routine. | -| COMMAND_CANCEL | 2 | Cancel calibration routine. | - - - - - -### GripperCameraCalibrationFeedbackResponse.Status - - -| Name | Number | Description | -| ---- | ------ | ----------- | -| STATUS_UNKNOWN | 0 | Unused enum. | -| STATUS_PROCESSING | 1 | The robot is actively running calibration routine. | -| STATUS_SUCCESS | 2 | The robot successfully ran calibration routine and
                                                                                                                                    is ready to use again. | -| STATUS_NEVER_RUN | 3 | Calibration routine has never been run. No feedback to give. | -| STATUS_USER_CANCELED | 4 | Calibration routine has been canceled mid-routine. | -| STATUS_POWER_ERROR | 5 | The robot is not powered on. | -| STATUS_LEASE_ERROR | 6 | Ownership error during calibration. | -| STATUS_CALIBRATION_ERROR | 8 | Calibration procedure produced an invalid result.
                                                                                                                                    This may occur in poor lighting conditions or if
                                                                                                                                    calibration target moved during calibration
                                                                                                                                    procedure. | -| STATUS_INITIALIZATION_ERROR | 9 | Something went wrong during initialization. Try running the command again or, if it
                                                                                                                                    persists, restarting the robot. | -| STATUS_INTERNAL_ERROR | 10 | Something extraordinary happened. Try power cycling robot or contact BD. | -| STATUS_TARGET_NOT_CENTERED | 11 | Target partially, but not fully, in view when starting calibration. | -| STATUS_TARGET_NOT_IN_VIEW | 12 | Target not visible when starting calibration. | -| STATUS_TARGET_NOT_GRAVITY_ALIGNED | 13 | Target not aligned with gravity when starting calibration. | -| STATUS_TARGET_UPSIDE_DOWN | 14 | Target upside down when starting calibration. | -| STATUS_STUCK | 15 | The robot took too long to reach the goal pose. | - - - ### HipRangeOfMotionResult.Error @@ -27008,7 +27789,7 @@ Errors reflect an issue with robot hardware. | ERROR_CLUTCH_SLIP | 2 | Error detected in clutch performance. | | ERROR_INVALID_RANGE_OF_MOTION | 3 | Error if a joint has an incorrect range of motion. | | ERROR_ENCODER_SHIFTED | 4 | Error if the measured endstops shifted from kin cal. | -| ERROR_COLLISION | 5 | Error if checking the joint would have a collsion. | +| ERROR_COLLISION | 5 | Error if checking the joint would have a collision. | @@ -27075,7 +27856,7 @@ Errors reflect an issue with payload configuration. | ---- | ------ | ----------- | | STATUS_UNKNOWN | 0 | Unknown | | STATUS_OK | 1 | Request was accepted. | -| STATUS_ERROR | 2 | An error ocurred. | +| STATUS_ERROR | 2 | An error occurred. | @@ -27164,8 +27945,6 @@ run periodically in order to keep the system running in the best possible condit | SpotCheckFeedback | [SpotCheckFeedbackRequest](#bosdyn-api-spot-SpotCheckFeedbackRequest) | [SpotCheckFeedbackResponse](#bosdyn-api-spot-SpotCheckFeedbackResponse) | Check the status of the spot check procedure. After procedure completes, this reports back
                                                                                                                                    results for specific joints and cameras. | | CameraCalibrationCommand | [CameraCalibrationCommandRequest](#bosdyn-api-spot-CameraCalibrationCommandRequest) | [CameraCalibrationCommandResponse](#bosdyn-api-spot-CameraCalibrationCommandResponse) | Send a camera calibration command to the robot. Used to start or abort a calibration routine. | | CameraCalibrationFeedback | [CameraCalibrationFeedbackRequest](#bosdyn-api-spot-CameraCalibrationFeedbackRequest) | [CameraCalibrationFeedbackResponse](#bosdyn-api-spot-CameraCalibrationFeedbackResponse) | Check the status of the camera calibration procedure. | -| GripperCameraCalibrationCommand | [GripperCameraCalibrationCommandRequest](#bosdyn-api-spot-GripperCameraCalibrationCommandRequest) | [GripperCameraCalibrationCommandResponse](#bosdyn-api-spot-GripperCameraCalibrationCommandResponse) | Send a command to the GripperCameraCalibration service. | -| GripperCameraCalibrationFeedback | [GripperCameraCalibrationFeedbackRequest](#bosdyn-api-spot-GripperCameraCalibrationFeedbackRequest) | [GripperCameraCalibrationFeedbackResponse](#bosdyn-api-spot-GripperCameraCalibrationFeedbackResponse) | Check the status of the GripperCameraCalibration procedure. | @@ -27733,7 +28512,7 @@ Audio capture channel | ----- | ---- | ----- | ----------- | | focal_length | [bosdyn.api.Vec2](#bosdyn-api-Vec2) | | Focal_length in pixels | | center_point | [bosdyn.api.Vec2](#bosdyn-api-Vec2) | | Center point in pixels | -| k1 | [float](#float) | | The following 4 parameters are radial distortion coefficeints to 4 orders.
                                                                                                                                    See: https://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction
                                                                                                                                    If all 4 of these values are 0, do not apply any correction. | +| k1 | [float](#float) | | The following 4 parameters are radial distortion coefficients to 4 orders.
                                                                                                                                    See: https://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction
                                                                                                                                    If all 4 of these values are 0, do not apply any correction. | | k2 | [float](#float) | | | | k3 | [float](#float) | | | | k4 | [float](#float) | | | @@ -28080,7 +28859,7 @@ used by the video stream. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| name | [string](#string) | | Unique identifer for a screen. | +| name | [string](#string) | | Unique identifier for a screen. | @@ -28194,7 +28973,7 @@ Result of setting the camera layout. | COLORMAP_GREYSCALE | 1 | the greyscale colormap maps the minimum value (defined below) to black and the maximum
                                                                                                                                    value (defined below) to white | | COLORMAP_JET | 2 | the jet colormap uses blues for values closer to the minimum, and red values for values
                                                                                                                                    closer to the maximum. | | COLORMAP_INFERNO | 3 | the inferno colormap maps the minimum value to black and the maximum value to light
                                                                                                                                    yellow RGB(252, 252, 164). It is also easier to view by those with color blindness | -| COLORMAP_TURBO | 4 | the turbo colormap uses blues for values closer to the minumum, red values for values
                                                                                                                                    closer to the maximum, and addresses some short comings of the jet color map such as
                                                                                                                                    false detail, banding and color blindness | +| COLORMAP_TURBO | 4 | the turbo colormap uses blues for values closer to the minimum, red values for values
                                                                                                                                    closer to the maximum, and addresses some short comings of the jet color map such as
                                                                                                                                    false detail, banding and color blindness | @@ -28291,7 +29070,7 @@ Data on the current status of built-in tests. ### GetBITStatusResponse.Degradation -Degredations are not necessesarily faults; a unit +Degradations are not necessarily faults; a unit with no installed mechanical PTZ will behave differently, but nothing's actually wrong. @@ -28389,7 +29168,7 @@ The temperature of a particular component. ### GetBITStatusResponse.Degradation.DegradationType -Systems that can experience performance degredations. +Systems that can experience performance degradations. | Name | Number | Description | | ---- | ------ | ----------- | @@ -29104,7 +29883,7 @@ Turn components off and then back on without needing two separate requests. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | header | [bosdyn.api.RequestHeader](#bosdyn-api-RequestHeader) | | Common request header. | -| status | [PowerStatus](#bosdyn-api-spot_cam-PowerStatus) | | status indicates the devices for which cycle-power is requested
                                                                                                                                    'true' for cycle-power, else no effect
                                                                                                                                    power cycle will not be performed on a given device if its state is power-off prior to this call | +| status | [PowerStatus](#bosdyn-api-spot_cam-PowerStatus) | | status indicates the devices for which cycle-power is requested
                                                                                                                                    'true' for cycle-power, else no effect
                                                                                                                                    power cycle will not be performed on a given device if its state is power-off prior to this
                                                                                                                                    call | @@ -29606,7 +30385,7 @@ Upload and play sounds over the SpotCam's speakers. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | PlaySound | [PlaySoundRequest](#bosdyn-api-spot_cam-PlaySoundRequest) | [PlaySoundResponse](#bosdyn-api-spot_cam-PlaySoundResponse) | Given a soundRequest that identifies a single sound present in the system's sound effects
                                                                                                                                    table, PlaySound executes the sound effect. | -| LoadSound | [LoadSoundRequest](#bosdyn-api-spot_cam-LoadSoundRequest) stream | [LoadSoundResponse](#bosdyn-api-spot_cam-LoadSoundResponse) | LoadSound loads a sound effect into the system's sound table. The stream must contain a wav
                                                                                                                                    file, with a RIFF header describing it. The arguement is a stream, to allow for sounds that
                                                                                                                                    are bigger then the MTU of the network; in this case, the complete stream must contain the
                                                                                                                                    entire sound. If the stream ends early, an error will be returned. The header and sound
                                                                                                                                    fields of the entire stream must be the same. | +| LoadSound | [LoadSoundRequest](#bosdyn-api-spot_cam-LoadSoundRequest) stream | [LoadSoundResponse](#bosdyn-api-spot_cam-LoadSoundResponse) | LoadSound loads a sound effect into the system's sound table. The stream must contain a wav
                                                                                                                                    file, with a RIFF header describing it. The argument is a stream, to allow for sounds that
                                                                                                                                    are bigger then the MTU of the network; in this case, the complete stream must contain the
                                                                                                                                    entire sound. If the stream ends early, an error will be returned. The header and sound
                                                                                                                                    fields of the entire stream must be the same. | | DeleteSound | [DeleteSoundRequest](#bosdyn-api-spot_cam-DeleteSoundRequest) | [DeleteSoundResponse](#bosdyn-api-spot_cam-DeleteSoundResponse) | Delete the sound identified in the argument from the system's sound table. | | ListSounds | [ListSoundsRequest](#bosdyn-api-spot_cam-ListSoundsRequest) | [ListSoundsResponse](#bosdyn-api-spot_cam-ListSoundsResponse) | ListSounds returns a list of all of the sound effects that the system knows about. | | SetVolume | [SetVolumeRequest](#bosdyn-api-spot_cam-SetVolumeRequest) | [SetVolumeResponse](#bosdyn-api-spot_cam-SetVolumeResponse) | Set the overall volume level for playing sounds. | @@ -29642,7 +30421,7 @@ Query temperature and built-in test results. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | GetTemperature | [GetTemperatureRequest](#bosdyn-api-spot_cam-GetTemperatureRequest) | [GetTemperatureResponse](#bosdyn-api-spot_cam-GetTemperatureResponse) | GetTemperature returns a list of thermometers in the system, and the temperature that they
                                                                                                                                    measure. | -| GetBITStatus | [GetBITStatusRequest](#bosdyn-api-spot_cam-GetBITStatusRequest) | [GetBITStatusResponse](#bosdyn-api-spot_cam-GetBITStatusResponse) | GetBitStatus returns two lists; a list of system events, and a list of ways that the system
                                                                                                                                    is degraded; for instance, a degredation may include a missing PTZ unit, or a missing USB
                                                                                                                                    storage device. | +| GetBITStatus | [GetBITStatusRequest](#bosdyn-api-spot_cam-GetBITStatusRequest) | [GetBITStatusResponse](#bosdyn-api-spot_cam-GetBITStatusResponse) | GetBitStatus returns two lists; a list of system events, and a list of ways that the system
                                                                                                                                    is degraded; for instance, a degradation may include a missing PTZ unit, or a missing USB
                                                                                                                                    storage device. | | ClearBITEvents | [ClearBITEventsRequest](#bosdyn-api-spot_cam-ClearBITEventsRequest) | [ClearBITEventsResponse](#bosdyn-api-spot_cam-ClearBITEventsResponse) | ClearBitEvents clears out the events list of the BITStatus structure. | | GetSystemLog | [GetSystemLogRequest](#bosdyn-api-spot_cam-GetSystemLogRequest) | [GetSystemLogResponse](#bosdyn-api-spot_cam-GetSystemLogResponse) stream | GetSystemLog retrieves an encrypted log of system events, for factory diagnosis of possible
                                                                                                                                    issues. The data streamed back should be concatenated to a single file, before sending to the
                                                                                                                                    manufacturer. | @@ -29668,7 +30447,7 @@ Trigger data acquisitions, and retrieve resulting data. | Store | [StoreRequest](#bosdyn-api-spot_cam-StoreRequest) | [StoreResponse](#bosdyn-api-spot_cam-StoreResponse) | Store queues up a Logpoint, which is a bit of media that the user wishes to store to disk
                                                                                                                                    (still images are supported for now, more media types will be supported in the future) | | GetStatus | [GetStatusRequest](#bosdyn-api-spot_cam-GetStatusRequest) | [GetStatusResponse](#bosdyn-api-spot_cam-GetStatusResponse) | GetStatus reads the 'name' field of the Logpoint contained in GetStatusRequest, and fills in
                                                                                                                                    the rest of the fields. Mainly useful for getting the 'state' of the logpoint. | | Tag | [TagRequest](#bosdyn-api-spot_cam-TagRequest) | [TagResponse](#bosdyn-api-spot_cam-TagResponse) | Tag updates the 'tag' field of the Logpoint that's passed, which must exist. | -| EnableDebug | [DebugRequest](#bosdyn-api-spot_cam-DebugRequest) | [DebugResponse](#bosdyn-api-spot_cam-DebugResponse) | EnableDebug starts the periodic logging of health data to the database; this increases disk
                                                                                                                                    utilization, but will record data that is useful post-mortum | +| EnableDebug | [DebugRequest](#bosdyn-api-spot_cam-DebugRequest) | [DebugResponse](#bosdyn-api-spot_cam-DebugResponse) | EnableDebug starts the periodic logging of health data to the database; this increases disk
                                                                                                                                    utilization, but will record data that is useful post-mortem | | ListCameras | [ListCamerasRequest](#bosdyn-api-spot_cam-ListCamerasRequest) | [ListCamerasResponse](#bosdyn-api-spot_cam-ListCamerasResponse) | ListCameras returns a list of strings that identify valid cameras for logging | | RetrieveRawData | [RetrieveRawDataRequest](#bosdyn-api-spot_cam-RetrieveRawDataRequest) | [RetrieveRawDataResponse](#bosdyn-api-spot_cam-RetrieveRawDataResponse) stream | Retrieve returns all raw data associated with a given logpoint | | Retrieve | [RetrieveRequest](#bosdyn-api-spot_cam-RetrieveRequest) | [RetrieveResponse](#bosdyn-api-spot_cam-RetrieveResponse) stream | Retrieve returns all data associated with a given logpoint | @@ -30516,7 +31295,7 @@ A SE3 pose and velocity that can be used as a point within a trajectory. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | pose | [SE3Pose](#bosdyn-api-SE3Pose) | | Required pose the robot will try and achieve. | -| velocity | [SE3Velocity](#bosdyn-api-SE3Velocity) | | Optional velocity (linear and angular) the robot will try and achieve. | +| velocity | [SE3Velocity](#bosdyn-api-SE3Velocity) | | Optional velocity (linear and angular) the robot will try and achieve.
                                                                                                                                    Linear and angular velocity is expressed with respect to the base frame of the pose. | | time_since_reference | [google.protobuf.Duration](#google-protobuf-Duration) | | The duration to reach the point relative to the trajectory reference time. | @@ -31081,12 +31860,13 @@ the mutation was applied to if the request succeeds. ### NoGoRegionProperties -A box no-go region +A box or circle no-go region | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | box | [Box2WithFrame](#bosdyn-api-Box2WithFrame) | | | +| circle | [CircleWithFrame](#bosdyn-api-CircleWithFrame) | | | | disable_foot_obstacle_generation | [bool](#bool) | | If set true, will NOT create a foot obstacle for this region. | | disable_body_obstacle_generation | [bool](#bool) | | If set true, will NOT create a body obstacle for this region. | | disable_foot_obstacle_inflation | [bool](#bool) | | If set true, and a foot obstacle is being generated, will make the foot obstacle the exact
                                                                                                                                    size specified in the "region" field and NOT inflate by approx. robot foot width. | @@ -31151,7 +31931,7 @@ have multiple different properties that are all associated with the single objec | dock_properties | [DockProperties](#bosdyn-api-DockProperties) | | Properties describing a dock | | ray_properties | [RayProperties](#bosdyn-api-RayProperties) | | A ray pointing at the object. Useful in cases where position is unknown but direction is
                                                                                                                                    known. | | bounding_box_properties | [BoundingBoxProperties](#bosdyn-api-BoundingBoxProperties) | | Bounding box in the world, oriented at the location provided in the transforms_snapshot. | -| staircase_properties | [StaircaseProperties](#bosdyn-api-StaircaseProperties) | | The staircase properties provide information that helps the robot traverse or see a staircase. | +| staircase_properties | [StaircaseProperties](#bosdyn-api-StaircaseProperties) | | The staircase properties provide information that helps the robot traverse or see a
                                                                                                                                    staircase. | | gps_properties | [GpsProperties](#bosdyn-api-GpsProperties) | | Information about the Earth relative to the robot, localized by GPS. | | additional_properties | [google.protobuf.Any](#google-protobuf-Any) | | An extra field for application-specific object properties. | diff --git a/protos/bosdyn/api/robot_command_service.proto b/protos/bosdyn/api/robot_command_service.proto index e92891a8c..54ffc8df8 100644 --- a/protos/bosdyn/api/robot_command_service.proto +++ b/protos/bosdyn/api/robot_command_service.proto @@ -31,7 +31,7 @@ service RobotCommandService { // This service is used to stream high rate commands to the robot once they have been activated // using RobotCommandService.RobotCommand // This service is in BETA and may undergo changes in future releases. - service RobotCommandStreamingService { +service RobotCommandStreamingService { // Command updates for joint control rpc JointControlStream(stream JointControlStreamRequest) returns (JointControlStreamResponse) {} } diff --git a/protos/bosdyn/api/robot_id.proto b/protos/bosdyn/api/robot_id.proto index 9b10cdcb7..aeb050ba6 100644 --- a/protos/bosdyn/api/robot_id.proto +++ b/protos/bosdyn/api/robot_id.proto @@ -39,14 +39,14 @@ message RobotId { // The software versioning number for a release. message SoftwareVersion { - // Signficant changes to software. - int32 major_version = 1; + // Significant changes to software. + int32 major_version = 1; - // Normal changes to software. - int32 minor_version = 2; + // Normal changes to software. + int32 minor_version = 2; - // Fixes which should not change intended capabilities or affect compatibility. - int32 patch_level = 3; + // Fixes which should not change intended capabilities or affect compatibility. + int32 patch_level = 3; } // Description of the software release currently running on the robot. diff --git a/protos/bosdyn/api/robot_id_service.proto b/protos/bosdyn/api/robot_id_service.proto index 11d469604..213330a07 100644 --- a/protos/bosdyn/api/robot_id_service.proto +++ b/protos/bosdyn/api/robot_id_service.proto @@ -18,8 +18,6 @@ import "bosdyn/api/robot_id.proto"; service RobotIdService { // Get the robot id information. The ID contains basic information about a robot // which is made available over the network as part of robot discovery without - //requiring user authentication. - rpc GetRobotId(RobotIdRequest) returns (RobotIdResponse) { - } + // requiring user authentication. + rpc GetRobotId(RobotIdRequest) returns (RobotIdResponse) {} } - diff --git a/protos/bosdyn/api/robot_state.proto b/protos/bosdyn/api/robot_state.proto index ebac50c3e..c859fa951 100644 --- a/protos/bosdyn/api/robot_state.proto +++ b/protos/bosdyn/api/robot_state.proto @@ -98,6 +98,9 @@ message RobotState { // Temperature data for the motors. SystemState system_state = 13; + // Robot behavior states + BehaviorState behavior_state = 14; + reserved 9; } @@ -396,7 +399,7 @@ message KinematicState { // A tree-based collection of transformations. See // https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual - // documentation on frames. The snapshop will include the following frames: + // documentation on frames. The snapshot will include the following frames: // “odom”: An inertial frame that estimates the fixed location in the world (relative to where // the robot is booted up) using the kinematics of the robot. // @@ -416,12 +419,16 @@ message KinematicState { // "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be // converted into a plane (a point and normal). // + // “feet_center”: A gravity-aligned frame representing the robot's footprint. The position is at + // the geometric center of the robot's feet. The x-axis is aligned such that it points from the + // center of the rear feet to the center of the front feet in the x-y plane. + // // For robots with a SpotArm attached, see // https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual - // documentation on SpotArm specific frames. The snaphot will also include the following frames: - // "hand": The hand frame is used by many of the ArmCommand requests available in the API. The - // origin is slightly in front of the gripper's palm plate and its oreination is aligned with - // 'arm0.link_wr1'. + // documentation on SpotArm specific frames. The snapshot will also include the following + // frames: "hand": The hand frame is used by many of the ArmCommand requests available in the + // API. The origin is slightly in front of the gripper's palm plate and its orientation is + // aligned with 'arm0.link_wr1'. // // "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation. // The origin of the frame is at the end of the link on its rotational axis. It's x-axis is @@ -467,7 +474,7 @@ message MotorTemperature { double temperature = 2; } -// This describes any current behaviror faults on the robot, which would block any robot commands +// This describes any current behavior faults on the robot, which would block any robot commands // from going through. These can be cleared using the ClearBehaviorFault rpc in the robot command // service. message BehaviorFaultState { @@ -475,7 +482,7 @@ message BehaviorFaultState { repeated BehaviorFault faults = 1; } -// The details of what the behavior fault consistents of, and the id for the fault. The unique +// The details of what the behavior fault consists of, and the id for the fault. The unique // behavior_fault_id can be used to clear the fault in robot command service ClearBehaviorFault rpc. message BehaviorFault { // Behavior fault unique id @@ -725,11 +732,11 @@ message RobotHardwareConfigurationResponse { message RobotLinkModelRequest { // Common request header. RequestHeader header = 1; - // The link name of which the OBJ file shoould represent. + // The link name of which the OBJ file should represent. string link_name = 2; } -// The RobotLinkModel response message returns the OBJ file for a specifc robot link. +// The RobotLinkModel response message returns the OBJ file for a specific robot link. message RobotLinkModelResponse { // Common response header. ResponseHeader header = 1; @@ -784,7 +791,8 @@ message CombinedJointStates { // Robot clock timestamp corresponding to these readings. google.protobuf.Timestamp acquisition_timestamp = 1; - // The ordering of joints in these repeated fields are the same as (TODO where) + // The ordering of joints in these repeated fields follows the order defined by the + // bosdyn.api.spot.JointIndex enum. repeated float position = 2; repeated float velocity = 3; repeated float load = 4; @@ -870,3 +878,15 @@ message RobotStateStreamResponse { CommandState last_command = 4; } + +// The current state of the behavior +message BehaviorState { + enum State { + STATE_UNKNOWN = 0; // Unknown behavior state + STATE_NOT_READY = 1; // The robot is not ready to move + STATE_TRANSITION = 2; // The robot is in transition from sit to stand or from stand to sit + STATE_STANDING = 3; // The robot is standing in place + STATE_STEPPING = 4; // The robot is stepping + } + State state = 1; +} diff --git a/protos/bosdyn/api/robot_state_service.proto b/protos/bosdyn/api/robot_state_service.proto index 2a9aea411..dc0c68941 100644 --- a/protos/bosdyn/api/robot_state_service.proto +++ b/protos/bosdyn/api/robot_state_service.proto @@ -25,7 +25,7 @@ service RobotStateService { rpc GetRobotHardwareConfiguration(RobotHardwareConfigurationRequest) returns (RobotHardwareConfigurationResponse) {} - // Returns the OBJ file for a specifc robot link. Intended to be called after + // Returns the OBJ file for a specific robot link. Intended to be called after // GetRobotHardwareConfiguration, using the link names returned by that call. rpc GetRobotLinkModel(RobotLinkModelRequest) returns (RobotLinkModelResponse) {} diff --git a/protos/bosdyn/api/service_customization.proto b/protos/bosdyn/api/service_customization.proto index 97d80fc85..0a1984596 100644 --- a/protos/bosdyn/api/service_customization.proto +++ b/protos/bosdyn/api/service_customization.proto @@ -34,7 +34,7 @@ message CustomParam { // Type and type-specific specifications of this parameter. oneof spec { // This parameter is actually a set of sub-parameters. - // Useful for setting up a paramter hierarchy, e.g. + // Useful for setting up a parameter hierarchy, e.g. // param A // / \ // / \ @@ -68,7 +68,7 @@ message CustomParam { message UserInterfaceInfo { // This string is an optional display name for the UI. If left unset, UI will use the // DictParam key to label the corresponding UI element. DictParam key is meant to be - // machine readable, and shouldn't change accross releases. display_name is meant to be + // machine readable, and shouldn't change across releases. display_name is meant to be // human readable, and can change from release to release if needed. string display_name = 1; @@ -117,11 +117,11 @@ message DictParam { // // Example 1 - A camera that advertises an "exposure" parameter: // OneOf Option 1: Auto exposure [no additional parameters] -// OneOf Option 2: Manual exposure [additonal exposure double parameter from 0 - 100 ms] +// OneOf Option 2: Manual exposure [additional exposure double parameter from 0 - 100 ms] // // Example 2 - A NCB worker that will alert if temperature outside a specified bound: // OneOf Option 1: No alert [no additional parameters] -// OneOf Option 2: Alert if above max [addional max_temp parameter] +// OneOf Option 2: Alert if above max [additional max_temp parameter] // OneOf Option 3: Alert if below min [additional min_temp parameter] // OneOf Option 4: Alert if above max or below min [additional max_temp and min_temp // parameters] @@ -269,7 +269,7 @@ message RegionOfInterestParam { // - Image services // - Network compute bridge workers that accept a single image // - // Othertimes, it might not be clear which image an ROI is supposed to reference. In those + // Other times, it might not be clear which image an ROI is supposed to reference. In those // cases, the Spec for the ROI can advertise which image it wants. ServiceAndSource service_and_source = 1; @@ -277,8 +277,8 @@ message RegionOfInterestParam { // selection. AreaI default_area = 2; - // Area may eventually contain many shape primatives. In that case, services can constrain - // which primatives they accept. These will be opt in, so that adding new primative types + // Area may eventually contain many shape primitives. In that case, services can constrain + // which primitives they accept. These will be opt in, so that adding new primitive types // won't be automatically advertised by older services. bool allows_rectangle = 3; } @@ -324,5 +324,4 @@ message CustomParamError { // List of error messages from this parameter and its children repeated string error_messages = 5; - } diff --git a/protos/bosdyn/api/service_fault.proto b/protos/bosdyn/api/service_fault.proto index 319176f83..96bbfe3c8 100644 --- a/protos/bosdyn/api/service_fault.proto +++ b/protos/bosdyn/api/service_fault.proto @@ -15,7 +15,7 @@ import "google/protobuf/duration.proto"; // Information necessary to uniquely specify a service fault. // A service fault typically is associated with a service running on the robot or a -// payload. Occassionally, the fault may pertain to a payload but no specific service +// payload. Occasionally, the fault may pertain to a payload but no specific service // on the payload. In that situation, no service_name should not be specified and instead // a payload_guid should be specified. Otherwise, in the standard case of a service // originating fault, only the service_name should be specified and the payload_guid @@ -77,7 +77,7 @@ message ServiceFault { // The severity level will have some indication of the potential breakage // resulting from the fault. For example, a fault associated with payload // X and severity level SEVERITY_INFO may indicate the payload is in an - // unexpected state but still operational. However, a fault with serverity + // unexpected state but still operational. However, a fault with severity // level SEVERITY_CRITICAL may indicate the payload is no // longer operational. Severity severity = 4; @@ -108,7 +108,7 @@ message TriggerServiceFaultResponse { // UNKNOWN should never be used. STATUS_UNKNOWN = 0; - // Success. The fault has been triggerd. + // Success. The fault has been triggered. STATUS_OK = 1; // ServiceFaultId already in active faults. diff --git a/protos/bosdyn/api/signals.proto b/protos/bosdyn/api/signals.proto index ded569318..2291a47aa 100644 --- a/protos/bosdyn/api/signals.proto +++ b/protos/bosdyn/api/signals.proto @@ -17,32 +17,32 @@ import "google/protobuf/wrappers.proto"; // Signal display information. message SignalDisplayInfo { - // Optional display name typically used for signal acronyms or abbreviations. - // Ex: "PT1" (short name) - // If unset, no name will be displayed. - string name = 1; - - // An optional description that provides additional information about the signal. - // Ex: "Pressure Transducer 1" (long name) - // If unset, no description will be displayed. - string description = 2; - - // This is an optional sorting hint for how to display a set of signals. - // If unset, the list will be sorted alphabetically by name or id. - int64 order = 3; + // Optional display name typically used for signal acronyms or abbreviations. + // Ex: "PT1" (short name) + // If unset, no name will be displayed. + string name = 1; + + // An optional description that provides additional information about the signal. + // Ex: "Pressure Transducer 1" (long name) + // If unset, no description will be displayed. + string description = 2; + + // This is an optional sorting hint for how to display a set of signals. + // If unset, the list will be sorted alphabetically by name or id. + int64 order = 3; } // Sensor output specification. message SensorOutputSpec { // Min and max (lower and upper) range of the sensor. - bosdyn.api.Bounds bounds = 1; // Ex: 0.0 - 100.0 psia - google.protobuf.DoubleValue resolution = 2; // Ex: 0.02 (+/-) + bosdyn.api.Bounds bounds = 1; // Ex: 0.0 - 100.0 psia + google.protobuf.DoubleValue resolution = 2; // Ex: 0.02 (+/-) // The units of the sensor data. - Units units = 3; // Ex: "psia" + Units units = 3; // Ex: "psia" // The sample rate of the sensor. - google.protobuf.DoubleValue sample_rate = 4; // Ex: 0.5 Hz + google.protobuf.DoubleValue sample_rate = 4; // Ex: 0.5 Hz } // Alert condition specifications for a double, int, or boolean signal. diff --git a/protos/bosdyn/api/spot/choreography_params.proto b/protos/bosdyn/api/spot/choreography_params.proto index 2c17eb41b..02d56fc5c 100644 --- a/protos/bosdyn/api/spot/choreography_params.proto +++ b/protos/bosdyn/api/spot/choreography_params.proto @@ -284,8 +284,18 @@ message CrawlParams { } message GotoParams { + // If true, motion is specified relative to location at move start. + // If false, motion is specified in the dance frame. + google.protobuf.BoolValue relative = 6; + + // Ignored if absolute = false. Vec2Value absolute_position = 1; google.protobuf.DoubleValue absolute_yaw = 2; + + // Ignored if absolute = true; + Vec2Value relative_position = 7; + google.protobuf.DoubleValue relative_yaw = 8; + google.protobuf.DoubleValue step_position_stiffness = 3; google.protobuf.DoubleValue duty_cycle = 4; // Should we combine with the next move into a smooth trajectory. @@ -366,7 +376,7 @@ message StepParams { // Should we use a second foot? (None = 0, FL = 1, FR = 2, HL = 3, HR = 4). Leg second_foot = 3; // Where should the swing foot go? This vector should be described in a gravity-aligned body - // frame relative to the centerpoint of the swing. If set to {0,0,0}, uses the default swing + // frame relative to the center-point of the swing. If set to {0,0,0}, uses the default swing // path. Vec3Value swing_waypoint = 5; // Parameters for altering swing. @@ -638,6 +648,49 @@ message RippleColorParams { google.protobuf.DoubleValue increment_slices = 5; } +message SetAudioVisualColorParams { + Color front_center_color = 1; + google.protobuf.BoolValue all_same_as_center = 2; + Color front_left_color = 3; + Color front_right_color = 4; + Color back_left_color = 5; + Color back_right_color = 6; + google.protobuf.DoubleValue fade_in_slices = 7; + google.protobuf.DoubleValue fade_out_slices = 8; +} + +message SetAllColorParams { + Color front_center_color = 1; + google.protobuf.BoolValue all_same_as_center = 2; + Color status_left_color = 3; + Color status_right_color = 4; + Color front_left_color = 5; + Color front_right_color = 6; + Color back_left_color = 7; + Color back_right_color = 8; + google.protobuf.DoubleValue fade_in_slices = 9; + google.protobuf.DoubleValue fade_out_slices = 10; +} + +message BuzzerNoteParams { + enum Note { + NOTE_UNKNOWN = 0; + NOTE_C = 1; + NOTE_D = 2; + NOTE_E = 3; + NOTE_F = 4; + NOTE_G = 5; + NOTE_A = 6; + NOTE_B = 7; + } + Note note = 1; + + google.protobuf.BoolValue sharp = 2; + google.protobuf.BoolValue flat = 3; + + google.protobuf.Int32Value octave = 4; +} + message LegJointParams { google.protobuf.DoubleValue fl_hx = 1; google.protobuf.DoubleValue fl_hy = 2; @@ -682,6 +735,15 @@ message AnimatedCycleParams { google.protobuf.BoolValue enable_animation_duration = 2; google.protobuf.BoolValue enable_leg_timing = 3; google.protobuf.BoolValue enable_stance_shape = 4; + google.protobuf.BoolValue enable_body_offset = 5; + google.protobuf.BoolValue enable_body_motion = 6; + google.protobuf.DoubleValue body_x_multiplier = 7; + google.protobuf.DoubleValue body_y_multiplier = 8; + google.protobuf.DoubleValue body_z_multiplier = 9; + google.protobuf.DoubleValue body_roll_multiplier = 10; + google.protobuf.DoubleValue body_pitch_multiplier = 11; + google.protobuf.DoubleValue body_yaw_multiplier = 12; + google.protobuf.BoolValue enable_swings_xy = 13; } message CustomGaitParams { @@ -712,6 +774,7 @@ message CustomGaitParams { // Constant posture. // For a phase-dependent posture, combine with a Body move. + // Actually hip height regardless of payload configuration. google.protobuf.DoubleValue com_height = 20; Vec3Value body_translation_offset = 21; EulerZYXValue body_rotation_offset = 22; @@ -766,6 +829,7 @@ message CustomGaitParams { google.protobuf.DoubleValue trip_sensitivity = 141; // Using an animated cycle to define the gait style + google.protobuf.BoolValue show_animated_cycle_params = 160; AnimatedCycleParams animated_cycle_params = 161; } diff --git a/protos/bosdyn/api/spot/choreography_sequence.proto b/protos/bosdyn/api/spot/choreography_sequence.proto index e3d51fbfc..91effcad9 100644 --- a/protos/bosdyn/api/spot/choreography_sequence.proto +++ b/protos/bosdyn/api/spot/choreography_sequence.proto @@ -565,6 +565,9 @@ message MoveParams { FadeColorParams fade_color_params = 41; IndependentColorParams independent_color_params = 42; CustomGaitParams custom_gait_params = 43; + SetAudioVisualColorParams set_audio_visual_color_params = 44; + SetAllColorParams set_all_color_params = 45; + BuzzerNoteParams buzzer_note_params = 46; LegJointParams leg_joint_params = 100; @@ -667,8 +670,10 @@ message MoveInfo { bool controls_legs = 9; bool controls_body = 10; bool controls_gripper = 12; - bool controls_lights = 17; + bool controls_lights = 17; // Controls the face (status) lights. bool controls_annotations = 18; + bool controls_audio_visual_lights = 20; + bool controls_audio_visual_buzzer = 21; bool is_looping = 19; // Information for the GUI tool to visualize the sequence move info. @@ -717,6 +722,8 @@ message ChoreographerDisplayInfo { CATEGORY_MPC = 8; CATEGORY_LIGHTS = 9; CATEGORY_ANNOTATIONS = 10; + CATEGORY_AUDIO_VISUAL_LIGHTS = 11; + CATEGORY_AUDIO_VISUAL_BUZZER = 12; } Category category = 16; } diff --git a/protos/bosdyn/api/spot/choreography_service.proto b/protos/bosdyn/api/spot/choreography_service.proto index 514c631ea..65c7a3768 100644 --- a/protos/bosdyn/api/spot/choreography_service.proto +++ b/protos/bosdyn/api/spot/choreography_service.proto @@ -20,24 +20,27 @@ service ChoreographyService { rpc ListAllSequences(ListAllSequencesRequest) returns (ListAllSequencesResponse) {} // Return the ChoreographySequence with the given name and any requested animation data. - rpc GetChoreographySequence(GetChoreographySequenceRequest) returns (GetChoreographySequenceResponse) {} + rpc GetChoreographySequence(GetChoreographySequenceRequest) + returns (GetChoreographySequenceResponse) {} // Return the full Animation message with the given name. rpc GetAnimation(GetAnimationRequest) returns (GetAnimationResponse) {} - // Delete a retained choreography sequence from the collection of user uploaded + // Delete a retained choreography sequence from the collection of user uploaded // choreography sequences. rpc DeleteSequence(DeleteSequenceRequest) returns (DeleteSequenceResponse) {} - // Save a user uploaded choreography sequence to the robots collection of + // Save a user uploaded choreography sequence to the robots collection of // retained choreography sequences. rpc SaveSequence(SaveSequenceRequest) returns (SaveSequenceResponse) {} // Modify the metadata of a choreography sequence. - rpc ModifyChoreographyInfo(ModifyChoreographyInfoRequest) returns (ModifyChoreographyInfoResponse) {} + rpc ModifyChoreographyInfo(ModifyChoreographyInfoRequest) + returns (ModifyChoreographyInfoResponse) {} // Clear all retained choreography sequence files from robot memory. - rpc ClearAllSequenceFiles(ClearAllSequenceFilesRequest) returns (ClearAllSequenceFilesResponse) {} + rpc ClearAllSequenceFiles(ClearAllSequenceFilesRequest) + returns (ClearAllSequenceFilesResponse) {} // Upload a dance to the robot. rpc UploadChoreography(UploadChoreographyRequest) returns (UploadChoreographyResponse) {} @@ -55,7 +58,8 @@ service ChoreographyService { rpc StopRecordingState(StopRecordingStateRequest) returns (StopRecordingStateResponse) {} // Download log of the latest recorded robot state information. - rpc DownloadRobotStateLog(DownloadRobotStateLogRequest) returns (stream DownloadRobotStateLogResponse) {} + rpc DownloadRobotStateLog(DownloadRobotStateLogRequest) + returns (stream DownloadRobotStateLogResponse) {} // Report the status of a dancing robot. rpc ChoreographyStatus(ChoreographyStatusRequest) returns (ChoreographyStatusResponse) {} @@ -64,6 +68,7 @@ service ChoreographyService { rpc ChoreographyCommand(ChoreographyCommandRequest) returns (ChoreographyCommandResponse) {} // Adjust the time when a robot should start dancing within a tolerance. - rpc ChoreographyTimeAdjust(ChoreographyTimeAdjustRequest) returns (ChoreographyTimeAdjustResponse) {} + rpc ChoreographyTimeAdjust(ChoreographyTimeAdjustRequest) + returns (ChoreographyTimeAdjustResponse) {} } diff --git a/protos/bosdyn/api/spot/door_area_callback.proto b/protos/bosdyn/api/spot/door_area_callback.proto index 4d442efae..a2f9c6cce 100644 --- a/protos/bosdyn/api/spot/door_area_callback.proto +++ b/protos/bosdyn/api/spot/door_area_callback.proto @@ -16,7 +16,7 @@ import "bosdyn/api/spot/door.proto"; message AreaCallbackDoorConfig { // The door command issued for going through the door in the recorded direction DoorCommand.Request forward_command = 10; - + // The door command for going through the door in the reverse to recorded direction DoorCommand.Request reverse_command = 20; diff --git a/protos/bosdyn/api/spot/door_service.proto b/protos/bosdyn/api/spot/door_service.proto index a5117d828..25a13b155 100644 --- a/protos/bosdyn/api/spot/door_service.proto +++ b/protos/bosdyn/api/spot/door_service.proto @@ -16,4 +16,3 @@ service DoorService { rpc OpenDoorFeedback(OpenDoorFeedbackRequest) returns (OpenDoorFeedbackResponse) {} } - diff --git a/protos/bosdyn/api/spot/robot_command.proto b/protos/bosdyn/api/spot/robot_command.proto index 270b6d3c4..9804f1043 100644 --- a/protos/bosdyn/api/spot/robot_command.proto +++ b/protos/bosdyn/api/spot/robot_command.proto @@ -54,9 +54,11 @@ enum SwingHeight { 1; // Low-stepping. Robot will try to only swing legs a few cm away from ground. SWING_HEIGHT_MEDIUM = 2; // Default for most cases, use other values with caution. SWING_HEIGHT_HIGH = 3; // High-stepping. Possibly useful with degraded vision operation. - SWING_HEIGHT_AUTO = 4; // Swing height is automatically adjusted depending on the current state of the robot and environment. + SWING_HEIGHT_AUTO = 4; // Swing height is automatically adjusted depending on the current state + // of the robot and environment. } + // Params common across spot movement and mobility. message MobilityParams { // Max allowable velocity at any point in trajectory. @@ -78,7 +80,8 @@ message MobilityParams { STAIRS_MODE_UNKNOWN = 0; // Invalid; do not use. STAIRS_MODE_OFF = 1; STAIRS_MODE_ON = 2; - STAIRS_MODE_AUTO = 3; // Robot will automatically turn mode on or off + STAIRS_MODE_AUTO = 3; // Robot will automatically turn mode on or off. + STAIRS_MODE_PROHIBITED = 4; // Stairs will be detected and avoided. } // The selected option for stairs mode. // If unset, will use the deprecated stair_hint instead. @@ -115,6 +118,22 @@ message MobilityParams { // Disable the secondary nearmap-based cliff avoidance that runs while on stairs. bool disable_nearmap_cliff_avoidance = 12; + // Semantic hazard detection can detect and classify objects or regions in the world as + // obstacles or areas to avoid that would not normally be classified as such. Obstacle avoidance + // still needs to be on for the robot to avoid these additional hazards. A CORE I/O is necessary + // for semantic hazard detection. Using HAZARD_DETECTION_MODE_COST will prevent detected hazards + // from becoming blocking obstacles, and instead add areas to try and avoid when navigating + // autonomously. + enum HazardDetectionMode { + HAZARD_DETECTION_MODE_UNKNOWN = 0; + HAZARD_DETECTION_MODE_OFF = 1; + HAZARD_DETECTION_MODE_ON = 2; + HAZARD_DETECTION_MODE_COST = 3; + } + // The selected option for hazard detection. + HazardDetectionMode hazard_detection_mode = 18; + + } // Parameters for offsetting the body from the normal default. @@ -123,7 +142,7 @@ message BodyControlParams { // Desired base offset relative to the footprint pseudo-frame. // The footprint pseudo-frame is a gravity aligned frame with its origin located at the // geometric center of the feet in the X-Y axis, and at the nominal height of the hips in - // the Z axis. The yaw of the frame (wrt the world) is calcuated by the average foot + // the Z axis. The yaw of the frame (wrt the world) is calculated by the average foot // locations, and is aligned with the feet. SE3Trajectory base_offset_rt_footprint = 1; @@ -161,7 +180,7 @@ message BodyControlParams { RotationSetting rotation_setting = 2; // Instead of directly specify the base offset trajectory, these options allow the robot to - // calcuate offsets based on the hand's location. If the robot does not have a SpotArm + // calculate offsets based on the hand's location. If the robot does not have a SpotArm // attached, sending this request will have no effect. message BodyAssistForManipulation { // Enable the use of body yaw to assist with manipulation. @@ -202,7 +221,7 @@ message ObstacleParams { // Ground contact parameters that describe the terrain. message TerrainParams { - // Terrain coefficient of friction user hint. This value must be postive and will clamped if + // Terrain coefficient of friction user hint. This value must be positive and will be clamped if // necessary on the robot side. Best suggested values lie in the range between 0.4 and 0.8 // (which is the robot's default.) google.protobuf.DoubleValue ground_mu_hint = 2; diff --git a/protos/bosdyn/api/spot/spot_check.proto b/protos/bosdyn/api/spot/spot_check.proto index 249b3ab4a..86c91f3d8 100644 --- a/protos/bosdyn/api/spot/spot_check.proto +++ b/protos/bosdyn/api/spot/spot_check.proto @@ -43,7 +43,7 @@ message SpotCheckCommandResponse { enum Status { STATUS_UNKNOWN = 0; // Unknown STATUS_OK = 1; // Request was accepted. - STATUS_ERROR = 2; // An error ocurred. + STATUS_ERROR = 2; // An error occurred. } // Command status @@ -204,7 +204,7 @@ message JointKinematicCheckResult { ERROR_CLUTCH_SLIP = 2; // Error detected in clutch performance. ERROR_INVALID_RANGE_OF_MOTION = 3; // Error if a joint has an incorrect range of motion. ERROR_ENCODER_SHIFTED = 4; // Error if the measured endstops shifted from kin cal. - ERROR_COLLISION = 5; // Error if checking the joint would have a collsion. + ERROR_COLLISION = 5; // Error if checking the joint would have a collision. } // A flag to indicate if results has an error. Error error = 2; @@ -359,87 +359,3 @@ message CameraCalibrationFeedbackResponse { float progress = 3; } -// Request for the GripperCameraCalibrationCommand service. -message GripperCameraCalibrationCommandRequest { - // Common request header. - RequestHeader header = 1; - - // The Lease to show ownership of the robot. Lease required to issue any - // GripperCameraCalibration command. - Lease lease = 2; - - enum Command { - COMMAND_UNKNOWN = 0; // Unused enum. - COMMAND_START = 1; // Start calibration routine. - COMMAND_CANCEL = 2; // Cancel calibration routine. - } - // The command describing what the GripperCameraCalibration service should do. - Command command = 3; -} - -// Response for the GripperCameraCalibrationCommand service. -message GripperCameraCalibrationCommandResponse { - // Common response header. - ResponseHeader header = 1; - - // Details about how the lease was used. - LeaseUseResult lease_use_result = 2; -} - -// Request for the GripperCameraCalibrationFeedback service. -message GripperCameraCalibrationFeedbackRequest { - // Common request header. - RequestHeader header = 1; -} - -// Response for the GripperCameraCalibrationFeedback service. -message GripperCameraCalibrationFeedbackResponse { - // Common response header. - ResponseHeader header = 1; - enum Status { - // Unused enum. - STATUS_UNKNOWN = 0; - // The robot is actively running calibration routine. - STATUS_PROCESSING = 1; - // The robot successfully ran calibration routine and - // is ready to use again. - STATUS_SUCCESS = 2; - // Calibration routine has never been run. No feedback to give. - STATUS_NEVER_RUN = 3; - // Calibration routine has been canceled mid-routine. - STATUS_USER_CANCELED = 4; - // The robot is not powered on. - STATUS_POWER_ERROR = 5; - // Ownership error during calibration. - STATUS_LEASE_ERROR = 6; - // Calibration procedure produced an invalid result. - // This may occur in poor lighting conditions or if - // calibration target moved during calibration - // procedure. - STATUS_CALIBRATION_ERROR = 8; - // Something went wrong during initialization. Try running the command again or, if it - // persists, restarting the robot. - STATUS_INITIALIZATION_ERROR = 9; - // Something extraordinary happened. Try power cycling robot or contact BD. - STATUS_INTERNAL_ERROR = 10; - // Target partially, but not fully, in view when starting calibration. - STATUS_TARGET_NOT_CENTERED = 11; - // Target not visible when starting calibration. - STATUS_TARGET_NOT_IN_VIEW = 12; - // Target not aligned with gravity when starting calibration. - STATUS_TARGET_NOT_GRAVITY_ALIGNED = 13; - // Target upside down when starting calibration. - STATUS_TARGET_UPSIDE_DOWN = 14; - // The robot took too long to reach the goal pose. - STATUS_STUCK = 15; - } - // Status of camera calibration procedure. - Status status = 2; - - // The approximate progress of the calibration routine, range [0-1]. - // Status takes precedence over progress value. - float progress = 3; - - // Details about how the lease was used. - LeaseUseResult lease_use_result = 4; -} diff --git a/protos/bosdyn/api/spot/spot_check_service.proto b/protos/bosdyn/api/spot/spot_check_service.proto index 1378dee0a..cfde99d48 100644 --- a/protos/bosdyn/api/spot/spot_check_service.proto +++ b/protos/bosdyn/api/spot/spot_check_service.proto @@ -33,9 +33,4 @@ service SpotCheckService { rpc CameraCalibrationFeedback(CameraCalibrationFeedbackRequest) returns (CameraCalibrationFeedbackResponse) {} - // Send a command to the GripperCameraCalibration service. - rpc GripperCameraCalibrationCommand(GripperCameraCalibrationCommandRequest) returns (GripperCameraCalibrationCommandResponse) {} - - // Check the status of the GripperCameraCalibration procedure. - rpc GripperCameraCalibrationFeedback(GripperCameraCalibrationFeedbackRequest) returns (GripperCameraCalibrationFeedbackResponse) {} } diff --git a/protos/bosdyn/api/spot_cam/camera.proto b/protos/bosdyn/api/spot_cam/camera.proto index 0e96b9407..264cc6f7d 100644 --- a/protos/bosdyn/api/spot_cam/camera.proto +++ b/protos/bosdyn/api/spot_cam/camera.proto @@ -36,7 +36,7 @@ message Camera { bosdyn.api.Vec2 focal_length = 1; // Center point in pixels bosdyn.api.Vec2 center_point = 2; - // The following 4 parameters are radial distortion coefficeints to 4 orders. + // The following 4 parameters are radial distortion coefficients to 4 orders. // See: https://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction // If all 4 of these values are 0, do not apply any correction. float k1 = 3; diff --git a/protos/bosdyn/api/spot_cam/compositor.proto b/protos/bosdyn/api/spot_cam/compositor.proto index 0948fd4d3..237c9b53c 100644 --- a/protos/bosdyn/api/spot_cam/compositor.proto +++ b/protos/bosdyn/api/spot_cam/compositor.proto @@ -17,7 +17,7 @@ import "google/protobuf/wrappers.proto"; // A "Screen" represents a particular layout of camera images // used by the video stream. message ScreenDescription { - // Unique identifer for a screen. + // Unique identifier for a screen. string name = 1; } @@ -116,7 +116,7 @@ message IrColorMap { // the inferno colormap maps the minimum value to black and the maximum value to light // yellow RGB(252, 252, 164). It is also easier to view by those with color blindness COLORMAP_INFERNO = 3; - // the turbo colormap uses blues for values closer to the minumum, red values for values + // the turbo colormap uses blues for values closer to the minimum, red values for values // closer to the maximum, and addresses some short comings of the jet color map such as // false detail, banding and color blindness COLORMAP_TURBO = 4; diff --git a/protos/bosdyn/api/spot_cam/health.proto b/protos/bosdyn/api/spot_cam/health.proto index db4b4b1f0..ec1e91735 100644 --- a/protos/bosdyn/api/spot_cam/health.proto +++ b/protos/bosdyn/api/spot_cam/health.proto @@ -26,7 +26,6 @@ message Temperature { message ClearBITEventsRequest { // Common request header. bosdyn.api.RequestHeader header = 1; - } // Response to clearing built-in test events. @@ -39,7 +38,6 @@ message ClearBITEventsResponse { message GetBITStatusRequest { // Common request header. bosdyn.api.RequestHeader header = 1; - } // Data on the current status of built-in tests. @@ -49,11 +47,11 @@ message GetBITStatusResponse { // Fault events that have been reported. repeated bosdyn.api.SystemFault events = 2; - // Degredations are not necessesarily faults; a unit + // Degradations are not necessarily faults; a unit // with no installed mechanical PTZ will behave differently, // but nothing's actually wrong. message Degradation { - // Systems that can experience performance degredations. + // Systems that can experience performance degradations. enum DegradationType { STORAGE = 0; PTZ = 1; @@ -71,7 +69,6 @@ message GetBITStatusResponse { message GetTemperatureRequest { // Common request header. bosdyn.api.RequestHeader header = 1; - } message GetTemperatureResponse { diff --git a/protos/bosdyn/api/spot_cam/logging.proto b/protos/bosdyn/api/spot_cam/logging.proto index 04081ee93..ddb48775d 100644 --- a/protos/bosdyn/api/spot_cam/logging.proto +++ b/protos/bosdyn/api/spot_cam/logging.proto @@ -20,7 +20,9 @@ import "google/protobuf/timestamp.proto"; // A representation of a stored data acquisition. message Logpoint { // Possible types of media that can be stored. - enum RecordType { STILLIMAGE = 0; } + enum RecordType { + STILLIMAGE = 0; + } // Possible stages of data acquisition. enum LogStatus { FAILED = 0; diff --git a/protos/bosdyn/api/spot_cam/power.proto b/protos/bosdyn/api/spot_cam/power.proto index 001a8eaaf..bbf446b86 100644 --- a/protos/bosdyn/api/spot_cam/power.proto +++ b/protos/bosdyn/api/spot_cam/power.proto @@ -15,7 +15,7 @@ import "bosdyn/api/header.proto"; // Power on or off of components of the SpotCam. message PowerStatus { - //these switches are 'true' for power-on, 'false' for power-off + // these switches are 'true' for power-on, 'false' for power-off google.protobuf.BoolValue ptz = 2; google.protobuf.BoolValue aux1 = 3; google.protobuf.BoolValue aux2 = 4; @@ -32,7 +32,7 @@ message GetPowerStatusRequest { message GetPowerStatusResponse { // Common response header. bosdyn.api.ResponseHeader header = 1; - //status indicates the power status of the controllable devices + // status indicates the power status of the controllable devices //'true' for power-on, 'false' for power-off PowerStatus status = 2; } @@ -41,7 +41,7 @@ message GetPowerStatusResponse { message SetPowerStatusRequest { // Common request header. bosdyn.api.RequestHeader header = 1; - //status indicates the requested power status of the controllable devices + // status indicates the requested power status of the controllable devices //'true' for power-on, 'false' for power-off PowerStatus status = 2; } @@ -50,7 +50,7 @@ message SetPowerStatusRequest { message SetPowerStatusResponse { // Common response header. bosdyn.api.ResponseHeader header = 1; - //status indicates the requested changes upon success + // status indicates the requested changes upon success //'true' for power-on, 'false' for power-off PowerStatus status = 2; } @@ -59,9 +59,10 @@ message SetPowerStatusResponse { message CyclePowerRequest { // Common request header. bosdyn.api.RequestHeader header = 1; - //status indicates the devices for which cycle-power is requested + // status indicates the devices for which cycle-power is requested //'true' for cycle-power, else no effect - //power cycle will not be performed on a given device if its state is power-off prior to this call + // power cycle will not be performed on a given device if its state is power-off prior to this + // call PowerStatus status = 2; } @@ -69,7 +70,7 @@ message CyclePowerRequest { message CyclePowerResponse { // Common response header. bosdyn.api.ResponseHeader header = 1; - //status indicates the power status of the controllable devices after a successful power cycle + // status indicates the power status of the controllable devices after a successful power cycle //'true' for power-on, 'false' for power-off PowerStatus status = 2; } diff --git a/protos/bosdyn/api/spot_cam/service.proto b/protos/bosdyn/api/spot_cam/service.proto index f432a54f0..e358ffbac 100644 --- a/protos/bosdyn/api/spot_cam/service.proto +++ b/protos/bosdyn/api/spot_cam/service.proto @@ -77,7 +77,7 @@ service MediaLogService { // Tag updates the 'tag' field of the Logpoint that's passed, which must exist. rpc Tag(TagRequest) returns (TagResponse); // EnableDebug starts the periodic logging of health data to the database; this increases disk - // utilization, but will record data that is useful post-mortum + // utilization, but will record data that is useful post-mortem rpc EnableDebug(DebugRequest) returns (DebugResponse); // ListCameras returns a list of strings that identify valid cameras for logging rpc ListCameras(ListCamerasRequest) returns (ListCamerasResponse); @@ -118,7 +118,7 @@ service AudioService { // table, PlaySound executes the sound effect. rpc PlaySound(PlaySoundRequest) returns (PlaySoundResponse); // LoadSound loads a sound effect into the system's sound table. The stream must contain a wav - // file, with a RIFF header describing it. The arguement is a stream, to allow for sounds that + // file, with a RIFF header describing it. The argument is a stream, to allow for sounds that // are bigger then the MTU of the network; in this case, the complete stream must contain the // entire sound. If the stream ends early, an error will be returned. The header and sound // fields of the entire stream must be the same. @@ -145,7 +145,7 @@ service HealthService { // measure. rpc GetTemperature(GetTemperatureRequest) returns (GetTemperatureResponse); // GetBitStatus returns two lists; a list of system events, and a list of ways that the system - // is degraded; for instance, a degredation may include a missing PTZ unit, or a missing USB + // is degraded; for instance, a degradation may include a missing PTZ unit, or a missing USB // storage device. rpc GetBITStatus(GetBITStatusRequest) returns (GetBITStatusResponse); // ClearBitEvents clears out the events list of the BITStatus structure. diff --git a/protos/bosdyn/api/synchronized_command.proto b/protos/bosdyn/api/synchronized_command.proto index 8c8275e71..d6e40180e 100644 --- a/protos/bosdyn/api/synchronized_command.proto +++ b/protos/bosdyn/api/synchronized_command.proto @@ -19,11 +19,13 @@ message SynchronizedCommand { ArmCommand.Request arm_command = 1; MobilityCommand.Request mobility_command = 2; GripperCommand.Request gripper_command = 3; + } message Feedback { ArmCommand.Feedback arm_command_feedback = 1; MobilityCommand.Feedback mobility_command_feedback = 2; GripperCommand.Feedback gripper_command_feedback = 3; + } -} \ No newline at end of file +} diff --git a/protos/bosdyn/api/time_sync.proto b/protos/bosdyn/api/time_sync.proto index 05c086f0e..9a0855a63 100644 --- a/protos/bosdyn/api/time_sync.proto +++ b/protos/bosdyn/api/time_sync.proto @@ -43,7 +43,6 @@ message TimeSyncEstimate { google.protobuf.Duration clock_skew = 2; } - // Current best estimate status of time sync. message TimeSyncState { // Best clock synchronization estimate currently available, if any. diff --git a/protos/bosdyn/api/time_sync_service.proto b/protos/bosdyn/api/time_sync_service.proto index f17e68e5c..55039357f 100644 --- a/protos/bosdyn/api/time_sync_service.proto +++ b/protos/bosdyn/api/time_sync_service.proto @@ -25,5 +25,3 @@ service TimeSyncService { rpc TimeSyncUpdate(TimeSyncUpdateRequest) returns (TimeSyncUpdateResponse) {} } - - diff --git a/protos/bosdyn/api/trajectory.proto b/protos/bosdyn/api/trajectory.proto index 42643bd7f..e8f638c97 100644 --- a/protos/bosdyn/api/trajectory.proto +++ b/protos/bosdyn/api/trajectory.proto @@ -16,16 +16,16 @@ import "google/protobuf/wrappers.proto"; // Parameters for how positional trajectories will be interpolated on robot. enum PositionalInterpolation { - POS_INTERP_UNKNOWN = 0; // Unknown interpolation, do not use. - POS_INTERP_LINEAR = 1; // Linear interpolation for positional data. - POS_INTERP_CUBIC = 2; // Cubic interpolation for positional data. + POS_INTERP_UNKNOWN = 0; // Unknown interpolation, do not use. + POS_INTERP_LINEAR = 1; // Linear interpolation for positional data. + POS_INTERP_CUBIC = 2; // Cubic interpolation for positional data. } // Parameters for how angular trajectories will be interpolated on robot. enum AngularInterpolation { - ANG_INTERP_UNKNOWN = 0; // Unknown interpolation, do not use. - ANG_INTERP_LINEAR = 1; // Linear interpolation for angular data. - ANG_INTERP_CUBIC_EULER = 2; // Cubic interpolation (using Euler method) for angular data. + ANG_INTERP_UNKNOWN = 0; // Unknown interpolation, do not use. + ANG_INTERP_LINEAR = 1; // Linear interpolation for angular data. + ANG_INTERP_CUBIC_EULER = 2; // Cubic interpolation (using Euler method) for angular data. } // A 2D pose trajectory, which specified multiple points and the desired times the robot should @@ -80,6 +80,7 @@ message SE3TrajectoryPoint { SE3Pose pose = 1; // Optional velocity (linear and angular) the robot will try and achieve. + // Linear and angular velocity is expressed with respect to the base frame of the pose. SE3Velocity velocity = 2; // The duration to reach the point relative to the trajectory reference time. @@ -121,7 +122,6 @@ message Vec3TrajectoryPoint { // The duration to reach the point relative to the trajectory reference time. google.protobuf.Duration time_since_reference = 3; - } // A time-based trajectories of wrenches. @@ -143,7 +143,6 @@ message WrenchTrajectoryPoint { google.protobuf.Duration time_since_reference = 2; } - // A Point trajectory. message ScalarTrajectory { // The points in trajectory diff --git a/protos/bosdyn/api/world_object.proto b/protos/bosdyn/api/world_object.proto index 3d21da624..39e322d61 100644 --- a/protos/bosdyn/api/world_object.proto +++ b/protos/bosdyn/api/world_object.proto @@ -67,7 +67,8 @@ message WorldObject { RayProperties ray_properties = 11; // Bounding box in the world, oriented at the location provided in the transforms_snapshot. BoundingBoxProperties bounding_box_properties = 12; - // The staircase properties provide information that helps the robot traverse or see a staircase. + // The staircase properties provide information that helps the robot traverse or see a + // staircase. StaircaseProperties staircase_properties = 15; // Information about the Earth relative to the robot, localized by GPS. GpsProperties gps_properties = 16; @@ -79,13 +80,13 @@ message WorldObject { // includes. This can be used to request specific kinds of objects; for example, a request for only // fiducials. enum WorldObjectType { - WORLD_OBJECT_UNKNOWN = 0; - WORLD_OBJECT_DRAWABLE = 1; - WORLD_OBJECT_APRILTAG = 2; - WORLD_OBJECT_IMAGE_COORDINATES = 5; - WORLD_OBJECT_DOCK = 6; - WORLD_OBJECT_USER_NOGO = 8; - WORLD_OBJECT_STAIRCASE = 9; + WORLD_OBJECT_UNKNOWN = 0; + WORLD_OBJECT_DRAWABLE = 1; + WORLD_OBJECT_APRILTAG = 2; + WORLD_OBJECT_IMAGE_COORDINATES = 5; + WORLD_OBJECT_DOCK = 6; + WORLD_OBJECT_USER_NOGO = 8; + WORLD_OBJECT_STAIRCASE = 9; } // The ListWorldObject request message, which can optionally include filters for the object type or @@ -180,12 +181,13 @@ message MutateWorldObjectResponse { int32 mutated_object_id = 4; } -// A box no-go region +// A box or circle no-go region message NoGoRegionProperties { // Define the geometry of the region. Note that currently, these regions may only be defined in // the Vision world frame, or Odometry world frame. oneof region { Box2WithFrame box = 1; + CircleWithFrame circle = 5; } // Nominally, setting a NoGoRegion will create both a body obstacle of the specified size, as diff --git a/protos/setup.py b/protos/setup.py index 28e5d620d..746ca38d5 100644 --- a/protos/setup.py +++ b/protos/setup.py @@ -4,12 +4,13 @@ # is subject to the terms and conditions of the Boston Dynamics Software # Development Kit License (20191101-BDSDK-SL). -import setuptools.command.build_py import distutils.cmd import os +import sys + import pkg_resources import setuptools -import sys +import setuptools.command.build_py try: SDK_VERSION = os.environ['BOSDYN_SDK_VERSION'] @@ -58,8 +59,8 @@ def run(self): except ImportError: # Try to grab pathlib2, which should have been grabbed as part of install dependencies. import pathlib2 as pathlib + from grpc_tools import protoc - import os def make_init(directory, do_pkg_extension=False): pkg = pathlib.Path(directory) @@ -80,7 +81,8 @@ def make_init(directory, do_pkg_extension=False): for cwd, dirs, files in os.walk(protos_root): cwd_relative_to_root = cwd[len(root) + 1:] for d in dirs: - make_init(os.path.join(root, output_dir, cwd_relative_to_root, d), do_pkg_extension=True) + make_init(os.path.join(root, output_dir, cwd_relative_to_root, d), + do_pkg_extension=True) for f in files: if not f.endswith('.proto'): @@ -113,7 +115,8 @@ def add_pathlib_version(requirements_list): author="Boston Dynamics", author_email="support@bostondynamics.com", description="Boston Dynamics API definition of protobuf messages", - install_requires=["protobuf>=3.19.4,!=4.24.0"], + # 5.28.0 crashes on windows https://github.com/protocolbuffers/protobuf/issues/18045 + install_requires=["protobuf>=3.19.4,!=4.24.0,!=5.28.0"], long_description=long_description, long_description_content_type="text/markdown", url="https://dev.bostondynamics.com/", diff --git a/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.py b/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.py index 9780532f4..b675da80a 100644 --- a/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.py +++ b/python/bosdyn-choreography-client/src/bosdyn/choreography/client/animation_file_to_proto.py @@ -369,7 +369,8 @@ def convert_animation_file_to_proto(animated_file, animate_move_params_file=""): Args: animated_file (string): The filepath to the animation text file. - animate_move_params_file (string): [Optional] The filepath to a default set of move parameters. + animate_move_params_file (string): [Required if needing default param values. Otherwise optional] + The filepath to a default set of move parameters or move parameters as a string. Returns: The Animation class, which contains the animation proto to be uploaded to the robot, as well diff --git a/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.py b/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.py index d2fb403b3..e7c87dc35 100644 --- a/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.py +++ b/python/bosdyn-choreography-client/src/bosdyn/choreography/client/choreography.py @@ -185,13 +185,18 @@ def get_choreography_status(self, **kwargs): def get_choreography_status_async(self, **kwargs): """Async version of get_choreography_status.""" + + def _return_response_and_validity_time(result): + client_time = _TimeConverter(self, + self.timesync_endpoint).local_seconds_from_robot_timestamp( + result.validity_time) + return result, client_time + request = choreography_sequence_pb2.ChoreographyStatusRequest() - status = self.call_async(self._stub.ChoreographyStatus, request, value_from_response=None, + status = self.call_async(self._stub.ChoreographyStatus, request, + value_from_response=_return_response_and_validity_time, error_from_response=None, copy_request=False, **kwargs) - client_time = _TimeConverter(self, - self.timesync_endpoint).local_seconds_from_robot_timestamp( - status.result().validity_time) - return (status, client_time) + return status def choreography_log_to_animation_file(self, name, fpath, has_arm, *args): """Turn the choreography log from the proto into an animation `cha` file type. @@ -246,7 +251,8 @@ def timestamp_to_seconds(timestamp): #format the complete header with all the options to be included in the *.cha file joint_spacer = "{:<60}" - header = (controls_header + "\n" "description: " + description + "\n") + header = (controls_header + "\n" + "description: " + description + "\n") for option in option_list(*args): header = header + option + "\n" diff --git a/python/bosdyn-client/README.md b/python/bosdyn-client/README.md index 2f9268f5a..35e3f73be 100644 --- a/python/bosdyn-client/README.md +++ b/python/bosdyn-client/README.md @@ -49,7 +49,7 @@ Some of the clients included in this wheel can also be accessed directly from th python3 -m bosdyn.client hostname -h usage: bosdyn.client [-h] [-v] [--username USERNAME] [--password PASSWORD] hostname - {dir,id,state,log,time-sync,lease,become-estop,image,local_grid} + {dir,payload,fault,id,license,log-status,state,log,data,time-sync,lease,become-estop,estop,image,local_grid,acquire,self-ip,power,keepalive} ... Command-line interface for interacting with robot services. diff --git a/python/bosdyn-client/setup.py b/python/bosdyn-client/setup.py index 3775f64f0..4b6864de8 100644 --- a/python/bosdyn-client/setup.py +++ b/python/bosdyn-client/setup.py @@ -17,6 +17,26 @@ with open("README.md", "r") as fh: long_description = fh.read() + +def get_requirements(): + + # requirements with versions extracted from BD's internal requirements. + reqs = [ + 'bosdyn-api=={}'.format(SDK_VERSION), + 'bosdyn-core=={}'.format(SDK_VERSION), + ] + reqs += [ + 'grpcio', + 'pyjwt', + 'numpy', + 'Deprecated~=1.2.10', + 'requests>=2.26.0', + 'pynmea2>=1.16.0', + ] + + return reqs + + setuptools.setup( name="bosdyn-client", version=SDK_VERSION, @@ -33,16 +53,7 @@ packages=setuptools.find_packages('src'), package_dir={'': 'src'}, package_data={'': ['*.pem']}, - install_requires=[ - 'bosdyn-api=={}'.format(SDK_VERSION), - 'bosdyn-core=={}'.format(SDK_VERSION), - 'grpcio', - 'pyjwt', - 'numpy', - 'Deprecated~=1.2.10', - 'requests>=2.26.0', - 'pynmea2>=1.16.0', - ], + install_requires=get_requirements(), classifiers=[ "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", diff --git a/python/bosdyn-client/src/bosdyn/client/README.md b/python/bosdyn-client/src/bosdyn/client/README.md index 4ff8cb5cf..accc8704b 100644 --- a/python/bosdyn-client/src/bosdyn/client/README.md +++ b/python/bosdyn-client/src/bosdyn/client/README.md @@ -12,79 +12,79 @@ Client code and interfaces for the Boston Dynamics robot API. ## Contents -- [Area Callback](area_callback) -- [Area Callback Region Handler](area_callback_region_handler_base) -- [Area Callback Service Runner](area_callback_service_runner) -- [Area Callback Servicer](area_callback_service_servicer) -- [Area Callback Service Utils](area_callback_service_utils) -- [Arm Surface Contact](arm_surface_contact) -- [Async Tasks](async_tasks) -- [Auth](auth) -- [Auto Return](auto_return) -- [Autowalk](autowalk) -- [BDDF](bddf) -- [BDDF Download](bddf_download) -- [Channel](channel) -- [Command ](command_line) -- [Common](common) -- [Data Acquisition](data_acquisition) -- [Data Acquisition Helpers](data_acquisition_helpers) -- [Data Acquisition Plugin](data_acquisition_plugin) -- [Data Acquisition Plugin Service](data_acquisition_plugin_service) -- [Data Acquisition Store](data_acquisition_store) -- [Data Buffer](data_buffer) -- [Data Chunk](data_chunk) -- [Data Service](data_service) -- [Directory Registration](directory_registration) -- [Directory](directory) -- [Docking](docking) -- [Door](door) -- [E-Stop](estop) -- [Exceptions](exceptions) -- [Fault](fault) -- [Frame Helpers](frame_helpers) -- [Graph Nav](graph_nav) -- [Gripper Camera Params](gripper_camera_param) -- [GPS](gps/README) -- [Image](image) -- [Image Service Helpers](image_service_helpers) -- [Inverse Kinematics](inverse_kinematics) -- [IR Enable/Disable](ir_enable_disable) -- [Keep Alive](keepalive) -- [Lease](lease) -- [Lease Resource Hierarchy](lease_resource_hierarchy) -- [Lease Validator](lease_validator) -- [License](license) -- [Local Grid](local_grid) -- [Log Status](log_status) -- [Math Helpers](math_helpers) -- [Manipulation API](manipulation_api_client) -- [Map Processing](map_processing) -- [Metrics Logging](metrics_logging) -- [Network Compute Bridge](network_compute_bridge_client) -- [Payload Registration](payload_registration) -- [Payload](payload) -- [Point Cloud](point_cloud) -- [Power](power) -- [Processors](processors) -- [Ray casting](ray_cast) -- [Recording](recording) -- [Robot Command](robot_command) -- [Robot ID](robot_id) -- [Robot](robot) -- [Robot State](robot_state) -- [SDK](sdk) -- [Server Util](server_util) -- [Service Customization Helpers](service_customization_helpers) -- [Signals Helpers](signals_helpers) -- [Spot CAM](spot_cam/README) -- [Spot Check](spot_check) -- [Time Sync](time_sync) -- [Token Cache](token_cache) -- [Token Manager](token_manager) -- [Units Helpers](units_helpers) -- [Util](util) -- [World Object](world_object) +- [Area Callback](area_callback.py) +- [Area Callback Region Handler](area_callback_region_handler_base.py) +- [Area Callback Service Runner](area_callback_service_runner.py) +- [Area Callback Servicer](area_callback_service_servicer.py) +- [Area Callback Service Utils](area_callback_service_utils.py) +- [Arm Surface Contact](arm_surface_contact.py) +- [Async Tasks](async_tasks.py) +- [Auth](auth.py) +- [Auto Return](auto_return.py) +- [Autowalk](autowalk.py) +- [BDDF](bddf.py) +- [BDDF Download](bddf_download.py) +- [Channel](channel.py) +- [Command ](command_line.py) +- [Common](common.py) +- [Data Acquisition](data_acquisition.py) +- [Data Acquisition Helpers](data_acquisition_helpers.py) +- [Data Acquisition Plugin](data_acquisition_plugin.py) +- [Data Acquisition Plugin Service](data_acquisition_plugin_service.py) +- [Data Acquisition Store](data_acquisition_store.py) +- [Data Buffer](data_buffer.py) +- [Data Chunk](data_chunk.py) +- [Data Service](data_service.py) +- [Directory Registration](directory_registration.py) +- [Directory](directory.py) +- [Docking](docking.py) +- [Door](door.py) +- [E-Stop](estop.py) +- [Exceptions](exceptions.py) +- [Fault](fault.py) +- [Frame Helpers](frame_helpers.py) +- [Graph Nav](graph_nav.py) +- [Gripper Camera Params](gripper_camera_param.py) +- [GPS](gps/README.md) +- [Image](image.py) +- [Image Service Helpers](image_service_helpers.py) +- [Inverse Kinematics](inverse_kinematics.py) +- [IR Enable/Disable](ir_enable_disable.py) +- [Keep Alive](keepalive.py) +- [Lease](lease.py) +- [Lease Resource Hierarchy](lease_resource_hierarchy.py) +- [Lease Validator](lease_validator.py) +- [License](license.py) +- [Local Grid](local_grid.py) +- [Log Status](log_status.py) +- [Math Helpers](math_helpers.py) +- [Manipulation API](manipulation_api_client.py) +- [Map Processing](map_processing.py) +- [Metrics Logging](metrics_logging.py) +- [Network Compute Bridge](network_compute_bridge_client.py) +- [Payload Registration](payload_registration.py) +- [Payload](payload.py) +- [Point Cloud](point_cloud.py) +- [Power](power.py) +- [Processors](processors.py) +- [Ray casting](ray_cast.py) +- [Recording](recording.py) +- [Robot Command](robot_command.py) +- [Robot ID](robot_id.py) +- [Robot](robot.py) +- [Robot State](robot_state.py) +- [SDK](sdk.py) +- [Server Util](server_util.py) +- [Service Customization Helpers](service_customization_helpers.py) +- [Signals Helpers](signals_helpers.py) +- [Spot CAM](spot_cam/README.py) +- [Spot Check](spot_check.py) +- [Time Sync](time_sync.py) +- [Token Cache](token_cache.py) +- [Token Manager](token_manager.py) +- [Units Helpers](units_helpers.py) +- [Util](util.py) +- [World Object](world_object.py)

                                                                                                                                     

                                                                                                                                    diff --git a/python/bosdyn-client/src/bosdyn/client/channel.py b/python/bosdyn-client/src/bosdyn/client/channel.py index eb48dc7cc..dcf3a93e5 100644 --- a/python/bosdyn-client/src/bosdyn/client/channel.py +++ b/python/bosdyn-client/src/bosdyn/client/channel.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). import logging -import warnings import grpc @@ -25,6 +24,9 @@ # creating channels in the bosdyn.client.Robot class. DEFAULT_MAX_MESSAGE_LENGTH = 100 * (1024**2) +# Useful for clients to ensure there is enough room left in a message for other fields like headers +DEFAULT_HEADER_BUFFER_LENGTH = 4 * (1024**2) + # Period in milliseconds after which a keepalive ping is sent on the transport. DEFAULT_KEEP_ALIVE_TIME_MS = 5000 diff --git a/python/bosdyn-client/src/bosdyn/client/command_line.py b/python/bosdyn-client/src/bosdyn/client/command_line.py index ec4bbe161..db3013fda 100644 --- a/python/bosdyn-client/src/bosdyn/client/command_line.py +++ b/python/bosdyn-client/src/bosdyn/client/command_line.py @@ -13,16 +13,19 @@ import datetime import os import signal +import socket import sys import threading import time +from deprecated.sphinx import deprecated from google.protobuf import json_format import bosdyn.client from bosdyn.api import data_acquisition_pb2, image_pb2 from bosdyn.api.data_buffer_pb2 import Event, TextMessage from bosdyn.api.data_index_pb2 import EventsCommentsSpec +from bosdyn.api.keepalive import keepalive_pb2 from bosdyn.api.robot_state_pb2 import BehaviorFault from bosdyn.util import duration_str, timestamp_to_datetime @@ -38,6 +41,7 @@ from .exceptions import Error, InvalidRequestError, ProxyConnectionError from .image import (ImageClient, ImageResponseError, UnknownImageSourceError, build_image_request, save_images_as_files) +from .keepalive import KeepaliveClient from .lease import LeaseClient from .license import LicenseClient from .local_grid import LocalGridClient @@ -1704,6 +1708,81 @@ def _format_lease_resource(resource): return str(resource) +class EstopCommands(Subcommands): + """Commands for interacting with robot estop service.""" + + NAME = 'estop' + + def __init__(self, subparsers, command_dict): + """Commands for interacting with robot estop service. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(EstopCommands, + self).__init__(subparsers, command_dict, + [BecomeEstopCommand, GetEstopConfigCommand, GetEstopStatusCommand]) + + +class GetEstopConfigCommand(Command): + """Get estop config of estop service.""" + + NAME = 'config' + + def __init__(self, subparsers, command_dict): + """Call EstopService GetEstopConfig RPC. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(GetEstopConfigCommand, self).__init__(subparsers, command_dict) + + def _run(self, robot, options): + """Implementation of the command. + + Args: + robot: Robot object on which to run the command. + options: Parsed command-line arguments. + + Returns: + True. + """ + client = robot.ensure_client(EstopClient.default_service_name) + config = client.get_config() + print(config) + + +class GetEstopStatusCommand(Command): + """Get estop status of estop service.""" + + NAME = 'status' + + def __init__(self, subparsers, command_dict): + """Call EstopService GetEstopSystemStatus RPC. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(GetEstopStatusCommand, self).__init__(subparsers, command_dict) + + def _run(self, robot, options): + """Implementation of the command. + + Args: + robot: Robot object on which to run the command. + options: Parsed command-line arguments. + + Returns: + True. + """ + client = robot.ensure_client(EstopClient.default_service_name) + status = client.get_status() + print(status) + + class BecomeEstopCommand(Command): """Grab and hold estop until Ctl-C.""" @@ -1754,7 +1833,7 @@ def _timestamp_fmt_response(response): # Create the endpoint to the robot estop system. # Timeout should be chosen to balance safety considerations with expected service latency. # See the estop documentation for details. - endpoint = EstopEndpoint(client, 'command-line', options.timeout) + endpoint = EstopEndpoint(client, f"command-line-{socket.gethostname()}", options.timeout) # Have this endpoint to set up the robot's estop system such that it is the sole estop. # See the function's docstring and the estop documentation for details. endpoint.force_simple_setup() @@ -1788,6 +1867,14 @@ def sigint_handler(sig, frame): return True +class OldBecomeEstopCommand(BecomeEstopCommand): + """Old version of BecomeEstopCommand.""" + + def run(self, robot, options): + print('DEPRECATION WARNING: This command is now "bosdyn.client estop become-estop"') + return BecomeEstopCommand.run(self, robot, options) + + class ImageCommands(Subcommands): """Commands for querying images.""" @@ -2276,6 +2363,175 @@ def __init__(self, subparsers, command_dict): ]) +class KeepaliveCommand(Subcommands): + """Send keepalive commands to the robot.""" + + NAME = 'keepalive' + + def __init__(self, subparsers, command_dict): + """Send keepalive commands to the robot. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(KeepaliveCommand, self).__init__(subparsers, command_dict, [ + KeepaliveGetStatusCommand, + KeepaliveRemovePoliciesCommand, + ]) + + +def lease_details(leases): + """Returns list of :, ...N.""" + lease_strings = [] + for lease in leases: + sequence_string = ", ".join([str(lease_seq) for lease_seq in lease.sequence]) + lease_strings.append(f"{lease.resource}:[{sequence_string}]") + return ", ".join(lease_strings) + + +class KeepaliveGetStatusCommand(Command): + """Get status of keepalive service.""" + + NAME = 'status' + + def __init__(self, subparsers, command_dict): + """Call KeepaliveService GetStatus RPC. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(KeepaliveGetStatusCommand, self).__init__(subparsers, command_dict) + self._parser.add_argument('-f', '--full', action='store_true', default=False, + help='Show full GetStatus proto as json.') + + def _run(self, robot, options): + """Implementation of the command. + + Args: + robot: Robot object on which to run the command. + options: Parsed command-line arguments. + + Returns: + True. + """ + client = robot.ensure_client(KeepaliveClient.default_service_name) + status = client.get_status() + + # Give the option to print out the full message. + if options.full: + print(json_format.MessageToJson(status)) + return True + + # If there are no policies, there probably isn't anything interesting here. + if len(status.status) == 0: + print("No active policies") + return True + + # List all live policies in a concise message. + if len(status.status) == 1: + print("Robot returned 1 live policy:") + else: + print(f"Robot returned {len(status.status)} live policies:") + for live_policy in status.status: + rough_robot_timestamp = status.header.response_timestamp.ToSeconds() + last_checkin = live_policy.last_checkin.ToSeconds() + time_elapsed = rough_robot_timestamp - last_checkin + # Go through each action, and create a helpful message describing the status. + action_list = [] + for action in live_policy.policy.actions: + name = action.WhichOneof("action") + # If this is a lease_stale or auto_return action, include some lease info. + name_maybe_with_details = name + if action.HasField("lease_stale"): + name_maybe_with_details = f"{name_maybe_with_details} ({lease_details(action.lease_stale.leases)})" + if action.HasField("auto_return"): + name_maybe_with_details = f"{name_maybe_with_details} ({lease_details(action.auto_return.leases)})" + # Add an indicator if the policy action is active or not. + action_after_time = action.after.ToSeconds() + active_message = "NOT active" + if time_elapsed > action.after.ToSeconds(): + active_message = "ACTIVE" + action_list.append( + f"{name_maybe_with_details} after {action_after_time} seconds, {active_message}" + ) + formatted_string = f"id: {live_policy.policy_id}\n client_name: {live_policy.client_name}\n last checkin {time_elapsed}s ago" + # Only the supervisor policy seems to have a name. + if live_policy.policy.name: + formatted_string = formatted_string + f"\n policy name: '{live_policy.policy.name}'" + if live_policy.policy.user_id: + formatted_string = formatted_string + f"\n user_id: '{live_policy.policy.user_id}'" + if len(live_policy.policy.associated_leases) > 0: + formatted_string = formatted_string + f"\n associated_leases: {lease_details(live_policy.policy.associated_leases)}" + print(formatted_string) + print(" actions:") + for index, action in enumerate(action_list): + print(f" {action}") + print("") + + # If there is an action control action, we should indicate that. + if len(status.active_control_actions) == 0: + return True + for action in status.active_control_actions: + enum_name = keepalive_pb2.GetStatusResponse.PolicyControlAction.Name(action) + print(f"Active control action: {enum_name}") + return True + + +class KeepaliveRemovePoliciesCommand(Command): + """Remove keepalive policies.""" + + NAME = 'remove' + + def __init__(self, subparsers, command_dict): + """Remove keepalive policies. + + Args: + subparsers: List of argument parsers. + command_dict: Dictionary of command names which take parsed options. + """ + super(KeepaliveRemovePoliciesCommand, self).__init__(subparsers, command_dict) + self._parser.add_argument('--policy-id', type=int, nargs='+', + help='Specify specific policy ids to remove.') + + def _run(self, robot, options): + """Implementation of the command. + + Args: + robot: Robot object on which to run the command. + options: Parsed command-line arguments. + + Returns: + True. + """ + client = robot.ensure_client(KeepaliveClient.default_service_name) + current_policies = client.get_status().status + current_policy_ids = [s.policy_id for s in current_policies] + + # If there are no policies, there probably isn't anything interesting here. + if len(current_policies) == 0: + print("No active policies") + return True + + to_rm = [] + if options.policy_id: + # Remove specific policies. + for policy_id in options.policy_id: + if policy_id in current_policy_ids: + to_rm.append(policy_id) + else: + print(f"Policy '{policy_id}' not found.") + else: + # Remove all current policies. + to_rm = current_policy_ids + + client.modify_policy(policy_ids_to_remove=to_rm) + print(f"Removed {len(to_rm)} policies") + + return True + + class PowerRobotCommand(Command): """Control the power of the entire robot.""" @@ -2405,12 +2661,14 @@ def main(args=None): DataServiceCommands(subparsers, command_dict) TimeSyncCommand(subparsers, command_dict) LeaseCommands(subparsers, command_dict) - BecomeEstopCommand(subparsers, command_dict) + OldBecomeEstopCommand(subparsers, command_dict) + EstopCommands(subparsers, command_dict) ImageCommands(subparsers, command_dict) LocalGridCommands(subparsers, command_dict) DataAcquisitionCommand(subparsers, command_dict) HostComputerIPCommand(subparsers, command_dict) PowerCommand(subparsers, command_dict) + KeepaliveCommand(subparsers, command_dict) options = parser.parse_args(args=args) diff --git a/python/bosdyn-client/src/bosdyn/client/common.py b/python/bosdyn-client/src/bosdyn/client/common.py index b77f7621c..07a6dda0e 100644 --- a/python/bosdyn-client/src/bosdyn/client/common.py +++ b/python/bosdyn-client/src/bosdyn/client/common.py @@ -5,10 +5,10 @@ # Development Kit License (20191101-BDSDK-SL). """Contains elements common to all service clients.""" +import concurrent import copy import functools import logging -import math import socket import types @@ -232,6 +232,37 @@ def wrapper(*args, **kwargs): return decorator +def handle_license_errors(func): + """Decorate "error from response" functions to handle typical license errors.""" + + @functools.wraps(func) + def wrapper(*args, **kwargs): + return common_license_errors(*args) or func(*args, **kwargs) + + return wrapper + + +def handle_license_errors_if_present(func): + """Decorate "error from response" functions to handle typical license errors. + Does not raise an error for STATUS_UNKNOWN. + Use for responses that may only sometimes fill out the license status.""" + + @functools.wraps(func) + def wrapper(*args, **kwargs): + return common_license_errors(*args, allow_unset=True) or func(*args, **kwargs) + + return wrapper + + +def common_license_errors(response, allow_unset=False): + license_status = response.license_status + if allow_unset and license_status == license_pb2.LicenseInfo.STATUS_UNKNOWN: + return None + elif license_status != license_pb2.LicenseInfo.STATUS_VALID: + return LicenseError(response) + return None + + def maybe_raise(exc): """raise the provided exception if it is not None""" if exc is not None: @@ -300,6 +331,7 @@ def __init__(self, stub_creation_func, name=None): self.response_processors = [] self.lease_wallet = None self.client_name = None + self.executor = None @staticmethod @deprecated(reason='Forces serialization even if the logging is not happening. Do not use.', @@ -331,6 +363,7 @@ def update_from(self, other): self.logger = other.logger.getChild(self._name or self._service_type_short) self.lease_wallet = other.lease_wallet self.client_name = other.client_name + self.executor = other.executor def update_request_iterator(self, request_iterator, logger, rpc_method, is_blocking, copy_request=True): @@ -444,7 +477,7 @@ def call_async(self, rpc_method, request, value_from_response=None, error_from_r value_from_response and error_from_response should not raise their own exceptions! - Asynchronous calls cannot be done with streaming rpcs right now. + call_async does not accept streaming rpcs, see 'call_async_streaming'. """ request = self._apply_request_processors(request, copy_request=copy_request) logger = self._get_logger(rpc_method) @@ -468,6 +501,25 @@ def on_finish(fut): response_future.add_done_callback(on_finish) return FutureWrapper(response_future, value_from_response, error_from_response) + @process_kwargs + def call_async_streaming(self, rpc_method, request, value_from_response=None, + error_from_response=None, assemble_type=None, copy_request=False, + **kwargs): + """Returns a Future for rpc_method(request, kwargs) after running processors. + + value_from_response and error_from_response should not raise their own exceptions. + + A version of 'call_async' for streaming rpcs. True async streaming calls are not supported by + python grpc. Instead, this call creates a thread that runs the synchronous 'call' function. + """ + request = self._apply_request_processors(request, copy_request=copy_request) + if self.executor is None: + self.executor = concurrent.futures.ThreadPoolExecutor() + + future = self.executor.submit(self.call, rpc_method, request, assemble_type=assemble_type, + copy_request=copy_request, **kwargs) + return FutureWrapper(future, value_from_response, error_from_response, is_streaming=True) + def _apply_request_processors(self, request, copy_request=True): if request is None: return @@ -498,10 +550,11 @@ def _get_logger(self, rpc_method): class FutureWrapper(): """Wraps a Future to aid more complicated clients' async calls.""" - def __init__(self, future, value_from_response, error_from_response): + def __init__(self, future, value_from_response, error_from_response, is_streaming=False): self.original_future = future self._error_from_response = error_from_response self._value_from_response = value_from_response + self._is_streaming = is_streaming def __repr__(self): return self.original_future.__repr__() @@ -521,7 +574,7 @@ def done(self): def traceback(self, **kwargs): return self.original_future.traceback(**kwargs) - def add_done_callback(self, cb): + def add_done_callback(self, cb, assemble_type=None): """Add callback executed on FutureWrapper when future is done.""" self.original_future.add_done_callback(lambda not_used_original_future: cb(self)) @@ -535,7 +588,6 @@ def result(self, **kwargs): if self._value_from_response is None: return base_result - return self._value_from_response(base_result) def exception(self, **kwargs): @@ -547,6 +599,11 @@ def exception(self, **kwargs): return None return self._error_from_response(self.original_future.result()) + # 'call_async_streaming' uses the non-async 'call' function. 'call' does all of it's + # own error handling so just return any errors from that call as is. + if self._is_streaming: + return error + return translate_exception(error) diff --git a/python/bosdyn-client/src/bosdyn/client/data_acquisition.py b/python/bosdyn-client/src/bosdyn/client/data_acquisition.py index 3fcb73a49..ae6f24c00 100644 --- a/python/bosdyn-client/src/bosdyn/client/data_acquisition.py +++ b/python/bosdyn-client/src/bosdyn/client/data_acquisition.py @@ -7,9 +7,6 @@ """General client implementation for the main, on-robot data-acquisition service.""" import collections -import functools -import json -import time from google.protobuf import json_format diff --git a/python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.py b/python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.py index cefd090b9..f292d8247 100644 --- a/python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.py +++ b/python/bosdyn-client/src/bosdyn/client/data_acquisition_helpers.py @@ -4,10 +4,7 @@ # is subject to the terms and conditions of the Boston Dynamics Software # Development Kit License (20191101-BDSDK-SL). -import io -import json import logging -import os import ssl import time from pathlib import Path diff --git a/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.py b/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.py index 0395fa5e7..d527388bb 100644 --- a/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.py +++ b/python/bosdyn-client/src/bosdyn/client/data_acquisition_plugin_service.py @@ -42,7 +42,6 @@ storing the data. """ -import concurrent.futures import logging import threading import time @@ -242,6 +241,34 @@ def store_data(self, message, data_id, file_extension=None): future = self.store_client.store_data_async(message, data_id, file_extension) self.data_id_future_pairs.append((data_id, future)) + def store_data_as_chunks(self, message, data_id, file_extension=None): + """Store a data message by streaming with the data acquisition store service. + + Args: + message (bytes): Data to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this data. + file_extension (string) : File extension to use for writing the data to a file. + + Raises: + RPCError: Problem communicating with the robot. + """ + future = self.store_client.store_data_as_chunks_async(message, data_id, file_extension) + self.data_id_future_pairs.append((data_id, future)) + + def store_file(self, file_path, data_id, file_extension=None): + """Store a file with the data acquisition store service. + + Args: + file_path (string): Path to the file to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this file. + file_extension (string) : File extension to use for writing the data to the file. + + Raises: + RPCError: Problem communicating with the robot. + """ + future = self.store_client.store_file_async(file_path, data_id, file_extension) + self.data_id_future_pairs.append((data_id, future)) + def cancel_check(self): """Raises RequestCancelledError if the request has already been cancelled.""" self.state.cancel_check() diff --git a/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py b/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py index 1a53995ec..548d8c115 100644 --- a/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py +++ b/python/bosdyn-client/src/bosdyn/client/data_acquisition_store.py @@ -7,21 +7,24 @@ """Client implementation for data acquisition store service. """ -import collections -import functools -import json +from os import fstat +from pathlib import Path from google.protobuf import json_format from bosdyn.api import data_acquisition_store_pb2 as data_acquisition_store from bosdyn.api import data_acquisition_store_service_pb2_grpc as data_acquisition_store_service -from bosdyn.api import image_pb2 -from bosdyn.client import data_chunk +from bosdyn.api import data_chunk_pb2 as data_chunk +from bosdyn.api import header_pb2, image_pb2 +from bosdyn.client.channel import DEFAULT_HEADER_BUFFER_LENGTH, DEFAULT_MAX_MESSAGE_LENGTH from bosdyn.client.common import (BaseClient, common_header_errors, error_factory, error_pair, handle_common_header_errors, handle_unset_status_error) +from bosdyn.client.data_chunk import split_serialized from bosdyn.client.exceptions import Error, ResponseError from bosdyn.util import now_timestamp +DEFAULT_CHUNK_SIZE_BYTES = int(DEFAULT_MAX_MESSAGE_LENGTH - DEFAULT_HEADER_BUFFER_LENGTH) + class DataAcquisitionStoreClient(BaseClient): """A client for triggering data acquisition store methods.""" @@ -255,11 +258,64 @@ def store_data_async(self, data, data_id, file_extension=None, **kwargs): error_from_response=common_header_errors, copy_request=False, **kwargs) + def store_data_as_chunks(self, data, data_id, file_extension=None, **kwargs): + """Store data using streaming, supports storing of large data that is too large for a single store_data rpc. Note: using this rpc means that the data must be loaded into memory. + + Args: + data (bytes) : Arbitrary data to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this data. + file_extension (string) : File extension to use for writing the data to a file. + + Returns: + StoreDataResponse final successful response or first failed response. + """ + return self.call(self._stub.StoreDataStream, + _iterate_data_chunks(data, data_id, file_extension), + error_from_response=common_header_errors, value_from_response=None, + copy_request=False, **kwargs) + + def store_data_as_chunks_async(self, data, data_id, file_extension=None, **kwargs): + """Async version of the store_data_as_chunks() RPC.""" + return self.call_async_streaming( + self._stub.StoreDataStream, _iterate_data_chunks(data, data_id, file_extension), + error_from_response=common_header_errors, value_from_response=None, + assemble_type=data_acquisition_store.StoreStreamResponse, copy_request=False, **kwargs) + + def store_file(self, file_path, data_id, file_extension=None, **kwargs): + """Store file using file path, supports storing of large files that are too large for a single store_data rpc. + + Args: + file_path (string) : File path to arbitrary data to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this data. + file_extension (string) : File extension to use for writing the data to a file. + + Returns: + StoreDataResponse final successful response or first failed response. + """ + + file_abs = Path(file_path).absolute() + file = open(file_abs, "rb") + return self.call(self._stub.StoreDataStream, + _iterate_store_file(file, data_id, file_extension=file_extension), + error_from_response=common_header_errors, value_from_response=None, + copy_request=False, **kwargs) + + def store_file_async(self, file_path, data_id, file_extension=None, **kwargs): + """Async version of the store_file() RPC.""" + + file_abs = Path(file_path).absolute() + file = open(file_abs, "rb") + return self.call_async_streaming( + self._stub.StoreDataStream, + _iterate_store_file(file, data_id, file_extension=file_extension), + error_from_response=common_header_errors, value_from_response=None, + assemble_type=data_acquisition_store.StoreStreamResponse, copy_request=False, **kwargs) + def query_stored_captures(self, query=None, **kwargs): """Query stored captures from the robot. Args: - query (bosdyn.api.DataQueryParams) : Query parameters. + query (bosdyn.api.QueryParameters) : Query parameters. Raises: RpcError: Problem communicating with the robot. """ @@ -270,6 +326,15 @@ def query_stored_captures(self, query=None, **kwargs): assemble_type=data_acquisition_store.QueryStoredCapturesResponse, copy_request=False, **kwargs) + def query_stored_captures_async(self, query=None, **kwargs): + """Async version of the query_stored_captures() RPC.""" + request = data_acquisition_store.QueryStoredCapturesRequest(query=query) + self._apply_request_processors(request, copy_request=False) + return self.call_async_streaming( + self._stub.QueryStoredCaptures, request, error_from_response=common_header_errors, + assemble_type=data_acquisition_store.QueryStoredCapturesResponse, copy_request=False, + **kwargs) + def query_max_capture_id(self, **kwargs): """Query max capture id from the robot. Returns: @@ -284,13 +349,53 @@ def query_max_capture_id(self, **kwargs): def query_max_capture_id_async(self, **kwargs): """Async version of the query_max_capture_id() RPC.""" - request = data_acquisition_store.QueryMaxCaptureIdRequest(query=query) + request = data_acquisition_store.QueryMaxCaptureIdRequest() return self.call_async(self._stub.QueryMaxCaptureId, request, value_from_response=_get_max_capture_id, error_from_response=common_header_errors, copy_request=False, **kwargs) +def _iterate_store_file(file, data_id, file_extension=None): + """Iterator over file data and create multiple StoreStreamRequest + + Args: + file (BufferedReader) : Reader to the file for arbitrary data to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this data. + file_extension (string) : File extension to use for writing the data to a file. + Returns: + StoreStreamRequests iterates over these requests. + """ + total_size = fstat(file.fileno()).st_size + while True: + chunk = file.read(DEFAULT_CHUNK_SIZE_BYTES) + if not chunk: + # No more data + break + data = data_chunk.DataChunk(data=chunk, total_size=total_size) + request = data_acquisition_store.StoreStreamRequest(chunk=data, data_id=data_id, + file_extension=file_extension) + yield request + + +def _iterate_data_chunks(data, data_id, file_extension=None): + """Iterator over data and create multiple StoreDataRequest + + Args: + data (bytes) : Arbitrary data to store. + data_id (bosdyn.api.DataIdentifier) : Data identifier to use for storing this data. + file_extension (string) : File extension to use for writing the data to a file. + Returns: + StoreDataRequests iterates over these requests. + """ + total_size = len(data) + for chunk in split_serialized(data, DEFAULT_CHUNK_SIZE_BYTES): + chunk_data = data_chunk.DataChunk(data=chunk, total_size=total_size) + request = data_acquisition_store.StoreStreamRequest(chunk=chunk_data, data_id=data_id, + file_extension=file_extension) + yield request + + def _get_action_ids(response): return response.action_ids diff --git a/python/bosdyn-client/src/bosdyn/client/frame_helpers.py b/python/bosdyn-client/src/bosdyn/client/frame_helpers.py index 3ad350651..fefe15547 100644 --- a/python/bosdyn-client/src/bosdyn/client/frame_helpers.py +++ b/python/bosdyn-client/src/bosdyn/client/frame_helpers.py @@ -14,6 +14,7 @@ # string identifier. GRAV_ALIGNED_BODY_FRAME_NAME = "flat_body" ODOM_FRAME_NAME = "odom" +SEED_FRAME_NAME = "seed" GROUND_PLANE_FRAME_NAME = "gpe" HAND_FRAME_NAME = "hand" UNKNOWN_FRAME_NAME = "unknown" @@ -33,6 +34,7 @@ HIND_RIGHT_FOOT_FRAME_NAME ] WR1_FRAME_NAME = "arm0.link_wr1" +WAYPOINT_FRAME_NAME = "waypoint" class Error(Exception): diff --git a/python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.py b/python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.py index 66619ab9f..b53b1d362 100644 --- a/python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.py +++ b/python/bosdyn-client/src/bosdyn/client/gps/NMEAParser.py @@ -92,13 +92,14 @@ def nmea_message_group_to_gps_data_point(self, nmea_messages: List[Tuple[str, st data_point.timestamp_gps.FromDatetime(gps_timestamp_no_tz) has_timestamp = True - # Populate client and robot timestamps. + # Populate client and robot timestamps. If we are not using TimeSync, the robot + # timestamp will be the same as the client timestamp. data_point.timestamp_client.CopyFrom(seconds_to_timestamp(client_timestamp)) if time_converter is not None: data_point.timestamp_robot.CopyFrom( time_converter.robot_timestamp_from_local_secs(client_timestamp)) else: - data_point.timestamp_robot.CopyFrom(now_timestamp()) + data_point.timestamp_robot.CopyFrom(data_point.timestamp_client) if not has_timestamp and not has_warned_no_zda: @@ -110,8 +111,8 @@ def nmea_message_group_to_gps_data_point(self, nmea_messages: List[Tuple[str, st def parse(self, new_data: str, time_converter: RobotTimeConverter, check: bool = True) -> List[GpsDataPoint]: - self.data = self.data + new_data timestamp = time.time() # Client timestamp when received. + self.data = self.data + new_data if len(self.data) == 0: return [] # Protection because empty_string.splitlines() returns empty array diff --git a/python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.py b/python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.py index fa4a3aac4..07bb653cf 100644 --- a/python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.py +++ b/python/bosdyn-client/src/bosdyn/client/gps/aggregator_client.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """For clients to use the Gps Aggregator service.""" -import collections from bosdyn.api.gps import aggregator_pb2, aggregator_service_pb2_grpc, gps_pb2 from bosdyn.client.common import (BaseClient, common_header_errors, error_factory, error_pair, diff --git a/python/bosdyn-client/src/bosdyn/client/gps/gps_listener.py b/python/bosdyn-client/src/bosdyn/client/gps/gps_listener.py index 8ae8c8d50..6104d4b71 100644 --- a/python/bosdyn-client/src/bosdyn/client/gps/gps_listener.py +++ b/python/bosdyn-client/src/bosdyn/client/gps/gps_listener.py @@ -6,7 +6,6 @@ """Reads GPS data from a tcp/udp stream, and sends to aggregator service.""" -import logging import signal import socket import time @@ -40,7 +39,7 @@ def read_data(self, time_converter: RobotTimeConverter) -> List[GpsDataPoint]: try: raw_data = self.stream.readline() # If the rawdata is a bytes or bytearray object, decode it into a string. - if type(raw_data) is not str: + if not isinstance(raw_data, str): raw_data = str(raw_data, "utf-8") except UnicodeDecodeError: # Throttle the logs. @@ -159,4 +158,3 @@ def run(self): except KeyboardInterrupt: print() # Get past the ^C in the console output - pass diff --git a/python/bosdyn-client/src/bosdyn/client/graph_nav.py b/python/bosdyn-client/src/bosdyn/client/graph_nav.py index e4cff828d..eb12aae9d 100644 --- a/python/bosdyn-client/src/bosdyn/client/graph_nav.py +++ b/python/bosdyn-client/src/bosdyn/client/graph_nav.py @@ -17,8 +17,9 @@ map_pb2, nav_pb2) from bosdyn.client.common import (BaseClient, common_header_errors, common_lease_errors, error_factory, error_pair, handle_common_header_errors, - handle_lease_use_result_errors, handle_unset_status_error) -from bosdyn.client.exceptions import Error, InvalidRequestError, ResponseError + handle_lease_use_result_errors, handle_license_errors_if_present, + handle_unset_status_error) +from bosdyn.client.exceptions import Error, InvalidRequestError, ResponseError, UnimplementedError from bosdyn.client.lease import add_lease_wallet_processors @@ -31,6 +32,7 @@ def __init__(self): super(GraphNavClient, self).__init__(graph_nav_service_pb2_grpc.GraphNavServiceStub) self._timesync_endpoint = None self._data_chunk_size = 1024 * 1024 # bytes = 1 MB + self._use_streaming_graph_upload = True def update_from(self, other): super(GraphNavClient, self).update_from(other) @@ -236,18 +238,31 @@ def navigate_route_full(self, route, route_follow_params, cmd_duration, travel_p return self.call(self._stub.NavigateRoute, request, error_from_response=_navigate_route_error, copy_request=False, **kwargs) - def navigate_route_full_async(self, route, cmd_duration, route_follow_params=None, - travel_params=None, leases=None, timesync_endpoint=None, - command_id=None, destination_waypoint_tform_body_goal=None, - **kwargs): + def navigate_route_full_async( + self, + route, + cmd_duration, + route_follow_params=None, + travel_params=None, + leases=None, + timesync_endpoint=None, + command_id=None, + destination_waypoint_tform_body_goal=None, + **kwargs): """Async version of navigate_route_full().""" used_endpoint = timesync_endpoint or self._timesync_endpoint if not used_endpoint: raise GraphNavServiceResponseError(response=None, error_message='No timesync endpoint!') - request = self._build_navigate_route_request(route, route_follow_params, travel_params, - cmd_duration, leases, used_endpoint, - command_id, - destination_waypoint_tform_body_goal) + request = self._build_navigate_route_request( + route, + route_follow_params, + travel_params, + cmd_duration, + leases, + used_endpoint, + command_id, + destination_waypoint_tform_body_goal, + ) return self.call_async(self._stub.NavigateRoute, request, error_from_response=_navigate_route_error, copy_request=False, **kwargs) @@ -457,9 +472,30 @@ def upload_graph(self, lease=None, graph=None, generate_new_anchoring=False, **k The response, which includes waypoint and edge id's sorted by whether it was cached. Raises: RpcError: Problem communicating with the robot. + UploadGraphError: Indicates a problem with the map provided. + IncompatibleSensorsError: The map was recorded with different sensors than the robot. + AreaCallbackError: The map includes area callback services not present on the robot. LeaseUseError: Error using provided lease. + LicenseError: The robot's license is not valid. """ request = self._build_upload_graph_request(lease, graph, generate_new_anchoring) + # Use streaming to upload the graph, if applicable. + if self._use_streaming_graph_upload: + # Need to manually apply request processors since this will be serialized and chunked. + self._apply_request_processors(request, copy_request=False) + serialized = request.SerializeToString() + try: + return self.call( + self._stub.UploadGraphStreaming, + GraphNavClient._data_chunk_iterator_upload_graph(serialized, + self._data_chunk_size), + value_from_response=_get_response, error_from_response=_upload_graph_error, + **kwargs) + except UnimplementedError: + print('UploadGraphStreaming unimplemented. Old robot release?') + # Recreate the request so that we clear any state that might have happened during our attempt to stream. + request = self._build_upload_graph_request(lease, graph, generate_new_anchoring) + # Continue to regular UploadGraph. return self.call(self._stub.UploadGraph, request, value_from_response=_get_response, error_from_response=_upload_graph_error, copy_request=False, **kwargs) @@ -520,6 +556,17 @@ def download_graph(self, **kwargs): RpcError: Problem communicating with the robot """ request = self._build_download_graph_request() + # Use streaming to download the graph, if applicable. + if self._use_streaming_graph_upload: + try: + resp = self.call(self._stub.DownloadGraphStreaming, request, + value_from_response=_get_streamed_download_graph, + error_from_response=_download_graph_stream_errors, + copy_request=False, **kwargs) + return resp + except UnimplementedError: + print('DownloadGraphStreaming unimplemented. Old robot release?') + # Continue to regular DownloadGraph. return self.call(self._stub.DownloadGraph, request, value_from_response=_get_graph, error_from_response=common_header_errors, copy_request=False, **kwargs) @@ -644,9 +691,16 @@ def _build_get_localization_state_request(request_live_point_cloud, request_live request_gps_state=request_gps_state) @staticmethod - def _build_navigate_route_request(route, route_follow_params, travel_params, end_time_secs, - leases, timesync_endpoint, command_id, - destination_waypoint_tform_body_goal): + def _build_navigate_route_request( + route, + route_follow_params, + travel_params, + end_time_secs, + leases, + timesync_endpoint, + command_id, + destination_waypoint_tform_body_goal, + ): converter = timesync_endpoint.get_robot_time_converter() request = graph_nav_pb2.NavigateRouteRequest( route=route, route_follow_params=route_follow_params, @@ -719,6 +773,22 @@ def _build_upload_graph_request(lease, graph, generate_new_anchoring): return graph_nav_pb2.UploadGraphRequest(lease=lease, graph=graph, generate_new_anchoring=generate_new_anchoring) + @staticmethod + def _data_chunk_iterator_upload_graph(serialized_upload_graph, data_chunk_byte_size): + """Converts a serialized UploadGraphRequest into a series of UploadGraphStreamingRequests.""" + total_bytes_size = len(serialized_upload_graph) + num_chunks = math.ceil(total_bytes_size / data_chunk_byte_size) + for i in range(num_chunks): + start_index = i * data_chunk_byte_size + end_index = (i + 1) * data_chunk_byte_size + chunk = data_chunk_pb2.DataChunk(total_size=total_bytes_size) + if (end_index > total_bytes_size): + chunk.data = serialized_upload_graph[start_index:total_bytes_size] + else: + chunk.data = serialized_upload_graph[start_index:end_index] + req = graph_nav_pb2.UploadGraphStreamingRequest(chunk=chunk) + yield req + @staticmethod def _data_chunk_iterator_upload_waypoint_snapshot(serialized_waypoint_snapshot, lease, data_chunk_byte_size): @@ -995,36 +1065,26 @@ def _get_graph(response): return response.graph +def _get_streamed_data(response, data_type): + """Given a list of streamed responses, return an instance of the given data type that is parsed from those responses.""" + data = bytes() + for resp in response: + data += resp.chunk.data + proto_instance = data_type() + proto_instance.ParseFromString(data) + return proto_instance + + + + def _get_streamed_waypoint_snapshot(response): """Reads a streamed response to recreate a waypoint snapshot.""" - data = '' - num_chunks = 0 - for resp in response: - if num_chunks == 0: - data = resp.chunk.data - else: - data += resp.chunk.data - num_chunks += 1 - waypoint_snapshot = map_pb2.WaypointSnapshot() - if (num_chunks > 0): - waypoint_snapshot.ParseFromString(data) - return waypoint_snapshot + return _get_streamed_data(response, map_pb2.WaypointSnapshot) def _get_streamed_edge_snapshot(response): """Reads a streamed response to recreate an edge snapshot.""" - data = '' - num_chunks = 0 - for resp in response: - if num_chunks == 0: - data = resp.chunk.data - else: - data += resp.chunk.data - num_chunks += 1 - edge_snapshot = map_pb2.EdgeSnapshot() - if (num_chunks > 0): - edge_snapshot.ParseFromString(data) - return edge_snapshot + return _get_streamed_data(response, map_pb2.EdgeSnapshot) _UPLOAD_GRAPH_STATUS_TO_ERROR = collections.defaultdict(lambda: (ResponseError, None)) @@ -1043,6 +1103,7 @@ def _get_streamed_edge_snapshot(response): @handle_common_header_errors @handle_lease_use_result_errors +@handle_license_errors_if_present @handle_unset_status_error(unset='STATUS_UNKNOWN') def _upload_graph_error(response): """Return a custom exception based on upload graph response, None if no error.""" diff --git a/python/bosdyn-client/src/bosdyn/client/image.py b/python/bosdyn-client/src/bosdyn/client/image.py index e3d3f1320..d14498870 100644 --- a/python/bosdyn-client/src/bosdyn/client/image.py +++ b/python/bosdyn-client/src/bosdyn/client/image.py @@ -170,7 +170,7 @@ def _get_list_image_source_request(): def build_image_request(image_source_name, quality_percent=75, image_format=None, pixel_format=None, - resize_ratio=None): + resize_ratio=None, fallback_formats=None): """Helper function which builds an ImageRequest from an image source name. By default the robot will choose an appropriate format when no image format @@ -184,13 +184,16 @@ def build_image_request(image_source_name, quality_percent=75, image_format=None data, such as JPEG, RAW, or RLE. pixel_format (image_pb2.Image.PixelFormat) The pixel format of the image. resize_ratio (double): Resize ratio for image dimensions. + fallback_formats (image_pb2.Image.PixelFormat) Fallback pixel formats to use + if the pixel_format is invalid. Returns: The ImageRequest protobuf message for the given parameters. """ return image_pb2.ImageRequest(image_source_name=image_source_name, quality_percent=quality_percent, image_format=image_format, - pixel_format=pixel_format, resize_ratio=resize_ratio) + pixel_format=pixel_format, fallback_formats=fallback_formats, + resize_ratio=resize_ratio) def _list_image_sources_value(response): diff --git a/python/bosdyn-client/src/bosdyn/client/image_service_helpers.py b/python/bosdyn-client/src/bosdyn/client/image_service_helpers.py index be6706831..b444526f3 100644 --- a/python/bosdyn-client/src/bosdyn/client/image_service_helpers.py +++ b/python/bosdyn-client/src/bosdyn/client/image_service_helpers.py @@ -76,7 +76,6 @@ def blocking_capture(self, *, custom_params=None, **kwargs): A tuple with image data (in any format), and the capture timestamp in seconds (float) in the service computer's clock. """ - pass @abstractmethod def image_decode(self, image_data, image_proto, image_req): @@ -92,7 +91,6 @@ def image_decode(self, image_data, image_proto, image_req): pixel format, image format, and potentially the transform snapshot fields within the image_proto protobuf message. """ - pass class VisualImageSource(): @@ -575,7 +573,7 @@ def output_capture_function(): def _do_image_capture(self): """Main loop for the image capture thread, which requests and saves images.""" - while not self.stop_capturing_event.isSet(): + while not self.stop_capturing_event.is_set(): # Get the image by calling the blocking capture function. start_time = time.time() capture, capture_time = self.capture_function() diff --git a/python/bosdyn-client/src/bosdyn/client/map_processing.py b/python/bosdyn-client/src/bosdyn/client/map_processing.py index 331f3d7ff..fcbb443c1 100644 --- a/python/bosdyn-client/src/bosdyn/client/map_processing.py +++ b/python/bosdyn-client/src/bosdyn/client/map_processing.py @@ -6,9 +6,6 @@ """For clients of the graph_nav map processing service.""" -import collections -from enum import Enum - from bosdyn.api.graph_nav import map_pb2, map_processing_pb2, map_processing_service_pb2 from bosdyn.api.graph_nav import map_processing_service_pb2_grpc as map_processing from bosdyn.client.common import (BaseClient, common_header_errors, error_factory, diff --git a/python/bosdyn-client/src/bosdyn/client/power.py b/python/bosdyn-client/src/bosdyn/client/power.py index f563368f0..d62aad53d 100644 --- a/python/bosdyn-client/src/bosdyn/client/power.py +++ b/python/bosdyn-client/src/bosdyn/client/power.py @@ -15,8 +15,9 @@ from bosdyn.api import (basic_command_pb2, full_body_command_pb2, license_pb2, power_pb2, power_service_pb2_grpc, robot_command_pb2, robot_state_pb2) -from bosdyn.client.common import (BaseClient, error_factory, handle_common_header_errors, - handle_lease_use_result_errors, handle_unset_status_error) +from bosdyn.client.common import (BaseClient, common_license_errors, error_factory, + handle_common_header_errors, handle_lease_use_result_errors, + handle_unset_status_error) from bosdyn.client.exceptions import (Error, InternalServerError, LicenseError, ResponseError, TimedOutError) @@ -190,19 +191,10 @@ def wrapper(*args, **kwargs): def _common_license_errors(response): """Return an exception based on license status. None if no error.""" - - license_status = None if response.status != power_pb2.STATUS_LICENSE_ERROR: return None - if hasattr(response, 'license_status'): - license_status = response.license_status - else: - # This means you're using the wrong error handler. - return InternalServerError(response, 'No LicenseInfo.Status field found!') - - if license_status != license_pb2.LicenseInfo.STATUS_VALID: - return LicenseError(response) - return None + + return common_license_errors(response) @handle_common_header_errors diff --git a/python/bosdyn-client/src/bosdyn/client/recording.py b/python/bosdyn-client/src/bosdyn/client/recording.py index 1be7346f0..59fffc66c 100644 --- a/python/bosdyn-client/src/bosdyn/client/recording.py +++ b/python/bosdyn-client/src/bosdyn/client/recording.py @@ -13,7 +13,7 @@ from bosdyn.api.graph_nav import recording_service_pb2_grpc as recording_service from bosdyn.client.common import (BaseClient, common_header_errors, error_factory, handle_common_header_errors, handle_lease_use_result_errors, - handle_unset_status_error) + handle_license_errors_if_present, handle_unset_status_error) from bosdyn.client.exceptions import ResponseError @@ -275,14 +275,13 @@ def make_client_metadata(session_name=None, client_username=None, client_softwar @staticmethod def make_edge_environment( vel_limit=None, direction_constraint=map_pb2.Edge.Annotations.DIRECTION_CONSTRAINT_NONE, - require_alignment=False, flat_ground=False, ground_mu_hint=.8, grated_floor=False): + require_alignment=False, ground_mu_hint=.8, grated_floor=False): """Create an edge environment. Args: vel_limit: A SE2VelocityLimit to use while traversing the edge. Note this is not a target speed, just a max/min. direction_constraint: A direction constraints on the robot's orientation when traversing the edge. require_alignment: Boolean where if true, the robot must be aligned with the edge in yaw before traversing it. - flat_ground: Boolean where if true, the edge crosses flat ground and the robot shouldn't try to climb over obstacles. ground_mu_hint: Terrain coefficient of friction user hint. Suggested values lie between [.4, .8]. grated_floor: Boolean where if true, the edge crosses over grated metal. Returns: @@ -290,7 +289,6 @@ def make_edge_environment( """ edge_env = map_pb2.Edge.Annotations() edge_env.require_alignment.value.CopyFrom(require_alignment) - edge_env.flat_ground.value.CopyFrom(flat_ground) edge_env.grated_floor.value.CopyFrom(grated_floor) if (ground_mu_hint > 0): edge_env.ground_mu_hint.value.CopyFrom(ground_mu_hint) @@ -438,6 +436,7 @@ def _get_response(response): @handle_common_header_errors # @handle_lease_use_result_errors +@handle_license_errors_if_present @handle_unset_status_error(unset='STATUS_UNKNOWN') def _start_recording_error(response): """Return a custom exception based on start recording response, None if no error.""" @@ -482,6 +481,7 @@ def _stop_recording_error(response): @handle_common_header_errors # @handle_lease_use_result_errors +@handle_license_errors_if_present @handle_unset_status_error(unset='STATUS_UNKNOWN') def _create_waypoint_error(response): """Return a custom exception based on create waypoint response, None if no error.""" diff --git a/python/bosdyn-client/src/bosdyn/client/robot.py b/python/bosdyn-client/src/bosdyn/client/robot.py index 211e94d85..26395137a 100644 --- a/python/bosdyn-client/src/bosdyn/client/robot.py +++ b/python/bosdyn-client/src/bosdyn/client/robot.py @@ -129,6 +129,7 @@ def __init__( self.cert = None self.lease_wallet = LeaseWallet() self._time_sync_thread = None + self.executor = None # Set default max message length for sending and receiving. These values are used when # creating channels. @@ -198,6 +199,7 @@ def update_from(self, other): self.max_receive_message_length = other.max_receive_message_length self.client_name = other.client_name self.lease_wallet.set_client_name(self.client_name) + self.executor = other.executor def ensure_client(self, service_name, channel=None, options=[], service_endpoint=None): """Ensure a Client for a given service. @@ -247,7 +249,7 @@ def shutdown(self): for channel_from_auth in self.channels_by_authority.values(): channel_from_auth.close() - def get_cached_robot_id(self): + def get_cached_robot_id(self, timeout=None): """Return the RobotId proto for this robot, querying it from the robot if not yet cached. Raises: @@ -255,10 +257,10 @@ def get_cached_robot_id(self): """ if not self._robot_id: robot_id_client = self.ensure_client('robot-id') - self._robot_id = robot_id_client.get_id() + self._robot_id = robot_id_client.get_id(timeout=timeout) return self._robot_id - def get_cached_hardware_hardware_configuration(self): + def get_cached_hardware_hardware_configuration(self, timeout=None): """Return the HardwareConfiguration proto for this robot, querying it from the robot if not yet cached. @@ -267,7 +269,7 @@ def get_cached_hardware_hardware_configuration(self): """ if not self._hardware_config: client = self.ensure_client(RobotStateClient.default_service_name) - self._hardware_config = client.get_robot_hardware_configuration() + self._hardware_config = client.get_robot_hardware_configuration(timeout=timeout) return self._hardware_config @@ -411,7 +413,6 @@ def authenticate_from_payload_credentials(self, guid, secret, payload_registrati self.logger.warning( 'Payload is not authorized. Authentication will block until an' ' operator authorizes the payload in the Admin Console.') - pass time.sleep(0.1) self.update_user_token(user_token) diff --git a/python/bosdyn-client/src/bosdyn/client/robot_command.py b/python/bosdyn-client/src/bosdyn/client/robot_command.py index b57dce69d..125d580b4 100644 --- a/python/bosdyn-client/src/bosdyn/client/robot_command.py +++ b/python/bosdyn-client/src/bosdyn/client/robot_command.py @@ -1584,7 +1584,7 @@ def arm_cartesian_move_helper(se3_poses, times, root_frame_name, wrist_tform_too arm_cartesian_traj = arm_cartesian_command.pose_trajectory_in_task arm_cartesian_traj.pos_interpolation = trajectory_pb2.POS_INTERP_CUBIC arm_cartesian_traj.ang_interpolation = trajectory_pb2.ANG_INTERP_CUBIC_EULER - for i, time in enumerate(times): + for i, point_time in enumerate(times): # Add a new trajectory point to our trajectory traj_point = arm_cartesian_traj.points.add() @@ -1604,7 +1604,7 @@ def arm_cartesian_move_helper(se3_poses, times, root_frame_name, wrist_tform_too traj_point.velocity.CopyFrom(se3_velocity) # Set our time_since_reference for this trajectory point - traj_point.time_since_reference.CopyFrom(seconds_to_duration(times[i])) + traj_point.time_since_reference.CopyFrom(seconds_to_duration(point_time)) if ref_time is not None: # Set a reference time if desired. If not, we'll automatically set the reference time diff --git a/python/bosdyn-client/src/bosdyn/client/sdk.py b/python/bosdyn-client/src/bosdyn/client/sdk.py index 5f159d1f4..5235e05ed 100644 --- a/python/bosdyn-client/src/bosdyn/client/sdk.py +++ b/python/bosdyn-client/src/bosdyn/client/sdk.py @@ -202,6 +202,9 @@ def __init__(self, name=None): self.max_send_message_length = DEFAULT_MAX_MESSAGE_LENGTH self.max_receive_message_length = DEFAULT_MAX_MESSAGE_LENGTH + # ThreadPoolExecutor instance for asynchronous streaming calls. + self.executor = None + def create_robot( self, diff --git a/python/bosdyn-client/src/bosdyn/client/server_util.py b/python/bosdyn-client/src/bosdyn/client/server_util.py index 3a0390c97..14d1413d5 100644 --- a/python/bosdyn-client/src/bosdyn/client/server_util.py +++ b/python/bosdyn-client/src/bosdyn/client/server_util.py @@ -77,6 +77,8 @@ def __exit__(self, exc_type, exc_val, exc_tb): else: channel = self.channel_prefix + "/" + self.response.DESCRIPTOR.full_name self.rpc_logger.add_protobuf_async(self.response, channel) + if not self.response.header.HasField("response_timestamp"): + self.response.header.response_timestamp.CopyFrom(bosdyn.util.now_timestamp()) class GrpcServiceRunner(object): diff --git a/python/bosdyn-client/src/bosdyn/client/service_customization_helpers.py b/python/bosdyn-client/src/bosdyn/client/service_customization_helpers.py index 84f4b63ae..d722b60d2 100644 --- a/python/bosdyn-client/src/bosdyn/client/service_customization_helpers.py +++ b/python/bosdyn-client/src/bosdyn/client/service_customization_helpers.py @@ -135,7 +135,7 @@ def list_params_to_list(list_param: ListParam, list_spec: ListParam.Spec, def oneof_param_to_dict(oneof_param: OneOfParam, oneof_spec: OneOfParam.Spec, - validate: bool = True) -> List: + validate: bool = True) -> Dict: if validate: validator = _OneOfParamValidator(oneof_spec) validator.validate_spec() @@ -183,7 +183,6 @@ def validate_spec(self) -> None: Returns: None for a valid spec, and raises a CustomParamError with a status besides STATUS_OK for an invalid spec """ - pass @abstractmethod def validate_value(self, param_value) -> Optional[CustomParamError]: @@ -196,7 +195,6 @@ def validate_value(self, param_value) -> Optional[CustomParamError]: Returns: None for a valid value, and returns a service_customization_pb2.CustomParamError with a status besides STATUS_OK for an invalid value """ - pass class _DictParamValidator(_ParamValidatorInterface): @@ -554,6 +552,8 @@ def validate_value(self, param_value): return full_error + + class _CustomParamValidator(_ParamValidatorInterface): """ ParamValidator class for a service_customization_pb2.CustomParam.Spec @@ -766,6 +766,8 @@ def bool_spec_to_default(spec): return BoolParam(value=spec.default_value.value) + + def one_of_spec_to_default(spec): """ Create a default service_customization_pb2.OneOfParam based off of the service_customization_pb2.OneOfParam.Spec argument diff --git a/python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.py b/python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.py index ad300992a..4f54e51f5 100644 --- a/python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.py +++ b/python/bosdyn-client/src/bosdyn/client/spot_cam/streamquality.py @@ -7,7 +7,6 @@ """For clients to the Spot CAM StreamQuality service.""" import logging -from multiprocessing.sharedctypes import Value _LOGGER = logging.getLogger(__name__) diff --git a/python/bosdyn-client/src/bosdyn/client/spot_check.py b/python/bosdyn-client/src/bosdyn/client/spot_check.py index b5ca21727..ea9752807 100644 --- a/python/bosdyn-client/src/bosdyn/client/spot_check.py +++ b/python/bosdyn-client/src/bosdyn/client/spot_check.py @@ -103,44 +103,6 @@ class CameraCalibrationTimedOutError(Exception): """Timed out waiting for SUCCESS response from calibration.""" -class GripperCameraCalibrationResponseError(SpotCheckError): - """General class of errors for gripper camera calibration routines.""" - - -class GripperCameraCalibrationUserCanceledError(GripperCameraCalibrationResponseError): - """API client canceled calibration.""" - - -class GripperCameraCalibrationPowerError(GripperCameraCalibrationResponseError): - """The robot is not powered on.""" - - -class GripperCameraCalibrationLeaseError(GripperCameraCalibrationResponseError): - """The Lease is invalid.""" - - -class GripperCameraCalibrationTargetNotCenteredError(GripperCameraCalibrationResponseError): - """Invalid starting configuration of robot.""" - - -class GripperCameraCalibrationTargetUpsideDownError(GripperCameraCalibrationResponseError): - """The target is incorrectly oriented.""" - - -class GripperCameraCalibrationCalibrationError(GripperCameraCalibrationResponseError): - """Calibration algorithm failure occurred.""" - - -class GripperCameraCalibrationInitializationError(GripperCameraCalibrationResponseError): - """Initialization error occurred .""" - - -class GripperCameraCalibrationInternalError(GripperCameraCalibrationResponseError): - """Internal error occurred .""" - - -class GripperCameraCalibrationStuckError(GripperCameraCalibrationResponseError): - """Timed out waiting for robot to reach goal pose.""" class SpotCheckClient(BaseClient): @@ -210,41 +172,6 @@ def camera_calibration_feedback_async(self, request, **kwargs): return self.call_async(self._stub.CameraCalibrationFeedback, request, None, _calibration_feedback_error_from_response, **kwargs) - def gripper_camera_calibration_command(self, request, **kwargs): - """Issue a gripper camera calibration command to the robot. - - Raises: - Error on header error or lease use result error. - """ - return self.call(self._stub.GripperCameraCalibrationCommand, request, None, - _gripper_calibration_command_error_from_response, **kwargs) - - def gripper_camera_calibration_command_async(self, request, **kwargs): - """Async version of gripper_camera_calibration_command() - - Raises: - Error on header error or lease use result error. - """ - return self.call_async(self._stub.GripperCameraCalibrationCommand, request, None, - _gripper_calibration_command_error_from_response, **kwargs) - - def gripper_camera_calibration_feedback(self, request, **kwargs): - """Check the current status of gripper camera calibration. - - Raises: - GripperCameraCalibrationResponseError on any feedback error. - """ - return self.call(self._stub.GripperCameraCalibrationFeedback, request, None, - _gripper_calibration_feedback_error_from_response, **kwargs) - - def gripper_camera_calibration_feedback_async(self, request, **kwargs): - """Async version of gripper_camera_calibration_feedback() - - Raises: - GripperCameraCalibrationResponseError on any feedback error. - """ - return self.call_async(self._stub.GripperCameraCalibrationFeedback, request, None, - _gripper_calibration_feedback_error_from_response, **kwargs) def run_spot_check(spot_check_client, lease, timeout_sec=212, update_frequency=0.25, verbose=False): @@ -442,85 +369,3 @@ def _cal_status_error_from_response(response): -# Gripper Camera calibration error handlers. -@handle_common_header_errors -@handle_lease_use_result_errors -def _gripper_calibration_command_error_from_response(response): - return None - - -@handle_common_header_errors -def _gripper_calibration_feedback_error_from_response(response): - # Special handling of lease case. - if response.status == spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_LEASE_ERROR: - return LeaseUseError(response, None) - return _gcal_status_error_from_response(response) - - -_GCAL_STATUS_TO_ERROR = collections.defaultdict(lambda: - (GripperCameraCalibrationResponseError, None)) -_GCAL_STATUS_TO_ERROR.update({ # noqa - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_SUCCESS: ( - None, - None, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_PROCESSING: ( - None, - None, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_USER_CANCELED: ( - GripperCameraCalibrationUserCanceledError, - GripperCameraCalibrationUserCanceledError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_NEVER_RUN: ( - None, - None, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_POWER_ERROR: ( - GripperCameraCalibrationPowerError, - GripperCameraCalibrationPowerError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_LEASE_ERROR: ( - GripperCameraCalibrationLeaseError, - GripperCameraCalibrationLeaseError.__doc__, - ), - - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_TARGET_NOT_CENTERED: ( - GripperCameraCalibrationTargetNotCenteredError, - GripperCameraCalibrationTargetNotCenteredError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_TARGET_NOT_IN_VIEW: ( - GripperCameraCalibrationTargetNotCenteredError, - GripperCameraCalibrationTargetNotCenteredError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_TARGET_UPSIDE_DOWN: ( - GripperCameraCalibrationTargetUpsideDownError, - GripperCameraCalibrationTargetUpsideDownError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_INITIALIZATION_ERROR: ( - GripperCameraCalibrationInitializationError, - GripperCameraCalibrationInitializationError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_INTERNAL_ERROR: ( - GripperCameraCalibrationInternalError, - GripperCameraCalibrationInternalError.__doc__, - ), - spot_check_pb2.GripperCameraCalibrationFeedbackResponse.STATUS_STUCK: ( - GripperCameraCalibrationStuckError, - GripperCameraCalibrationStuckError.__doc__, - ), -}) - - -@handle_unset_status_error( - unset="STATUS_UNKNOWN", - statustype=spot_check_pb2.GripperCameraCalibrationFeedbackResponse, -) -def _gcal_status_error_from_response(response): - """Return a custom exception based on response, None if no error.""" - return error_factory( - response, - response.status, - status_to_string=spot_check_pb2.GripperCameraCalibrationFeedbackResponse.Status.Name, - status_to_error=_GCAL_STATUS_TO_ERROR, - ) diff --git a/python/bosdyn-client/src/bosdyn/client/time_sync.py b/python/bosdyn-client/src/bosdyn/client/time_sync.py index 321ee19c8..10cbe6027 100644 --- a/python/bosdyn-client/src/bosdyn/client/time_sync.py +++ b/python/bosdyn-client/src/bosdyn/client/time_sync.py @@ -18,6 +18,7 @@ from bosdyn.api import time_sync_pb2, time_sync_service_pb2_grpc from bosdyn.api.time_range_pb2 import TimeRange +from bosdyn.client.robot_command import NoTimeSyncError, _TimeConverter from bosdyn.util import (RobotTimeConverter, now_nsec, now_sec, nsec_to_timestamp, parse_timespan, set_timestamp_from_nsec, timestamp_to_nsec) @@ -161,6 +162,42 @@ def timespec_to_robot_timespan(timespan_spec, time_sync_endpoint=None): return robot_time_range_from_datetimes(start_datetime, end_datetime, time_sync_endpoint) +def update_time_filter(client, timestamp, timesync_endpoint): + """Set or convert fields of the proto that need timestamps in the robot's clock. + + Args: + timestamp (float): Client time, such as from time.time(). + timesync_endpoint (TimeSyncEndpoint): A timesync endpoint associated with the robot object. + + Raises: + bosdyn.client.robot_command.NoTimeSyncError: Could not find the timesync endpoint for the robot to convert the time. + """ + # Input timestamp is a float. (from time.time()) + if not timesync_endpoint: + raise NoTimeSyncError("[world object service] No timesync endpoint set for the robot.") + # Lazy RobotTimeConverter: initialized only if needed to make a conversion. + converter = _TimeConverter(client, timesync_endpoint) + return converter.robot_timestamp_from_local_secs(timestamp) + + +def update_timestamp_filter(client, timestamp, timesync_endpoint): + """Set or convert fields of the proto that need timestamps in the robot's clock. + + Args: + timestamp (google.protobuf.Timestamp): Client time. + timesync_endpoint (TimeSyncEndpoint): A timesync endpoint associated with the robot object. + + Raises: + bosdyn.client.robot_command.NoTimeSyncError: Could not find the timesync endpoint for the robot to convert the time. + """ + # Input timestamp is a google.protobuf.Timestamp + if not timesync_endpoint: + raise NoTimeSyncError("[world object service] No timesync endpoint set for the robot.") + converter = _TimeConverter(client, timesync_endpoint) + converter.convert_timestamp_from_local_to_robot(timestamp) + return timestamp + + class TimeSyncEndpoint: @@ -524,6 +561,7 @@ def _timesync_thread(self): else: # When sync has been established, use default wait time. self._event.wait(self.time_sync_interval_sec) + self._event.clear() # Do RPC call to update time-sync information. if not self.should_exit: diff --git a/python/bosdyn-client/src/bosdyn/client/util.py b/python/bosdyn-client/src/bosdyn/client/util.py index c88dbe1e6..dd569afc0 100644 --- a/python/bosdyn-client/src/bosdyn/client/util.py +++ b/python/bosdyn-client/src/bosdyn/client/util.py @@ -6,15 +6,11 @@ """Helper functions and classes for creating client applications.""" -import copy import getpass -import glob import logging import os -import pathlib import signal import sys -import threading import time from concurrent import futures from secrets import token_urlsafe @@ -406,8 +402,9 @@ def safe_pb_enum_to_string(value, pb_enum_obj): return ' (value: {})'.format(value) -@deprecated(reason='The GrpcServiceRunner class helper has moved to server_util.py. Please use ' - 'bosdyn.client.server_util.GrpcServiceRunner.', version='3.0.0', action="always") +@deprecated( + reason='The GrpcServiceRunner class helper has moved to server_util.py. Please use ' + 'bosdyn.client.server_util.GrpcServiceRunner.', version='3.0.0', action="always") class GrpcServiceRunner(object): """A runner to start a gRPC server on a background thread and allow easy cleanup. diff --git a/python/bosdyn-client/src/bosdyn/client/world_object.py b/python/bosdyn-client/src/bosdyn/client/world_object.py index 28c9abd73..2f88cbf8c 100644 --- a/python/bosdyn-client/src/bosdyn/client/world_object.py +++ b/python/bosdyn-client/src/bosdyn/client/world_object.py @@ -11,7 +11,8 @@ from bosdyn.api import world_object_service_pb2_grpc as world_object_service from bosdyn.client.common import BaseClient, common_header_errors from bosdyn.client.frame_helpers import * -from bosdyn.client.robot_command import NoTimeSyncError, _TimeConverter +from bosdyn.client.robot_command import NoTimeSyncError +from bosdyn.client.time_sync import update_time_filter, update_timestamp_filter from bosdyn.util import now_timestamp @@ -63,7 +64,7 @@ def list_world_objects(self, object_type=None, time_start_point=None, **kwargs): time. """ if time_start_point is not None: - time_start_point = self._update_time_filter(time_start_point, self.timesync_endpoint) + time_start_point = update_time_filter(self, time_start_point, self.timesync_endpoint) req = world_object_pb2.ListWorldObjectRequest(object_type=object_type, timestamp_filter=time_start_point) return self.call(self._stub.ListWorldObjects, req, @@ -73,7 +74,7 @@ def list_world_objects(self, object_type=None, time_start_point=None, **kwargs): def list_world_objects_async(self, object_type=None, time_start_point=None, **kwargs): """Async version of list_world_objects().""" if time_start_point is not None: - time_start_point = self._update_time_filter(time_start_point, self.timesync_endpoint) + time_start_point = update_time_filter(self, time_start_point, self.timesync_endpoint) req = world_object_pb2.ListWorldObjectRequest(object_type=object_type, timestamp_filter=time_start_point) return self.call_async(self._stub.ListWorldObjects, req, @@ -100,7 +101,7 @@ def mutate_world_objects(self, mutation_req, **kwargs): # Ensure the mutation request's object's time of detection is in robot time. client_timestamp = mutation_req.mutation.object.acquisition_time mutation_req.mutation.object.acquisition_time.CopyFrom( - self._update_timestamp_filter(client_timestamp, self.timesync_endpoint)) + update_timestamp_filter(self, client_timestamp, self.timesync_endpoint)) return self.call(self._stub.MutateWorldObjects, mutation_req, value_from_response=_get_status, error_from_response=common_header_errors, **kwargs) @@ -111,46 +112,12 @@ def mutate_world_objects_async(self, mutation_req, **kwargs): # Ensure the mutation request's object's time of detection is in robot time. client_timestamp = mutation_req.mutation.object.acquisition_time mutation_req.mutation.object.acquisition_time.CopyFrom( - self._update_timestamp_filter(client_timestamp, self.timesync_endpoint)) + update_timestamp_filter(self, client_timestamp, self.timesync_endpoint)) return self.call_async(self._stub.MutateWorldObjects, mutation_req, value_from_response=_get_status, error_from_response=common_header_errors, **kwargs) - def _update_time_filter(self, timestamp, timesync_endpoint): - """Set or convert fields of the proto that need timestamps in the robot's clock. - - Args: - timestamp (float): Client time, such as from time.time(). - timesync_endpoint (TimeSyncEndpoint): A timesync endpoint associated with the robot object. - - Raises: - NoTimeSyncError: Could not find the timesync endpoint for the robot to convert the time. - """ - # Input timestamp is a float. (from time.time()) - if not timesync_endpoint: - raise NoTimeSyncError("[world object service] No timesync endpoint set for the robot.") - # Lazy RobotTimeConverter: initialized only if needed to make a conversion. - converter = _TimeConverter(self, timesync_endpoint) - return converter.robot_timestamp_from_local_secs(timestamp) - - def _update_timestamp_filter(self, timestamp, timesync_endpoint): - """Set or convert fields of the proto that need timestamps in the robot's clock. - - Args: - timestamp (google.protobuf.Timestamp): Client time. - timesync_endpoint (TimeSyncEndpoint): A timesync endpoint associated with the robot object. - - Raises: - NoTimeSyncError: Could not find the timesync endpoint for the robot to convert the time. - """ - # Input timestamp is a google.protobuf.Timestamp - if not timesync_endpoint: - raise NoTimeSyncError("[world object service] No timesync endpoint set for the robot.") - converter = _TimeConverter(self, timesync_endpoint) - converter.convert_timestamp_from_local_to_robot(timestamp) - return timestamp - def draw_sphere(self, name, x_rt_frame_name, y_rt_frame_name, z_rt_frame_name, frame_name, radius=0.05, rgba=(255, 0, 0, 1), list_objects_now=True): """Create a drawable sphere world object that will be sent to the world object service diff --git a/python/bosdyn-client/tests/helpers.py b/python/bosdyn-client/tests/helpers.py index b7c867d70..9a8722253 100644 --- a/python/bosdyn-client/tests/helpers.py +++ b/python/bosdyn-client/tests/helpers.py @@ -31,9 +31,9 @@ def setup_client_and_service(client, service, service_adder): """ server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=10)) service_adder(service, server) - port = server.add_insecure_port('localhost:0') + port = server.add_insecure_port('127.0.0.1:0') server.start() - channel = grpc.insecure_channel('localhost:{}'.format(port)) + channel = grpc.insecure_channel('127.0.0.1:{}'.format(port)) client.channel = channel return server diff --git a/python/bosdyn-client/tests/test_auth_client.py b/python/bosdyn-client/tests/test_auth_client.py index c051ebc38..726e575b0 100644 --- a/python/bosdyn-client/tests/test_auth_client.py +++ b/python/bosdyn-client/tests/test_auth_client.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """Unit tests for the auth module.""" -import logging import time import grpc diff --git a/python/bosdyn-client/tests/test_auto_return_client.py b/python/bosdyn-client/tests/test_auto_return_client.py index 309ae75f7..94fcd19f4 100644 --- a/python/bosdyn-client/tests/test_auto_return_client.py +++ b/python/bosdyn-client/tests/test_auto_return_client.py @@ -58,8 +58,8 @@ def service(): def server(client, service): server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=1)) auto_return_service_pb2_grpc.add_AutoReturnServiceServicer_to_server(service, server) - port = server.add_insecure_port('localhost:0') - channel = grpc.insecure_channel('localhost:{}'.format(port)) + port = server.add_insecure_port('127.0.0.1:0') + channel = grpc.insecure_channel('127.0.0.1:{}'.format(port)) client.channel = channel server.start() return server diff --git a/python/bosdyn-client/tests/test_base_client.py b/python/bosdyn-client/tests/test_base_client.py index a1515669b..64fef1f80 100644 --- a/python/bosdyn-client/tests/test_base_client.py +++ b/python/bosdyn-client/tests/test_base_client.py @@ -91,3 +91,15 @@ def value_from_response(response): response = client.call_async(client._stub.rpc_method, None, value_from_response=value_from_response, **kwargs) assert isinstance(response.result(), Response) + + # Test async steaming + response = client.call_async_streaming(client._stub.rpc_method, None) + assert isinstance(response.result(), Response) + + response = client.call_async_streaming(client._stub.rpc_method, None, + value_from_response=value_from_response) + assert isinstance(response.result(), ProcessedResponse) + + response = client.call_async_streaming(client._stub.rpc_method, None, + value_from_response=value_from_response, **kwargs) + assert isinstance(response.result(), Response) diff --git a/python/bosdyn-client/tests/test_bddf.py b/python/bosdyn-client/tests/test_bddf.py index 8117f7d9a..abc5d70af 100644 --- a/python/bosdyn-client/tests/test_bddf.py +++ b/python/bosdyn-client/tests/test_bddf.py @@ -20,11 +20,17 @@ from bosdyn.util import now_nsec, now_timestamp, timestamp_to_nsec +def gettempdir(): + if "TEST_TMPDIR" in os.environ: + return os.environ["TEST_TMPDIR"] + return tempfile.gettempdir() + + def test_write_read(): """Test writing a data to a file, and reading it back.""" file_annotations = {'robot': 'spot', 'individual': 'spot-BD-99990001'} channel_annotations = {'ccc': '3', 'd': '4444'} - filename = os.path.join(tempfile.gettempdir(), 'test1.bdf') + filename = os.path.join(gettempdir(), 'test1.bdf') series1_type = 'bosdyn/test/1' series1_spec = {'channel': 'channel_a'} series1_content_type = 'text/plain' diff --git a/python/bosdyn-client/tests/test_cmdline.py b/python/bosdyn-client/tests/test_cmdline.py index caf038c2b..321345630 100644 --- a/python/bosdyn-client/tests/test_cmdline.py +++ b/python/bosdyn-client/tests/test_cmdline.py @@ -11,4 +11,3 @@ def test_null(): """This at least confirms that all the modules listed above load successfully.""" - pass diff --git a/python/bosdyn-client/tests/test_data_buffer.py b/python/bosdyn-client/tests/test_data_buffer.py index 4060bfd73..d844018ea 100644 --- a/python/bosdyn-client/tests/test_data_buffer.py +++ b/python/bosdyn-client/tests/test_data_buffer.py @@ -7,7 +7,6 @@ """data-buffer pytests""" import logging import struct -import sys import time import types from unittest import mock diff --git a/python/bosdyn-client/tests/test_estop.py b/python/bosdyn-client/tests/test_estop.py index a7e629c96..be6f54655 100644 --- a/python/bosdyn-client/tests/test_estop.py +++ b/python/bosdyn-client/tests/test_estop.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). import concurrent.futures -import logging import time import grpc @@ -66,9 +65,9 @@ def _setup_server_and_client(rpc_delay=0, endpoint_name='test-endpoint'): server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=10)) bosdyn.api.estop_service_pb2_grpc.add_EstopServiceServicer_to_server( MockEstopServicer(rpc_delay), server) - port = server.add_insecure_port('localhost:0') + port = server.add_insecure_port('127.0.0.1:0') server.start() - channel = grpc.insecure_channel('localhost:{}'.format(port)) + channel = grpc.insecure_channel('127.0.0.1:{}'.format(port)) client = bosdyn.client.estop.EstopClient() client.channel = channel endpoint = bosdyn.client.estop.EstopEndpoint(client, endpoint_name, estop_timeout=1) diff --git a/python/bosdyn-client/tests/test_graph_nav_client.py b/python/bosdyn-client/tests/test_graph_nav_client.py index f659dab96..418063bd2 100644 --- a/python/bosdyn-client/tests/test_graph_nav_client.py +++ b/python/bosdyn-client/tests/test_graph_nav_client.py @@ -11,10 +11,11 @@ import pytest import bosdyn.client.graph_nav -from bosdyn.api import header_pb2, lease_pb2, time_sync_pb2 +from bosdyn.api import header_pb2, lease_pb2, license_pb2, time_sync_pb2 from bosdyn.api.graph_nav import graph_nav_pb2, graph_nav_service_pb2_grpc, map_pb2, nav_pb2 -from bosdyn.client.exceptions import InternalServerError, UnsetStatusError -from bosdyn.client.graph_nav import GraphNavClient, UnrecognizedCommandError +from bosdyn.client.exceptions import InternalServerError, InvalidRequestError, UnsetStatusError +from bosdyn.client.graph_nav import (GraphNavClient, NoPathError, RobotNotLocalizedToRouteError, + UnknownMapInformationError, UnrecognizedCommandError) from bosdyn.client.time_sync import TimeSyncEndpoint @@ -28,7 +29,6 @@ def __init__(self): super(MockGraphNavServicer, self).__init__() self.common_header_code = header_pb2.CommonError.CODE_OK self.nav_feedback_status = graph_nav_pb2.NavigationFeedbackResponse.STATUS_REACHED_GOAL - self.modify_navigation_status = graph_nav_pb2.ModifyNavigationResponse.STATUS_OK self.nav_to_resp = graph_nav_pb2.NavigateToResponse( status=graph_nav_pb2.NavigateToResponse.STATUS_OK) self.nav_route_resp = graph_nav_pb2.NavigateRouteResponse( @@ -82,6 +82,7 @@ def UploadGraph(self, request, context): resp.lease_use_result.CopyFrom(self.lease_use_result) return resp + def UploadWaypointSnapshot(self, request_iterator, context): resp = graph_nav_pb2.UploadWaypointSnapshotResponse() resp.status = graph_nav_pb2.UploadWaypointSnapshotResponse.STATUS_OK @@ -104,11 +105,6 @@ def NavigationFeedback(self, request, context): resp.status = self.nav_feedback_status return resp - def ModifyNavigation(self, request, context): - resp = graph_nav_pb2.ModifyNavigationResponse() - resp.header.error.code = self.common_header_code - resp.status = self.modify_navigation_status - return resp def DownloadWaypointSnapshot(self, request, context): resp = graph_nav_pb2.DownloadWaypointSnapshotResponse() @@ -147,8 +143,8 @@ def time_sync(): def server(client, service): server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=1)) graph_nav_service_pb2_grpc.add_GraphNavServiceServicer_to_server(service, server) - port = server.add_insecure_port('localhost:0') - channel = grpc.insecure_channel('localhost:{}'.format(port)) + port = server.add_insecure_port('127.0.0.1:0') + channel = grpc.insecure_channel('127.0.0.1:{}'.format(port)) client.channel = channel server.start() yield server @@ -344,6 +340,11 @@ def test_upload_graph_exceptions(client, service, server): with pytest.raises(bosdyn.client.graph_nav.InvalidGraphError): make_call() + service.upload_graph_resp.status = service.upload_graph_resp.STATUS_UNKNOWN + service.upload_graph_resp.license_status = license_pb2.LicenseInfo.STATUS_EXPIRED + with pytest.raises(bosdyn.client.LicenseError): + make_call() + def test_upload_waypoint_exceptions(client, service, server): make_call = lambda: client.upload_waypoint_snapshot(map_pb2.WaypointSnapshot()) diff --git a/python/bosdyn-client/tests/test_image.py b/python/bosdyn-client/tests/test_image.py index 00ae914fa..e1131f9cb 100644 --- a/python/bosdyn-client/tests/test_image.py +++ b/python/bosdyn-client/tests/test_image.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """Unit tests for the image client.""" -import logging import time import grpc diff --git a/python/bosdyn-client/tests/test_map_processing_client.py b/python/bosdyn-client/tests/test_map_processing_client.py index 6f446b4d6..3992d54af 100644 --- a/python/bosdyn-client/tests/test_map_processing_client.py +++ b/python/bosdyn-client/tests/test_map_processing_client.py @@ -74,8 +74,8 @@ def time_sync(): def server(client, service): server = grpc.server(concurrent.futures.ThreadPoolExecutor(max_workers=1)) map_processing_service_pb2_grpc.add_MapProcessingServiceServicer_to_server(service, server) - port = server.add_insecure_port('localhost:0') - channel = grpc.insecure_channel('localhost:{}'.format(port)) + port = server.add_insecure_port('127.0.0.1:0') + channel = grpc.insecure_channel('127.0.0.1:{}'.format(port)) client.channel = channel server.start() yield server diff --git a/python/bosdyn-client/tests/test_robot_id.py b/python/bosdyn-client/tests/test_robot_id.py index 4f1d54ffa..e7495c37f 100644 --- a/python/bosdyn-client/tests/test_robot_id.py +++ b/python/bosdyn-client/tests/test_robot_id.py @@ -5,7 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """Unit tests for the robot_id client.""" -import logging import time import grpc diff --git a/python/bosdyn-client/tests/test_service_customization_helpers.py b/python/bosdyn-client/tests/test_service_customization_helpers.py index dfe030ab2..87ea29837 100644 --- a/python/bosdyn-client/tests/test_service_customization_helpers.py +++ b/python/bosdyn-client/tests/test_service_customization_helpers.py @@ -150,6 +150,7 @@ def dict_spec(spec_list): roi_spec_inputs = [(roi_spec(allows_rectangle), _RegionOfInterestParamValidator, allows_rectangle) for allows_rectangle in [True, False]] + #type_string, element_spec, is_valid custom_spec_test_cases = [ ("int", int_spec_inputs[0][0], True), @@ -256,6 +257,7 @@ def nested_one_of_spec(nested_dict_spec, other_dict_spec, default_key="nested"): one_of_spec_inputs) + @pytest.mark.parametrize("spec,spec_helper,is_valid", all_input_specs) def test_custom_parameter_spec(spec, spec_helper, is_valid): if is_valid: @@ -311,6 +313,7 @@ def custom_value(type_string, original_value): (service_customization_pb2.BoolParam(value=True), bool_spec_inputs[0][0], _BoolParamValidator, True) ] #yapf: disable + good_roi_val = service_customization_pb2.RegionOfInterestParam( area=image_geometry_pb2.AreaI( rectangle=image_geometry_pb2.RectangleI(x=5, y=10, cols=10, rows=25)), @@ -443,6 +446,7 @@ def nested_one_of_value(nested_dict_value, other_dict_value, key="nested"): dict_value_inputs + one_of_value_inputs) + @pytest.mark.parametrize("value,spec,spec_helper,is_valid", all_input_values) def test_custom_parameter_values(value, spec, spec_helper, is_valid): error_proto = spec_helper(spec).validate_value(value) diff --git a/python/bosdyn-client/tests/test_utils.py b/python/bosdyn-client/tests/test_utils.py index 1ff59203c..a63a876d9 100644 --- a/python/bosdyn-client/tests/test_utils.py +++ b/python/bosdyn-client/tests/test_utils.py @@ -5,8 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """Unit tests for the server_utils module.""" -import datetime -import time import pytest diff --git a/python/bosdyn-core/src/bosdyn/bddf/data_reader.py b/python/bosdyn-core/src/bosdyn/bddf/data_reader.py index 87e448898..3cededbef 100644 --- a/python/bosdyn-core/src/bosdyn/bddf/data_reader.py +++ b/python/bosdyn-core/src/bosdyn/bddf/data_reader.py @@ -90,9 +90,9 @@ def _read_index(self): if self._index_offset < len(MAGIC): raise ParseError('Invalid offset to index: {})'.format(self._index_offset)) self._file_index = self._read_desc_block_at("file_index", self._index_offset) - self._spec_index = [{key: value - for key, value in desc.spec.items()} - for desc in self._file_index.series_identifiers] + self._spec_index = [{ + key: value for key, value in desc.spec.items() + } for desc in self._file_index.series_identifiers] def _seek_to(self, location): if location < len(MAGIC): diff --git a/python/bosdyn-core/src/bosdyn/util.py b/python/bosdyn-core/src/bosdyn/util.py index 456b13727..05b5f3b04 100644 --- a/python/bosdyn-core/src/bosdyn/util.py +++ b/python/bosdyn-core/src/bosdyn/util.py @@ -6,9 +6,7 @@ """Common utilities for API Python code.""" import datetime -import os import re -import sys import time from typing import Callable diff --git a/python/bosdyn-core/tests/test_bddf.py b/python/bosdyn-core/tests/test_bddf.py index 9f592ee32..83a2242cb 100644 --- a/python/bosdyn-core/tests/test_bddf.py +++ b/python/bosdyn-core/tests/test_bddf.py @@ -21,11 +21,17 @@ from bosdyn.util import now_nsec, now_timestamp, nsec_to_timestamp, timestamp_to_nsec +def gettempdir(): + if "TEST_TMPDIR" in os.environ: + return os.environ["TEST_TMPDIR"] + return tempfile.gettempdir() + + def test_write_read(): # pylint: disable=too-many-statements,too-many-locals """Test writing a data to a file, and reading it back.""" file_annotations = {'robot': 'spot', 'individual': 'spot-BD-99990001'} channel_annotations = {'ccc': '3', 'd': '4444'} - filename = os.path.join(tempfile.gettempdir(), 'test1.bdf') + filename = os.path.join(gettempdir(), 'test1.bdf') series1_type = 'bosdyn/test/1' series1_spec = {'channel': 'channel_a'} series1_content_type = 'text/plain' diff --git a/python/bosdyn-mission/src/bosdyn/mission/server_util.py b/python/bosdyn-mission/src/bosdyn/mission/server_util.py index b781ce6ca..b51c0dc11 100644 --- a/python/bosdyn-mission/src/bosdyn/mission/server_util.py +++ b/python/bosdyn-mission/src/bosdyn/mission/server_util.py @@ -12,8 +12,9 @@ -@deprecated(reason='The ResponseContext helper class has moved to a common location. Please use ' - 'bosdyn.client.server_util.ResponseContext.', version='2.3.5', action="always") +@deprecated( + reason='The ResponseContext helper class has moved to a common location. Please use ' + 'bosdyn.client.server_util.ResponseContext.', version='2.3.5', action="always") class ResponseContext(object): def __init__(self, response, request, rpc_logger=None): diff --git a/python/bosdyn-mission/src/bosdyn/mission/util.py b/python/bosdyn-mission/src/bosdyn/mission/util.py index c160b04f1..e9933c9a6 100644 --- a/python/bosdyn-mission/src/bosdyn/mission/util.py +++ b/python/bosdyn-mission/src/bosdyn/mission/util.py @@ -6,6 +6,7 @@ import copy import json +import logging import operator import re from builtins import str as text @@ -17,7 +18,7 @@ from deprecated.sphinx import deprecated from google.protobuf import message_factory -from bosdyn.api import data_acquisition_pb2, geometry_pb2, gripper_camera_param_pb2 +from bosdyn.api import alerts_pb2, data_acquisition_pb2, geometry_pb2, gripper_camera_param_pb2 from bosdyn.api.autowalk import walks_pb2 from bosdyn.api.docking import docking_pb2 from bosdyn.api.graph_nav import graph_nav_pb2, map_pb2 @@ -373,12 +374,35 @@ def define_blackboard(dict_values: Dict[str, util_pb2.Value]) -> nodes_pb2.Defin return node_to_return -def set_blackboard(dict_values: Dict[str, util_pb2.Value]) -> nodes_pb2.SetBlackboard: +def set_blackboard(dict_values: Dict[str, util_pb2.Value], + subfield_values: Dict[str, util_pb2.Value] = {}) -> nodes_pb2.SetBlackboard: """Returns a SetBlackboard protobuf message for the key-value pairs in `dict_values`. """ node_to_return = nodes_pb2.SetBlackboard() for (key, value) in dict_values.items(): node_to_return.blackboard_variables.add().CopyFrom(util_pb2.KeyValue(key=key, value=value)) + for (key, value) in subfield_values.items(): + node_to_return.blackboard_variable_subfields.add().CopyFrom( + util_pb2.KeyValue(key=key, value=value)) return node_to_return +def severity_to_log_level(text_level): + """Converts alert data severity enum to a logger level for printing purposes.""" + match text_level: + case alerts_pb2.AlertData.SeverityLevel.SEVERITY_LEVEL_INFO: + return logging.INFO + case alerts_pb2.AlertData.SeverityLevel.SEVERITY_LEVEL_WARN: + return logging.WARN + case alerts_pb2.AlertData.SeverityLevel.SEVERITY_LEVEL_ERROR: + return logging.ERROR + case alerts_pb2.AlertData.SeverityLevel.SEVERITY_LEVEL_CRITICAL: + # A critical mission prompt or text message does not indicate a critical robot failure, + # and is usually expected depending on how a mission plays out. For this reason, we + # reduce the servity from CRITICAL to ERROR for logs. + # See Prompt.severity in nodes.proto for more info. + return logging.ERROR + case _: + return logging.INFO + + diff --git a/python/bosdyn-mission/tests/helpers.py b/python/bosdyn-mission/tests/helpers.py index 84d39c0fb..3dbc89369 100644 --- a/python/bosdyn-mission/tests/helpers.py +++ b/python/bosdyn-mission/tests/helpers.py @@ -8,8 +8,6 @@ import concurrent -import sys -import time from unittest import mock import grpc diff --git a/python/bosdyn-mission/tests/test_client.py b/python/bosdyn-mission/tests/test_client.py index 33de8e8de..68d913a05 100644 --- a/python/bosdyn-mission/tests/test_client.py +++ b/python/bosdyn-mission/tests/test_client.py @@ -5,8 +5,6 @@ # Development Kit License (20191101-BDSDK-SL). """Test the client to the mission service.""" -import concurrent -import sys import time from unittest import mock diff --git a/python/bosdyn-orbit/src/bosdyn/orbit/client.py b/python/bosdyn-orbit/src/bosdyn/orbit/client.py index 12635c168..e8214e200 100644 --- a/python/bosdyn-orbit/src/bosdyn/orbit/client.py +++ b/python/bosdyn-orbit/src/bosdyn/orbit/client.py @@ -26,13 +26,13 @@ def __init__(self, hostname: str, verify: bool = True, cert: str = None): Args: hostname: the IP address associated with the instance verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate - Note that verify=False makes your application vulnerable to man-in-the-middle (MitM) attacks - Defaults to True + Note that verify=False makes your application vulnerable to man-in-the-middle (MitM) attacks. + Defaults to True. cert(.pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate Note that the private key to your local certificate must be unencrypted because Requests does not support using encrypted keys. - Defaults to None. For additional configurations, use the member Session object "_session" in accordance with Requests library + Defaults to None. For additional configurations, use the member Session object "_session" in accordance with Requests library. Raises: - RequestExceptions: exceptions thrown by the Requests library + RequestExceptions: exceptions thrown by the Requests library. """ # The hostname of the instance self._hostname = hostname @@ -56,9 +56,9 @@ def authenticate_with_api_token(self, api_token: str = None) -> requests.Respons Must call before using other client functions. Args: - api_token: the API token obtained from the instance + api_token: the API token obtained from the instance. Raises: - RequestExceptions: exceptions thrown by the Requests library + RequestExceptions: exceptions thrown by the Requests library. """ if not api_token: api_token = utils.get_api_token() @@ -77,46 +77,62 @@ def authenticate_with_api_token(self, api_token: str = None) -> requests.Respons return authenticate_response def get_resource(self, path: str, **kwargs) -> requests.Response: - """ Base function for getting a resource in /api/v0/ + """ Base function for getting a resource in /api/v0/. Args: - path: the path appended to /api/v0/ - kwargs(**): a variable number of keyword arguments for the get request + path: the path appended to /api/v0/. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ if not self._is_authenticated: raise UnauthenticatedClientError() return self._session.get(f'https://{self._hostname}/api/v0/{path}/', **kwargs) def post_resource(self, path: str, **kwargs) -> requests.Response: - """ Base function for posting a resource in /api/v0/ + """ Base function for posting a resource in /api/v0/. Args: path: the path appended to /api/v0/ - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - The response associated with the post request + The response associated with the post request. """ if not self._is_authenticated and path != "login": raise UnauthenticatedClientError() return self._session.post(f'https://{self._hostname}/api/v0/{path}', **kwargs) + def patch_resource(self, path: str, **kwargs) -> requests.Response: + """ Base function for patching a resource in /api/v0/ + + Args: + path: the path appended to /api/v0/ + kwargs(**): a variable number of keyword arguments for the patch request + Raises: + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. + Returns: + The response associated with the patch request. + """ + if not self._is_authenticated and path != "login": + raise UnauthenticatedClientError() + return self._session.patch(f'https://{self._hostname}/api/v0/{path}', **kwargs) + def delete_resource(self, path: str, **kwargs) -> requests.Response: - """ Base function for deleting a resource in /api/v0/ + """ Base function for deleting a resource in /api/v0/. Args: path: the path appended to /api/v0/ - kwargs(**): a variable number of keyword arguments for the delete request + kwargs(**): a variable number of keyword arguments for the delete request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: The response associated with the delete request """ @@ -128,12 +144,12 @@ def get_version(self, **kwargs) -> requests.Response: """ Retrieves version info. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("version", **kwargs) @@ -141,12 +157,12 @@ def get_system_time(self, **kwargs) -> requests.Response: """ Returns the current system time. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("settings/system-time", **kwargs) @@ -154,12 +170,12 @@ def get_robots(self, **kwargs) -> requests.Response: """ Returns robots on the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("robots", **kwargs) @@ -167,45 +183,45 @@ def get_robot_by_hostname(self, hostname: str, **kwargs) -> requests.Response: """ Returns a robot on given a hostname of a specific robot. Args: - hostname: the IP address associated with the desired robot on the instance - kwargs(**): a variable number of keyword arguments for the get request + hostname: the IP address associated with the desired robot on the instance. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'robots/{hostname}', **kwargs) def get_site_walks(self, **kwargs) -> requests.Response: - """ Returns site walks on the specified instance + """ Returns site walks on the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("site_walks", **kwargs) def get_site_walk_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a site walk uuid, returns a site walk on the specified instance + """ Given a SiteWalk uuid, returns a SiteWalk on the specified instance. Args: - uuid: the ID associated with the site walk - kwargs(**): a variable number of keyword arguments for the get request + uuid: the ID associated with the SiteWalk. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'site_walks/{uuid}', **kwargs) - def get_site_elements(self, **kwargs) -> requests.Response: - """ Returns site elements on the specified instance + def get_site_walk_archive_by_id(self, uuid: str, **kwargs) -> requests.Response: + """ Returns SiteWalk as a zip archive which represents a collection of graph and mission data Args: kwargs(**): a variable number of keyword arguments for the get request @@ -215,166 +231,179 @@ def get_site_elements(self, **kwargs) -> requests.Response: Returns: requests.Response: the response associated with the get request """ + return self.get_resource(f"site_walks/archive", params={"uuids": uuid}, **kwargs) + + def get_site_elements(self, **kwargs) -> requests.Response: + """ Returns site elements on the specified instance. + + Args: + kwargs(**): a variable number of keyword arguments for the get request. + Raises: + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. + Returns: + requests.Response: the response associated with the get request. + """ return self.get_resource("site_elements", **kwargs) def get_site_element_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a site element uuid, returns a site element on the specified instance + """ Given a SiteElement uuid, returns a SiteElement on the specified instance. Args: - uuid: the ID associated with the site element - kwargs(**): a variable number of keyword arguments for the get request + uuid: the ID associated with the SiteElement. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'site_elements/{uuid}', **kwargs) def get_site_docks(self, **kwargs) -> requests.Response: - """ Returns site docks on the specified instance + """ Returns site docks on the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("site_docks", **kwargs) def get_site_dock_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a site dock uuid, returns a site dock on the specified instance + """ Given a SiteDock uuid, returns a SiteDock on the specified instance. Args: - uuid: the ID associated with the site dock - kwargs(**): a variable number of keyword arguments for the get request + uuid: the ID associated with the SiteDock + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'site_docks/{uuid}', **kwargs) def get_calendar(self, **kwargs) -> requests.Response: - """ Returns calendar events on the specified instance + """ Returns calendar events on the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("calendar/schedule", **kwargs) def get_run_events(self, **kwargs) -> requests.Response: - """ Given a dictionary of query params, returns run events + """ Given a dictionary of query params, returns run events. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("run_events", **kwargs) def get_run_event_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a runEventUuid, returns a run event + """ Given a runEventUuid, returns a run event. Args: - uuid: the ID associated with the run event - kwargs(**): a variable number of keyword arguments for the get request + uuid: the ID associated with the run event. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'run_events/{uuid}', **kwargs) def get_run_captures(self, **kwargs) -> requests.Response: - """ Given a dictionary of query params, returns run captures + """ Given a dictionary of query params, returns run captures. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("run_captures", **kwargs) def get_run_capture_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a runCaptureUuid, returns a run capture + """ Given a runCaptureUuid, returns a run capture. Args: uuid: the ID associated with the run capture - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'run_captures/{uuid}', **kwargs) def get_runs(self, **kwargs) -> requests.Response: - """ Given a dictionary of query params, returns runs + """ Given a dictionary of query params, returns runs. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("runs", **kwargs) def get_run_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a runUuid, returns a run + """ Given a runUuid, returns a run. Args: uuid: the ID associated with the run - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'runs/{uuid}', **kwargs) def get_run_archives_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a runUuid, returns run archives + """ Given a runUuid, returns run archives. Args: uuid: the ID associated with the run - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'run_archives/{uuid}', **kwargs) def get_image(self, url: str, **kwargs) -> 'urllib3.response.HTTPResponse': - """ Given a data capture url, returns a decoded image + """ Given a data capture url, returns a decoded image. Args: url: the url associated with the data capture in the form of https://hostname + RunCapture["dataUrl"]. - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: urllib3.response.HTTPResponse: the decoded response associated with the get request """ @@ -386,14 +415,14 @@ def get_image(self, url: str, **kwargs) -> 'urllib3.response.HTTPResponse': return response.raw def get_image_response(self, url: str, **kwargs) -> requests.Response: - """ Given a data capture url, returns an image response + """ Given a data capture url, returns an image response. Args: url: the url associated with the data capture in the form of https://hostname + RunCapture["dataUrl"] - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: requests.Response: the image response associated with the get request """ @@ -403,122 +432,123 @@ def get_image_response(self, url: str, **kwargs) -> requests.Response: return response def get_webhook(self, **kwargs) -> requests.Response: - """ Returns webhook on the specified instance + """ Returns webhook on the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource("webhooks", **kwargs) def get_webhook_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Given a uuid, returns a specific webhook instance + """ Given a uuid, returns a specific webhook instance. Args: uuid: the ID associated with the webhook - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the get request + requests.Response: the response associated with the get request. """ return self.get_resource(f'webhooks/{uuid}', **kwargs) def get_robot_info(self, robot_nickname: str, **kwargs) -> requests.Response: - """ Given a robot nickname, returns information about the robot + """ Given a robot nickname, returns information about the robot. Args: robot_nickname: the nickname of the robot - kwargs(**): a variable number of keyword arguments for the get request + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.get_resource(f'robot-session/{robot_nickname}/session', **kwargs) def post_export_as_walk(self, site_walk_uuid: str, **kwargs) -> requests.Response: - """ Given a site walk uuid, it exports the walks_pb2.Walk equivalent + """ Given a SiteWalk uuid, it exports the walks_pb2.Walk equivalent. Args: - site_walk_uuid: the ID associated with the site walk - kwargs(**): a variable number of keyword arguments for the get request + site_walk_uuid: the ID associated with the SiteWalk. + kwargs(**): a variable number of keyword arguments for the get request. Raises: - RequestExceptions: exceptions thrown by the Requests library + RequestExceptions: exceptions thrown by the Requests library. UnauthenticatedClientError: indicates that the client is not authenticated properly Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ - return self.post_resource(f'site_walks/export_as_walk/{site_walk_uuid}', **kwargs) + return self.post_resource(f'site_walks/export_as_walk', + json={"siteWalkUuid": site_walk_uuid}, **kwargs) def post_import_from_walk(self, **kwargs) -> requests.Response: - """ Given a walk data, imports it to the specified instance + """ Given a walk data, imports it to the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("site_walks/import_from_walk", **kwargs) def post_site_element(self, **kwargs) -> requests.Response: - """ Create a site element. It also updates a pre-existing Site Element using the associated UUID. + """ Create a SiteElement. It also updates a pre-existing SiteElement using the associated UUID. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("site_elements", **kwargs) def post_site_walk(self, **kwargs) -> requests.Response: - """ Create a site walk. It also updates a pre-existing Site Walk using the associated UUID. + """ Create a SiteWalk. It also updates a pre-existing SiteWalk using the associated UUID. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("site_walks", **kwargs) def post_site_dock(self, **kwargs) -> requests.Response: - """ Create a site element. It also updates a pre-existing Site Dock using the associated UUID. + """ Create a SiteElement. It also updates a pre-existing SiteDock using the associated UUID. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("site_docks", **kwargs) def post_robot(self, **kwargs) -> requests.Response: - """ Add a robot to the specified instance + """ Add a robot to the specified instance. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("robots", **kwargs) @@ -533,26 +563,26 @@ def post_calendar_event(self, nickname: str = None, time_ms: int = None, repeat_ the function overwrites the attributes of the pre-existing calendar event. Args: - nickname: the name associated with the robot - time_ms: the first kickoff time in terms of milliseconds since epoch - repeat_ms:the delay time in milliseconds for repeating calendar events - mission_id: the UUID associated with the mission( also known as Site Walk) - force_acquire_estop: instructs the system to force acquire the estop when the mission kicks off - require_docked: determines whether the event will require the robot to be docked to start - schedule_name: the desired name of the calendar event + nickname: the name associated with the robot. + time_ms: the first kickoff time in terms of milliseconds since epoch. + repeat_ms:the delay time in milliseconds for repeating calendar events. + mission_id: the UUID associated with the mission( also known as SiteWalk). + force_acquire_estop: instructs the system to force acquire the estop when the mission kicks off. + require_docked: determines whether the event will require the robot to be docked to start. + schedule_name: the desired name of the calendar event. blackout_times: a specification for a time period over the course of a week when a schedule should not run specified as list of a dictionary defined as {"startMs": , "endMs" : } with startMs (inclusive) being the millisecond offset from the beginning of the week (Sunday) when this blackout period starts - and endMs (exclusive) being the millisecond offset from beginning of the week(Sunday) when this blackout period ends - disable_reason: (optional) a reason for disabling the calendar event + and endMs (exclusive) being the millisecond offset from beginning of the week(Sunday) when this blackout period ends. + disable_reason: (optional) a reason for disabling the calendar event. event_id: the auto-generated ID for a calendar event that is already posted on the instance. This is only useful when editing a pre-existing calendar event. - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ # Check if the input contains the json param that is constructed outside the function if 'json' in kwargs: @@ -581,33 +611,33 @@ def post_calendar_event(self, nickname: str = None, time_ms: int = None, repeat_ return self.post_resource("calendar/schedule", json=payload, **kwargs) def post_calendar_events_disable_all(self, disable_reason: str, **kwargs) -> requests.Response: - """ Disable all scheduled missions + """ Disable all scheduled missions. Args: - disable_reason: Reason for disabling all scheduled missions - kwargs(**): a variable number of keyword arguments for the post request + disable_reason: Reason for disabling all scheduled missions. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("calendar/disable-enable", json={"disableReason": disable_reason}, **kwargs) def post_calendar_event_disable_by_id(self, event_id: str, disable_reason: str, **kwargs) -> requests.Response: - """ Disable specific scheduled mission by event ID + """ Disable specific scheduled mission by event ID. Args: - event_id: eventId associated with a mission to disable - disable_reason: Reason for disabling a scheduled mission - kwargs(**): a variable number of keyword arguments for the post request + event_id: eventId associated with a mission to disable. + disable_reason: Reason for disabling a scheduled mission. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("calendar/disable-enable", json={ "disableReason": disable_reason, @@ -615,29 +645,29 @@ def post_calendar_event_disable_by_id(self, event_id: str, disable_reason: str, }, **kwargs) def post_calendar_events_enable_all(self, **kwargs) -> requests.Response: - """ Enable all scheduled missions + """ Enable all scheduled missions. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("calendar/disable-enable", json={"disableReason": ""}, **kwargs) def post_calendar_event_enable_by_id(self, event_id: str, **kwargs) -> requests.Response: - """ Enable specific scheduled mission by event ID + """ Enable specific scheduled mission by event ID. Args: - event_id: eventId associated with a mission to enable - kwargs(**): a variable number of keyword arguments for the post request + event_id: eventId associated with a mission to enable. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("calendar/disable-enable", json={ "disableReason": "", @@ -645,45 +675,45 @@ def post_calendar_event_enable_by_id(self, event_id: str, **kwargs) -> requests. }, **kwargs) def post_webhook(self, **kwargs) -> requests.Response: - """ Create a webhook instance + """ Create a webhook instance. Args: - kwargs(**): a variable number of keyword arguments for the post request + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource("webhooks", **kwargs) def post_webhook_by_id(self, uuid: str, **kwargs) -> requests.Response: - """ Update an existing webhook instance + """ Update an existing webhook instance. Args: - uuid: the ID associated with the desired webhook instance - kwargs(**): a variable number of keyword arguments for the post request + uuid: the ID associated with the desired webhook instance. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource(f'webhooks/{uuid}', **kwargs) def post_return_to_dock_mission(self, robot_nickname: str, site_dock_uuid: str, **kwargs) -> requests.Response: - """ Generate a mission to send the robot back to the dock + """ Generate a mission to send the robot back to the dock. Args: - robot_nickname: the nickname of the robot - site_dock_uuid: the uuid of the dock to send robot to - kwargs(**): a variable number of keyword arguments for the post request + robot_nickname: the nickname of the robot. + site_dock_uuid: the uuid of the dock to send robot to. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ return self.post_resource('graph/send-robot', json={ "nickname": robot_nickname, @@ -692,21 +722,22 @@ def post_return_to_dock_mission(self, robot_nickname: str, site_dock_uuid: str, def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mission_uuid: str, delete_mission: bool, force_acquire_estop: bool, - **kwargs) -> requests.Response: - """ Dispatch the robot to a mission given a mission uuid + skip_initialization: bool, **kwargs) -> requests.Response: + """ Dispatch the robot to a mission given a mission uuid. Args: - robot_nickname: the nickname of the robot - driver_id: the current driver ID of the mission - mission_uuid: uuid of the mission(also known as Site Walk) to dispatch - delete_mission: whether to delete the mission after playback - force_acquire_estop: whether to force acquire E-stop from the previous client - kwargs(**): a variable number of keyword arguments for the post request + robot_nickname: the nickname of the robot. + driver_id: the current driver ID of the mission. + mission_uuid: uuid of the mission(also known as SiteWalk) to dispatch. + delete_mission: whether to delete the mission after playback. + force_acquire_estop: whether to force acquire E-stop from the previous client. + skip_initialization: whether to skip initialization when starting the return to dock mission. + kwargs(**): a variable number of keyword arguments for the post request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the post request + requests.Response: The response associated with the post request. """ # Payload required for dispatching a mission payload = { @@ -729,7 +760,8 @@ def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mi "missionId": mission_uuid, "forceAcquireEstop": force_acquire_estop, "deleteMission": delete_mission, - "requireDocked": False + "requireDocked": False, + "skipInitialization": skip_initialization }, "eventMetadata": { "name": "API Triggered Mission" @@ -739,17 +771,70 @@ def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mi f'calendar/mission/dispatch/{robot_nickname}?currentDriverId={driver_id}', json=payload, **kwargs) + def post_backup_task(self, include_missions: bool, include_captures: bool, + **kwargs) -> requests.Response: + """ Starts creating a backup zip file. + + Args: + include_missions: Specifies whether to include missions and maps in the backup. + include_captures: Specifies whether to include all inspection data captures in the backup. + **kwargs: Additional keyword arguments for the backup request. + Raises: + RequestExceptions: Exceptions thrown by the Requests library. + UnauthenticatedClientError: Indicates that the client is not authenticated properly. + Returns: + requests.Response: The response associated with the backup request. + """ + payload = { + "includeMissions": include_missions, + "includeCaptures": include_captures, + } + return self.post_resource(f'backup_tasks/', json=payload, **kwargs) + + def patch_bulk_close_anomalies(self, element_ids: list[str], **kwargs) -> requests.Response: + """ Bulk close Anomalies by Element ID. + + Args: + element_ids: the element ids of each anomaly to be closed. + kwargs(**): a variable number of keyword arguments for the patch request. + Raises: + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. + Returns: + requests.Response: The response associated with the patch request. + """ + return self.patch_resource('anomalies', json={ + "command": "close", + "elementIds": element_ids + }, **kwargs) + + def patch_anomaly_by_id(self, anomaly_uuid: str, patched_fields: dict, + **kwargs) -> requests.Response: + """ Patch an Anomaly by uuid. + + Args: + anomaly_uuid: The uuid of the anomaly to patch fields in. + patched_fields: A dictionary of fields and new values to change in the specified anomaly. + kwargs(**): a variable number of keyword arguments for the patch request. + Raises: + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. + Returns: + requests.Response: The response associated with the patch request. + """ + return self.patch_resource(f'anomalies/{anomaly_uuid}', json=patched_fields, **kwargs) + def delete_site_walk(self, uuid: str, **kwargs) -> requests.Response: - """ Given a site walk uuid, deletes the site walk associated with the uuid on the specified instance + """ Given a SiteWalk uuid, deletes the SiteWalk associated with the uuid on the specified instance. Args: - uuid: the ID associated with the desired site walk - kwargs(**): a variable number of keyword arguments for the delete request + uuid: the ID associated with the desired SiteWalk + kwargs(**): a variable number of keyword arguments for the delete request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the delete request + requests.Response: the response associated with the delete request. """ return self.delete_resource(f'site_walks/{uuid}', **kwargs) @@ -757,44 +842,58 @@ def delete_robot(self, robot_hostname: str, **kwargs) -> requests.Response: """ Given a robot hostname, deletes the robot associated with the hostname on the specified instance Args: - robot_hostname: the IP address associated with the robot - kwargs(**): a variable number of keyword arguments for the delete request + robot_hostname: the IP address associated with the robot. + kwargs(**): a variable number of keyword arguments for the delete request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the delete request + requests.Response: the response associated with the delete request. """ return self.delete_resource(f'robots/{robot_hostname}', **kwargs) def delete_calendar_event(self, event_id: str, **kwargs) -> requests.Response: - """ Delete the specified calendar event on the specified instance + """ Delete the specified calendar event on the specified instance. Args: - event_id(string): the ID associated with the calendar event - kwargs(**): a variable number of keyword arguments for the delete request + event_id(string): the ID associated with the calendar event. + kwargs(**): a variable number of keyword arguments for the delete request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the delete request + requests.Response: the response associated with the delete request. """ return self.delete_resource(f'calendar/schedule/{event_id}', **kwargs) def delete_webhook(self, uuid: str, **kwargs) -> requests.Response: - """ Delete the specified webhook instance on the specified instance + """ Delete the specified webhook instance on the specified instance. Args: - uuid: the ID associated with the desired webhook - kwargs(**): a variable number of keyword arguments for the delete request + uuid: the ID associated with the desired webhook. + kwargs(**): a variable number of keyword arguments for the delete request. Raises: - RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedClientError: indicates that the client is not authenticated properly + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. Returns: - requests.Response: the response associated with the delete request + requests.Response: the response associated with the delete request. """ return self.delete_resource(f'webhooks/{uuid}', **kwargs) + def delete_backup(self, task_id: str, **kwargs): + """ Deletes the backup zip file from the Orbit instance. + + Args: + hostname: the IP address associated with the desired robot on the instance. + kwargs(**): a variable number of keyword arguments for the get request. + Raises: + RequestExceptions: exceptions thrown by the Requests library. + UnauthenticatedClientError: indicates that the client is not authenticated properly. + Returns: + requests.Response: the response associated with the get request. + """ + return self.delete_resource(f'backups/{task_id}', **kwargs) + def create_client(options: 'argparse.Namespace') -> 'bosdyn.orbit.client.Client': """ Creates a client object. @@ -809,7 +908,7 @@ def create_client(options: 'argparse.Namespace') -> 'bosdyn.orbit.client.Client' verify = options.verify == "True" else: print( - "The provided value for the argument verify [%s] is not either 'True' or 'False'. Assuming verify is set to 'path/to/CA bundle'" + "The provided value for the argument verify [{}] is not either 'True' or 'False'. Assuming verify is set to 'path/to/CA bundle'" .format(options.verify)) verify = options.verify diff --git a/python/bosdyn-orbit/src/bosdyn/orbit/utils.py b/python/bosdyn-orbit/src/bosdyn/orbit/utils.py index 61412e220..c19fcccd2 100644 --- a/python/bosdyn-orbit/src/bosdyn/orbit/utils.py +++ b/python/bosdyn-orbit/src/bosdyn/orbit/utils.py @@ -304,3 +304,24 @@ def validate_webhook_payload(payload: Dict, signature_header: str, secret: str, if not time_safe_equal: raise WebhookSignatureVerificationError( "The received HMAC did not match the expected value") + + +def print_json_response(response: 'requests.Response') -> bool: + """ A helper function to print the json response. + + Args: + options(Namespace) : parsed args used for configuration options. + Returns: + Boolean that indicates the response is okay with status code 200. + """ + if response.ok: + try: + json_data = response.json() + print(f"JSON Response: {json_data}") + return True + except ValueError: + print("Response is ok but not in JSON format.") + return False + else: + print(f"Request failed with status : {response.text}") + return False diff --git a/python/bosdyn-scout/src/bosdyn/scout/client.py b/python/bosdyn-scout/src/bosdyn/scout/client.py index 4906d0b1d..c8425f21e 100644 --- a/python/bosdyn-scout/src/bosdyn/scout/client.py +++ b/python/bosdyn-scout/src/bosdyn/scout/client.py @@ -494,7 +494,8 @@ def post_export_as_walk(self, site_walk_uuid: str, **kwargs) -> requests.Respons Returns: requests.Response: the response associated with the post request """ - return self.post_resource(f'site_walks/export_as_walk/{site_walk_uuid}', **kwargs) + return self.post_resource(f'site_walks/export_as_walk', + json={"siteWalkUuid": site_walk_uuid}, **kwargs) def post_import_from_walk(self, **kwargs) -> requests.Response: """ Given a walk data, imports it to the specified scout instance @@ -731,7 +732,7 @@ def post_return_to_dock_mission(self, robot_nickname: str, site_dock_uuid: str, def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mission_uuid: str, delete_mission: bool, force_acquire_estop: bool, - **kwargs) -> requests.Response: + skip_initialization: bool, **kwargs) -> requests.Response: """ Dispatch the robot to a mission given a mission uuid Args: @@ -740,10 +741,11 @@ def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mi mission_uuid: uuid of the mission(also known as Site Walk) to dispatch delete_mission: whether to delete the mission after playback force_acquire_estop: whether to force acquire E-stop from the previous client + skip_initialization: whether to skip initialization when starting the return to dock mission kwargs(**): a variable number of keyword arguments for the post request Raises: RequestExceptions: exceptions thrown by the Requests library - UnauthenticatedScoutClientError: indicates that the scout client is not authenticated properly + UnauthenticatedClientError: indicates that the client is not authenticated properly Returns: requests.Response: the response associated with the post request """ @@ -768,10 +770,11 @@ def post_dispatch_mission_to_robot(self, robot_nickname: str, driver_id: str, mi "missionId": mission_uuid, "forceAcquireEstop": force_acquire_estop, "deleteMission": delete_mission, - "requireDocked": False + "requireDocked": False, + "skipInitialization": skip_initialization }, "eventMetadata": { - "name": "Scout API Triggered Mission" + "name": "API Triggered Mission" } } return self.post_resource( @@ -848,7 +851,7 @@ def create_scout_client(options: 'argparse.Namespace') -> 'bosdyn.scout.client.S verify = options.verify == "True" else: print( - "The provided value for the argument verify [%s] is not either 'True' or 'False'. Assuming verify is set to 'path/to/CA bundle'" + "The provided value for the argument verify [{}] is not either 'True' or 'False'. Assuming verify is set to 'path/to/CA bundle'" .format(options.verify)) verify = options.verify diff --git a/python/examples/README.md b/python/examples/README.md index eb03abd28..3edd21d52 100644 --- a/python/examples/README.md +++ b/python/examples/README.md @@ -33,7 +33,6 @@ Developers getting acquainted with the SDK may find it easier to start with cert ### Advanced Examples -- [Spot Detect and Follow](spot_detect_and_follow/README.md) - [Mission Recorder](mission_recorder/README.md) - [Xbox Controller](xbox_controller/README.md) diff --git a/python/examples/area_callback/crosswalk_lights/area_callback_crosswalk.py b/python/examples/area_callback/crosswalk_lights/area_callback_crosswalk.py index 289dfd3f9..79a130f42 100644 --- a/python/examples/area_callback/crosswalk_lights/area_callback_crosswalk.py +++ b/python/examples/area_callback/crosswalk_lights/area_callback_crosswalk.py @@ -29,25 +29,29 @@ def __init__(self, config: AreaCallbackServiceConfig, robot: Robot): # Set the policies at the start & end of the Area Callback region self.robot = robot self.logger = logging.getLogger(__name__) - + self.starting_inside_region = False self.stop_at_start() self.continue_past_end() def begin( self, request: area_callback_pb2.BeginCallbackRequest ) -> area_callback_pb2.BeginCallbackResponse.Status: + self.starting_inside_region = request.region_info.starting_inside_region # Unpack any configuration settings return area_callback_pb2.BeginCallbackResponse.STATUS_OK def run(self): - # Actions to be executed while approaching the Area Callback region - self.block_until_arrived_at_start() # block the code until the robot reaches the start - - # Pass in robot object, desired light frequency (Hz), and desired light brightness for waiting - # Lights will flash at 0.5Hz with brightness of 20% - with LightsHelper(self.robot, 0.5, 0.2): - self.safe_sleep(5.0) - # Lights will be turned off upon exiting from LightsHelper + # If the robot is starting inside the region, it should skip the initial flashing and + # proceed to exit the region right away. + if not self.starting_inside_region: + # Actions to be executed while approaching the Area Callback region + self.block_until_arrived_at_start() # block the code until the robot reaches the start + + # Pass in robot object, desired light frequency (Hz), and desired light brightness for waiting + # Lights will flash at 0.5Hz with brightness of 20% + with LightsHelper(self.robot, 0.5, 0.2): + self.safe_sleep(5.0) + # Lights will be turned off upon exiting from LightsHelper # proceed walking to the end of the Area callback region self.continue_past_start() diff --git a/python/examples/area_callback/look_both_ways/area_callback_look_both_ways.py b/python/examples/area_callback/look_both_ways/area_callback_look_both_ways.py index f4fe183f2..dc0636c6e 100644 --- a/python/examples/area_callback/look_both_ways/area_callback_look_both_ways.py +++ b/python/examples/area_callback/look_both_ways/area_callback_look_both_ways.py @@ -15,24 +15,37 @@ from bosdyn.client.area_callback_service_utils import AreaCallbackServiceConfig from bosdyn.client.robot import Robot from bosdyn.client.robot_command import RobotCommandBuilder, RobotCommandClient +from bosdyn.client.service_customization_helpers import dict_params_to_dict + +DEFAULT_YAW = 1 class AreaCallbackRegionHandlerLookBothWays(AreaCallbackRegionHandlerBase): """An example AreaCallbackRegionHandler implementation which looks both ways. """ - DEFAULT_YAW = 1 def __init__(self, config: AreaCallbackServiceConfig, robot: Robot): super().__init__(config, robot) - self.yaw = self.DEFAULT_YAW + self.yaw = DEFAULT_YAW + self.starting_inside_region = False # Set up initial policy self.control_at_start() self.continue_past_end() def begin(self, request: BeginCallbackRequest) -> BeginCallbackResponse.Status: + self.starting_inside_region = request.region_info.starting_inside_region + # Read any custom yaw from provided params. + params = dict_params_to_dict(request.custom_params, + self._config.area_callback_information.custom_params) + self.yaw = params.get('yaw', DEFAULT_YAW) return BeginCallbackResponse.STATUS_OK def run(self): + # If the robot is starting inside the region, it should just exit the region right away, + # rather than look around. + if self.starting_inside_region: + return + # In order to send a robot command, the AreaCallback requires a lease. This helper function # blocks until a lease is given to the callback. self.control_at_start() @@ -116,6 +129,14 @@ def main(): # right of the crossing direction. info.default_stop.face_direction = info.default_stop.FACE_DIRECTION_ALONG_ROUTE + # Allow the amount of yaw to be configured. + yaw_spec = info.custom_params.specs['yaw'].spec.double_spec + yaw_spec.default_value.value = DEFAULT_YAW + yaw_spec.min_value.value = 0 + yaw_spec.max_value.value = 1.2 + yaw_spec.units.name = 'radians' + info.custom_params.specs['yaw'].ui_info.description = "Amount to yaw back and forth" + servicer = AreaCallbackServiceServicer(robot, config, AreaCallbackRegionHandlerLookBothWays) # Run the area callback service. diff --git a/python/examples/arm_door/arm_door.py b/python/examples/arm_door/arm_door.py index 7055c88bc..41a191f4d 100644 --- a/python/examples/arm_door/arm_door.py +++ b/python/examples/arm_door/arm_door.py @@ -372,8 +372,8 @@ def open_door(robot, request_manager, snapshot): end_time = time.time() + timeout_sec while time.time() < end_time: feedback_response = door_client.open_door_feedback(feedback_request) - if (feedback_response.status != - basic_command_pb2.RobotCommandFeedbackStatus.STATUS_PROCESSING): + if (feedback_response.status + != basic_command_pb2.RobotCommandFeedbackStatus.STATUS_PROCESSING): raise Exception('Door command reported status ') if (feedback_response.feedback.status == door_pb2.DoorCommand.Feedback.STATUS_COMPLETED): robot.logger.info('Opened door.') diff --git a/python/examples/arm_gcode/README.md b/python/examples/arm_gcode/README.md index 6828a95b5..3931a962b 100644 --- a/python/examples/arm_gcode/README.md +++ b/python/examples/arm_gcode/README.md @@ -33,7 +33,7 @@ Consider using a [simple gcode simulator](https://nraynaud.github.io/webgcode/) ## Drawing with Chalk To draw with chalk, we recommend a very large piece of chalk. The image below was drawn with a -stick of chalk 1.5 inches in diameter and 5 inches long. We taped the chalk to the gripper using gaffers tape. +stick of chalk 1.5 inches in diameter and 5 inches long. We taped the chalk to the gripper using gaffer's tape. A tool_length value can be set in gcode.cfg to account for the length of chalk held by the gripper. ![Chalk Drawing of Boston Dynamics Logo](documentation/boston_dynamics_chalk.jpg) diff --git a/python/examples/arm_gcode/box.ngc b/python/examples/arm_gcode/box.ngc index 7e16b5afe..fce701591 100644 --- a/python/examples/arm_gcode/box.ngc +++ b/python/examples/arm_gcode/box.ngc @@ -1,8 +1,8 @@ -G00 Z5.0 -G01 X0.0 Y0.0 Z-0.5 +G00 X0.0 Y0.0 Z-0.5 + +G01 X1.0 Y0.0 G01 X1.0 Y0.0 G01 X1.0 Y1.0 -M0 G01 X0.0 Y1.0 G01 X0.0 Y0.0 diff --git a/python/examples/arm_gcode/gcode.cfg b/python/examples/arm_gcode/gcode.cfg index fadf46a0d..7c86bdc26 100644 --- a/python/examples/arm_gcode/gcode.cfg +++ b/python/examples/arm_gcode/gcode.cfg @@ -3,8 +3,11 @@ # Input file. gcode_file = box.ngc +#User input tool length measured from jaw tip to tool tip (meters) +tool_length = 0.0 + # Scale for the gcode file -scale = 1.0 +scale = 0.75 # Allow the robot to walk around. allow_walking = true @@ -16,7 +19,7 @@ draw_on_wall = false # Speed to draw at [m/s] -velocity = 0.25 +velocity = 0.1 # Travel height [meters]. travel_z = 0.25 @@ -26,7 +29,7 @@ travel_z = 0.25 below_z_is_admittance = 0.0 # Make increasingly negative to push harder on the surface. -press_force_percent = -0.05 +press_force_percent = -0.01 # Minimum distance from the arm's position to the Gcode goal to start a new gcode line [meters]. min_dist_to_goal = 0.03 diff --git a/python/examples/arm_gcode/gcode.py b/python/examples/arm_gcode/gcode.py index 3a1b66a13..89e3416d6 100644 --- a/python/examples/arm_gcode/gcode.py +++ b/python/examples/arm_gcode/gcode.py @@ -41,8 +41,10 @@ from bosdyn.api import (arm_surface_contact_pb2, arm_surface_contact_service_pb2, basic_command_pb2, geometry_pb2, trajectory_pb2) from bosdyn.client.arm_surface_contact import ArmSurfaceContactClient -from bosdyn.client.frame_helpers import (GRAV_ALIGNED_BODY_FRAME_NAME, ODOM_FRAME_NAME, - VISION_FRAME_NAME, get_a_tform_b, math_helpers) +from bosdyn.client.frame_helpers import (BODY_FRAME_NAME, GRAV_ALIGNED_BODY_FRAME_NAME, + GROUND_PLANE_FRAME_NAME, HAND_FRAME_NAME, ODOM_FRAME_NAME, + VISION_FRAME_NAME, WR1_FRAME_NAME, get_a_tform_b, + math_helpers) from bosdyn.client.math_helpers import Quat, SE2Pose, SE3Pose, math from bosdyn.client.robot_command import (RobotCommandBuilder, RobotCommandClient, block_for_trajectory_cmd, block_until_arm_arrives, @@ -62,10 +64,11 @@ def make_orthogonal(primary, secondary): class GcodeReader: - def __init__(self, file_path, scale, logger, below_z_is_admittance, travel_z, draw_on_wall, - gcode_start_x=0, gcode_start_y=0): + def __init__(self, file_path, tool_length, scale, logger, below_z_is_admittance, travel_z, + draw_on_wall, gcode_start_x=0, gcode_start_y=0): # open the file self.file = open(file_path, 'r') + self.tool_length = tool_length self.scale = scale self.logger = logger self.below_z_is_admittance = below_z_is_admittance @@ -73,71 +76,61 @@ def __init__(self, file_path, scale, logger, below_z_is_admittance, travel_z, dr self.draw_on_wall = draw_on_wall self.gcode_start_x = gcode_start_x self.gcode_start_y = gcode_start_y - self.current_origin_T_goals = None self.last_x = 0 self.last_y = 0 self.last_z = 0 - def set_origin(self, world_T_origin, world_T_admittance_frame): + def set_origin(self, vision_T_origin, vision_T_admittance_frame): if not self.draw_on_wall: - self.world_T_origin = SE3Pose(world_T_origin.x, world_T_origin.y, world_T_origin.z, - world_T_origin.rot) + self.vision_T_origin = SE3Pose(vision_T_origin.x, vision_T_origin.y, vision_T_origin.z, + vision_T_origin.rot) # Ensure the origin is gravity aligned, otherwise we get some height drift. zhat = [0.0, 0.0, 1.0] - (x1, x2, x3) = world_T_origin.rot.transform_point(-1.0, 0.0, 0.0) + (x1, x2, x3) = vision_T_origin.rot.transform_point(-1.0, 0.0, 0.0) xhat_temp = [x1, x2, x3] xhat = make_orthogonal(zhat, xhat_temp) yhat = np.cross(zhat, xhat) mat = np.array([xhat, yhat, zhat]).transpose() - self.world_T_origin.rot = Quat.from_matrix(mat) + vision_Q_origin = Quat.from_matrix(mat) + self.vision_T_origin = SE3Pose(vision_T_origin.x, vision_T_origin.y, vision_T_origin.z, + vision_Q_origin) else: # Drawing on a wall, ensure that the rotation of the origin is aligned to the admittance # frame - (x1, x2, x3) = world_T_admittance_frame.rot.transform_point(0, -1, 0) + (x1, x2, x3) = vision_T_admittance_frame.rot.transform_point(0, -1, 0) xhat = [x1, x2, x3] - (y1, y2, y3) = world_T_admittance_frame.rot.transform_point(1, 0, 0) + (y1, y2, y3) = vision_T_admittance_frame.rot.transform_point(1, 0, 0) yhat = [y1, y2, y3] - (z1, z2, z3) = world_T_admittance_frame.rot.transform_point(0, 0, 1) + (z1, z2, z3) = vision_T_admittance_frame.rot.transform_point(0, 0, 1) zhat = [z1, z2, z3] mat = np.array([xhat, yhat, zhat]).transpose() - self.world_T_origin = SE3Pose(world_T_origin.x, world_T_origin.y, world_T_origin.z, - Quat.from_matrix(mat)) - print(f'origin: {self.world_T_origin}') + self.vision_T_origin = SE3Pose(vision_T_origin.x, vision_T_origin.y, vision_T_origin.z, + Quat.from_matrix(mat)) + print(f'origin: {self.vision_T_origin}') def get_origin_Q_goal(self): if not self.draw_on_wall: # Compute the rotation for the hand to point the x-axis of the gripper down. xhat = [0, 0, -1] # [0.3162, 0, -0.9486] zhat = [-1, 0, 0] - # (z1, z2, z3) = self.world_T_origin.rot.transform_point(0.0, 1.0, 0.0) - # #(z1, z2, z3) = odom_T_body.rot.transform_point(1.0, 0.0, 0.0) - # zhat_temp = [z1, z2, z3] - # zhat = make_orthogonal(xhat, zhat_temp) yhat = np.cross(zhat, xhat) mat = np.array([xhat, yhat, zhat]).transpose() + origin_Q_goal = Quat.from_matrix(mat) - return Quat.from_matrix(mat) + return origin_Q_goal else: xhat = [0, 0, -1] yhat = [-1, 0, 0] zhat = [0, 1, 0] - # (x1, x2, x3) = self.world_T_origin.rot.transform_point(0, 0, -1) - # xhat = [x1, x2, x3] - - # (y1, y2, y3) = self.world_T_origin.rot.transform_point(-1, 0, 0) - # yhat = [y1, y2, y3] - - # (z1, z2, z3) = self.world_T_origin.rot.transform_point(0, 1, 0) - # zhat = [z1, z2, z3] mat = np.array([xhat, yhat, zhat]).transpose() origin_Q_goal = Quat.from_matrix(mat) @@ -333,24 +326,23 @@ def convert_gcode_to_origin_T_goals(self, line): self.last_y = y_out[-1] self.last_z = z_out[-1] - # Convert points to poses - se3_poses = [] + # Convert points to array of poses + tool_T_goals = [] for i in range(0, len(x_out)): - se3_poses.append(SE3Pose(x_out[i], y_out[i], z_out[i], self.get_origin_Q_goal())) - - return se3_poses + tool_T_goals.append(SE3Pose(x_out[i], y_out[i], z_out[i], self.get_origin_Q_goal())) + return tool_T_goals else: self.logger.info('Unsupported gcode action: %s skipping.', line[0:2]) return None - def get_world_T_goal(self, origin_T_goal, ground_plane_rt_vo): + def get_vision_T_goal(self, origin_T_goal, ground_plane_rt_vision): if not self.draw_on_wall: - world_T_goal = self.world_T_origin * origin_T_goal + vision_T_goal = self.vision_T_origin * origin_T_goal if not self.is_admittance(): - world_T_goal.z = self.travel_z + ground_plane_rt_vo[2] + vision_T_goal.z = self.travel_z + ground_plane_rt_vision[2] else: - world_T_goal.z = ground_plane_rt_vo[2] + vision_T_goal.z = ground_plane_rt_vision[2] else: # Drawing on a wall if not self.is_admittance(): @@ -361,9 +353,9 @@ def get_world_T_goal(self, origin_T_goal, ground_plane_rt_vo): origin_T_goal.x, origin_T_goal.y, origin_T_goal.z + z_value_rt_origin, Quat(origin_T_goal.rot.w, origin_T_goal.rot.x, origin_T_goal.rot.y, origin_T_goal.rot.z)) - world_T_goal = self.world_T_origin * origin_T_goal2 + vision_T_goal = self.vision_T_origin * origin_T_goal2 - return (self.is_admittance(), world_T_goal) + return (self.is_admittance(), vision_T_goal) def is_admittance(self): # If we are below the z height in the gcode file, we are in admittance mode @@ -372,7 +364,7 @@ def is_admittance(self): else: return False - def get_next_world_T_goals(self, ground_plane_rt_vo, read_new_line=True): + def get_next_vision_T_goals(self, ground_plane_rt_vision, read_new_line=True): origin_T_goals = None while not origin_T_goals: if read_new_line: @@ -386,12 +378,12 @@ def get_next_world_T_goals(self, ground_plane_rt_vo, read_new_line=True): self.current_origin_T_goals = origin_T_goals - world_T_goals = [] - for pose in self.current_origin_T_goals: - (temp, world_T_goal) = self.get_world_T_goal(pose, ground_plane_rt_vo) - world_T_goals.append(world_T_goal) + vision_T_goals = [] + for origin_T_goal in self.current_origin_T_goals: + (temp, vision_T_goal) = self.get_vision_T_goal(origin_T_goal, ground_plane_rt_vision) + vision_T_goals.append(vision_T_goal) - return (self.is_admittance(), world_T_goals, False) + return (self.is_admittance(), vision_T_goals, False) def test_file_parsing(self): """Parse the file. @@ -403,39 +395,46 @@ def test_file_parsing(self): self.convert_gcode_to_origin_T_goals(line) -def move_along_trajectory(frame, velocity, se3_poses): +def move_along_trajectory(frame, velocity, tool_T_goals, vision_T_task): """ Builds an ArmSE3PoseCommand the arm to a point at a specific speed. Builds a trajectory from the current location to a new location velocity is in m/s """ - last_pose = None + task_T_vision = SE3Pose.from_proto(vision_T_task).inverse() + + last_tool_T_goal = None last_t = 0 points = [] # Create a trajectory from the points - for pose in se3_poses: - if last_pose is None: + for current_tool_T_goal in tool_T_goals: + if last_tool_T_goal is None: time_in_sec = 0 seconds = int(0) nanos = int(0) else: # Compute the distance from the current hand position to the new hand position - dist = math.sqrt((last_pose.x - pose.x)**2 + (last_pose.y - pose.y)**2 + - (last_pose.z - pose.z)**2) + dist = math.sqrt((last_tool_T_goal.x - current_tool_T_goal.x)**2 + + (last_tool_T_goal.y - current_tool_T_goal.y)**2 + + (last_tool_T_goal.z - current_tool_T_goal.z)**2) time_in_sec = dist / velocity seconds = int(time_in_sec + last_t) nanos = int((time_in_sec + last_t - seconds) * 1e9) - position = geometry_pb2.Vec3(x=pose.x, y=pose.y, z=pose.z) - rotation = geometry_pb2.Quaternion(w=pose.rot.w, x=pose.rot.x, y=pose.rot.y, z=pose.rot.z) - this_se3_pose = geometry_pb2.SE3Pose(position=position, rotation=rotation) + task_T_goal = task_T_vision * current_tool_T_goal + + position = geometry_pb2.Vec3(x=task_T_goal.x, y=task_T_goal.y, z=task_T_goal.z) + rotation = geometry_pb2.Quaternion(w=task_T_goal.rot.w, x=task_T_goal.rot.x, + y=task_T_goal.rot.y, z=task_T_goal.rot.z) + + task_T_goal = geometry_pb2.SE3Pose(position=position, rotation=rotation) points.append( trajectory_pb2.SE3TrajectoryPoint( - pose=this_se3_pose, + pose=task_T_goal, time_since_reference=duration_pb2.Duration(seconds=seconds, nanos=nanos))) - last_pose = pose + last_tool_T_goal = current_tool_T_goal last_t = time_in_sec + last_t hand_trajectory = trajectory_pb2.SE3Trajectory(points=points) @@ -443,18 +442,18 @@ def move_along_trajectory(frame, velocity, se3_poses): return hand_trajectory -def move_arm(robot_state, is_admittance, world_T_goals, arm_surface_contact_client, velocity, - allow_walking, world_T_admittance, press_force_percentage, api_send_frame, +def move_arm(robot_state, is_admittance, vision_T_goals, arm_surface_contact_client, velocity, + allow_walking, vision_T_admittance, press_force_percentage, api_send_frame, use_xy_to_z_cross_term, bias_force_x): - traj = move_along_trajectory(api_send_frame, velocity, world_T_goals) + traj = move_along_trajectory(api_send_frame, velocity, vision_T_goals, vision_T_admittance) press_force = geometry_pb2.Vec3(x=0, y=0, z=press_force_percentage) max_vel = wrappers_pb2.DoubleValue(value=velocity) cmd = arm_surface_contact_pb2.ArmSurfaceContact.Request( pose_trajectory_in_task=traj, root_frame_name=api_send_frame, - root_tform_task=world_T_admittance, press_force_percentage=press_force, + root_tform_task=vision_T_admittance, press_force_percentage=press_force, x_axis=arm_surface_contact_pb2.ArmSurfaceContact.Request.AXIS_MODE_POSITION, y_axis=arm_surface_contact_pb2.ArmSurfaceContact.Request.AXIS_MODE_POSITION, z_axis=arm_surface_contact_pb2.ArmSurfaceContact.Request.AXIS_MODE_POSITION, @@ -496,18 +495,28 @@ def move_arm(robot_state, is_admittance, world_T_goals, arm_surface_contact_clie def get_transforms(use_vision_frame, robot_state): if not use_vision_frame: - world_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, 'odom', - 'body') + world_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + ODOM_FRAME_NAME, BODY_FRAME_NAME) + world_T_flat_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + ODOM_FRAME_NAME, GRAV_ALIGNED_BODY_FRAME_NAME) else: - world_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, 'vision', - 'body') + world_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + VISION_FRAME_NAME, BODY_FRAME_NAME) + world_T_flat_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + VISION_FRAME_NAME, GRAV_ALIGNED_BODY_FRAME_NAME) + + body_T_hand = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, BODY_FRAME_NAME, + HAND_FRAME_NAME) + + body_T_wrist = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, BODY_FRAME_NAME, + WR1_FRAME_NAME) - body_T_hand = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, 'body', 'hand') world_T_hand = world_T_body * body_T_hand - odom_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, 'odom', 'body') + odom_T_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, ODOM_FRAME_NAME, + BODY_FRAME_NAME) - return (world_T_body, body_T_hand, world_T_hand, odom_T_body) + return (world_T_body, world_T_flat_body, body_T_hand, world_T_hand, body_T_wrist, odom_T_body) def do_pause(): @@ -520,6 +529,7 @@ def run_gcode_program(config): config_parser = configparser.ConfigParser() config_parser.read_file(open('gcode.cfg')) gcode_file = config_parser.get('General', 'gcode_file') + tool_length = config_parser.getfloat('General', 'tool_length') scale = config_parser.getfloat('General', 'scale') min_dist_to_goal = config_parser.getfloat('General', 'min_dist_to_goal') allow_walking = config_parser.getboolean('General', 'allow_walking') @@ -571,8 +581,8 @@ def run_gcode_program(config): # (e.g. spot.intranet.example.com) or an IP literal (e.g. 10.0.63.1) robot = sdk.create_robot(config.hostname) - gcode = GcodeReader(gcode_file, scale, robot.logger, below_z_is_admittance, travel_z, - draw_on_wall, gcode_start_x, gcode_start_y) + gcode = GcodeReader(gcode_file, tool_length, scale, robot.logger, below_z_is_admittance, + travel_z, draw_on_wall, gcode_start_x, gcode_start_y) if config.test_file_parsing: gcode.test_file_parsing() @@ -603,7 +613,8 @@ def run_gcode_program(config): # control it. Note that the lease is returned as the "finally" condition in this # try-catch-finally block. lease_client = robot.ensure_client(bosdyn.client.lease.LeaseClient.default_service_name) - with bosdyn.client.lease.LeaseKeepAlive(lease_client, must_acquire=True, return_at_exit=True): + with ((bosdyn.client.lease.LeaseKeepAlive(lease_client, must_acquire=True, + return_at_exit=True))): # Now, we are ready to power on the robot. This call will block until the power # is on. Commands would fail if this did not happen. We can also check that the robot is # powered at any point. @@ -639,30 +650,30 @@ def run_gcode_program(config): qy = .707 qz = 0 else: - z = -0.25 + #change z value to adjust gcode origin height + z = 0.25 qw = 1 qx = 0 qy = 0 qz = 0 - flat_body_T_hand = math_helpers.SE3Pose(x, y, z, math_helpers.Quat(w=qw, x=qx, y=qy, z=qz)) - odom_T_flat_body = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, - ODOM_FRAME_NAME, GRAV_ALIGNED_BODY_FRAME_NAME) - odom_T_hand = odom_T_flat_body * flat_body_T_hand + flat_body_T_hand = SE3Pose(x, y, z, math_helpers.Quat(w=qw, x=qx, y=qy, z=qz)) - robot.logger.info('Moving arm to starting position.') + (odom_T_body, odom_T_flat_body, body_T_hand, odom_T_hand, body_T_wrist, + odom_T_body) = get_transforms(False, robot_state) - # Send the request + odom_T_hand = odom_T_flat_body * flat_body_T_hand odom_T_hand_obj = odom_T_hand.to_proto() move_time = 0.000001 # move as fast as possible because we will use (default) velocity/accel limiting. + robot.logger.info('Moving arm to starting position.') + # Send the request arm_command = RobotCommandBuilder.arm_pose_command( odom_T_hand_obj.position.x, odom_T_hand_obj.position.y, odom_T_hand_obj.position.z, odom_T_hand_obj.rotation.w, odom_T_hand_obj.rotation.x, odom_T_hand_obj.rotation.y, odom_T_hand_obj.rotation.z, ODOM_FRAME_NAME, move_time) - command = RobotCommandBuilder.build_synchro_command(arm_command) cmd_id = command_client.robot_command(command) @@ -670,36 +681,59 @@ def run_gcode_program(config): # Wait for the move to complete block_until_arm_arrives(command_client, cmd_id) + # Open the gripper + robot_cmd = RobotCommandBuilder.claw_gripper_open_command() + cmd_id = command_client.robot_command(robot_cmd) + + # Wait for tool insertion + robot.logger.info("Press enter to close gripper on tool") + do_pause() + + # Close the gripper. + robot_cmd = RobotCommandBuilder.claw_gripper_close_command() + robot_cmd.synchronized_command.gripper_command.claw_gripper_command.maximum_torque.value = 15.0 + cmd_id = command_client.robot_command(robot_cmd) + # Update state and Get the hand position robot_state = robot_state_client.get_robot_state() - (world_T_body, body_T_hand, world_T_hand, odom_T_body) = get_transforms( - use_vision_frame, robot_state) + (vision_T_body, vision_T_flat_body, body_T_hand, vision_T_hand, body_T_wrist, + odom_T_body) = get_transforms(True, robot_state) - world_T_admittance_frame = geometry_pb2.SE3Pose( + #Create tool frame for marker/chalk in gripper + vision_T_wr1 = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + VISION_FRAME_NAME, WR1_FRAME_NAME) + wr1_T_tool = SE3Pose(0.23589 + tool_length, 0, 0, rot=Quat(w=1, x=0, y=0, z=0)) + vision_T_tool = vision_T_wr1 * wr1_T_tool + + vision_T_admittance_frame = geometry_pb2.SE3Pose( position=geometry_pb2.Vec3(x=0, y=0, z=0), rotation=geometry_pb2.Quaternion(w=1, x=0, y=0, z=0)) + if draw_on_wall: # Create an admittance frame that has Z- along the robot's X axis xhat_ewrt_robot = [0, 0, 1] - xhat_ewrt_vo = [0, 0, 0] - (xhat_ewrt_vo[0], xhat_ewrt_vo[1], xhat_ewrt_vo[2]) = world_T_body.rot.transform_point( - xhat_ewrt_robot[0], xhat_ewrt_robot[1], xhat_ewrt_robot[2]) - (z1, z2, z3) = world_T_body.rot.transform_point(-1, 0, 0) + xhat_ewrt_vision = [0, 0, 0] + (xhat_ewrt_vision[0], + xhat_ewrt_vision[1], xhat_ewrt_vision[2]) = vision_T_body.rot.transform_point( + xhat_ewrt_robot[0], xhat_ewrt_robot[1], xhat_ewrt_robot[2]) + (z1, z2, z3) = vision_T_body.rot.transform_point(-1, 0, 0) zhat_temp = [z1, z2, z3] - zhat = make_orthogonal(xhat_ewrt_vo, zhat_temp) - yhat = np.cross(zhat, xhat_ewrt_vo) - mat = np.array([xhat_ewrt_vo, yhat, zhat]).transpose() + zhat = make_orthogonal(xhat_ewrt_vision, zhat_temp) + yhat = np.cross(zhat, xhat_ewrt_vision) + mat = np.array([xhat_ewrt_vision, yhat, zhat]).transpose() q_wall = Quat.from_matrix(mat) zero_vec3 = geometry_pb2.Vec3(x=0, y=0, z=0) q_wall_proto = geometry_pb2.Quaternion(w=q_wall.w, x=q_wall.x, y=q_wall.y, z=q_wall.z) - world_T_admittance_frame = geometry_pb2.SE3Pose(position=zero_vec3, - rotation=q_wall_proto) + vision_T_admittance_frame = geometry_pb2.SE3Pose(position=zero_vec3, + rotation=q_wall_proto) + + do_pause() # Touch the ground/wall - move_arm(robot_state, True, [world_T_hand], arm_surface_contact_client, velocity, - allow_walking, world_T_admittance_frame, press_force_percent, api_send_frame, + move_arm(robot_state, True, [vision_T_tool], arm_surface_contact_client, velocity, + allow_walking, vision_T_admittance_frame, press_force_percent, api_send_frame, use_xy_to_z_cross_term, bias_force_x) time.sleep(4.0) @@ -709,58 +743,69 @@ def run_gcode_program(config): robot_state = robot_state_client.get_robot_state() # Get the hand position - (world_T_body, body_T_hand, world_T_hand, odom_T_body) = get_transforms( - use_vision_frame, robot_state) + (vision_T_body, vision_T_flat_body, body_T_hand, vision_T_hand, body_T_wrist, + odom_T_body) = get_transforms(True, robot_state) + + odom_T_ground_plane = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + ODOM_FRAME_NAME, GROUND_PLANE_FRAME_NAME) - odom_T_ground_plane = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, 'odom', - 'gpe') - world_T_odom = world_T_body * odom_T_body.inverse() + vision_T_odom = vision_T_body * odom_T_body.inverse() - (gx, gy, gz) = world_T_odom.transform_point(odom_T_ground_plane.x, odom_T_ground_plane.y, - odom_T_ground_plane.z) - ground_plane_rt_vo = [gx, gy, gz] + (gx, gy, gz) = vision_T_odom.transform_point(odom_T_ground_plane.x, odom_T_ground_plane.y, + odom_T_ground_plane.z) + ground_plane_rt_vision = [gx, gy, gz] - # Compute the robot's position on the ground plane. - #ground_plane_T_robot = odom_T_ground_plane.inverse() * + vision_T_wr1 = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, + VISION_FRAME_NAME, WR1_FRAME_NAME, validate=True) + wr1_T_tool = SE3Pose(0.23589 + tool_length, 0, 0, rot=Quat(w=1, x=0, y=0, z=0)) + vision_T_tool = vision_T_wr1 * wr1_T_tool # Compute an origin. if not draw_on_wall: - # For on the ground: - # xhat = body x - # zhat = (0,0,1) - # Ensure the origin is gravity aligned, otherwise we get some height drift. zhat = [0.0, 0.0, 1.0] - (x1, x2, x3) = world_T_body.rot.transform_point(1.0, 0.0, 0.0) + (x1, x2, x3) = vision_T_body.rot.transform_point(1.0, 0.0, 0.0) xhat_temp = [x1, x2, x3] xhat = make_orthogonal(zhat, xhat_temp) yhat = np.cross(zhat, xhat) mat = np.array([xhat, yhat, zhat]).transpose() - vo_Q_origin = Quat.from_matrix(mat) + vision_Q_origin = Quat.from_matrix(mat) + vision_T_origin = SE3Pose(vision_T_tool.x, vision_T_tool.y, vision_T_tool.z, + vision_Q_origin) - world_T_origin = SE3Pose(world_T_hand.x, world_T_hand.y, world_T_hand.z, vo_Q_origin) else: - # todo should I use the same one? - world_T_origin = world_T_hand + # Drawing on a wall, ensure that the rotation of the origin is aligned to the admittance + # frame + vision_T_AF = SE3Pose.from_proto(vision_T_admittance_frame) + (x1, x2, x3) = vision_T_AF.rot.transform_point(0, -1, 0) + xhat = [x1, x2, x3] + (y1, y2, y3) = vision_T_AF.rot.transform_point(1, 0, 0) + yhat = [y1, y2, y3] + (z1, z2, z3) = vision_T_AF.rot.transform_point(0, 0, 1) + zhat = [z1, z2, z3] + mat = np.array([xhat, yhat, zhat]).transpose() + vision_T_origin = SE3Pose(vision_T_tool.x, vision_T_tool.y, vision_T_tool.z, + Quat.from_matrix(mat)) - gcode.set_origin(world_T_origin, world_T_admittance_frame) + gcode.set_origin(vision_T_origin, SE3Pose.from_proto(vision_T_admittance_frame)) robot.logger.info('Origin set') - (is_admittance, world_T_goals, is_pause) = gcode.get_next_world_T_goals(ground_plane_rt_vo) + (is_admittance, vision_T_goals, + is_pause) = gcode.get_next_vision_T_goals(ground_plane_rt_vision) while is_pause: do_pause() - (is_admittance, world_T_goals, - is_pause) = gcode.get_next_world_T_goals(ground_plane_rt_vo) + (is_admittance, vision_T_goals, + is_pause) = gcode.get_next_vision_T_goals(ground_plane_rt_vision) - if world_T_goals is None: + if vision_T_goals is None: # we're done! done = True - move_arm(robot_state, is_admittance, world_T_goals, arm_surface_contact_client, velocity, - allow_walking, world_T_admittance_frame, press_force_percent, api_send_frame, + move_arm(robot_state, is_admittance, vision_T_goals, arm_surface_contact_client, velocity, + allow_walking, vision_T_admittance_frame, press_force_percent, api_send_frame, use_xy_to_z_cross_term, bias_force_x) - odom_T_hand_goal = world_T_odom.inverse() * world_T_goals[-1] + odom_T_hand_goal = vision_T_odom.inverse() * vision_T_goals[-1] last_admittance = is_admittance done = False @@ -770,26 +815,23 @@ def run_gcode_program(config): robot_state = robot_state_client.get_robot_state() # Determine if we are at the goal point - (world_T_body, body_T_hand, world_T_hand, odom_T_body) = get_transforms( - use_vision_frame, robot_state) + (vision_T_body, vision_T_flat_body, body_T_hand, vision_T_hand, body_T_wrist, + odom_T_body) = get_transforms(True, robot_state) - (gx, gy, gz) = world_T_odom.transform_point(odom_T_ground_plane.x, - odom_T_ground_plane.y, - odom_T_ground_plane.z) - ground_plane_rt_vo = [gx, gy, gz] + (gx, gy, gz) = vision_T_odom.transform_point(odom_T_ground_plane.x, + odom_T_ground_plane.y, + odom_T_ground_plane.z) + ground_plane_rt_vision = [gx, gy, gz] - world_T_odom = world_T_body * odom_T_body.inverse() - odom_T_hand = odom_T_body * body_T_hand + vision_T_odom = vision_T_body * odom_T_body.inverse() - admittance_frame_T_world = math_helpers.SE3Pose.from_proto( - world_T_admittance_frame).inverse() - admit_frame_T_hand = admittance_frame_T_world * world_T_odom * odom_T_body * body_T_hand - admit_frame_T_hand_goal = admittance_frame_T_world * world_T_odom * odom_T_hand_goal + admittance_frame_T_vision = SE3Pose.from_proto(vision_T_admittance_frame).inverse() + admit_frame_T_hand = admittance_frame_T_vision * vision_T_odom * odom_T_body * body_T_hand + admit_frame_T_hand_goal = admittance_frame_T_vision * vision_T_odom * odom_T_hand_goal if is_admittance: dist = math.sqrt((admit_frame_T_hand.x - admit_frame_T_hand_goal.x)**2 + (admit_frame_T_hand.y - admit_frame_T_hand_goal.y)**2) - #+ (admit_frame_T_hand.z - admit_frame_T_hand_goal.z)**2 ) else: dist = math.sqrt((admit_frame_T_hand.x - admit_frame_T_hand_goal.x)**2 + (admit_frame_T_hand.y - admit_frame_T_hand_goal.y)**2 + @@ -799,28 +841,29 @@ def run_gcode_program(config): if arm_near_goal: # Compute where to go. - (is_admittance, world_T_goals, - is_pause) = gcode.get_next_world_T_goals(ground_plane_rt_vo) + (is_admittance, vision_T_goals, + is_pause) = gcode.get_next_vision_T_goals(ground_plane_rt_vision) while is_pause: do_pause() - (is_admittance, world_T_goals, - is_pause) = gcode.get_next_world_T_goals(ground_plane_rt_vo) + (is_admittance, vision_T_goals, + is_pause) = gcode.get_next_vision_T_goals(ground_plane_rt_vision) - if world_T_goals is None: + if vision_T_goals is None: # we're done! done = True robot.logger.info('Gcode program finished.') break - move_arm(robot_state, is_admittance, world_T_goals, arm_surface_contact_client, - velocity, allow_walking, world_T_admittance_frame, press_force_percent, + move_arm(robot_state, is_admittance, vision_T_goals, arm_surface_contact_client, + velocity, allow_walking, vision_T_admittance_frame, press_force_percent, api_send_frame, use_xy_to_z_cross_term, bias_force_x) - odom_T_hand_goal = world_T_odom.inverse() * world_T_goals[-1] + odom_T_hand_goal = vision_T_odom.inverse() * vision_T_goals[-1] if is_admittance != last_admittance: if is_admittance: - print('Waiting for touchdown...') + robot.logger.info('Waiting for touchdown...') + time.sleep(3.0) # pause to wait for touchdown else: time.sleep(1.0) @@ -828,8 +871,8 @@ def run_gcode_program(config): elif not is_admittance: # We are in a travel move, so we'll keep updating to account for a changing # ground plane. - (is_admittance, world_T_goals, is_pause) = gcode.get_next_world_T_goals( - ground_plane_rt_vo, read_new_line=False) + (is_admittance, vision_T_goals, is_pause) = gcode.get_next_vision_T_goals( + ground_plane_rt_vision, read_new_line=False) # At the end, walk back to the start. robot.logger.info('Done with gcode, going to stand...') @@ -843,7 +886,7 @@ def run_gcode_program(config): walk_to_at_end_rt_gcode_origin_y * scale, 0, Quat(1, 0, 0, 0)) - odom_T_walk = world_T_odom.inverse() * gcode.world_T_origin * gcode_origin_T_walk + odom_T_walk = vision_T_odom.inverse() * gcode.vision_T_origin * gcode_origin_T_walk odom_T_walk_se2 = SE2Pose.flatten(odom_T_walk) diff --git a/python/examples/comms_test/README.md b/python/examples/comms_test/README.md index 9ad7f4b12..22fc6c1fa 100644 --- a/python/examples/comms_test/README.md +++ b/python/examples/comms_test/README.md @@ -86,6 +86,6 @@ Run the image: sudo docker run -it -v $(pwd):/comms_out/ --network host comms_test:l4t ROBOT_IP --server-hostname SERVER_IP ``` -which will ask for username/password, or pass the environment variables `--env BOSDYN_CLIENT_USERNAME --env BOSDYN_CLIENT_PASSWORD` to the command above. +which will ask for username/password, or pass the environment variables `BOSDYN_CLIENT_USERNAME` and `BOSDYN_CLIENT_PASSWORD` from a .env file with `--env-file .env` in the command above. The argument `-v $(pwd):/comms_out/` allows the Docker container to save files to the current directory, so the resulting csv output file will be in the directory you just ran from. For different configurations of the comms test, see above. diff --git a/python/examples/data_acquisition_service/README.md b/python/examples/data_acquisition_service/README.md index bcda5021b..170fb895e 100644 --- a/python/examples/data_acquisition_service/README.md +++ b/python/examples/data_acquisition_service/README.md @@ -111,10 +111,17 @@ python3 data_acquisition_example.py {ROBOT_IP} ## Downloading from the Data Acquisition Store -The data acquisition download script allows users to download data from the DataAcquisitionStore service using REST calls. The script supports only time-based queries for filtering which data is downloaded and saved locally. The following command is an example of a time-based query and download. The timestamps are specified in RFC 3339 date string format (YYYY-MM-DDTHH:MM::SS.SZ, Y:year, M:month, D:day, H:hours, M:minutes, S:seconds as double, Z:zulu timezone) +The data acquisition download script allows users to download data from the DataAcquisitionStore service. + +There are two different methods in which the data is downloaded from the DataAcquisitionStore service: + +- REST: Uses REST calls to download a zip file. +- gRPC Streaming: Uses [DataAcquisitionStoreClient.query_stored_captures()](../../bosdyn-client/src/bosdyn/client/data_acquisition_store.py) call to download & save capture data directly. + +The script supports only time-based queries for filtering which data is downloaded and saved locally, though the "data" command can be modified to filter based on other fields listed in [QueryParameters](../../../protos/bosdyn/api/data_acquisition_store.proto#queryparameters) in [data_acquisition_store.proto](../../../protos/bosdyn/api/data_acquisition_store.proto). The following command is an example of a time-based query and download. The timestamps are specified in RFC 3339 date string format (YYYY-MM-DDTHH:MM::SS.SZ, Y:year, M:month, D:day, H:hours, M:minutes, S:seconds as double, Z:zulu timezone). Zulu clock time is the same as UTC time (UTC+0). ``` -python3 data_acquisition_download.py {ROBOT_IP} --query-from-timestamp 2020-09-01T00:00:00.0Z --query-to-timestamp 2020-09-04T00:00:00.0Z +python3 data_acquisition_download.py --query-from-timestamp 2020-09-01T00:00:00.0Z --query-to-timestamp 2020-09-04T00:00:00.0Z {ROBOT_IP} {rest,grpc} ``` Note, by default, the download script will save the data to the current directory, however the `--destination-folder` argument can be used to change where the downloaded data is saved. diff --git a/python/examples/data_acquisition_service/data_acquisition_download.py b/python/examples/data_acquisition_service/data_acquisition_download.py index b20cdcf47..c41da87c6 100644 --- a/python/examples/data_acquisition_service/data_acquisition_download.py +++ b/python/examples/data_acquisition_service/data_acquisition_download.py @@ -10,18 +10,19 @@ import json import os import sys +from pathlib import Path from google.protobuf.timestamp_pb2 import Timestamp import bosdyn.client import bosdyn.client.util -from bosdyn.api import data_acquisition_pb2, data_acquisition_store_pb2 -from bosdyn.client.data_acquisition_helpers import download_data_REST +from bosdyn.api import data_acquisition_store_pb2, image_pb2 +from bosdyn.client.data_acquisition_helpers import clean_filename, download_data_REST from bosdyn.client.data_acquisition_store import DataAcquisitionStoreClient -from bosdyn.client.exceptions import ResponseError -def data_acquisition_download(config): +def data_acquisition_download(robot, destination_folder, query_from_timestamp, query_to_timestamp, + additional_REST_params=None): """Download data for a specific query configuration and write it to files. Args: @@ -30,32 +31,147 @@ def data_acquisition_download(config): Returns: None. """ - - bosdyn.client.util.setup_logging(config.verbose) - sdk = bosdyn.client.create_standard_sdk('DataAcquisitionDownloadExample') - robot = sdk.create_robot(config.hostname) - bosdyn.client.util.authenticate(robot) - query_params = None try: + # Create query parmas from_timestamp = Timestamp() - from_timestamp.FromJsonString(config.query_from_timestamp) + from_timestamp.FromJsonString(query_from_timestamp) to_timestamp = Timestamp() - to_timestamp.FromJsonString(config.query_to_timestamp) + to_timestamp.FromJsonString(query_to_timestamp) query_params = data_acquisition_store_pb2.DataQueryParams( time_range=data_acquisition_store_pb2.TimeRangeQuery(from_timestamp=from_timestamp, to_timestamp=to_timestamp)) except ValueError as val_err: print(f'Value Exception:\n{val_err}') - download_data_REST(query_params, config.hostname, robot.user_token, config.destination_folder, - config.additional_REST_params) + download_data_REST(query_params, robot.address, robot.user_token, destination_folder, + additional_REST_params) + + +def query_stored_captures_download(robot, destination_folder, query_from_timestamp, + query_to_timestamp): + + # Create query params + from_timestamp = Timestamp() + from_timestamp.FromJsonString(query_from_timestamp) + to_timestamp = Timestamp() + to_timestamp.FromJsonString(query_to_timestamp) + + daq_store_client: DataAcquisitionStoreClient = robot.ensure_client( + DataAcquisitionStoreClient.default_service_name) + time_range_query_parameters = data_acquisition_store_pb2.TimeRangeQuery( + from_timestamp=from_timestamp, to_timestamp=to_timestamp) + + absolute_path = Path(destination_folder).absolute() + folder = Path(absolute_path.parent, clean_filename(absolute_path.name), 'DATA') + folder.mkdir(parents=True, exist_ok=True) + + # Variables used for querying the correct captures. + from_id = None + current_id = None + + # Variables for validating a retrieved capture. + current_complete = False + filename = None + while True: + # To gather all captures within the time range, query_stored_captures must be called until there are no more captures returned while increasing `captures_from_id` in QueryParameters to exclude already downloaded captures. + # Query for images, data, and large_data. Large data will be retrieved in parts so we must make as many calls as it takes to download the entire data capture. + response = daq_store_client.query_stored_captures( + query=data_acquisition_store_pb2.QueryParameters( + time_range=time_range_query_parameters, include_images=True, include_data=True, + include_large=True, captures_from_id=from_id)) + if len(response.results) <= 0: + # No more captures to process + print('Completed all downloads.') + break + + for result in response.results: + + # Default capture details + raw_data = b'' + offset = 0 + total_size = 0 + file_extension = '.bin' + + # We will check to see which type of data capture we have + result_type = result.WhichOneof("result") + if result_type == "image": + raw_data = result.image.image.data + # Raw data should complete data for images + total_size = len(raw_data) + if result.image.image.format == image_pb2.Image.FORMAT_JPEG: + file_extension = '.jpg' + else: + file_extension = '.raw' + elif result_type == "data": + raw_data = result.data.data + # Raw data should contain complete data + total_size = len(raw_data) + if len(result.data.file_extension) > 0: + file_extension = result.data.file_extension + elif result_type == "large_data": + raw_data = result.large_data.chunk.data + # For large data the offset can be used to make sure we are writing the correct part in the correct order + offset = result.large_data.offset + # Raw data likely does not contain complete data here so we will use the total_size field from the data chunk + total_size = result.large_data.chunk.total_size + if len(result.large_data.file_extension) > 0: + file_extension = result.large_data.file_extension + + if current_id != result.data_id.id: + # We have a new capture so check whether the capture is complete or not + if current_id is not None and current_complete == False: + # This will likely happen when large_data offset become out of sync, additional error handling can be added here to prevent skipping but for this example we will ignore this + print('Error: Capture data incomplete and we have moved to the next capture.') + + # We have a new capture so create a new file + current_complete = False + current_id = result.data_id.id + mission_name = result.data_id.action_id.group_name + mission_folder = Path(folder.absolute(), clean_filename(mission_name)) + mission_folder.mkdir(parents=True, exist_ok=True) + filename = Path( + mission_folder, + clean_filename( + f'{result.data_id.action_id.action_name}_{result.data_id.channel}{result.data_id.data_name if len(result.data_id.data_name) > 0 else ""}{file_extension}' + )) + if filename is not None and filename.exists(): + os.remove(filename) + print( + f'Found capture {current_id} with length of {total_size} bytes, saving to {mission_name}/{filename}.' + ) + + if filename is not None and filename.exists(): + filesize = os.stat(filename).st_size + if offset != filesize: + print( + f'Offset on large data does not align with expected: offset = {offset}, while expected = {filesize}. Trying again...' + ) + continue + + if len(raw_data) > 0: + # Write data to the current file, we use 'ab' here since we may have a large_data file that requires appending, this should not affect other capture types. + # Since we remove this file if exists above we assume here that this file is in the correct state. + with open(filename, "ab") as file: + size_written = file.write(raw_data) + if size_written != len(raw_data): + print(f'Failed to write correct amount of bytes for file `{filename}`') + continue + print(f'Wrote {size_written} to file: {filename}') + + # Check that the file written is the correct size + if os.stat(filename).st_size == total_size: + # We have a complete file + print(f'File complete {filename}.') + from_id = current_id + 1 + current_complete = True def main(): """Command line interface.""" - parser = argparse.ArgumentParser() + parser = argparse.ArgumentParser(description='Download data from DAQ') bosdyn.client.util.add_base_arguments(parser) + parser.add_argument('--destination-folder', help=('The folder where the data should be downloaded to.'), required=False, default='.') @@ -65,21 +181,42 @@ def main(): parser.add_argument( '--query-to-timestamp', help=('The end timestamp to query to in RFC 3339 date' ' string format (YYYY-MM-DDTHH:MM::SSZ).'), required=True) - parser.add_argument( + + subparsers = parser.add_subparsers(dest='command') + parser_zip = subparsers.add_parser('rest') + parser_zip.add_argument( '--additional-REST-params', type=json.loads, help=('JSON dictionary with additional REST ' 'parameters to append to the GET request when downloading the data. Parameters with ' 'multiple values need to be set to lists in the format (param: [value1, value2])'), required=False) + + parser_zip = subparsers.add_parser( + 'grpc', help='Query data directly, currently supports raw data downloads.') + options = parser.parse_args() + bosdyn.client.util.setup_logging(options.verbose) + sdk = bosdyn.client.create_standard_sdk('DataAcquisitionDownloadExample') + robot = sdk.create_robot(options.hostname) + bosdyn.client.util.authenticate(robot) + try: if not os.path.exists(options.destination_folder): os.mkdir(options.destination_folder) except IOError as err: print(err) - data_acquisition_download(options) + if options.command == 'rest': + data_acquisition_download(robot, options.destination_folder, options.query_from_timestamp, + options.query_to_timestamp, options.additional_REST_params) + elif options.command == 'grpc': + query_stored_captures_download( + robot, + options.destination_folder, + options.query_from_timestamp, + options.query_to_timestamp, + ) if __name__ == '__main__': diff --git a/python/examples/data_acquisition_service/save_file_plugin/save_file_plugin_service.py b/python/examples/data_acquisition_service/save_file_plugin/save_file_plugin_service.py index 57b8cee0e..f59e2d0e6 100644 --- a/python/examples/data_acquisition_service/save_file_plugin/save_file_plugin_service.py +++ b/python/examples/data_acquisition_service/save_file_plugin/save_file_plugin_service.py @@ -38,14 +38,13 @@ class SaveFileAdapter: def __init__(self, save_file_service_name, file_path): self._service_name = save_file_service_name self._file_extension = pathlib.Path(file_path).suffix - with open(file_path, "rb") as f: - self._file_data = f.read() + self._file_path = file_path def get_file_data(self, request, store_helper): """Save the file data to the data store.""" data_id = data_acquisition_pb2.DataIdentifier(action_id=request.action_id, channel=CAPABILITY.channel_name) - store_helper.store_data(self._file_data, data_id, file_extension=self._file_extension) + store_helper.store_file(self._file_path, data_id, file_extension=self._file_extension) store_helper.state.set_status(data_acquisition_pb2.GetStatusResponse.STATUS_SAVING) diff --git a/python/examples/data_acquisition_service/signals_coreio_modem_plugin/manifest.json b/python/examples/data_acquisition_service/signals_coreio_modem_plugin/manifest.json index 8179abf02..3508a990b 100644 --- a/python/examples/data_acquisition_service/signals_coreio_modem_plugin/manifest.json +++ b/python/examples/data_acquisition_service/signals_coreio_modem_plugin/manifest.json @@ -1,5 +1,6 @@ { "description": "Signals LTE DAQ plugin example", "version": "1.0.0", - "images": ["signals_lte_arm.tar.gz"] + "images": ["signals_lte_arm.tar.gz"], + "extension_name": "signals_lte" } diff --git a/python/examples/docs/orbit.md b/python/examples/docs/orbit.md index 79019c79a..dbcf8d83e 100644 --- a/python/examples/docs/orbit.md +++ b/python/examples/docs/orbit.md @@ -14,8 +14,12 @@ The following examples show how to use the different Orbit API calls. - [Hello Orbit](../orbit/hello_orbit/README.md) - [Export Run Archives](../orbit/export_run_archives/README.md) +- [Export Sitewalk Archives](../orbit/export_site_walk_archives/README.md) +- [Anomalies](../orbit/anomalies/README.md) - [Schedule Mission](../orbit/schedule_mission/README.md) - [Runs Response](../orbit/runs_response/README.md) - [Return to Dock](../orbit/send_robot_back_to_dock/README.md) - [Mission Toggle](../orbit/toggle_mission_based_on_weather/README.md) - [Webhook](../orbit/webhook/README.md) +- [Backups](../orbit/backups/README.md) +- [Webhook Integration](../orbit/webhook_integration/README.md) diff --git a/python/examples/docs/perception_world_objects_examples.md b/python/examples/docs/perception_world_objects_examples.md index 50e8b91bf..6df0c0458 100644 --- a/python/examples/docs/perception_world_objects_examples.md +++ b/python/examples/docs/perception_world_objects_examples.md @@ -24,7 +24,6 @@ The following examples show how to use Spot's perception system, through image s - [Project Depth Data on Visual Images](../get_depth_plus_visual_image/README.md) - [Custom Parameter Image Server](../service_customization/custom_parameter_image_server/README.md) - [Fiducial Follow](../fiducial_follow/README.md) -- [Spot Detect and Follow](../spot_detect_and_follow/README.md) - [Tensorflow Detector](../spot_tensorflow_detector/README.md) - [Custom Parameter Tensorflow Detector](../service_customization/custom_parameter_ncb_worker/README.md) - [Machine Learning with the Network Compute Bridge](../network_compute_bridge/README.md) diff --git a/python/examples/extensions/README.md b/python/examples/extensions/README.md index 6934d5729..9a92ef70c 100644 --- a/python/examples/extensions/README.md +++ b/python/examples/extensions/README.md @@ -93,6 +93,7 @@ python3 build_extension.py \ [--extra-image-tags {extra_image:tag}] \ --image-archive {images_tarball.tar.gz} \ --icon {icon.png} \ + --udev-rule {udev_rule.rule} \ --package-dir {/path/to/assets} \ --spx {/path/to/output/extension.spx} \ [--additional-files {file1.txt} {file2.jpg}] diff --git a/python/examples/extensions/build_extension.py b/python/examples/extensions/build_extension.py index fa1f76e4b..75979753d 100644 --- a/python/examples/extensions/build_extension.py +++ b/python/examples/extensions/build_extension.py @@ -142,8 +142,38 @@ def check_manifest(manifest_path: Path, images_archive_name: str) -> bool: return True +def check_docker_compose_file(docker_compose_path: Path) -> bool: + """Validate a docker compose file. + + Args: + docker_compose_path (Path): Path to the docker compose file to validate + + Returns: + bool: True if successful, False otherwise. + """ + cmd = ['docker-compose', '-f', str(docker_compose_path), 'config', '-q'] + + try: + # let the output go straight to stderr/stdout + subprocess.run(cmd, capture_output=False, check=True, text=True) + except subprocess.CalledProcessError: + print("Docker compose file validation failed.") + return False + except FileNotFoundError as error: + if error.filename == 'docker-compose': + print("Failed to run docker-compose to validate docker-compose.yml;") + print("docker-compose appears to not be installed.") + print() + print("If docker-compose is not installed, please skip validation by") + print("adding --skip-docker-compose-validation to the command arguments.") + else: + print("Docker compose file validation failed.") + return False + return True + + def create_spx(file_directory: Path, images_archive: Path, icon: str, udev: Path, spx: Path, - additional_files: List[str] = []): + additional_files: List[str] = [], validate_docker_compose: bool = True): """Create a Spot Extension package by adding files to a .tar.gz archive. Args: @@ -154,13 +184,15 @@ def create_spx(file_directory: Path, images_archive: Path, icon: str, udev: Path additional_files (List[str]): List of additional files to include in tar Returns: - None + True on success, False otherwise. """ manifest = file_directory.joinpath('manifest.json') print(f"Manifest path: {manifest}") if not check_manifest(manifest, images_archive.name): - return + return False docker_compose = file_directory.joinpath('docker-compose.yml') + if validate_docker_compose and not check_docker_compose_file(docker_compose): + return False icon_path = file_directory.joinpath(icon) with tarfile.open(spx, 'w:gz') as tar: tar.add(images_archive, arcname=images_archive.name) @@ -178,6 +210,7 @@ def create_spx(file_directory: Path, images_archive: Path, icon: str, udev: Path if udev.exists(): tar.add(udev, arcname=udev.name) print(f"Extension successfully built: {str(spx)}") + return True def main(): @@ -214,6 +247,10 @@ def main(): help='Path(s) to additional files in the package directory to include in the SPX.') parser.add_argument('--udev-rule', type=Path, default='udev_rule.rule', help='Path to the udev rule file, defaults to udev_rule.rule') + parser.add_argument( + '--skip-docker-compose-validation', action='store_true', + help='Disable validation of docker-compose.yml. This is useful on systems ' + 'in which docker-compose is not installed.') options = parser.parse_args() assert len(options.dockerfile_paths) == len( @@ -244,9 +281,16 @@ def main(): print("Error occurred when trying to save images, exiting...") return -1 - create_spx(options.package_dir, options.image_archive, options.icon, options.udev_rule, - options.spx, options.additional_files) + if not create_spx(options.package_dir, options.image_archive, options.icon, options.udev_rule, + options.spx, options.additional_files, + not options.skip_docker_compose_validation): + return 1 + + return 0 if __name__ == '__main__': - main() + import sys + + result = main() + sys.exit(result) diff --git a/python/examples/fan_command/README.md b/python/examples/fan_command/README.md index a9979cf51..3d86a974f 100644 --- a/python/examples/fan_command/README.md +++ b/python/examples/fan_command/README.md @@ -63,7 +63,7 @@ Out of the box, this example issues a command that turns the fans on to full pow ### Fan Remote Mission Service -This is an example remote mission service that allows a tablet user to issue a fan command during an Autowalk that (in the out-of-the-box configuration) will turn the fans off for 10 seconds. This is heavily modeled off of the existing "power_off_mission_service" in the Remote Mission Service Examples. +This is an example remote mission service that allows a tablet user to issue a fan command during an Autowalk that (in the out-of-the-box configuration) will turn the fans off for 10 seconds. To learn more about remote mission services, refer to the [remote mission service examples](../remote_mission_service/README.md). As with the other remote mission service examples, you will need a connection between a robot and the computer running the examples. diff --git a/python/examples/get_depth_plus_visual_image/get_depth_plus_visual_image.py b/python/examples/get_depth_plus_visual_image/get_depth_plus_visual_image.py index 277bfc04c..21d9a54a4 100644 --- a/python/examples/get_depth_plus_visual_image/get_depth_plus_visual_image.py +++ b/python/examples/get_depth_plus_visual_image/get_depth_plus_visual_image.py @@ -25,17 +25,24 @@ def main(): help='Convert to the depth frame. Default is convert to visual.', action='store_true') parser.add_argument('--camera', help='Camera to acquire image from.', default='frontleft',\ - choices=['frontleft', 'frontright', 'left', 'right', 'back', - ]) + choices=['frontleft', 'frontright', 'left', 'right', 'back', 'hand']) parser.add_argument('--auto-rotate', help='rotate right and front images to be upright', action='store_true') options = parser.parse_args() - if options.to_depth: - sources = [options.camera + '_depth', options.camera + '_visual_in_depth_frame'] - else: - sources = [options.camera + '_depth_in_visual_frame', options.camera + '_fisheye_image'] + if options.camera != 'hand' and options.to_depth: + print('Error: `--to-depth` is only supported for `--camera hand`.') + return False + if options.camera != 'hand': + sources = [options.camera + '_depth_in_visual_frame', options.camera + '_fisheye_image'] + else: + if options.to_depth: + sources = [options.camera + '_depth', options.camera + '_color_in_hand_depth_frame'] + else: + sources = [ + options.camera + '_depth_in_hand_color_frame', options.camera + '_color_image' + ] # Create robot object with an image client. sdk = bosdyn.client.create_standard_sdk('image_depth_plus_visual') diff --git a/python/examples/gps_service/README.md b/python/examples/gps_service/README.md index 0f9d15759..ad7e2b4de 100644 --- a/python/examples/gps_service/README.md +++ b/python/examples/gps_service/README.md @@ -8,7 +8,7 @@ Development Kit License (20191101-BDSDK-SL). # GPS Listener -This is an example program for consuming GPS data from a device and making it available through the Spot API. Data can be provided in one of three ways, through a TCP server, a UDP client, or a USB serial connection. Two example GPS device configurations are provided for the Trimble SPS986 and the Leica GA03 demonstrating TCP and Serial connections respectively. +This is an example program for consuming GPS data from a device and making it available through the Spot API. GPS devices can provide data in one of three ways, through a TCP server, a UDP client, or a serial connection. Two example GPS device configurations are provided for the Trimble SPS986 and the Leica GA03 demonstrating TCP and Serial connections respectively. The GPS devices must output data in the [NMEA-0183](https://www.nmea.org/nmea-0183.html) format. [GGA](https://receiverhelp.trimble.com/alloy-gnss/en-us/NMEA-0183messages_GGA.html) messages are required, but for best performance it is highly recommended to use devices which provide [GST](https://receiverhelp.trimble.com/alloy-gnss/en-us/NMEA-0183messages_GST.html) and [ZDA](https://receiverhelp.trimble.com/alloy-gnss/en-us/NMEA-0183messages_ZDA.html) messages as well. @@ -22,22 +22,22 @@ python3 -m pip install -r requirements.txt ## Running the Example -Before running the example, you must register the GPS payload with the Spot payload system. See [here](../payloads/README.md) for more details. +Before running the example, you must either register the GPS payload with the Spot payload system using the Web UI or specify the payload configuration as part of the arguments to this example. See [here](../payloads/README.md) for more details about payload registration. Take care in specifying the correct values for the position of the GPS payload and antenna. Errors in the specified mounting position will negatively affect the quality of localization solutions which use the GPS data. The GPS Listener requires that the following arguments be provided: -- The name of the registered GPS payload -- The transformation from the payload coordinate frame to the antenna -- The payload credentials -- The communication protocol - - Each communication protocol has its own additional options, see the help +- The name of the registered GPS payload. +- The transformation from the payload coordinate frame to the antenna. +- The payload credentials. +- The communication protocol. + - Each communication protocol has its own additional options, see the help. The transformation from the GPS payload frame to the GPS antenna includes a translation and a rotation as a Quaternion and takes the following form: `x y z qw qx qy qz`. An example using the Trimble SPS986: ```sh -python3 gps_listener.py --name "Trimble SPS986" --payload_tform_gps 0 0 0.4 1 0 0 0 --payload-credentials-file PAYLOAD_GUID_AND_SECRET_FILE ROBOT_HOSTNAME tcp --gps_host 192.168.144.1 --gps_port 5018 +python3 gps_listener.py --name "Trimble SPS986" --payload-tform-gps 0 0 0.4 1 0 0 0 --payload-credentials-file PAYLOAD_GUID_AND_SECRET_FILE ROBOT_HOSTNAME tcp --gps-host 192.168.144.1 --gps-port 5018 ``` For more information, see the gps_listener.py help page: @@ -57,7 +57,7 @@ python3 gps_listener.py --name "" "" udp --help The Trimble SPS986 and Leica GA03 examples are intended to be run as ARM architecture Core IO extensions. To build these extensions on an x86/AMD development environment, first run the commands in the section about "creating docker images on a development environment for a different architecture" [here](https://dev.bostondynamics.com/docs/payload/docker_containers.html#build-docker-images). After this one-time setup, you can use the `build_extension.py` script to create the Docker image via the command below, with further instructions [here](../extensions/README.md). ```sh -python3 build_extension.py --dockerfile-paths ../gps_service/Dockerfile --build-image-tags gps_listener:trimble_sps986 --image-archive gps_listener_image_arm64.tgz --package-dir ../gps_service/extensions/trimble_sps986/ --spx trimble_listener.spx +python3 build_extension.py --dockerfile-paths ../gps_service/Dockerfile --build-image-tags gps_listener_image_arm64:latest --image-archive gps_listener_image_arm64.tgz --package-dir ../gps_service/extensions/trimble_sps986/ --spx trimble_listener.spx ``` The trimble_listener.spx file can then be uploaded to the Core IO through its webpage. @@ -74,7 +74,19 @@ creds = bosdyn.client.util.get_guid_and_secret(options) robot = create_robot(creds, options) # Create a Fault Client for errors. -fault_client = create_fault_client(robot, options) +fault_client = create_fault_client(robot) +``` + +Optionally, the GPS Listener example can self-register the GPS device as a payload on Spot. This is useful if the GPS payload will be swapped on and off the robot often and the user does not want to use the Web UI to register and authorize the payload every time the device is mounted. The payload configuration given to the GPS Listener must be valid, or a fault will be thrown. The user can fix the offending configuration value in the Web UI and authorize the payload manually to get around a bad configuration, but be sure to fix the code after. + +```python +# Register the Payload +if options.register_payload: + # The user can modify and correct the payload configuration in the web UI, so it is + # possible that this will eventually succeed even though the programmed configuration is + # wrong. + while not register_payload(robot, fault_client, creds, options): + time.sleep(SECS_PER_ATTEMPT) ``` The next step is to connect to the GPS device. There are three supported communication protocols: TCP, UDP, and USB Serial. The code used to connect to the device depends on which option is provided through the command line arguments. Once opened, the data stream is made available through a Python IO Stream. If the device cannot be connected to, a fault will be triggered and the connection will be retried at a frequency of 1Hz. @@ -93,27 +105,27 @@ body_tform_gps = calculate_body_tform_gps(robot, options) time_converter = robot.time_sync.get_robot_time_converter() ``` -With the data stream opened and the required system information collected, the data is ready to be provided to Spot. The GPS Listener reads data from the data stream, applies the required spatial and temporal transformations, and uses the Spot API to provide the data to the robot. Namely, the Aggregator service accepts GPS data in the form of a NewGpsDataRequest GRPC request. +With the data stream opened and the required system information collected, the data is ready to be provided to Spot. The GPS Listener reads data from the data stream, applies the required spatial and temporal transformations, and uses the Spot API to provide the data to the robot. Namely, the `Aggregator` service accepts GPS data in the form of a `NewGpsDataRequest` gRPC request. -As the robot moves, it builds a trajectory of positions using its odometry and GPS measurements. The pose of the robot with respect to the Earth can be calculated by registering the GPS trajectory to the odometry trajectory. This registration can be queried using Spot's Registration service. +As the robot moves, it builds a trajectory of positions using its odometry and GPS measurements. The pose of the robot with respect to the Earth can be calculated by registering the GPS trajectory to the odometry trajectory. This registration can be queried using Spot's `Registration` service. ```sh python3 get_location.py ROBOT_HOSTNAME ``` -The returned GetLocationResponse has a status enumeration with the following values: +The returned `GetLocationResponse` has a status enumeration with the following values: -- STATUS_UNKNOWN: An unknown error occurred getting the robot's location. -- STATUS_OK: A (maybe invalid) Registration was retrieved. -- STATUS_NEED_DEVICE: Could not get a Registration because no GPS device is connected. +- `STATUS_UNKNOWN`: An unknown error occurred getting the robot's location. +- `STATUS_OK`: A (maybe invalid) Registration was retrieved. +- `STATUS_NEED_DEVICE`: Could not get a Registration because no GPS device is connected. -If the request is successful, the response will contain a Registration message. The Registration has a Status enumeration with the following values: +If the request is successful, the response will contain a `Registration` message. The registration has a `Status` enumeration with the following values: -- STATUS_UNKNOWN: There is no registration. -- STATUS_OK: A registration between the robot's odometry and GPS trajectories has been found. -- STATUS_NEED_DATA: The robot has not received any GPS data to use for the registration. -- STATUS_NEED_MORE_DATA: The robot has not moved far enough to calculate a registration. -- STATUS_STALE: The data used to calculate the registration is too old. +- `STATUS_UNKNOWN`: There is no registration. +- `STATUS_OK`: A registration between the robot's odometry and GPS trajectories has been found. +- `STATUS_NEED_DATA`: The robot has not received any GPS data to use for the registration. +- `STATUS_NEED_MORE_DATA`: The robot has not moved far enough to calculate a registration. +- `STATUS_STALE`: The data used to calculate the registration is too old. ## GPS in Graph Nav diff --git a/python/examples/gps_service/extensions/bynav_c2_m2x/99-bynav_c2_m2x_rules.rules b/python/examples/gps_service/extensions/bynav_c2_m2x/99-bynav_c2_m2x_rules.rules new file mode 100644 index 000000000..1d7a5dbbf --- /dev/null +++ b/python/examples/gps_service/extensions/bynav_c2_m2x/99-bynav_c2_m2x_rules.rules @@ -0,0 +1,10 @@ +# If this matches the Vendor ID = "Nanjing Qinheng Microelectronics Co., Ltd." (No string for +# product ID) skip ahead. +SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idProduct}=="55d2", ATTRS{idVendor}=="1a86", GOTO="bynav" +# Did not match, skip the next block +SUBSYSTEMS=="usb", GOTO="bynav_end" + +LABEL="bynav" +ATTRS{bInterfaceNumber}=="00", SYMLINK+="bynav_c2_m2x0", MODE="0666" +ATTRS{bInterfaceNumber}=="02", SYMLINK+="bynav_c2_m2x1", MODE="0666" +LABEL="bynav_end" diff --git a/python/examples/gps_service/extensions/bynav_c2_m2x/bynav_c2_m2x_setup.py b/python/examples/gps_service/extensions/bynav_c2_m2x/bynav_c2_m2x_setup.py new file mode 100644 index 000000000..a85712b24 --- /dev/null +++ b/python/examples/gps_service/extensions/bynav_c2_m2x/bynav_c2_m2x_setup.py @@ -0,0 +1,34 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +""" +Setup a Bynav C2 M2X for use with the GPS Listener extension. Configures the output rate to be 2Hz +and enables the GGA, GST, and ZDA NMEA messages. +""" + +from serial import Serial + +C2_M2X_DEV = "/dev/bynav_c2_m2x1" +C2_M2X_BAUD = 115200 +TIMEOUT = 3 # seconds + +if __name__ == "__main__": + NMEA_CONFIG_FMT = "log com3 {} ontime 0.5\n" + CONFIG_CMDS = [ + # Disable all output. + "unlogall com3\n", + # Set the RTK type to Rover. + "rtktype rover\n", + # Configure the NMEA GGA GST and ZDA messages to output at 2Hz. + NMEA_CONFIG_FMT.format("gpgga"), + NMEA_CONFIG_FMT.format("gpgst"), + NMEA_CONFIG_FMT.format("gpzda"), + # Save the configuration to flash. + "saveconfig\n", + ] + with Serial(C2_M2X_DEV, C2_M2X_BAUD, timeout=TIMEOUT) as stream: + for config_cmd in CONFIG_CMDS: + stream.write(bytes(config_cmd, "utf-8")) diff --git a/python/examples/gps_service/extensions/bynav_c2_m2x/docker-compose.yml b/python/examples/gps_service/extensions/bynav_c2_m2x/docker-compose.yml new file mode 100644 index 000000000..1ffc07213 --- /dev/null +++ b/python/examples/gps_service/extensions/bynav_c2_m2x/docker-compose.yml @@ -0,0 +1,64 @@ +services: + app: + image: "gps_listener_image_arm64:latest" + network_mode: "host" + volumes: + - "/opt/payload_credentials:/creds" + devices: + - /dev/bynav_c2_m2x1:/dev/bynav_c2_m2x1 + restart: unless-stopped + command: + [ + "--name", + "Bynav C2 M2x", + "--payload-tform-gps", + "0.1", + "0", + "0.1", + "1", + "0", + "0", + "0", + "--payload-credentials-file", + "/creds/payload_guid_and_secret", + "192.168.50.3", + "--register-payload", + "--mass", + "0.5", + "--description", + "Bynav C2 M2x GNSS Receiver", + "--position", + "-0.18", + "0.024", + "0", + "1", + "0", + "0", + "0", + "--position-of-mass", + "0", + "0", + "0.1", + "--bounding-box", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "--version", + "1", + "0", + "0", + "--gps-credentials-file", + "/creds/bynav-c2-m2x-gps-payload-credentials.txt", + "serial", + "--serial-device", + "/dev/bynav_c2_m2x1", + "--serial-baudrate", + "115200", + ] diff --git a/python/examples/gps_service/extensions/bynav_c2_m2x/manifest.json b/python/examples/gps_service/extensions/bynav_c2_m2x/manifest.json new file mode 100644 index 000000000..9504ad9ec --- /dev/null +++ b/python/examples/gps_service/extensions/bynav_c2_m2x/manifest.json @@ -0,0 +1,6 @@ +{ + "description": "CoreIO extension for listening to Bynav C2 M2x GPS Data", + "version": "1.0", + "udev_rules": "99-bynav_c2_m2x_rules.rules", + "images": ["gps_listener_image_arm64.tgz"] +} diff --git a/python/examples/gps_service/extensions/leica_ga03/99-leica_gps_rules.rules b/python/examples/gps_service/extensions/leica_ga03/99-leica_gps_rules.rules new file mode 100644 index 000000000..c2766284e --- /dev/null +++ b/python/examples/gps_service/extensions/leica_ga03/99-leica_gps_rules.rules @@ -0,0 +1,3 @@ +SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="0", SYMLINK+="leica0", MODE="0666" +SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="1", SYMLINK+="leica1", MODE="0666" +SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="2", SYMLINK+="leica2", MODE="0666" \ No newline at end of file diff --git a/python/examples/gps_service/extensions/leica_ga03/docker-compose.yml b/python/examples/gps_service/extensions/leica_ga03/docker-compose.yml index eff481c95..c6f302085 100644 --- a/python/examples/gps_service/extensions/leica_ga03/docker-compose.yml +++ b/python/examples/gps_service/extensions/leica_ga03/docker-compose.yml @@ -5,13 +5,13 @@ services: volumes: - "/opt/payload_credentials:/creds" devices: - - "/dev/ttyUSB2:/dev/leica" + - /dev/leica1:/dev/leica restart: unless-stopped command: [ "--name", "Leica GA03", - "--payload_tform_gps", + "--payload-tform-gps", "0", "0", "0.032", @@ -22,6 +22,7 @@ services: "--payload-credentials-file", "/creds/payload_guid_and_secret", "192.168.50.3", + "--register-payload", "--mass", ".671", "--description", @@ -34,12 +35,12 @@ services: "0", "0", "0", - "--position_of_mass", + "--position-of-mass", "-.083", "0", ".02595", - "--bounding_boxes", - "-.604", + "--bounding-box", + "-.083", "0", ".02595", "1", @@ -50,12 +51,12 @@ services: ".053", "0.03844", "--gps-credentials-file", - "leica-gps-payload-credentials.txt", + "/creds/leica-gps-payload-credentials.txt", "--version", "1", "0", "0", "serial", - "--serial_device", + "--serial-device", "/dev/leica", ] diff --git a/python/examples/gps_service/extensions/leica_ga03/manifest.json b/python/examples/gps_service/extensions/leica_ga03/manifest.json index 192db158b..85a6784b5 100644 --- a/python/examples/gps_service/extensions/leica_ga03/manifest.json +++ b/python/examples/gps_service/extensions/leica_ga03/manifest.json @@ -1,5 +1,7 @@ { "description": "CoreIO extension to listen to Leica GA03 GPS Data", "version": "1.0", - "images": ["gps_listener_image_arm64.tgz"] + "udev_rules": "99-leica_gps_rules.rules", + "images": ["gps_listener_image_arm64.tgz"], + "extension_name": "leica_listener" } diff --git a/python/examples/gps_service/extensions/trimble_sps986/docker-compose.yml b/python/examples/gps_service/extensions/trimble_sps986/docker-compose.yml index 0ca4e0c8a..d83a82447 100644 --- a/python/examples/gps_service/extensions/trimble_sps986/docker-compose.yml +++ b/python/examples/gps_service/extensions/trimble_sps986/docker-compose.yml @@ -9,7 +9,7 @@ services: [ "--name", "Trimble SPS986", - "--payload_tform_gps", + "--payload-tform-gps", "0", "0", "0.4", @@ -20,6 +20,7 @@ services: "--payload-credentials-file", "/creds/payload_guid_and_secret", "192.168.50.3", + "--register-payload", "--mass", "1.7", "--description", @@ -32,11 +33,11 @@ services: "0", "0", "0", - "--position_of_mass", + "--position-of-mass", "-.0664", "0", ".12", - "--bounding_boxes", + "--bounding-box", "-.0664", "0", ".12", @@ -52,10 +53,10 @@ services: "0", "0", "--gps-credentials-file", - "trimble-gps-payload-credentials.txt", + "/creds/trimble-gps-payload-credentials.txt", "tcp", - "--gps_host", + "--gps-host", "192.168.144.1", - "--gps_port", + "--gps-port", "5018", ] diff --git a/python/examples/gps_service/extensions/trimble_sps986/manifest.json b/python/examples/gps_service/extensions/trimble_sps986/manifest.json index 4894b2424..890d5ef1b 100644 --- a/python/examples/gps_service/extensions/trimble_sps986/manifest.json +++ b/python/examples/gps_service/extensions/trimble_sps986/manifest.json @@ -1,5 +1,6 @@ { "description": "CoreIO extension for listening to Trimble SPS986 GPS Data", "version": "1.0", - "images": ["gps_listener_image_arm64.tgz"] + "images": ["gps_listener_image_arm64.tgz"], + "extension_name": "trimble_listener" } diff --git a/python/examples/gps_service/extensions/ublox_f9r/99-ublox_f9r_rules.rules b/python/examples/gps_service/extensions/ublox_f9r/99-ublox_f9r_rules.rules new file mode 100644 index 000000000..ca04a3f9b --- /dev/null +++ b/python/examples/gps_service/extensions/ublox_f9r/99-ublox_f9r_rules.rules @@ -0,0 +1 @@ +SUBSYSTEMS=="usb", ATTRS{idProduct}=="01a9", ATTRS{idVendor}=="1546", SYMLINK+="ublox_f9r", MODE="0666" diff --git a/python/examples/gps_service/extensions/ublox_f9r/docker-compose.yml b/python/examples/gps_service/extensions/ublox_f9r/docker-compose.yml new file mode 100644 index 000000000..e359c7120 --- /dev/null +++ b/python/examples/gps_service/extensions/ublox_f9r/docker-compose.yml @@ -0,0 +1,64 @@ +services: + app: + image: "gps_listener_image_arm64:latest" + network_mode: "host" + volumes: + - "/opt/payload_credentials:/creds" + devices: + - /dev/ublox_f9r:/dev/ublox_f9r + restart: unless-stopped + command: + [ + "--name", + "Ublox F9R", + "--payload-tform-gps", + "0.1", + "0", + "0.1", + "1", + "0", + "0", + "0", + "--payload-credentials-file", + "/creds/payload_guid_and_secret", + "192.168.50.3", + "--register-payload", + "--mass", + "0.5", + "--description", + "Ublox F9R GNSS Receiver", + "--position", + "-0.18", + "0.024", + "0", + "1", + "0", + "0", + "0", + "--position-of-mass", + "0", + "0", + "0.1", + "--bounding-box", + "0", + "0", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "--version", + "1", + "0", + "0", + "--gps-credentials-file", + "/creds/ublox-f9r-gps-payload-credentials.txt", + "serial", + "--serial-device", + "/dev/ublox_f9r", + "--serial-baudrate", + "38400", + ] diff --git a/python/examples/gps_service/extensions/ublox_f9r/manifest.json b/python/examples/gps_service/extensions/ublox_f9r/manifest.json new file mode 100644 index 000000000..a5c9d6b72 --- /dev/null +++ b/python/examples/gps_service/extensions/ublox_f9r/manifest.json @@ -0,0 +1,7 @@ +{ + "description": "CoreIO extension for listening to Ublox F9R GPS Data", + "version": "1.0", + "udev_rules": "99-ublox_f9r_rules.rules", + "images": ["gps_listener_image_arm64.tgz"], + "extension_name": "ublox_listener" +} diff --git a/python/examples/gps_service/extensions/ublox_f9r/ublox_f9r_setup.py b/python/examples/gps_service/extensions/ublox_f9r/ublox_f9r_setup.py new file mode 100644 index 000000000..1bb224180 --- /dev/null +++ b/python/examples/gps_service/extensions/ublox_f9r/ublox_f9r_setup.py @@ -0,0 +1,43 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +""" +Setup a Ublox F9R for use with the GPS Listener extension. Configures the output rate to be 2Hz and +enables the GGA, GST, and ZDA NMEA messages. + +Requires the following pip dep: + pyubx2>=1.2.43 +""" + +from pyubx2 import SET_LAYER_BBR, SET_LAYER_FLASH, SET_LAYER_RAM, TXN_NONE, UBXMessage +from serial import Serial + +F9R_DEV = '/dev/ublox_f9r' +F9R_BAUD = 38400 +TIMEOUT = 3 # seconds + +if __name__ == "__main__": + layers = SET_LAYER_RAM | SET_LAYER_BBR | SET_LAYER_FLASH + transaction = TXN_NONE + cfgData = [ + # Output data at 2 Hz (every 500ms). + ("CFG_RATE_MEAS", 500), + # Enable GGA, GST, and ZDA messages. + ("CFG_MSGOUT_NMEA_ID_GGA_USB", 1), + ("CFG_MSGOUT_NMEA_ID_GST_USB", 1), + ("CFG_MSGOUT_NMEA_ID_ZDA_USB", 1), + # Disable the default enabled messages. + ("CFG_MSGOUT_NMEA_ID_GSA_USB", 0), + ("CFG_MSGOUT_NMEA_ID_VTG_USB", 0), + ("CFG_MSGOUT_NMEA_ID_GSV_USB", 0), + ("CFG_MSGOUT_NMEA_ID_GLL_USB", 0), + ("CFG_MSGOUT_NMEA_ID_RMC_USB", 0), + # Disable sensor fusion, use GNSS only. + ("CFG-SFCORE-USE_SF", 0), + ] + msg = UBXMessage.config_set(layers, transaction, cfgData) + with Serial(F9R_DEV, F9R_BAUD, timeout=TIMEOUT) as stream: + stream.write(msg.serialize()) diff --git a/python/examples/gps_service/gps_listener.py b/python/examples/gps_service/gps_listener.py index b620bc0c1..3a0fe3701 100644 --- a/python/examples/gps_service/gps_listener.py +++ b/python/examples/gps_service/gps_listener.py @@ -12,12 +12,14 @@ import os import socket import time +from itertools import product import serial import bosdyn.api.payload_pb2 as payload_protos import bosdyn.client.util from bosdyn.api.service_fault_pb2 import ServiceFault, ServiceFaultId +from bosdyn.client import RetryableUnavailableError, TooManyRequestsError from bosdyn.client.exceptions import ProxyConnectionError from bosdyn.client.fault import (FaultClient, ServiceFaultAlreadyExistsError, ServiceFaultDoesNotExistError) @@ -25,6 +27,7 @@ from bosdyn.client.math_helpers import Quat, SE3Pose from bosdyn.client.payload import PayloadClient from bosdyn.client.payload_registration import (PayloadAlreadyExistsError, + PayloadNotAuthorizedError, PayloadRegistrationClient, PayloadRegistrationKeepAlive) from bosdyn.client.robot import UnregisteredServiceNameError @@ -47,11 +50,14 @@ # Format strings for possible faults. FAULT_CONNECTION = "{} Connection Fault" FAULT_COMMUNICATION = "{} Communication Fault" +FAULT_CONFIGURATION = "{} Configuration Fault" # Attempt to connect to a device this many times. NUM_ATTEMPTS = 30 # In case of failure, wait this long before trying again. SECS_PER_ATTEMPT = 1.0 # seconds. +# Number of seconds to wait while we are checking for payload authorization. +SECS_PER_AUTH = 3.0 # seconds. # Attribute used in service faults to prevent autonomous navigation. IMPAIR_ATTRIBUTE = "impair_navigation" @@ -59,9 +65,29 @@ # Payload T Frame PAYLOAD_FRAME_NAME = 'payload' +# Default argument list for bounding box. Note that the default is not a valid configuration, and +# the value here is just a placeholder for when no bounding box is specified on the command line. +# position x y z qw qx qy qz and extent (half width) x y z +DEFAULT_BOUNDING_BOX = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0] + logger = logging.getLogger() +# Populate the x, y, z values of the given vector with the values from the given list. +def populate_vec_from_list(dst_vec, src_list): + dst_vec.x = src_list[0] + dst_vec.y = src_list[1] + dst_vec.z = src_list[2] + + +# Populate the w, x, y, z values of the given quaternion with the values from the given list. +def populate_quat_from_list(dst_quat, src_list): + dst_quat.w = src_list[0] + dst_quat.x = src_list[1] + dst_quat.y = src_list[2] + dst_quat.z = src_list[3] + + # Create a command line parser used to configure the GPS listener. def create_parser(): parser = argparse.ArgumentParser() @@ -81,12 +107,12 @@ def create_parser(): name='serial', help='Required arguments for listening to a Serial NMEA stream.') # Arguments for TCP. - parser_tcp.add_argument("--gps_host", help='The hostname or IP address of the GPS.', + parser_tcp.add_argument("--gps-host", help='The hostname or IP address of the GPS.', default=GPS_HOST, required=True) - parser_tcp.add_argument("--gps_port", type=int, help='The TCP server port on the GPS.', + parser_tcp.add_argument("--gps-port", type=int, help='The TCP server port on the GPS.', default=GPS_PORT, required=True) parser_tcp.add_argument( - "--socket_timeout", type=float, + "--socket-timeout", type=float, help='The amount of time in seconds to wait for data before timing out.', default=SOCKET_TIMEOUT, required=False) @@ -94,49 +120,57 @@ def create_parser(): parser_udp.add_argument("--port", type=int, help='The port on which to listen.', default=PORT, required=True) parser_udp.add_argument( - "--socket_timeout", type=float, + "--socket-timeout", type=float, help='The amount of time in seconds to wait for data before timing out.', default=SOCKET_TIMEOUT, required=False) # Arguments for Serial. - parser_serial.add_argument("--serial_device", help="The path to the serial device", + parser_serial.add_argument("--serial-device", help="The path to the serial device", default=SERIAL_DEVICE, required=True) - parser_serial.add_argument("--serial_baudrate", help="The baudrate of the serial device", + parser_serial.add_argument("--serial-baudrate", help="The baudrate of the serial device", default=SERIAL_RATE, required=False) parser_serial.add_argument( - "--serial_timeout", type=float, + "--serial-timeout", type=float, help="The amount of time in seconds to wait for data before timing out.", default=SERIAL_TIMEOUT, required=False) # Arguments for the GPS Listener. parser.add_argument("--name", help='The name of the connected GPS payload.', required=True) - parser.add_argument('--payload_tform_gps', + parser.add_argument('--payload-tform-gps', help='Pose of the GPS relative to the payload frame. (x y z qw qx qy qz)', nargs=7, type=float, default=[0, 0, 0, 0, 0, 0, 1]) - parser.add_argument("--num_attempts", type=int, + parser.add_argument("--num-attempts", type=int, help='The number of attempts to connect to the GPS device.', default=NUM_ATTEMPTS, required=False) parser.add_argument( - "--secs_per_attempt", type=float, + "--secs-per-attempt", type=float, help='The number of seconds to wait per attempt to connect to the GPS device.', default=SECS_PER_ATTEMPT, required=False) - parser.add_argument("--mass", type=float, help='The mass of the payload in kg', default=0, + parser.add_argument( + "--disable-time-sync", action='store_true', help= + "Flag indicating if the TimeSync service should be disabled for this client. Note: Only use this if the client and robot clocks are synchronized using some other method, such as NTP." + ) + + # Payload registration arguments. + parser.add_argument("--register-payload", action='store_true', + help='Flag indicating if the GPS unit should be registered as a payload') + parser.add_argument("--mass", type=float, help='The mass of the payload in kg', default=False, required=False) parser.add_argument("--description", help='Description of the payload', type=str, default='GPS Payload', required=False) parser.add_argument("--version", help='Version number for software. (major minor patch_level)', nargs=3, type=int, default=[0, 0, 0], required=False) parser.add_argument( - "--position_of_mass", + "--position-of-mass", help='Position of the payload center of mass in the payload reference frame (x y z)', nargs=3, type=float, default=[0, 0, 0], required=False) parser.add_argument( "--position", help= 'Position of payload refrence frame with respect to payload mount reference frame. (x y z qw qx qy qz)', nargs=7, type=float, default=[0, 0, 0, 1, 0, 0, 0], required=False) - parser.add_argument("--bounding_boxes", + parser.add_argument("--bounding-box", help='Bounding box. (x y z qw qx qy qz size_x size_y size_z)', nargs=10, - type=float, default=[0, 0, 0, 1, 0, 0, 0, 0, 0, 0], required=False) + type=float, default=DEFAULT_BOUNDING_BOX, required=False) parser.add_argument("--gps-credentials-file", help='Credentials file for the specified GPS payload.', required=False, default='gps-credentials.txt') @@ -145,82 +179,188 @@ def create_parser(): # Create an object used to communicate with a Boston Dynamics robot. def create_robot(creds, options): - sdk = bosdyn.client.create_standard_sdk(options.name + 'Client') + sdk = bosdyn.client.create_standard_sdk(options.name + ' Client') robot = sdk.create_robot(options.hostname) robot.authenticate_from_payload_credentials(*creds) - logger.info('Starting Timesync') - robot.time_sync.wait_for_sync() - time_converter = robot.time_sync.get_robot_time_converter() - current_skew = duration_to_seconds(robot.time_sync.get_robot_clock_skew()) - logger.info('Got Timesync! Skew: %d', current_skew) + + if not options.disable_time_sync: + logger.info('Starting Timesync') + robot.time_sync.wait_for_sync() + current_skew = duration_to_seconds(robot.time_sync.get_robot_clock_skew()) + logger.info('Got Timesync! Skew: %d', current_skew) + return robot -# Registers the payload -def register_payload(robot, options): +# Check the given payload registration options and ensure they are valid. +def check_payload_options(options): + MAX_NAME_LEN = 50 # characters + MAX_DESC_LEN = 250 # characters + MIN_POS = -2 # meters + MAX_POS = 2 # meters + X = 0 + Y = 1 + Z = 2 + EXTENT_X = 7 + EXTENT_Y = 8 + EXTENT_Z = 9 + MIN_MASS = 0 # kg + MAX_MASS = 25 # kg + + # Determine if we have a bounding box by checking if we have the default values. + has_bounding_box = options.bounding_box != DEFAULT_BOUNDING_BOX + + # Name cannot exceed 50 characters. + if len(options.name) > MAX_NAME_LEN: + logger.error(f"GPS payload name is too long. Max length is {MAX_NAME_LEN} characters.") + return False + + # Description cannot exceed 250 characters. + if len(options.description) > MAX_DESC_LEN: + logger.error( + f"GPS payload description is too long. Max length is {MAX_DESC_LEN} characters.") + return False + + # All positions must fall within the range [-2, 2]. + error_format = "Incorrect payload specification, position values must be within bounds [{}, {}]. {}[{}] set to {}" + + def check_position(field, idx): + pos = getattr(options, field)[idx] + if not (MIN_POS <= pos <= MAX_POS): + logger.error(error_format.format(MIN_POS, MAX_POS, field, idx, pos)) + return False + return True + + distance_fields = ["position", "position_of_mass"] + if has_bounding_box: + distance_fields.append("bounding_box") + distance_field_comps = product(distance_fields, [X, Y, Z]) + positions_ok = all(check_position(f, i) for f, i in distance_field_comps) + if not positions_ok: + return False + + # If we have a bounding box, the extents must be greater than zero. + if has_bounding_box: + error_format = "Incorrect payload specification, bounding box extents must be greater than 0. Extent {} is set to: {}" + + def check_extent(idx): + extent = options.bounding_box[idx] + if extent <= 0: + logger.error(error_format.format(idx - EXTENT_X, extent)) + return False + return True + + extents_ok = all(check_extent(i) for i in [EXTENT_X, EXTENT_Y, EXTENT_Z]) + if not extents_ok: + return False + + # The mass must be within 0 and 25 kg. + mass = options.mass + if not (MIN_MASS <= mass <= MAX_MASS): + logger.error( + f"Incorrect payload specification, mass must be in range [{MIN_MASS}, {MAX_MASS}] kg. Total mass set to: {mass} kg" + ) + return False + + # Payload configuration is valid. + return True + + +# Register the GPS device as a payload on Spot with the given specifications. +def register_payload(robot, fault_client, creds, options): + payload_client = robot.ensure_client(PayloadClient.default_service_name) + + # Check if the payload already exists and is authorized. + payload_already_authorized = False + try: + payloads = payload_client.list_payloads() + payload_already_authorized = any( + (payload.name == options.name and payload.is_authorized) for payload in payloads) + except: + # If we failed to get the payloads, assume the payload has not been authorized. + pass + + # If the payload is already authorized or if we have valid registration options, clear any + # existing configuration faults. + if payload_already_authorized or check_payload_options(options): + clear_fault(FAULT_CONFIGURATION.format(options.name), creds, fault_client) + else: + # Payload does not already exist and the given configuration is invalid. Trigger a fault. + error_desc = "GPS Payload Configuration is invalid. Check logs for details." + trigger_fault(FAULT_CONFIGURATION.format(options.name), error_desc, creds, fault_client) + return False + + if payload_already_authorized: + return True + + # Create and register the payload. payload = payload_protos.Payload() payload.GUID, payload_secret = bosdyn.client.util.read_or_create_payload_credentials( options.gps_credentials_file) payload.name = options.name payload.description = options.description - # Version number + payload.label_prefix.append('gps') + payload.is_noncompute_payload = True + + # Set the version number. payload.version.major_version = options.version[0] payload.version.minor_version = options.version[1] payload.version.patch_level = options.version[2] + # Set the position of the payload with respect to the body frame. + payload.mount_frame_name = payload_protos.MountFrameName.MOUNT_FRAME_BODY_PAYLOAD + populate_vec_from_list(payload.mount_tform_payload.position, options.position[:3]) + populate_quat_from_list(payload.mount_tform_payload.rotation, options.position[3:]) + + # Set the mass properties. payload.mass_volume_properties.total_mass = options.mass + populate_vec_from_list(payload.mass_volume_properties.com_pos_rt_payload, + options.position_of_mass) + + # If the bounding box is not the default, populate it. + if options.bounding_box != DEFAULT_BOUNDING_BOX: + bb = payload.mass_volume_properties.bounding_box.add() + bb.frame_name = PAYLOAD_FRAME_NAME + populate_vec_from_list(bb.frame_name_tform_box.position, options.bounding_box[:3]) + populate_quat_from_list(bb.frame_name_tform_box.rotation, options.bounding_box[3:7]) + + # The input is half the dimension of the box like the UI + extents = [x * 2 for x in options.bounding_box[7:]] + populate_vec_from_list(bb.box.size, extents) - # Position - payload.mount_tform_payload.position.x = options.position[0] - payload.mount_tform_payload.position.y = options.position[1] - payload.mount_tform_payload.position.z = options.position[2] - payload.mount_tform_payload.rotation.w = options.position[3] - payload.mount_tform_payload.rotation.x = options.position[4] - payload.mount_tform_payload.rotation.y = options.position[5] - payload.mount_tform_payload.rotation.z = options.position[6] - - # Position of mass - payload.mass_volume_properties.com_pos_rt_payload.x = options.position_of_mass[0] - payload.mass_volume_properties.com_pos_rt_payload.y = options.position_of_mass[1] - payload.mass_volume_properties.com_pos_rt_payload.z = options.position_of_mass[2] - - # Bounding boxes - bb = payload.mass_volume_properties.bounding_box.add() - bb.frame_name = PAYLOAD_FRAME_NAME - bb.frame_name_tform_box.position.x = options.bounding_boxes[0] - bb.frame_name_tform_box.position.y = options.bounding_boxes[1] - bb.frame_name_tform_box.position.z = options.bounding_boxes[2] - bb.frame_name_tform_box.rotation.w = options.bounding_boxes[3] - bb.frame_name_tform_box.rotation.x = options.bounding_boxes[4] - bb.frame_name_tform_box.rotation.y = options.bounding_boxes[5] - bb.frame_name_tform_box.rotation.z = options.bounding_boxes[6] - - # The input is half the dimension of the box like the UI - bb.box.size.x = options.bounding_boxes[7] * 2 - bb.box.size.y = options.bounding_boxes[8] * 2 - bb.box.size.z = options.bounding_boxes[9] * 2 - - # Create a payload registration client + # Register the payload. payload_registration_client = robot.ensure_client( PayloadRegistrationClient.default_service_name) try: payload_registration_client.register_payload(payload, payload_secret) - print('Payload has been authorized by admin.') except PayloadAlreadyExistsError: - print( - f"Payload config for {payload.GUID} already exists. Continuing with pre-existing configuration." - ) + # Update payload version, in case the payload was already registered with an older version. + payload_registration_client.update_payload_version(payload.GUID, payload_secret, + payload.version) + + limited_token = None + waiting_for_auth = False + while not limited_token: + try: + # Request payload user token. + limited_token = payload_registration_client.get_payload_auth_token( + payload.GUID, payload_secret) + except PayloadNotAuthorizedError: + if not waiting_for_auth: + logger.info("Waiting for admin to authorize payload") + waiting_for_auth = True + time.sleep(SECS_PER_AUTH) - # Create and start the keep alive - keep_alive = PayloadRegistrationKeepAlive(payload_registration_client, payload, payload_secret) - keep_alive.start() + if waiting_for_auth: + logger.info('Payload authorized.') + return True # Create a client for triggering and clearing payload faults. -def create_fault_client(robot, options): +def create_fault_client(robot): fault_client = None - while fault_client == None: + while fault_client is None: try: return robot.ensure_client(FaultClient.default_service_name) except (UnregisteredServiceNameError, ProxyConnectionError): @@ -361,7 +501,7 @@ def create_serial_stream(serial_device, baudrate, timeout, max_attempts, secs_pe # Create a stream to communicate with the GPS device. def create_stream(fault_client, creds, options): - # The stream we will return + # The stream we will return. stream = None # Flag indicating if we encountered a fault while connecting. @@ -447,11 +587,16 @@ def main(): # Set up the Robot Client. robot = create_robot(creds, options) - # Register the Payload - register_payload(robot, options) - # Create a Fault Client for errors. - fault_client = create_fault_client(robot, options) + fault_client = create_fault_client(robot) + + # Register the Payload + if options.register_payload: + # The user can modify and correct the payload configuration in the web UI, so it is + # possible that this will eventually succeed even though the programmed configuration is + # wrong. + while not register_payload(robot, fault_client, creds, options): + time.sleep(SECS_PER_ATTEMPT) # Set up the data stream. stream = None @@ -463,8 +608,12 @@ def main(): # Calculate the transform from the body frame to the GPS receiver. body_tform_gps = calculate_body_tform_gps(robot, options) - # Get the time converter, used to sync times between the payload and robot. - time_converter = robot.time_sync.get_robot_time_converter() + # Get the time converter, used to sync times between the payload and robot. If the payload and + # the robot have their clocks synchronized by some other means, such as NTP, the user may choose + # to disable time sync. In that case, just leave time_converter as None. + time_converter = None + if not options.disable_time_sync: + time_converter = robot.time_sync.get_robot_time_converter() # If we previously had a fault, clear it. clear_fault(FAULT_COMMUNICATION.format(options.name), creds, fault_client) diff --git a/python/examples/graph_nav_command_line/recording_command_line.py b/python/examples/graph_nav_command_line/recording_command_line.py index d5ce23ad1..ef82dde61 100644 --- a/python/examples/graph_nav_command_line/recording_command_line.py +++ b/python/examples/graph_nav_command_line/recording_command_line.py @@ -338,7 +338,7 @@ def _optimize_anchoring(self, *args): # If we are using GPS, the GPS coordinates in the graph have been changed, so we need # to re-download the graph. if self.use_gps: - print(f'Downloading updated graph...') + print('Downloading updated graph...') self._current_graph = self._graph_nav_client.download_graph() else: print(f'Error optimizing {response}') diff --git a/python/examples/graph_nav_view_gps/view_gps.py b/python/examples/graph_nav_view_gps/view_gps.py index 7a4c6ab55..f7512e169 100644 --- a/python/examples/graph_nav_view_gps/view_gps.py +++ b/python/examples/graph_nav_view_gps/view_gps.py @@ -101,15 +101,18 @@ def timestamp_to_seconds(timestamp: any) -> float: return timestamp.seconds + 1.0e-9 * timestamp.nanos -def get_raw_gps_data(current_waypoint_snapshots: dict) -> list: +def get_raw_gps_data(current_waypoint_snapshots: dict, time_threshold_seconds=30) -> list[list]: """ - Returns a list of latitude/longitude coordinates in the waypoint snapshots. + Returns a list of latitude/longitude coordinate segments in the waypoint snapshots. Each segment corresponds to a run of data + where each data point is no more than time_threshold_seconds apart. Waypoint snapshots may contain a world object called "gps_properties" that has raw measurements of latitude and longitude at the time of recording of that waypoint snapshot. This function returns a list of tuples where each tuple is a (latitude, longitude) pair, one for each waypoint snapshot. The latitude/longitude coordinates will be sorted by time. """ - raw_latitude_longitude = [] + raw_latitude_longitudes = [] + curr_raw_array = [] + prev_time = None sorted_waypoint_snapshots = list(current_waypoint_snapshots.values()) # Sort waypoint snapshots by time. sorted_waypoint_snapshots = sorted( @@ -119,21 +122,29 @@ def get_raw_gps_data(current_waypoint_snapshots: dict) -> list: for snapshot in sorted_waypoint_snapshots: for world_object in snapshot.objects: if world_object.HasField('gps_properties'): + registration = world_object.gps_properties.registration # This is a "latitude longitude height" message. - llh = world_object.gps_properties.registration.robot_body_location - raw_latitude_longitude.append([llh.latitude, llh.longitude]) + llh = registration.robot_body_location + t = registration.timestamp.seconds + if prev_time is None or (t - prev_time) > time_threshold_seconds: + curr_raw_array = [] + raw_latitude_longitudes.append(curr_raw_array) + prev_time = t + curr_raw_array.append([llh.latitude, llh.longitude]) - return raw_latitude_longitude + return raw_latitude_longitudes -def get_annotated_gps_data(current_waypoints: dict) -> list: +def get_annotated_gps_data(current_waypoints: dict, time_threshold_seconds=30) -> list[list]: """ - Returns a list of waypoint coordinates from waypoint annotations. The annotated GPS data + Returns a list of latitude/longitude coordinate segments of waypoint coordinates from waypoint annotations. The annotated GPS data may have come from an optimization process, or may have been manually annotated by an editor. This function returns a list of tuples where each tuple is a (latitude, longitude) pair, one for each waypoint. The latitude/longitude coordinates will be sorted by time. """ - latitude_longitude = [] + latitude_longitudes = [] + curr_annotated_array = [] + prev_time = None sorted_waypoints = list(current_waypoints.values()) # Sort waypoints by time. sorted_waypoints = sorted(sorted_waypoints, @@ -144,13 +155,19 @@ def get_annotated_gps_data(current_waypoints: dict) -> list: ecef_T_waypoint = waypoint.annotations.gps_settings.ecef_tform_waypoint llh_T_waypoint = ecef_to_llh(ecef_T_waypoint.position.x, ecef_T_waypoint.position.y, ecef_T_waypoint.position.z) - latitude_longitude.append([llh_T_waypoint.latitude, llh_T_waypoint.longitude]) + t = waypoint.annotations.creation_time.seconds + if prev_time is None or (t - prev_time) > time_threshold_seconds: + curr_annotated_array = [] + latitude_longitudes.append(curr_annotated_array) + prev_time = t + curr_annotated_array.append([llh_T_waypoint.latitude, llh_T_waypoint.longitude]) - return latitude_longitude + return latitude_longitudes -def plot_gps_web_document(raw_gps_data_array: np.array, annotated_gps_data_array: np.array): - raw_gps_center = numpy.mean(raw_gps_data_array, axis=0) +def plot_gps_web_document(raw_gps_data_arrays: list[np.array], + annotated_gps_data_arrays: list[np.array]): + raw_gps_center = numpy.mean(raw_gps_data_arrays[0], axis=0) print(f'Plotting centered at latitude/longitude {raw_gps_center}') # Create a raw HTML document with an Open Street Map inside. This uses the leaflet.js library, which @@ -192,9 +209,13 @@ def draw_polyline(latlongs: list, variable_name: str, color: tuple, doc: str) -> return doc # Draw the raw GPS data. - html_doc = draw_polyline(raw_gps_data_array, 'raw_gps', 'blue', html_doc) + for idx, raw_gps_data_array in enumerate(raw_gps_data_arrays): + html_doc = draw_polyline(numpy.array(raw_gps_data_array), f'raw_gps_{idx}', 'blue', + html_doc) # Draw the annotated gps data. - html_doc = draw_polyline(annotated_gps_data_array, 'annotated_gps', 'red', html_doc) + for idx, optimized_gps_data_array in enumerate(annotated_gps_data_arrays): + html_doc = draw_polyline(numpy.array(optimized_gps_data_array), f'optimized_gps_{idx}', + 'red', html_doc) # HTML/javascript footer. html_doc += """ @@ -249,7 +270,8 @@ def main(): # Now we will draw the GPS data. This opens a web server to an Open Street Maps page. This blocks until # KeyboardInterrupt. - plot_gps_web_document(np.array(raw_data), np.array(annotated_data)) + plot_gps_web_document([np.array(data) for data in raw_data], + [np.array(data) for data in annotated_data]) if __name__ == '__main__': diff --git a/python/examples/metrics_over_coreio/README.md b/python/examples/metrics_over_coreio/README.md index bdcd64fa2..2fe1ecca7 100644 --- a/python/examples/metrics_over_coreio/README.md +++ b/python/examples/metrics_over_coreio/README.md @@ -30,8 +30,7 @@ Development Kit License (20191101-BDSDK-SL). 2. Run ```sh -python3 ../extensions/build_extension.py --dockerfile-paths Dockerfile --build-image-tags metrics_over_coreio:arm64 --image-archive metrics_over_coreio.tar.gz --icon ./extension/icon.png --package-dir ./extension/ --spx ~/Downloads/metric_over_coreio.spx - +python3 ../extensions/build_extension.py --dockerfile-paths Dockerfile --build-image-tags metrics_over_coreio:arm64 --image-archive metrics_over_coreio.tar.gz --icon ./extension/icon.png --package-dir ./extension/ --spx metrics_over_modem.spx ``` - Note: Please see helper messages in build_extension.py to customize file paths as needed. @@ -43,7 +42,7 @@ python3 ../extensions/build_extension.py --dockerfile-paths Dockerfile --build-i At a high level, `src` contains the fundamental code to pull metrics from the robot and upload them to the bosdyn server. The root folder contains the Dockerfile and base script to generate the extension, and `extension` contains supporting files to be included directly in the spx, such as the docker compose file. -Most of the logic is contained in `src/metric_over_coreio.py`,`src/metric_over_coreio.py` and `src/metric_over_coreio.py`. In these file, we have the following classes: +Most of the logic is contained in `src/metric_file_group.py`, `src/uploader.py`, and `src/metrics_over_coreio.py`. In this file, we have the following classes: 1. `MetricFileGroup`: Manages querying and writing metric files to the core I/O file system. 2. `Uploader`: Manages uploading metrics. Sends the latest metric on the core, recieves missing metrics sequence numbers and uploads them. diff --git a/python/examples/metrics_over_coreio/extension/manifest.json b/python/examples/metrics_over_coreio/extension/manifest.json index c5bb29fdf..634157b76 100644 --- a/python/examples/metrics_over_coreio/extension/manifest.json +++ b/python/examples/metrics_over_coreio/extension/manifest.json @@ -1,5 +1,6 @@ { "description": "Upload metrics via coreio", "version": "0.1", - "images": ["metrics_over_coreio.tar.gz"] + "images": ["metrics_over_coreio.tar.gz"], + "extension_name": "metrics_over_modem" } diff --git a/python/examples/metrics_over_coreio/src/metric_file_group.py b/python/examples/metrics_over_coreio/src/metric_file_group.py index 05024ff86..367a37d91 100644 --- a/python/examples/metrics_over_coreio/src/metric_file_group.py +++ b/python/examples/metrics_over_coreio/src/metric_file_group.py @@ -64,7 +64,7 @@ def get_data(self, sequence_num: str) -> bytearray: file_content = file.read() # Check it is a real object and the right data type - if (not isinstance(file_content, bytes)) or file_content == None: + if (not isinstance(file_content, bytes)) or file_content is None: _LOGGER.error("File content is of bad type") return None @@ -109,7 +109,7 @@ def getSequenceRangeToDownload(self, sequence_range: List[int]) -> List[int]: # Get the latest sequence number on the saved to the COREIO file system latestonCore = self.get_sequence_num(True) - if latestonCore != None: + if latestonCore is not None: _LOGGER.info('Core has historical data stored. Getting the latest sequence.') latestSequenceSaved = int(latestonCore) else: diff --git a/python/examples/metrics_over_coreio/src/metrics_over_coreio.py b/python/examples/metrics_over_coreio/src/metrics_over_coreio.py index e4fa3047d..a44303f44 100644 --- a/python/examples/metrics_over_coreio/src/metrics_over_coreio.py +++ b/python/examples/metrics_over_coreio/src/metrics_over_coreio.py @@ -4,7 +4,6 @@ # is subject to the terms and conditions of the Boston Dynamics Software # Development Kit License (20191101-BDSDK-SL). -import argparse import datetime import logging import threading @@ -132,9 +131,7 @@ def saveMetrics(self): if len(signedProtoList) > 1: _LOGGER.info("ERROR: Protolist is too large.") - - # Write that that data to the core using the Metric File Group class - + # Write that data to the core using the Metric File Group class metricFileGroup.write_metric_to_core(sequenceNumber, signedProtoList[0]) # Increment our counter diff --git a/python/examples/metrics_over_coreio/src/uploader.py b/python/examples/metrics_over_coreio/src/uploader.py index 9a8fb5ff6..6078804d3 100644 --- a/python/examples/metrics_over_coreio/src/uploader.py +++ b/python/examples/metrics_over_coreio/src/uploader.py @@ -52,7 +52,7 @@ def uploadMetrics(self, core_flag: bool): """ # Check we have a passed in data path - if (self.data_path == None): + if (self.data_path is None): _LOGGER.info('Data path not correctly passed in') return False @@ -177,9 +177,9 @@ def get_numbers_within_ranges(self, ranges, end_val: int, start_val: int) -> Lis range_start = range_step.get("start") range_end = range_step.get("end") - if range_start == None: + if range_start is None: range_start = -math.inf - if range_end == None: + if range_end is None: range_end = math.inf # Next farthest start is the largest between the range start and the start of the range of our local file system diff --git a/python/examples/mission_question_answerer/mission_question_answerer.py b/python/examples/mission_question_answerer/mission_question_answerer.py index d0fd2cf2f..b1120c748 100644 --- a/python/examples/mission_question_answerer/mission_question_answerer.py +++ b/python/examples/mission_question_answerer/mission_question_answerer.py @@ -11,8 +11,8 @@ import bosdyn.client import bosdyn.client.util -from bosdyn.mission.client import MissionClient from bosdyn.api import service_customization_pb2 +from bosdyn.mission.client import MissionClient LOGGER = logging.getLogger(__name__) @@ -38,7 +38,9 @@ def monitor_loop(client, interval_seconds=1): elif question.HasField('custom_params'): custom_params = ask_user_for_custom_param_answer(question) else: - LOGGER.warning('Encountered malformed question %i. Question must suppy either an options list or custom_params spec.', question.id) + LOGGER.warning( + 'Encountered malformed question %i. Question must suppy either an options list or custom_params spec.', + question.id) continue LOGGER.info('Replying to question %i', question.id) try: @@ -64,6 +66,7 @@ def ask_user_for_options_answer(question_proto): idx = int(input(text)) - 1 return user_options[idx][1] + def ask_user_for_custom_param_answer(question_proto): """Ask the user for a custom_params DictParam response to the given Question message with a 'custom_params' spec. This example only parses BoolParam specs to support the accompanying example mission. @@ -75,7 +78,7 @@ def ask_user_for_custom_param_answer(question_proto): question_spec = question_proto.custom_params if len(question_proto.text) > 0: - print(f'{question_proto.text}\n'). + print(f'{question_proto.text}\n') for child_spec_key in question_spec.specs: child_spec = question_spec.specs[child_spec_key] spec_type = child_spec.spec.WhichOneof('spec') @@ -99,21 +102,18 @@ def ask_user_for_custom_param_answer(question_proto): LOGGER.warning(f'Spec type {spec_type} is not supported by this example client.') return result + # A helper for prompting and processing yes/no input def query_bool_yes_no(question): - valid_answers = { - "yes": True, - "y": True, - "no": False, - "n": False - } + valid_answers = {"yes": True, "y": True, "no": False, "n": False} while True: choice = input(f'{question} [y/n]\n').lower() if choice in valid_answers: return valid_answers[choice] else: print("Please respond with '[y]es' or '[n]o'.\n") - + + def main(): """Run the program.""" parser = argparse.ArgumentParser() diff --git a/python/examples/network_compute_bridge/README.md b/python/examples/network_compute_bridge/README.md index e490e2fc1..c50e087df 100644 --- a/python/examples/network_compute_bridge/README.md +++ b/python/examples/network_compute_bridge/README.md @@ -139,12 +139,17 @@ Example output: This example contains the configuration files to run the python scripts described above also in Docker containers. The docker containers accept the same arguments described above. For example, to run the server docker container and the client docker container, follow the steps below with the correct values for the <> variables: ``` +Create a .env file that specifies username and password with the following variables. +BOSDYN_CLIENT_USERNAME={username} +BOSDYN_CLIENT_PASSWORD={password} + + sudo docker build -t ncb_server -f Dockerfile.server . -sudo docker run -it --network=host --env BOSDYN_CLIENT_USERNAME --env BOSDYN_CLIENT_PASSWORD -v :/model_dir/ ncb_server --model-dir /model_dir/ +sudo docker run -it --network=host --env-file .env -v :/model_dir/ ncb_server --model-dir /model_dir/ sudo docker build -t ncb_client -f Dockerfile.client . -sudo docker run -it --network=host --env BOSDYN_CLIENT_USERNAME --env BOSDYN_CLIENT_PASSWORD ncb_client --service tensorflow-server --confidence 0.5 --model frozen_inference_graph --image-source frontleft_fisheye_image +sudo docker run -it --network=host --env-file .env ncb_client --service tensorflow-server --confidence 0.5 --model frozen_inference_graph --image-source frontleft_fisheye_image ``` When running `ncb_server` on CORE I/O, or another compute payload with GPU, pass the flag `--gpus all` to the `docker run` command to take advantage of the GPU. diff --git a/python/examples/network_compute_bridge/fire_extinguisher_server/README.md b/python/examples/network_compute_bridge/fire_extinguisher_server/README.md index b9835cc38..059f70a79 100644 --- a/python/examples/network_compute_bridge/fire_extinguisher_server/README.md +++ b/python/examples/network_compute_bridge/fire_extinguisher_server/README.md @@ -48,10 +48,14 @@ To run this example on a Spot CORE, run: ./start_server.sh ``` -Otherwise, run: +Otherwise, create a .env file that specifies username and password with the following variables. +BOSDYN_CLIENT_USERNAME={username} +BOSDYN_CLIENT_PASSWORD={password} + +Then run: ``` -sudo docker run -d --name retinanet_server --network host --env BOSDYN_CLIENT_USERNAME --env BOSDYN_CLIENT_PASSWORD --restart unless-stopped fire_ext_detector -d . --port $PORT $ROBOT_IP +sudo docker run -d --name retinanet_server --network host --env-file .env --restart unless-stopped fire_ext_detector -d . --port $PORT $ROBOT_IP ``` - `$PORT` is the port to use for the server on the machine the server is running on diff --git a/python/examples/network_compute_bridge/fire_extinguisher_server/manifest.json b/python/examples/network_compute_bridge/fire_extinguisher_server/manifest.json index f16d6f9e4..9da126bd9 100644 --- a/python/examples/network_compute_bridge/fire_extinguisher_server/manifest.json +++ b/python/examples/network_compute_bridge/fire_extinguisher_server/manifest.json @@ -2,5 +2,6 @@ "description": "Fire Extinguisher Detector", "version": "3.3.0", "icon": "icon.png", - "images": ["fire_ext_detector_image.tar.gz"] + "images": ["fire_ext_detector_image.tar.gz"], + "extension_name": "fire_extinguisher_detector" } diff --git a/python/examples/network_compute_bridge/simple_alert_server.py b/python/examples/network_compute_bridge/simple_alert_server.py index 544572eaf..9540a6288 100644 --- a/python/examples/network_compute_bridge/simple_alert_server.py +++ b/python/examples/network_compute_bridge/simple_alert_server.py @@ -46,7 +46,8 @@ def __init__(self): def WorkerCompute(self, request, context): # Create a simple response including AlertData - out_proto = network_compute_bridge_pb2.WorkerComputeResponse() + out_proto = network_compute_bridge_pb2.WorkerComputeResponse( + status=network_compute_bridge_pb2.NETWORK_COMPUTE_STATUS_SUCCESS) out_img = out_proto.output_images.get_or_create("output") # Use the input image as the output image. out_img.image_response.shot.CopyFrom(request.input_data.images[0].shot) diff --git a/python/examples/orbit/anomalies/README.md b/python/examples/orbit/anomalies/README.md new file mode 100644 index 000000000..7a2cfdf2a --- /dev/null +++ b/python/examples/orbit/anomalies/README.md @@ -0,0 +1,57 @@ + + +# Anomalies in Orbit + +This Orbit API example demonstrates how to retireve and edit anomaly data with a Boston Dynamics Orbit API client. + +## Understanding Orbit Web API + +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. + +## Setup Dependencies + +See the requirements.txt file for a list of python dependencies which can be installed with pip using the command: + +``` +python3 -m pip install -r requirements.txt +``` + +## Run the Example + +To run the example to get anomalies stored on your Orbit instance, run the following command with verify set to False. When set to False, requests will skip server's TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle. + +``` +python3 get_anomalies.py --hostname ORBIT_IP --verify False +``` + +To close multiple anomaly alerts at once obtain their elementIds from the get_anomalies.py example and use them as arguments in the following command: + +``` +python3 patch_anomalies.py --hostname ORBIT_IP --bulk-close-element-ids ELEMENT_ID_1 ELEMENT_ID_2 ELEMENT_ID_3 --verify False +``` + +To edit an anomaly alert, obtain the anomaly uuid from the get_anomalies.py example and use it as an argument in the following command, and set the status flag to **open** or **closed** and patch the anomaly: + +``` +python3 patch_anomalies.py --hostname ORBIT_IP --anomaly-uuid ANOMALY_UUID_1 --status STATUS --verify False +``` + +Command to open a specific anomaly: + +``` +python3 patch_anomalies.py --hostname ORBIT_IP --anomaly-uuid ANOMALY_UUID_1 --status open --verify False +``` + +Command to close a specific anomaly: + +``` +python3 patch_anomalies.py --hostname ORBIT_IP --anomaly-uuid ANOMALY_UUID_1 --status closed --verify False +``` + +The above command prompts you to provide the API token obtained from the Orbit admin settings page. Alternatively, you can set the environment variable `BOSDYN_ORBIT_CLIENT_API_TOKEN` to the API token obtained from Orbit admin settings page. diff --git a/python/examples/orbit/anomalies/get_anomalies.py b/python/examples/orbit/anomalies/get_anomalies.py new file mode 100644 index 000000000..d6c213c56 --- /dev/null +++ b/python/examples/orbit/anomalies/get_anomalies.py @@ -0,0 +1,94 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +"""An example script to retrieve inspection anomaly data using the Boston Dynamics Orbit API.""" + +import argparse +import json +import logging +import sys + +from bosdyn.orbit.client import create_client + +LOGGER = logging.getLogger() +LOGGER.setLevel(logging.DEBUG) +log_format = "Get Anomalies in Orbit: %(levelname)s - %(message)s" +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +ch.setFormatter(logging.Formatter(log_format)) +LOGGER.addHandler(ch) + + +def get_anomalies(options: argparse.Namespace) -> bool: + """ A simple example to show how to use the Orbit client to get existing anomaly data + + Args: + options(Namespace) : parsed args used for configuration options + Raises: + RequestExceptions: exceptions thrown by the Requests library + UnauthenticatedClientError: indicates that the orbit client is not authenticated properly + Returns: + List of dictionaries representing anomalies stored in the Orbit instance based on the request parameters + """ + + # Create Orbit client object + orbit_client = create_client(options) + + # Get the anomalies stored in the specified Orbit instance with the maximum number of returned anomalies set by the limit parameter + get_anomalies_response = orbit_client.get_anomalies(params={"limit": options.limit}) + + if not get_anomalies_response.ok: + LOGGER.error('get_anomalies() failed: {}'.format(get_anomalies_response.text)) + return False + + # Get the json form of the get_anomalies_response + anomalies_in_orbit = get_anomalies_response.json().get("resources") + + # Log the anomalies in the terminal + LOGGER.info("Here are the existing anomalies stored on the Orbit instance:") + + for anomaly in anomalies_in_orbit: + LOGGER.info('\tAnomaly title: ' + str(anomaly.get('title'))) + LOGGER.info('\t\tactionName: ' + anomaly.get('actionName')) + LOGGER.info('\t\tstatus: ' + anomaly.get('status')) + if anomaly.get('elementId') != None: + LOGGER.info('\t\telementId: ' + anomaly.get('elementId')) + LOGGER.info('\t\tuuid: ' + anomaly.get('uuid') + '\n') + + return anomalies_in_orbit + + +def main(): + """Command line interface.""" + parser = argparse.ArgumentParser() + parser.add_argument('--hostname', help='IP address associated with the Orbit instance', + required=True, type=str) + + # Field to limit the number of anomalies returned in the response + parser.add_argument( + '--limit', + help='Maximum number of anomalies to report in the response to the get anomalies request.', + required=False, type=str, default=20) + + parser.add_argument( + '--verify', + help= + 'verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate', + default=True, + ) + parser.add_argument( + '--cert', help= + "(a .pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate ", + nargs='+', default=None) + + options = parser.parse_args() + + get_anomalies(options) + + +if __name__ == '__main__': + if not main(): + sys.exit(1) diff --git a/python/examples/orbit/anomalies/patch_anomalies.py b/python/examples/orbit/anomalies/patch_anomalies.py new file mode 100644 index 000000000..01ae5dfff --- /dev/null +++ b/python/examples/orbit/anomalies/patch_anomalies.py @@ -0,0 +1,137 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +"""An example script to edit inspection anomaly data using the Boston Dynamics Orbit API""" + +import argparse +import json +import logging +import sys + +from bosdyn.orbit.client import create_client + +LOGGER = logging.getLogger() +LOGGER.setLevel(logging.DEBUG) +log_format = "Patch Anomalies in Orbit: %(levelname)s - %(message)s" +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +ch.setFormatter(logging.Formatter(log_format)) +LOGGER.addHandler(ch) + + +def bulk_close_anomalies(options: argparse.Namespace) -> bool: + """ A simple example to show how to use the Orbit client to close multiple anomalies at once + + Args: + options(Namespace) : parsed args used for configuration options + Raises: + RequestExceptions: exceptions thrown by the Requests library + UnauthenticatedClientError: indicates that the orbit client is not authenticated properly + Returns: + False if the request fails and True if the request completes successfully + """ + # Create Orbit client object + orbit_client = create_client(options) + anomaly_element_ids = options.bulk_close_element_ids + + # Make a patch request to close the anomalies on the specified Orbit instance + bulk_close_anomalies_response = orbit_client.patch_bulk_close_anomalies(anomaly_element_ids) + + if not bulk_close_anomalies_response.ok: + LOGGER.error('patch_bulk_close_anomalies() failed: {}'.format( + bulk_close_anomalies_response.text)) + return False + + LOGGER.info(bulk_close_anomalies_response.text) + + return True + + +def update_anomaly(options: argparse.Namespace) -> bool: + """ A simple example to show how to use the Orbit client to edit existing anomalies to close or open them by setting the status + + Args: + options(Namespace) : parsed args used for configuration options + Raises: + RequestExceptions: exceptions thrown by the Requests library + UnauthenticatedClientError: indicates that the orbit client is not authenticated properly + Returns: + False if the request fails and True if the request completes successfully + """ + # Create Orbit client object + orbit_client = create_client(options) + anomaly_id = options.anomaly_uuid + + # Creating dictionary to update the status field based on parsed argument 'status' set in the command line + updated_anomaly_data = {"status": options.status} + + # Make a patch request to patch the specified status field in updated_anomaly_data + update_anomaly_response = orbit_client.patch_anomaly_by_id(anomaly_id, updated_anomaly_data) + + if not update_anomaly_response.ok: + LOGGER.error('bulk_close_anomalies() failed: {}'.format(update_anomaly_response.text)) + return False + + LOGGER.info("Patched Anomaly: " + str(json.dumps(update_anomaly_response.json(), indent=4))) + + return True + + +def main(): + """Command line interface.""" + parser = argparse.ArgumentParser() + parser.add_argument('--hostname', help='IP address associated with the Orbit instance', + required=True, type=str) + + # For bulk closing multiple anomalies + parser.add_argument('--bulk-close-element-ids', + help='Element ids of the anomalies to be closed in bulk', required=False, + type=str, nargs="*", default=[]) + + # Patching a single anomaly with new status + parser.add_argument('--anomaly-uuid', help='uuid of the anomaly to change fields in', + required=False, type=str, default='') + + # For setting the status of the anomaly specified with anomaly-uuid + parser.add_argument( + '--status', + help='Value to set the specified anomaly "status" field to. Either "open" or "closed"', + required=False, type=str, default='') + + parser.add_argument( + '--verify', + help= + 'verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate', + default=True, + ) + parser.add_argument( + '--cert', help= + "(a .pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate ", + nargs='+', default=None) + options = parser.parse_args() + + # Ensure the required fields for each request are available in the parsed arguments to run each function + if options.bulk_close_element_ids != [] and (options.anomaly_uuid == '' and + options.status == ''): + bulk_close_anomalies(options) + elif options.anomaly_uuid != '' and options.status != '' and options.bulk_close_element_ids == []: + update_anomaly(options) + elif options.anomaly_uuid == '' and options.status != '' and options.bulk_close_element_ids == []: + LOGGER.error( + "Make sure to include an --anomaly-uuid argument in the terminal command for the anomaly that you would like to update." + ) + elif options.anomaly_uuid != '' and options.status == '' and options.bulk_close_element_ids == []: + LOGGER.error( + "Make sure to include a --status argument of open or closed in the terminal command.") + else: + LOGGER.error( + "Please only use arguments for the bulk close command or the update an individual anomaly command." + ) + + +if __name__ == '__main__': + if not main(): + sys.exit(1) diff --git a/python/examples/orbit/anomalies/requirements.txt b/python/examples/orbit/anomalies/requirements.txt new file mode 100644 index 000000000..621134502 --- /dev/null +++ b/python/examples/orbit/anomalies/requirements.txt @@ -0,0 +1,3 @@ +-f ../../../prebuilt +bosdyn-orbit>=4.1 +json \ No newline at end of file diff --git a/python/examples/orbit/backups/README.md b/python/examples/orbit/backups/README.md new file mode 100644 index 000000000..aff358e5a --- /dev/null +++ b/python/examples/orbit/backups/README.md @@ -0,0 +1,47 @@ + + +# Orbit Backups + +This Orbit API example demonstrates how to create, manage, and retrieve Orbit backups using the Boston Dynamics Orbit API client. + +## Understanding Orbit Web API + +To get started with the Orbit Web API, please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to set up your Python programming environment correctly. For details specific to this example, refer to the [Orbit API Docs](../../../../docs/concepts/orbit/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. + +## Setup Dependencies + +See the `requirements.txt` file for a list of Python dependencies, which can be installed using pip with the following command: + +``` +python3 -m pip install -r requirements.txt +``` + +## Run the Example + +To run the example for local development and testing, run the following command with verify set to False. When set to False, requests will skip server's TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle. + +To start a backup including missions and data captures, execute: + +``` +python3 get_backup.py --hostname ORBIT_IP --verify False --include-missions --include-captures +``` + +Note that the above backup process can take a while. For the purpose of this example, we recommend backing up missions first since it will be relatively quick by running the following command: + +``` +python3 get_backup.py --hostname ORBIT_IP --verify False --include-missions +``` + +To specify where to save the backup file, use the `--file-path` option. Otherwise, the backup file will be saved in the current directory: + +``` +python3 get_backup.py --hostname ORBIT_IP --verify False --file-path /path/to/save/backup.tar +``` + +The above command prompts you to provide the API token obtained from the Orbit admin settings page. Alternatively, you can set the environment variable `BOSDYN_ORBIT_CLIENT_API_TOKEN` to the API token obtained from Orbit admin settings page. diff --git a/python/examples/orbit/backups/get_backup.py b/python/examples/orbit/backups/get_backup.py new file mode 100644 index 000000000..aab3b6d8f --- /dev/null +++ b/python/examples/orbit/backups/get_backup.py @@ -0,0 +1,167 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +"""Tutorial to show how to use the Orbit client to create Orbit backups through the Boston Dynamics Orbit API.""" +import argparse +import datetime +import logging +import sys +import time + +from bosdyn.orbit.client import Client, create_client +from bosdyn.orbit.utils import print_json_response + +LOGGER = logging.getLogger() +LOGGER.setLevel(logging.DEBUG) +log_format = "Orbit Backups: %(levelname)s - %(message)s" +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +ch.setFormatter(logging.Formatter(log_format)) +LOGGER.addHandler(ch) + + +def start_backup(orbit_client: Client, include_missions: bool, include_captures: bool) -> str: + """ A simple example to show how to use the Orbit client to start the backup process. + + Args: + include_missions: Specifies whether to include missions and maps in the backup. + include_captures: Specifies whether to include all inspection data captures in the backup. + Returns: + String of the task ID for that backup. + """ + # Start the backup process + response = orbit_client.post_backup_task(include_missions, include_captures) + # If the response is okay, get the task ID + if print_json_response(response): + response_json = response.json() + # Get the backup task from the response to obtain the task ID + if response_json.get("data"): + backup_task = response_json.get("data") + task_id = backup_task.get("taskId") + return task_id + else: + LOGGER.error("No backup task found in the response!") + return None + + +def get_backup_task_status(orbit_client: Client, task_id: str) -> tuple[str, str]: + """Retrieves the backup status including errors for a given task ID. + + Args: + task_id (str): The ID of the task. + Returns: + tuple: A tuple containing the status and errors. The status represents the backup status, and the errors represent any errors encountered during the backup process. + """ + response = orbit_client.get_backup_task(task_id) + # If the response is okay, get the task status and errors + if print_json_response(response): + response_json = response.json() + status = response_json.get("status") + errors = response_json.get("error") + return status, errors + return None, None + + +def download_backup_file(orbit_client: Client, task_id: str, file_path: str): + """ Retrieves a backup file for a given task ID and saves it to the specified file path. + + Args: + task_id (str): The ID of the task for which the backup file is requested. + file_path (str): The path where the backup file will be saved. + """ + response = orbit_client.get_backup(task_id) + # If the response is okay, get the backup file + if response.ok: + with open(file_path, 'wb') as file: + file.write(response.content) + LOGGER.info(f"Full backup content saved to {file_path}") + + +def delete_backup(orbit_client: Client, task_id: str): + """Deletes a backup with the specified task ID. + + Args: + task_id (str): The ID of the backup task to delete. + """ + response = orbit_client.delete_backup(task_id) + print_json_response(response) + + +def get_backup(orbit_client: Client, file_path: str, include_missions: bool, + include_captures: bool): + """Initiates the backup process and downloads the backup file. + + Args: + file_path: The path where the backup file will be saved. + include_missions: Flag indicating whether to include missions in the backup. + include_captures: Flag indicating whether to include captures in the backup. + Returns: + bool: True if the backup process is completed successfully, False otherwise. + """ + + # Start the backup process + task_id = start_backup(orbit_client=orbit_client, include_missions=include_missions, + include_captures=include_captures) + # If the task ID is not None, keep checking the status until the backup is completed + if task_id: + status, errors = get_backup_task_status(orbit_client=orbit_client, task_id=task_id) + # Keep getting the status until there are errors or it is completed + while status not in ["Completed", "Cancelled"] and not errors: + status, errors = get_backup_task_status(orbit_client=orbit_client, task_id=task_id) + # If the status is completed, download the backup file + time.sleep(10) + if status == "Completed": + download_backup_file(orbit_client=orbit_client, task_id=task_id, file_path=file_path) + return True + else: + LOGGER.error("Unable to start backup") + return False + + +def main(): + """Command line interface.""" + parser = argparse.ArgumentParser() + parser.add_argument('--hostname', help='IP address associated with the Orbit instance', + required=True, type=str) + parser.add_argument( + '--verify', + help= + 'verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate', + default=False, + ) + parser.add_argument( + '--cert', help= + "(a .pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate ", + nargs='+', default=None) + parser.add_argument('--file-path', + help='Full path to where the tar file should be saved on your disk.', + default=None, required=False, type=str) + parser.add_argument('--include-missions', + help='Specifies whether to include missions and maps in the backup.', + action='store_true') + parser.add_argument( + '--include-captures', + help='Specifies whether to include all inspection data captures in the backup.', + action='store_true') + options = parser.parse_args() + file_path = options.file_path + # If a file path was not provided the backup will be in the current directory with a file named by the date + if not file_path: + currTime = datetime.datetime.now() + formatted_date = currTime.strftime('%m_%d_%Y_%H_%M') + file_path = f'backup_from_{formatted_date}.tar' + + # Create an orbit client + orbit_client = create_client(options) + + # Start the backup process + get_backup(orbit_client=orbit_client, file_path=file_path, + include_missions=options.include_missions, include_captures=options.include_captures) + + +if __name__ == '__main__': + if not main(): + sys.exit(1) diff --git a/python/examples/orbit/backups/requirements.txt b/python/examples/orbit/backups/requirements.txt new file mode 100644 index 000000000..78cc74920 --- /dev/null +++ b/python/examples/orbit/backups/requirements.txt @@ -0,0 +1,2 @@ +-f ../../../prebuilt +bosdyn-orbit>=4.1 \ No newline at end of file diff --git a/python/examples/orbit/export_run_archives/README.md b/python/examples/orbit/export_run_archives/README.md index 8d6f42116..cbb73b71d 100644 --- a/python/examples/orbit/export_run_archives/README.md +++ b/python/examples/orbit/export_run_archives/README.md @@ -12,7 +12,7 @@ This example program is the introductory programming example for the Orbit clien ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/export_site_walk_archives/README.md b/python/examples/orbit/export_site_walk_archives/README.md new file mode 100644 index 000000000..ba888afe6 --- /dev/null +++ b/python/examples/orbit/export_site_walk_archives/README.md @@ -0,0 +1,37 @@ + + +# Export Sitewalk Archives - Mission Data + +A SiteWalk describes a series of tasks that define autonomous robot operation. It contains SiteElements and SiteDocks together with other parameters that define autonomous operation. + +This example program is the introductory programming example for the Orbit client, which uses the Orbit web API. It demonstrates how to initialize the Orbit client, authenticate with an API token, and finally export SiteWalk archives from Orbit. + +A SiteWalk archive contains a compressed filepath to an Autowalk .walk folder that contains edge_snapshots, waypoint_snapshots, missions, and a graph. + +## Understanding Orbit Web API + +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. + +## Setup Dependencies + +See the requirements.txt file for a list of python dependencies which can be installed with pip using the command: + +``` +python3 -m pip install -r requirements.txt +``` + +## Run the Example + +To run the example for local development and testing, run the following command with verify set to False. When set to False, requests will skip server's TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle. + +``` +python3 export_site_walk_archive.py --hostname ORBIT_IP --verify False +``` + +The above command prompts you to provide the API token obtained from the Orbit admin settings page. Alternatively, you can set the environment variable `BOSDYN_ORBIT_CLIENT_API_TOKEN` to the API token obtained from Orbit admin settings page. diff --git a/python/examples/orbit/export_site_walk_archives/export_site_walk_archive.py b/python/examples/orbit/export_site_walk_archives/export_site_walk_archive.py new file mode 100644 index 000000000..c436eb5a3 --- /dev/null +++ b/python/examples/orbit/export_site_walk_archives/export_site_walk_archive.py @@ -0,0 +1,175 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +""" +An example to show how to export SiteWalk archives from Orbit to the ./temp folder in the current directory +""" + +import argparse +import logging +import os +import sys + +from bosdyn.orbit.client import create_client + +LOGGER = logging.getLogger() +LOGGER.setLevel(logging.DEBUG) +log_format = "Export SiteWalk Archives: %(levelname)s - %(message)s" +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +ch.setFormatter(logging.Formatter(log_format)) +LOGGER.addHandler(ch) + +DOWNLOAD_ALL_CMD = 'all' + + +def export_site_walk_archive(options: argparse.Namespace) -> bool: + """ A simple example to show how to use the Orbit client to export SiteWalk archives + which represent a collection of graph and mission data from Orbit. + + Args: + options(Namespace) : parsed args used for configuration options + Raises: + RequestExceptions: exceptions thrown by the Requests library + UnauthenticatedClientError: indicates that the orbit client is not authenticated properly + Returns + Boolean to indicate whether the function succeeded or not + """ + + # Create Orbit client object + orbit_client = create_client(options) + + # Retrieve a collection of all SiteWalks stored on Orbit + get_site_walks_response = orbit_client.get_site_walks() + + # Check that the get_site_walks_archive_response is valid + if not get_site_walks_response.ok: + LOGGER.error( + "Access error to site_walks/archive endpoint. Please make sure you are using an admin account!" + + get_site_walks_response.reason) + return False + + # Obtain the json form of the response + site_walks_json = get_site_walks_response.json() + + # Create a temp directory to store the SiteWalk Archives + if not (os.path.exists('temp')): + os.makedirs('temp') + + LOGGER.info( + "There are {} site_walks available to export SiteWalk archives in the form of ZIP:\n". + format(len(site_walks_json))) + + # Display the SiteWalks available to download + available_site_walks = [] + + for site_walk in site_walks_json: + print(str(site_walks_json.index(site_walk) + 1) + ". " + str(site_walk['name'])) + + # Store the name and uuid of each SiteWalk in a list of available SiteWalks to download + available_site_walks.append({"name": site_walk['name'], "uuid": site_walk['uuid']}) + + valid_selection = False + site_walk_selected_indices = '' + + while not valid_selection: + # Prompt the user to select a SiteWalk by index or backup all SiteWalks with DOWNLOAD_ALL_CMD + site_walk_selected_indices = input( + f"\nSelect SiteWalks to export archives by providing the associated index. For exporting multiple indices, please list them in a comma-separated format. If the indices are 1, 2, 3, and 4, you should enter them as 1, 2, 3, 4. To export all indices, simply type 'all'. \n> " + ) + + # If user types DOWNLOAD_ALL_CMD create a list including all of the indices of available SiteWalks + if site_walk_selected_indices.lower() == DOWNLOAD_ALL_CMD: + site_walk_selected_indices = range(len(available_site_walks) - 1) + valid_selection = True + # Parse comma separated indices user input + else: + try: + # Try separating the user input selected indices of SiteWalks by comma + site_walk_selected_indices = site_walk_selected_indices.split(',') + valid_selection = True + + for i in range(len(site_walk_selected_indices)): + site_walk_selected_indices[i] = int(site_walk_selected_indices[i]) + + # Check if all selected indices are in the range of ite Walk incides listed from above + if site_walk_selected_indices[i] > len( + available_site_walks) + 1 or site_walk_selected_indices[i] < 0: + invalid_index = site_walk_selected_indices[i] + LOGGER.error( + f"Invalid Index Selection - Index {invalid_index} is out of range of available SiteWalk indices listed above. Please type a valid selection of SiteWalk indices from the list above or type {DOWNLOAD_ALL_CMD}" + ) + valid_selection = False + break + + except: + LOGGER.error( + f"Please type a valid selection of SiteWalk indices from the list above or type {DOWNLOAD_ALL_CMD}" + ) + valid_selection = False + + # Create a list of selected SiteWalks after parsing user input + selected_site_walks = [] + + for selected_index in site_walk_selected_indices: + if selected_index < len(available_site_walks) + 1 and selected_index > 0: + selected_site_walks.append(available_site_walks[selected_index - 1]) + + # Download the SiteWalks archives to the ./temp folder + for site_walk in selected_site_walks: + # Get the SiteWalk Archive using it's uuid + get_site_walk_archive_by_id_response = orbit_client.get_site_walk_archive_by_id( + site_walk['uuid']) + + # Check that the get_site_walk_archive_by_id_response is valid + if not get_site_walk_archive_by_id_response.ok: + LOGGER.error("Get SiteWalks archives response error " + + get_site_walk_archive_by_id_response.reason) + return False + + # Obtain the content field containing the zip file + site_walk_archive_zip_file = get_site_walk_archive_by_id_response.content + + # Set the file name to the SiteWalk name to be downloaded + site_walk_name = site_walk['name'] + + file_name = f'temp/{site_walk_name}.walk.zip' + + # Write the site_walk_archive_zip_file to file_name + file = open(file_name, "wb") + file.write(site_walk_archive_zip_file) + file.close() + LOGGER.info("Downloaded: " + file_name) + + return True + + +def main(): + """Command line interface.""" + parser = argparse.ArgumentParser() + parser.add_argument('--hostname', help='IP address associated with the Orbit instance', + required=True, type=str) + + parser.add_argument( + '--verify', + help= + 'verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate', + default=True, + ) + + parser.add_argument( + '--cert', help= + "(a .pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate ", + nargs='+', default=None) + + options = parser.parse_args() + + export_site_walk_archive(options) + + +if __name__ == '__main__': + if not main(): + sys.exit(1) diff --git a/python/examples/orbit/export_site_walk_archives/requirements.txt b/python/examples/orbit/export_site_walk_archives/requirements.txt new file mode 100644 index 000000000..78cc74920 --- /dev/null +++ b/python/examples/orbit/export_site_walk_archives/requirements.txt @@ -0,0 +1,2 @@ +-f ../../../prebuilt +bosdyn-orbit>=4.1 \ No newline at end of file diff --git a/python/examples/orbit/hello_orbit/README.md b/python/examples/orbit/hello_orbit/README.md index 829861c35..e8bc96c04 100644 --- a/python/examples/orbit/hello_orbit/README.md +++ b/python/examples/orbit/hello_orbit/README.md @@ -12,7 +12,7 @@ This example program is the introductory programming example for the Orbit clien ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/runs_response/README.md b/python/examples/orbit/runs_response/README.md index 06d7db09b..4b9ca5418 100644 --- a/python/examples/orbit/runs_response/README.md +++ b/python/examples/orbit/runs_response/README.md @@ -12,7 +12,7 @@ This example program is the introductory programming example for the Orbit clien ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/schedule_mission/README.md b/python/examples/orbit/schedule_mission/README.md index 4ceb1a1b9..ed2f9220f 100644 --- a/python/examples/orbit/schedule_mission/README.md +++ b/python/examples/orbit/schedule_mission/README.md @@ -12,7 +12,7 @@ This tutorial is a programming example for the Orbit client, which uses the Orbi ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Additional useful information can be found in [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Additional useful information can be found in [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/send_robot_back_to_dock/README.md b/python/examples/orbit/send_robot_back_to_dock/README.md index 5aa080637..17dac2a49 100644 --- a/python/examples/orbit/send_robot_back_to_dock/README.md +++ b/python/examples/orbit/send_robot_back_to_dock/README.md @@ -16,7 +16,7 @@ This example program is the introductory programming example for the Orbit clien ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/send_robot_back_to_dock/send_robot_back_to_dock.py b/python/examples/orbit/send_robot_back_to_dock/send_robot_back_to_dock.py index 7dad52eae..a77179ed0 100644 --- a/python/examples/orbit/send_robot_back_to_dock/send_robot_back_to_dock.py +++ b/python/examples/orbit/send_robot_back_to_dock/send_robot_back_to_dock.py @@ -140,7 +140,8 @@ def send_robot_back_to_dock(options: argparse.Namespace): skip_initialization = True # whether to skip initialization when starting the return to dock mission dispatch_response = client.post_dispatch_mission_to_robot(selected_nickname, current_driver_id, mission_uuid, delete_mission, - force_acquire_estop) + force_acquire_estop, + skip_initialization) return dispatch_response.ok diff --git a/python/examples/orbit/toggle_mission_based_on_weather/README.md b/python/examples/orbit/toggle_mission_based_on_weather/README.md index 796481399..b1e6e3d5b 100644 --- a/python/examples/orbit/toggle_mission_based_on_weather/README.md +++ b/python/examples/orbit/toggle_mission_based_on_weather/README.md @@ -12,7 +12,7 @@ This example program is the introductory programming example for the Orbit clien ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/webhook/README.md b/python/examples/orbit/webhook/README.md index 5429191f9..f9095f9bb 100644 --- a/python/examples/orbit/webhook/README.md +++ b/python/examples/orbit/webhook/README.md @@ -14,7 +14,7 @@ This example program is the introductory programming example for using the webho ## Understanding Orbit Web API -Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/orbit_api.md). For a complete list of resources and their methods, see the Orbit API Reference. ## Setup Dependencies diff --git a/python/examples/orbit/webhook_integration/Dockerfile b/python/examples/orbit/webhook_integration/Dockerfile new file mode 100644 index 000000000..cab641f09 --- /dev/null +++ b/python/examples/orbit/webhook_integration/Dockerfile @@ -0,0 +1,32 @@ +# Import the base environments +# Use an official Python runtime as a parent image +FROM python:3.10-slim + +# Install necessary packages for your application (if any) +# rm -rf /var/lib/apt/lists/* cleans up the list of available packages to reduce the image size for a faster upload +# Please use the below line as a template for future installations +RUN apt-get update && apt-get install -y \ + && rm -rf /var/lib/apt/lists/* + +# Set the working directory in the container +WORKDIR /app + +# Copy the requirements and wheels for installation. +COPY docker-requirements.txt . + +# Install requirements from docker-requirements.txt +RUN python3 -m pip install -r docker-requirements.txt + +# Copy the script. +COPY webhook_integration.py /app/ + +# Copy the rest of your application into the container +COPY extension/.env /app/extension/ + +# Make port 21800 available to the world outside this container +EXPOSE 21800 + +# Add entrypoints +ENTRYPOINT ["python3", "webhook_integration.py"] +CMD ["--hostname", "172.17.0.1", "--verify", "False", "--webhook-host", "172.17.0.1", "--webhook-port", "21800"] + diff --git a/python/examples/orbit/webhook_integration/README.md b/python/examples/orbit/webhook_integration/README.md new file mode 100644 index 000000000..a7480ab99 --- /dev/null +++ b/python/examples/orbit/webhook_integration/README.md @@ -0,0 +1,90 @@ + + +# Webhook Integrations + +## Getting Started + +Please begin with the [Quickstart Guide](../../../../docs/python/quickstart.md) to get your Python programming environment set up properly. Then, specifically for this example, look at the [Orbit API Docs](../../../../docs/concepts/orbit/about_orbit.md). For a complete list of resources and their methods, see the Orbit API Reference. + +# Example Overview + +In case you missed it in our quickstart guide, a webhook is a mechanism or method of communication used in web development and API integration. It allows one application or service to automatically send data to another application or service when specific events occur, rather than requiring continuous polling for updates. + +This example program builds upon the "hello_webhook.py" introductory programming example under the webhook folder. +"hello_webhook.py" shows how to use webhooks as part of the Orbit client, which uses the Orbit web API. It demonstrates how to initialize the Orbit client, authenticate with an API token, and create, update, list, and delete webhooks instance. + +This example takes this one step further to provide an example to create a docker image of this a webhook listener, listen for webhooks, perform some data manipulation and send it on to a further backend system. + +## Setup Dependencies + +See the requirements.txt file for a list of Python dependencies which can be installed with pip using the command: + +``` +python3 -m pip install -r docker-requirements.txt + +``` + +## Key Vocabulary + +**API Token:** Orbit API token. This is created in the API token sub section of the settings menu. This acts as the method of authentication with Orbit. +**Webhook Secret:** Secret associated with the webhook endpoint. Security feature sent along with the inspection webhook to ensure the data is coming from the correct source. +**Webhook URL:** Listener URL the webhook JSON will be sent to. +**Webhook Port:** Port where the webhook listener will be listening at. +**Hostname:** Orbit IP or Hostname. +**Backend or Integration URL:** May be the same as the webhook URL. This is the ultimate endpoint the listener will send the finally JSON data package to. + +## Run the Example Locally + +To run the example for local development and testing, run the following command from the project directory with verify set to False. When set to False, requests will skip server's TLS certificate verifications which will make your application vulnerable. For production software, we recommend you set verify to True or a path to CA bundle. + +``` +python3 webhook_integration.py --hostname "YOUR_ORBIT_IP" --verify False --webhook-host "YOUR_COMPUTER'S IP" --webhook-port 5000 +``` + +## Run the Example On Sitehub-Hosted Orbit + +Step 1: Set Environment Variables & Create Webhooks + +There are a few environment variables that need to be set in order to properly host the extension on your Orbit instance. The main two that are required to start are + +**.env** + +1. Integration URL: URL of the integration server to send the webhook data +2. API Key: API Key created within the Orbit instance. This can be found in the settings menu and should be copied over upon creation. +3. Webhook Secret: This can be grabbed after the first time the extension is ran and it builds the webhook or configured ahead of time after building a webhook to send to url http://0.0.0.0:21600. + +**Dockerfile** + +1. Desired Port: Desired port to host on within Orbit's supported range. This needs to be updated in the Dockerfile and docker-compose. By default this is set to 21800. + +## Run the Example On Cloud Orbit + +To run on a cloud instance, the docker container will need to be hosted within the cloud service or on a local device. Please reach out to support@bostondynamics.com for further questions regarding hosting cloud base extensions. + +### Allowed Port Ranges + +The following port ranges are what are reserved for extension hosting on Spot. The extension is preconfigured to use port '21600' but this is not required. If changing this, be sure to update with the DockerFile. + +TCP: 21000-22000 (except 21443 on CORE I/O which is reserved for an internal use case) +UDP: 21000-22000 + +Step 2: Build the Extension - we recommend utilizing the build extension helper function in the Spot Python Examples library + +``` +python3 ../../extensions/build_extension.py --amd64 --dockerfile-paths Dockerfile --build-image-tags webhook_integration:latest --image-archive webhook_integration.tar.gz --icon ./extension/image.png --package-dir ./extension/ --spx ./webhook_integration.spx +``` + +Step 3. Check integration fields and networking + +1. Ensure all actions desired for integration have Asset IDs, metadata for fields or other connecting variables between desired systems. +2. Ensure Orbit IP and port will be able to reach Integration URL. This often requires firewall rules put in place. + +Step 4. Load Extension + +Load extension to Orbit through the extensions webpage. Ensure no errors are within the logging page and verify it is working utilizing the test payload functionality in the webhook page found in settings. diff --git a/python/examples/orbit/webhook_integration/docker-requirements.txt b/python/examples/orbit/webhook_integration/docker-requirements.txt new file mode 100644 index 000000000..0b278538f --- /dev/null +++ b/python/examples/orbit/webhook_integration/docker-requirements.txt @@ -0,0 +1,36 @@ +blinker==1.8.2 + # via flask +bosdyn-orbit==4.0.2 + # via -r requirements.txt +certifi==2024.7.4 + # via requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via flask +deprecated==1.2.14 + # via bosdyn-orbit +flask==3.0.3 + # via -r requirements.txt +idna==3.7 + # via requests +itsdangerous==2.2.0 + # via flask +jinja2==3.1.4 + # via flask +markupsafe==2.1.5 + # via + # jinja2 + # werkzeug +python-dotenv==1.0.1 + # via -r requirements.txt +requests==2.32.3 + # via + # -r requirements.txt + # bosdyn-orbit +urllib3==2.2.2 + # via requests +werkzeug==3.0.3 + # via flask +wrapt==1.16.0 + # via deprecated diff --git a/python/examples/orbit/webhook_integration/extension/.env b/python/examples/orbit/webhook_integration/extension/.env new file mode 100644 index 000000000..0cd17e873 --- /dev/null +++ b/python/examples/orbit/webhook_integration/extension/.env @@ -0,0 +1,4 @@ +# .env file content +SECRET = 'YOUR_SECRET' +API_TOKEN = 'YOUR_API_TOKEN' +BACKEND_URL = 'YOUR_BACKEND_URL' \ No newline at end of file diff --git a/python/examples/orbit/webhook_integration/extension/docker-compose.yml b/python/examples/orbit/webhook_integration/extension/docker-compose.yml new file mode 100644 index 000000000..66e6cf8b6 --- /dev/null +++ b/python/examples/orbit/webhook_integration/extension/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3.8" +services: + web_hook_integration: + image: webhook_integration:latest + network_mode: host + restart: unless-stopped + ports: + - "21800:21800" diff --git a/python/examples/orbit/webhook_integration/extension/icon.png b/python/examples/orbit/webhook_integration/extension/icon.png new file mode 100644 index 000000000..23ce4e755 Binary files /dev/null and b/python/examples/orbit/webhook_integration/extension/icon.png differ diff --git a/python/examples/orbit/webhook_integration/extension/manifest.json b/python/examples/orbit/webhook_integration/extension/manifest.json new file mode 100644 index 000000000..6a422675d --- /dev/null +++ b/python/examples/orbit/webhook_integration/extension/manifest.json @@ -0,0 +1,6 @@ +{ + "description": "Webhooks with backend integration", + "version": "0.1", + "images": ["webhook_integration.tar.gz"], + "extension_name": "Webhook_listener_for_data_integration" +} diff --git a/python/examples/orbit/webhook_integration/requirements.txt b/python/examples/orbit/webhook_integration/requirements.txt new file mode 100644 index 000000000..0237a9321 --- /dev/null +++ b/python/examples/orbit/webhook_integration/requirements.txt @@ -0,0 +1,5 @@ +-f ../../../prebuilt +bosdyn-orbit >= 4.0 +requests +flask +python-dotenv \ No newline at end of file diff --git a/python/examples/orbit/webhook_integration/webhook_integration.py b/python/examples/orbit/webhook_integration/webhook_integration.py new file mode 100644 index 000000000..7b8026f4d --- /dev/null +++ b/python/examples/orbit/webhook_integration/webhook_integration.py @@ -0,0 +1,271 @@ +# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. +# +# Downloading, reproducing, distributing or otherwise using the SDK Software +# is subject to the terms and conditions of the Boston Dynamics Software +# Development Kit License (20191101-BDSDK-SL). + +""" +An example to show how to utilize webhooks, host a listener on orbit and integrate this data with another system. +""" + +import argparse +import base64 +import logging +import os +import sys + +import requests +from dotenv import load_dotenv +from flask import Flask, jsonify, request +from requests import Response + +from bosdyn.orbit.client import Client +from bosdyn.orbit.exceptions import WebhookSignatureVerificationError +from bosdyn.orbit.utils import validate_webhook_payload + +LOGGER = logging.getLogger() +LOGGER.setLevel(logging.DEBUG) +log_format = "webhook: %(levelname)s - %(message)s\n" +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +ch.setFormatter(logging.Formatter(log_format)) +LOGGER.addHandler(ch) + +env_file = '../app/extension/.env' # for docker + +# Load environment variables from .env file +load_dotenv(env_file) +# Constants +SECRET = os.getenv("SECRET") +API_TOKEN = os.getenv("API_TOKEN") +BACKEND_URL = os.getenv("BACKEND_URL") + +# Global variables +app = Flask(__name__) + + +class WebhookManager: + + def __init__(self, client, webhook_host, webhook_port, hostname): + """ + Initialization method that sets up our webhook integrator object. + + Args: + webhook_host: IP that the webhook listener will be hosted at + webhook_port: Port that the webhook listener will be hosted at + client: Instantiated Orbit Client + hostname: IP of the Orbit instance this integration will be connecting to + """ + self.webhook_host = webhook_host + self.webhook_port = webhook_port + self.client = client + self.hostname = hostname + + def run_listener(self): + """ + Start our webhook listener / server + """ + LOGGER.info("Running Server...") + app.run(host=self.webhook_host, port=self.webhook_port, debug=True) + + @app.route('/', methods=['GET', 'POST']) + def webhook_listener(self) -> Response: + """Listens to incoming webhook requests from Orbit and processes them depending on the payload type. + + Returns: + A tuple containing a response message and an HTTP status code. + """ + # Get the JSON data from the incoming webhook + data = request.json + + # If the request does not contain valid JSON data, return a 400 Bad Request + if data is None: + return jsonify({"error": "Invalid JSON data"}), 400 + # If the 'type' field is missing in the JSON data, return a 400 Bad Request + if 'type' not in data: + return jsonify({"error": "Missing 'type' field in JSON data"}), 400 + + # Check if the incoming data contains a message specific to payload types + if data['type'] == "ACTION_COMPLETED" or data['type'] == "ACTION_COMPLETED_WITH_ALERT": + LOGGER.info("ACTION_COMPLETED:") + for capture in data['data']['dataCaptures']: + key_results = capture['keyResults'] + + # Form our image URL request + https = 'https://' + image_path = capture['dataUrl'] + image_url = https + self.orbit_hostname + image_path + + # Grab image - method returns type: urllib3.response.HTTPResponse + image = client.get_image(image_url) + + # Send image and check for errors + if image.status == 200: + LOGGER.info("Image Response was 200... Retrieving info.") + # Encode HTTP response - you could alternatively just include the imageURL for later reference + encoded_image = base64.b64encode(image.data).decode() + capture['inspection_image'] = encoded_image + LOGGER.info("Image Embedded.") + else: + LOGGER.info("Image response was not 200.") + if key_results != None: + LOGGER.info("~~~~~~ Key Results ~~~~~~") + LOGGER.info(key_results) + self.send_to_backend_service(data) + + elif data['type'] == "ACTION_COMPLETED_WITH_ALERT": + # Do something different if it alerted instead + message = data['data'] + LOGGER.info("ACTION_COMPETED_WITH_ALERT: ", message) + + elif data['type'] == "TEST": + message = data['data'] + LOGGER.info("TEST: ") + LOGGER.info(message) + + else: + # If the 'type' field is not recognized, return a 400 Bad Request + return jsonify({"error": "Unrecognized payload type"}), 400 + + # Validate the webhook payload. + + # First get the Orbit signature for one part of the handshake + try: + signature = request.headers['Orbit-Signature'] + except Exception as e: + LOGGER.exception(f'Not from an Orbit instance: {e}') + return 'OK', 200 + + LOGGER.info(f"Signature: {signature} \n Secret:{SECRET}") + + # Validate with the other half of the handshake we have preset from Orbit when making our Webhook + try: + validate_webhook_payload(data, signature, SECRET) + except WebhookSignatureVerificationError as e: + LOGGER.exception(f'Webhook signature verification failed with the following error') + return jsonify({"error": "Invalid webhook signature"}), 400 + except Exception as e: + LOGGER.exception(f'Got at error while attempting to validate the webhook signature') + return jsonify( + {"error": "Unexpected error while attempting to validate webhook signature"}), 500 + + return 'OK', 200 + + def send_to_backend_service(self, inspection_data): + """Takes in the build JSON inspection data payload and forwards on using a REST API call. + + Args: + inspection_data(JSON) : build JSON with data to be forwarded to the backend system + + """ + # Basic Authentication Credentials + username = 'your_username' + password = 'your_password' + + # Set 'Content-Type' + headers = {'Content-Type': 'application/json'} + + LOGGER.info(f'Sending inspection data {inspection_data}') + + # Making a POST request to the webhook with basic authentication + response = requests.post(BACKEND_URL, json=inspection_data, headers=headers) + + # Check for HTTP codes other than 200 (HTTP_OK) + if response.status_code == 200: + print('Success!') + LOGGER.info(f'Successfull sent with status code {response.status_code}') + else: + print('Failed to call webhook with status code:', response.status_code) + LOGGER.info(f'Failed to call webhook with status code:{response.status_code}') + print('Response:', response.text) + + def create_webhook(self, options) -> bool: + """A simple example to show how to use Orbit client to fetch list, create, update, and delete webhook instance on Orbit. + This example also shows how to start the webhook listener given a webhook host IP and port number. + + Args: + options(Namespace) : parsed args used for webhook configuration options + Returns: + Boolean to indicate whether the function succeeded or not + """ + + # Example: Fetching the list of existing webhook instances + get_webhook_response = self.client.get_webhook() + webhook_urls = [item['url'] for item in get_webhook_response.json()] + if not get_webhook_response.ok: + LOGGER.error('get_webhook() failed: {}'.format(get_webhook_response.text)) + return False + LOGGER.info("Current list of registered webhook instances: {}".format( + get_webhook_response.json())) + + # Example: Creating new webhook instance, if not already existent + webhook_url = "http://" + self.webhook_host + ":" + str(self.webhook_port) + webhook_request = { + "url": webhook_url, + "enabled": options.enabled, + "validateTlsCert": options.validate_TLS_cert, + "events": options.payload_types, + "secret": SECRET + } + if webhook_url in webhook_urls: + LOGGER.error('duplicate webhook url: {} already exists'.format(webhook_url)) + else: + post_webhook_response = client.post_webhook(json=webhook_request) + if not post_webhook_response.ok: + LOGGER.error('post_webhook() failed: {}'.format(post_webhook_response.text)) + else: + webhook_uuid = post_webhook_response.json()['uuid'] + return webhook_uuid, webhook_request + + +def main(): + """Command line interface.""" + parser = argparse.ArgumentParser() + parser.add_argument('--hostname', help='IP address associated with the Orbit instance', + required=True, type=str) + parser.add_argument('--webhook-host', help='the http host address for the webhook listener', + required=False, default='0.0.0.0', type=str) + parser.add_argument('--webhook-port', help='the port for hosting the webhook listener', + required=False, default='8080', type=str) + parser.add_argument('--payload-types', help='types of events to trigger webhook', + required=False, default=["ACTION_COMPLETED", + "ACTION_COMPLETED_WITH_ALERT"], type=list) + parser.add_argument('--enabled', help='whether webhook is enabled / disabled', required=False, + default='True', type=bool) + parser.add_argument('--validate-TLS-cert', required=False, default='True', type=bool) + parser.add_argument( + '--verify', + help= + 'verify(path to a CA bundle or Boolean): controls whether we verify the server’s TLS certificate', + default=True, + ) + parser.add_argument( + '--cert', help= + "(a .pem file or a tuple with ('cert', 'key') pair): a local cert to use as client side certificate ", + nargs='+', default=None) + options = parser.parse_args() + + global client + # Determine the value for the argument "verify" + if options.verify in ["True", "False"]: + verify = options.verify == "True" + else: + print( + "The provided value for the argument verify [%s] is not either 'True' or 'False'. Assuming verify is set to 'path/to/CA bundle'" + .format(options.verify)) + verify = options.verify + + # A client object represents a single instance. + client = Client(hostname=options.hostname, verify=verify, cert=options.cert) + client.authenticate_with_api_token(API_TOKEN) + + webhook_manager = WebhookManager(client, webhook_host=options.webhook_host, + webhook_port=int(options.webhook_port), + hostname=options.hostname) + webhook_manager.create_webhook(options) + webhook_manager.run_listener() + + +if __name__ == '__main__': + if not main(): + sys.exit(1) diff --git a/python/examples/post_docking_callbacks/manifest.json b/python/examples/post_docking_callbacks/manifest.json index c81e2abf4..8757f4548 100644 --- a/python/examples/post_docking_callbacks/manifest.json +++ b/python/examples/post_docking_callbacks/manifest.json @@ -2,5 +2,6 @@ "description": "Post Docking S3 Upload Callback", "version": "3.2.0", "icon": "icon.png", - "images": ["aws_docking_callback_arm64.tar.gz"] + "images": ["aws_docking_callback_arm64.tar.gz"], + "extension_name": "aws_docking_callback" } diff --git a/python/examples/remote_mission_service/README.md b/python/examples/remote_mission_service/README.md index 277388479..da262cb1b 100644 --- a/python/examples/remote_mission_service/README.md +++ b/python/examples/remote_mission_service/README.md @@ -75,10 +75,10 @@ The server will print out "Hello Spot!" instead of "Hello World!" ### Running with a robot -There is another example servicer that will power the robot down safely. To run this example, you will need a connection between a robot and the computer running the examples. +There is another example servicer that will command the robot to perform preset stand in-place movements for a duration. To run this example, you will need a connection between a robot and the computer running the examples. ``` -python3 power_off_mission_service.py ROBOT_IP --port {PORT} --host-ip {ENDPOINT_IP} +python3 robot_command_mission_service.py {ROBOT_IP} --port {PORT} --host-ip {ENDPOINT_IP} ``` A port number for the service can be specified using the --port argument. It is possible to bypass the port argument and allow a random port number to be selected, but it is discouraged since restarts may result in unexpected changes to a services listening port. This port number will be used with the host-ip ("ENDPOINT_IP") to fully specify where the service is running. The port must be open and cannot be blocked by a local firewall. If the port is blocked, the service will be unreachable from the robot and the directory registration service. @@ -94,22 +94,16 @@ The other IP address is the traditional robot hostname ("ROBOT_IP") argument, wh Now if you run the example client with: ``` -python3 remote_mission_client.py --power-off robot ROBOT_IP +python3 remote_mission_client.py --robot-command robot {ROBOT_IP} ``` -The robot should shut down and you will see this output from the client: +The robot should perform the "wiggle" movement and you will see this output from the client: ``` Servicer stopped with status STATUS_SUCCESS ``` -To see the servicer actually power the robot off, you will have to perform the following steps: - -1. Use the wasd example to power the robot on and stand it up. -2. Return wasd's lease with the [l] key. -3. Run the client. - -You must run the client within 3 seconds of returning wasd's lease, otherwise the normal comms loss policy will kick in. To avoid Lease errors when triggering the callback via the tablet, select the "3rd Party" option before confirming the action. +To avoid lease errors when triggering the callback via the tablet, select the `Robot Body Control` -> `No Control` option before confirming the action. ### Incorporating Service Customization diff --git a/python/examples/remote_mission_service/hello_world_mission_service.py b/python/examples/remote_mission_service/hello_world_mission_service.py index 52e4fec95..8dc930b8a 100644 --- a/python/examples/remote_mission_service/hello_world_mission_service.py +++ b/python/examples/remote_mission_service/hello_world_mission_service.py @@ -45,7 +45,8 @@ def __init__(self, logger=None, default_name=None, display_name=None, hello_opti self.coerce = coerce # Create the custom parameters. If no hello_options are provided, allow the text to be edited. - who_param = make_string_param_spec(options=hello_options, default_value=default_name) + who_param = make_string_param_spec(options=hello_options, default_value=default_name, + editable=True) who_ui_info = make_user_interface_info(display_name, 'Who Spot will say hello to') dict_spec = make_dict_param_spec({_WHO_KEY: make_dict_child_spec(who_param, who_ui_info)}, is_hidden_by_default=False) diff --git a/python/examples/remote_mission_service/remote_mission_client.py b/python/examples/remote_mission_service/remote_mission_client.py index ce58b1b49..bf72ee7de 100644 --- a/python/examples/remote_mission_service/remote_mission_client.py +++ b/python/examples/remote_mission_service/remote_mission_client.py @@ -17,6 +17,7 @@ import bosdyn.mission.remote_client from bosdyn.api import service_customization_pb2 from bosdyn.api.mission import remote_pb2 +from bosdyn.client.keepalive import KeepaliveClient, remove_all_policies _WHO_KEY = 'who' @@ -26,8 +27,8 @@ def main(): group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--hello-world', action='store_true', help='Target the Hello World remote mission service.') - group.add_argument('--power-off', action='store_true', - help='Target the Power Off remote mission service.') + group.add_argument('--robot-command', action='store_true', + help='Target the Robot Command remote mission service.') parser.add_argument( '--user-string', help='Specify the user-string input to Tick. Set to the node name in Autowalk missions.') @@ -47,8 +48,8 @@ def main(): if options.hello_world: directory_name = 'hello-world-callback' lease_resources = () - elif options.power_off: - directory_name = 'power-off-callback' + elif options.robot_command: + directory_name = 'robot-command-callback' lease_resources = bosdyn.client.lease.DEFAULT_RESOURCES # If attempting to communicate directly to the service. @@ -80,9 +81,15 @@ def main(): with ExitStack() as exit_stack: if lease_resources and options.host_type != 'local': lease_client = robot.ensure_client(bosdyn.client.lease.LeaseClient.default_service_name) + # Clear keep alive policies to ensure we can power on robot + keepalive_client = robot.ensure_client(KeepaliveClient.default_service_name) + remove_all_policies(keepalive_client, attempts=3) exit_stack.enter_context( bosdyn.client.lease.LeaseKeepAlive(lease_client, must_acquire=True, return_at_exit=True)) + if not robot.is_powered_on(): + robot.power_on() + # Now run through a typical sequence of calls to the remote servicer. # Establish the session, telling the servicer to perform any one-time tasks. try: diff --git a/python/examples/remote_mission_service/power_off_mission_service.py b/python/examples/remote_mission_service/robot_command_mission_service.py similarity index 55% rename from python/examples/remote_mission_service/power_off_mission_service.py rename to python/examples/remote_mission_service/robot_command_mission_service.py index 22892235f..5d5ff7419 100644 --- a/python/examples/remote_mission_service/power_off_mission_service.py +++ b/python/examples/remote_mission_service/robot_command_mission_service.py @@ -7,32 +7,81 @@ """Example of how to run a RemoteMissionService servicer.""" import logging +import math import random import string import threading +import time import bosdyn.client import bosdyn.client.util -from bosdyn.api import basic_command_pb2, header_pb2, robot_command_pb2 +import bosdyn.geometry +from bosdyn.api import header_pb2, units_pb2 from bosdyn.api.mission import remote_pb2, remote_service_pb2_grpc from bosdyn.client import time_sync -from bosdyn.client.auth import AuthResponseError from bosdyn.client.directory_registration import (DirectoryRegistrationClient, DirectoryRegistrationKeepAlive) from bosdyn.client.lease import Lease, LeaseClient from bosdyn.client.robot_command import RobotCommandBuilder, RobotCommandClient from bosdyn.client.server_util import GrpcServiceRunner, ResponseContext +from bosdyn.client.service_customization_helpers import (create_value_validator, + dict_param_coerce_to, make_dict_child_spec, + make_dict_param_spec, + make_double_param_spec, + make_string_param_spec, + make_user_interface_info, + validate_dict_spec) from bosdyn.client.util import setup_logging from bosdyn.mission import util -DIRECTORY_NAME = 'power-off-callback' +DIRECTORY_NAME = 'robot-command-callback' AUTHORITY = 'remote-mission' SERVICE_TYPE = 'bosdyn.api.mission.RemoteMissionService' _LOGGER = logging.getLogger(__name__) +_COMMAND_KEY = 'command' +_COMMAND_OPTIONS = ['wiggle', 'wave'] -class PowerOffServicer(remote_service_pb2_grpc.RemoteMissionServiceServicer): +_DURATION_KEY = 'duration' +_DURATION_MIN = 1 # s +_DURATION_MAX = 20 # s +_DURATION_DEFAULT = 5 # s + +_WAVE_HEIGHT_MAX = 0.3 # m +_WAVE_HEIGHT_CONSTANT = 7.5 # Affects the period of the height oscillation +_WAVE_ROLL_OFFSET_MAX = 0.275 # rad +_WAVE_ROLL_CONSTANT = 3.75 # Affects the period of the roll oscillation +_WAVE_PITCH_OFFSET_MAX = 0.375 # rad +_WAVE_PITCH_CONSTANT = 7.5 # Affects the period of the pitch oscillation + +_WIGGLE_YAW_OFFSET_MAX = 0.05 # rad +_WIGGLE_YAW_CONSTANT = 8 # Affects the period of the yaw oscillation +_WIGGLE_PITCH_OFFSET_MAX = 0.45 # rad +_WIGGLE_PITCH_OFFSET_MIN = -.1 # rad +_WIGGLE_PITCH_CONSTANT = 25 # Affects the period of the pitch oscillation + +_FUNCTION_TIME_CHANGE = 0.05 # Movement function time change for every new command +_COMMAND_TIME_INTERVAL_MIN = 0.05 # s + + +def interp(x, y1, y2): + """ + Interpolate a value between y1 and y2 based on the position of x between -1 and + 1. + If x is outside [-1, 1], saturate the output correctly to y1 or y2. + """ + if (x <= -1): + return y1 + elif (x >= 1): + return y2 + + # Range of x is [-1, 1], so dx is 2. + slope = (y2 - y1) / 2.0 + return slope * (x + 1) + y1 + + +class RobotCommandMissionServicer(remote_service_pb2_grpc.RemoteMissionServiceServicer): """Powers off the robot. Shows an example of these concepts: @@ -54,6 +103,25 @@ def __init__(self, bosdyn_sdk_robot, logger=None): self.sessions_by_id = {} self._used_session_ids = [] + # Create the custom parameters. + command_param = make_string_param_spec(options=_COMMAND_OPTIONS, + default_value=_COMMAND_OPTIONS[0], editable=False) + command_ui_info = make_user_interface_info('Performance Type', + 'What movement spot will do for the duration.') + duration_param = make_double_param_spec(max_value=_DURATION_MAX, min_value=_DURATION_MIN, + units=units_pb2.Units(name='seconds'), + default_value=_DURATION_DEFAULT) + duration_ui_info = make_user_interface_info('Wave Duration', + 'How long Spot will perform the wave.') + dict_spec = make_dict_param_spec( + { + _COMMAND_KEY: make_dict_child_spec(command_param, command_ui_info), + _DURATION_KEY: make_dict_child_spec(duration_param, duration_ui_info) + }, is_hidden_by_default=False) + # Validate spec, error will be raised if invalid + validate_dict_spec(dict_spec) + self.custom_params = dict_spec + def Tick(self, request, context): response = remote_pb2.TickResponse() self.logger.debug('Ticked with session ID "%s" %i leases and %i inputs', request.session_id, @@ -78,6 +146,27 @@ def _tick_implementation(self, request, response): if current_lease is None: return + # Default to spec command and duration. + command = self.custom_params.specs[_COMMAND_KEY].spec.string_spec.default_value + duration = self.custom_params.specs[_DURATION_KEY].spec.double_spec.default_value.value + + valid_param = create_value_validator(self.custom_params)(request.params) + if valid_param is not None: + if self.coerce: + dict_param_coerce_to(request.params, self.custom_params) + else: + self.logger.error('Invalid parameter, not saying hello!') + response.status = remote_pb2.TickResponse.STATUS_CUSTOM_PARAMS_ERROR + response.custom_param_error.CopyFrom(valid_param) + return response + + param_command = request.params.values.get(_COMMAND_KEY) + if param_command is not None: + command = param_command.string_value.value + param_duration = request.params.values.get(_DURATION_KEY) + if param_duration is not None: + duration = param_duration.double_value.value + node_name = '' # This node_name input is provided by the Autowalk missions. # To provide other inputs, see the RemoteGrpc message. @@ -92,103 +181,103 @@ def _tick_implementation(self, request, response): # Inform it about the lease provided by the client to this service. cmd_client.lease_wallet.add(current_lease) - # Because SafePowerOff can take a while, we also need to Retain the lease, to tell the + # We also need to Retain the lease, to tell the # robot that we're still using it. lease_client = self.bosdyn_sdk_robot.ensure_client(LeaseClient.default_service_name) # We'll "fire and forget" the retain RPC -- if it doesn't succeed, the robot will # go through its comms loss policy. lease_client.retain_lease_async(current_lease) - self._perform_and_monitor_power_off(cmd_client, request.session_id, response) + self._perform_robot_movement(cmd_client, command, duration, request.session_id, response) - def _perform_and_monitor_power_off(self, cmd_client, session_id, response): + def _perform_robot_movement(self, cmd_client, command, duration, session_id, response): """Attempts to power off the robot and check on power off progress. Builds the response in-place, depending on how the power off command is going. """ - response.status = remote_pb2.TickResponse.STATUS_SUCCESS # Grab the Future for the original command and the feedback. - command_future, feedback_future = self.sessions_by_id[session_id] - # If the original command has not been sent... - if command_future is None: - command_future = cmd_client.robot_command_async( - RobotCommandBuilder.safe_power_off_command()) - # Store the future, so we can reference it on later ticks. - self.sessions_by_id[session_id] = (command_future, None) - - # If the original command is done... - if command_future.done(): - # See what the result was. On a successful RPC, the result is the ID of the command. - # If the command failed, an exception will be raised. - try: - command_id = command_future.result() - except bosdyn.client.LeaseUseError as exc: - self.logger.error('LeaseUseError: "%s"', str(exc)) - # We often treat LeaseUseErrors as a recoverable thing, so you may want to do the - # same. A newer lease may come in with the next TickRequest. - # It could be that the lease received for this tick is already newer than the lease - # that was used in the command_future being checked right now. In that case, the - # mission service will typically just try again. You have the option of doing your - # own "try again" logic in this servicer, but it's not typically necessary. - response.status = remote_pb2.TickResponse.STATUS_RUNNING - response.lease_use_results.add().CopyFrom(exc.response.lease_use_result) - # Reset the information for this session, so the next tick will make another call. - self.sessions_by_id[session_id] = (None, None) - return - except bosdyn.client.Error as exc: - self.logger.error('Command failed: "%s"', str(exc)) - response.error_message = str(exc) - response.status = remote_pb2.TickResponse.STATUS_FAILURE - # We've failed! - # We do not reset the session information here, expecting that Stop will be called. + command_future, start_wave_time, last_cmd_time, wave_time_value = self.sessions_by_id[ + session_id] + + # Default to normal stand values + height = yaw = roll = pitch = 0.0 + if start_wave_time is not None: + if time.time() - start_wave_time > duration: + # Build and issue normal stand command + footprint_R_body = bosdyn.geometry.EulerZXY(yaw=yaw, roll=roll, pitch=pitch) + cmd = RobotCommandBuilder.synchro_stand_command(footprint_R_body=footprint_R_body) + command_future = cmd_client.robot_command(cmd) + self.logger.info('Performance complete!') + response.status = remote_pb2.TickResponse.STATUS_SUCCESS return - # Issue the request for feedback if no request is outstanding. - if feedback_future is None: - feedback_future = cmd_client.robot_command_feedback_async(command_id) - self.sessions_by_id[session_id] = (command_future, feedback_future) - - # If the feedback request is done... - if feedback_future.done(): + # Check last command sent to make sure it succeeded + if command_future is not None: + # If the command is done... + if command_future.done(): + # See what the result was. On a successful RPC, the result is the ID of the command. + # If the command failed, an exception will be raised. We do not monitor feedback afterward since we will override this command shortly anyway. try: - command_response = feedback_future.result() + command_future.result() + except bosdyn.client.LeaseUseError as exc: + self.logger.error('LeaseUseError: "%s"', str(exc)) + # We often treat LeaseUseErrors as a recoverable thing, so you may want to do the + # same. A newer lease may come in with the next TickRequest. + # It could be that the lease received for this tick is already newer than the lease + # that was used in the command_future being checked right now. In that case, the + # mission service will typically just try again. You have the option of doing your + # own "try again" logic in this servicer, but it's not typically necessary. + response.status = remote_pb2.TickResponse.STATUS_RUNNING + response.lease_use_results.add().CopyFrom(exc.response.lease_use_result) + # Reset the information for this session, so the next tick will make another call. + self.sessions_by_id[session_id] = (None, start_wave_time, last_cmd_time, + wave_time_value) + return except bosdyn.client.Error as exc: - self.logger.exception('Feedback failed!') + self.logger.error('Command failed: "%s"', str(exc)) response.error_message = str(exc) response.status = remote_pb2.TickResponse.STATUS_FAILURE # We've failed! - # We do not reset the session information here, expecting that Stop will be - # called. + # We do not reset the session information here, expecting that Stop will be called. return - - # Shortname for the object that holds the top-level command status codes. - cmd_status_codes = robot_command_pb2.RobotCommandFeedbackResponse - # Shortname for the object that holds the SafePowerOff-specific codes. - safe_off_status_codes = basic_command_pb2.SafePowerOffCommand.Feedback - # Shortname for the recently-read SafePowerOff status code. - status = command_response.feedback.full_body_feedback.safe_power_off_feedback.status - - # Translate the feedback status to tick status. - # We check STATUS_PROCESSING and STATUS_ROBOT_FROZEN because the robot will - # transition to "frozen" while it powers off. - if (command_response.status == cmd_status_codes.STATUS_PROCESSING or - command_response.status == cmd_status_codes.STATUS_ROBOT_FROZEN): - if status == safe_off_status_codes.STATUS_POWERED_OFF: - response.status = remote_pb2.TickResponse.STATUS_SUCCESS - elif status == safe_off_status_codes.STATUS_IN_PROGRESS: - response.status = remote_pb2.TickResponse.STATUS_RUNNING - # We need to issue another feedback request, so reset that future to None - # for the next tick. - self.sessions_by_id[session_id] = (command_future, None) - else: - response.status = remote_pb2.TickResponse.STATUS_FAILURE - response.error_message = f'Unexpected feedback status "{safe_off_status_codes.Status.Name(status)}"!' - else: - response.status = remote_pb2.TickResponse.STATUS_FAILURE - response.error_message = cmd_status_codes.Status.Name(command_response.status) - return - + # Wait until its time to send command + if last_cmd_time is not None and time.time() - last_cmd_time > _COMMAND_TIME_INTERVAL_MIN: + if command == 'wave': + # Calculate desired robot stand position + height = interp(math.cos(wave_time_value * _WAVE_HEIGHT_CONSTANT), + -_WAVE_HEIGHT_MAX, _WAVE_HEIGHT_MAX) + pitch = interp(math.sin(wave_time_value * _WAVE_PITCH_CONSTANT), + -_WAVE_PITCH_OFFSET_MAX, _WAVE_PITCH_OFFSET_MAX) + roll = interp(math.cos(wave_time_value * _WAVE_ROLL_CONSTANT), + -_WAVE_ROLL_OFFSET_MAX, _WAVE_ROLL_OFFSET_MAX) + elif command == 'wiggle': + # Calculate desired robot stand position + pitch = interp(math.sin(wave_time_value * _WIGGLE_PITCH_CONSTANT), + _WIGGLE_PITCH_OFFSET_MIN, _WIGGLE_PITCH_OFFSET_MAX) + yaw = interp(math.cos(wave_time_value * _WIGGLE_YAW_CONSTANT), + -_WIGGLE_YAW_OFFSET_MAX, _WIGGLE_YAW_OFFSET_MAX) + + # Build and issue the command + footprint_R_body = bosdyn.geometry.EulerZXY(yaw=yaw, roll=roll, pitch=pitch) + cmd = RobotCommandBuilder.synchro_stand_command(footprint_R_body=footprint_R_body, + body_height=height) + command_future = cmd_client.robot_command_async(cmd) + + # Set start time if we haven't already + if start_wave_time is None: + start_wave_time = time.time() + + # Set last sent command time + last_cmd_time = time.time() + # Increase wave function time for next command + wave_time_value += _FUNCTION_TIME_CHANGE + # Update session info + self.sessions_by_id[session_id] = (command_future, start_wave_time, last_cmd_time, + wave_time_value) + response.status = remote_pb2.TickResponse.STATUS_RUNNING + return + self.sessions_by_id[session_id] = (None, start_wave_time, last_cmd_time, wave_time_value) response.status = remote_pb2.TickResponse.STATUS_RUNNING def _sublease_or_none(self, leases, response, error_code): @@ -244,7 +333,7 @@ def _establish_session_implementation(self, request, response): session_id = self._get_unique_random_session_id() # Note: If you plan to run this servicer for a long time, you may want to bound the size of # sessions_by_id and _used_session_ids. - self.sessions_by_id[session_id] = (None, None) + self.sessions_by_id[session_id] = (None, None, 0, 0) self._used_session_ids.append(session_id) response.session_id = session_id @@ -271,15 +360,14 @@ def _stop_implementation(self, request, response): response.status = remote_pb2.StopResponse.STATUS_INVALID_SESSION_ID return - command_future, feedback_future = self.sessions_by_id[session_id] + command_future, start_movement_time, last_cmd_time, movement_time_value = self.sessions_by_id[ + session_id] if command_future: command_future.cancel() - if feedback_future: - feedback_future.cancel() # By resetting the session ID's state, the next Tick RPC will behave as if Tick had not been # called yet. You, as an implementer, can decide what exactly happens as part of Stop(). # It will usually be called immediately after Tick returns a SUCCESS or FAILURE status code. - self.sessions_by_id[session_id] = (None, None) + self.sessions_by_id[session_id] = (None, None, None, None) response.status = remote_pb2.StopResponse.STATUS_OK def TeardownSession(self, request, context): @@ -301,7 +389,8 @@ def _teardown_session_implementation(self, request, response): def GetRemoteMissionServiceInfo(self, request, context): response = remote_pb2.GetRemoteMissionServiceInfoResponse() with ResponseContext(response, request): - return response + response.custom_params.CopyFrom(self.custom_params) + return response def run_service(bosdyn_sdk_robot, port, logger=None): @@ -309,7 +398,7 @@ def run_service(bosdyn_sdk_robot, port, logger=None): add_servicer_to_server_fn = remote_service_pb2_grpc.add_RemoteMissionServiceServicer_to_server # Instance of the servicer to be run. - service_servicer = PowerOffServicer(bosdyn_sdk_robot, logger=logger) + service_servicer = RobotCommandMissionServicer(bosdyn_sdk_robot, logger=logger) return GrpcServiceRunner(service_servicer, add_servicer_to_server_fn, port, logger=logger) diff --git a/python/examples/replay_mission/replay_mission.py b/python/examples/replay_mission/replay_mission.py index c1d1643e9..d7cb556fa 100644 --- a/python/examples/replay_mission/replay_mission.py +++ b/python/examples/replay_mission/replay_mission.py @@ -299,7 +299,7 @@ def upload_graph_and_snapshots(robot, client, path, disable_alternate_route_find if len(edge.snapshot_id) == 0: continue snapshot_filename = os.path.join(path, 'edge_snapshots', edge.snapshot_id) - robot.logger.info(f'Loading edge snapshot from [snapshot_filename]') + robot.logger.info(f'Loading edge snapshot from {snapshot_filename}') with open(snapshot_filename, 'rb') as snapshot_file: edge_snapshot = map_pb2.EdgeSnapshot() diff --git a/python/examples/service_customization/custom_parameter_image_server/manifest.json b/python/examples/service_customization/custom_parameter_image_server/manifest.json index 5feeb82a7..7c44783c4 100644 --- a/python/examples/service_customization/custom_parameter_image_server/manifest.json +++ b/python/examples/service_customization/custom_parameter_image_server/manifest.json @@ -1,5 +1,6 @@ { "description": "Custom Parameter Image Server", "version": "3.3.0", - "images": ["custom_parameter_image_server.tar.gz"] + "images": ["custom_parameter_image_server.tar.gz"], + "extension_name": "custom_parameter_image_server" } diff --git a/python/examples/service_customization/custom_parameter_ncb_worker/README.md b/python/examples/service_customization/custom_parameter_ncb_worker/README.md index e6ca488df..91707474d 100644 --- a/python/examples/service_customization/custom_parameter_ncb_worker/README.md +++ b/python/examples/service_customization/custom_parameter_ncb_worker/README.md @@ -72,8 +72,12 @@ An example CSV file for the Faster R-CNN model described above is included in th This example contains the configuration files to run the python scripts described above also in Docker containers. The docker containers accept the same arguments described above. For example, to run the server docker container and the client docker container, follow the steps below with the correct values for the <> variables: ``` +Create a .env file that specifies username and password with the following variables. +BOSDYN_CLIENT_USERNAME={username} +BOSDYN_CLIENT_PASSWORD={password} + sudo docker build -t ncb_server -f Dockerfile.server . -sudo docker run -it --network=host --env BOSDYN_CLIENT_USERNAME --env BOSDYN_CLIENT_PASSWORD -v :/model_dir/ ncb_server --model-dir /model_dir/ +sudo docker run -it --network=host --env-file .env -v :/model_dir/ ncb_server --model-dir /model_dir/ ``` When running ncb_server on CORE I/O, or another compute payload with GPU, pass the flag `--gpus all` to the `docker run` command to take advantage of the GPU. diff --git a/python/examples/service_customization/custom_parameters_data_acquisition/daq_plugin_custom_params.py b/python/examples/service_customization/custom_parameters_data_acquisition/daq_plugin_custom_params.py index 5a24c8c33..3a2014cd9 100644 --- a/python/examples/service_customization/custom_parameters_data_acquisition/daq_plugin_custom_params.py +++ b/python/examples/service_customization/custom_parameters_data_acquisition/daq_plugin_custom_params.py @@ -8,6 +8,7 @@ Data Acquisition plugin with params """ import logging +import secrets import bosdyn.client.util from bosdyn.api import data_acquisition_pb2, data_acquisition_plugin_service_pb2_grpc @@ -34,6 +35,14 @@ STRING_PARAMS_NAME = 'Favorite Phrase' STRING_DEFAULT = 'Hi spot!' +DATA_NAME = 'Random Data (MB)' +# Number of MB +DATA_MIN_MEGABYTES_TO_STORE = 1 +DATA_MAX_MEGABYTES_TO_STORE = 125 +DATA_DEFAULT_MEGABYTES_TO_STORE = 1 + +BYTES_PER_MB = 1024**2 + class HelloAdapter: """Basic plugin for saving data to DAQ""" @@ -50,11 +59,13 @@ def handle_data(self, capture, store_helper, action_id): toggle = params.get(TOGGLE_PARAM_NAME).string_value.value num = params.get(NUMBER_NAME).double_value.value phrase = params.get(STRING_PARAMS_NAME).string_value.value + data_size = params.get(DATA_NAME).int_value.value # Check if the request has been cancelled. store_helper.cancel_check() data_id = data_acquisition_pb2.DataIdentifier(action_id=action_id, channel=CHANNEL_NAME) + data = secrets.token_bytes(int(BYTES_PER_MB * data_size)) message = data_acquisition_pb2.AssociatedMetadata() message.reference_id.action_id.CopyFrom(action_id) message.metadata.data.update({ @@ -63,6 +74,7 @@ def handle_data(self, capture, store_helper, action_id): "Phrase": phrase, }) # Store the data and manage store state. + store_helper.store_data_as_chunks(data, data_id) store_helper.store_metadata(message, data_id) store_helper.state.set_status(data_acquisition_pb2.GetStatusResponse.STATUS_SAVING) @@ -90,6 +102,12 @@ def make_service(robot): string_params.default_value = STRING_DEFAULT string_params.editable = True + # Data Slider + number_params = custom_params.specs[DATA_NAME].spec.int_spec + number_params.default_value.value = DATA_DEFAULT_MEGABYTES_TO_STORE + number_params.min_value.value = DATA_MIN_MEGABYTES_TO_STORE + number_params.max_value.value = DATA_MAX_MEGABYTES_TO_STORE + adapter = HelloAdapter() return DataAcquisitionPluginService(robot, [capability], adapter.handle_request) diff --git a/python/examples/spot_cam/README.md b/python/examples/spot_cam/README.md index b2622395b..1f1d47c97 100644 --- a/python/examples/spot_cam/README.md +++ b/python/examples/spot_cam/README.md @@ -32,72 +32,70 @@ To run the examples: export ROBOT_IP= # Version Service -python -m command_line $ROBOT_IP version software +python3 -m command_line $ROBOT_IP version software # Audio Service -python -m command_line $ROBOT_IP audio set_volume 1 -python -m command_line $ROBOT_IP audio get_volume -python -m command_line $ROBOT_IP audio load autonomous_robot_en data/autonomous_robot_en.wav -python -m command_line $ROBOT_IP audio list -python -m command_line $ROBOT_IP audio play autonomous_robot_en -python -m command_line $ROBOT_IP audio delete autonomous_robot_en -python -m command_line $ROBOT_IP audio list +python3 -m command_line $ROBOT_IP audio set_volume 1 +python3 -m command_line $ROBOT_IP audio get_volume +python3 -m command_line $ROBOT_IP audio load autonomous_robot_en data/autonomous_robot_en.wav +python3 -m command_line $ROBOT_IP audio list +python3 -m command_line $ROBOT_IP audio play autonomous_robot_en +python3 -m command_line $ROBOT_IP audio delete autonomous_robot_en +python3 -m command_line $ROBOT_IP audio list # Compositor Service -python -m command_line $ROBOT_IP compositor list -python -m command_line $ROBOT_IP compositor get -python -m command_line $ROBOT_IP compositor set mech -python -m command_line $ROBOT_IP compositor visible -python -m command_line $ROBOT_IP compositor get_colormap -python -m command_line $ROBOT_IP compositor set_colormap jet -python -m command_line $ROBOT_IP compositor set_reticle --xs 0.1 0.2 0.3 --ys 0.1 0.4 0.8 --unit c +python3 -m command_line $ROBOT_IP compositor list +python3 -m command_line $ROBOT_IP compositor get +python3 -m command_line $ROBOT_IP compositor set mech +python3 -m command_line $ROBOT_IP compositor visible +python3 -m command_line $ROBOT_IP compositor get_colormap +python3 -m command_line $ROBOT_IP compositor set_colormap jet +python3 -m command_line $ROBOT_IP compositor set_reticle --xs 0.1 0.2 0.3 --ys 0.1 0.4 0.8 --unit c # Lighting Service -python -m command_line $ROBOT_IP lighting set 0.1 0.2 0.3 0.4 -python -m command_line $ROBOT_IP lighting get +python3 -m command_line $ROBOT_IP lighting set 0.1 0.2 0.3 0.4 +python3 -m command_line $ROBOT_IP lighting get # Media Log Service -python -m command_line $ROBOT_IP media_log list_cameras -python -m command_line $ROBOT_IP media_log store pano -python -m command_line $ROBOT_IP media_log store_retrieve ptz +python3 -m command_line $ROBOT_IP media_log list_cameras +python3 -m command_line $ROBOT_IP media_log store pano +python3 -m command_line $ROBOT_IP media_log store_retrieve ptz # The UUID is given by the 'store' command IMAGE_UUID=f0e835c2-54d4-11ea-9365-00044be03a91 -python -m command_line $ROBOT_IP media_log status $IMAGE_UUID -python -m command_line $ROBOT_IP media_log retrieve $IMAGE_UUID -python -m command_line $ROBOT_IP media_log delete $IMAGE_UUID +python3 -m command_line $ROBOT_IP media_log status $IMAGE_UUID +python3 -m command_line $ROBOT_IP media_log retrieve $IMAGE_UUID +python3 -m command_line $ROBOT_IP media_log delete $IMAGE_UUID # You should not see the UUID in the list of logpoints -python -m command_line $ROBOT_IP media_log list_logpoints +python3 -m command_line $ROBOT_IP media_log list_logpoints # You should see 10 stitched jpeg images -seq 10 | xargs -I{} python -m command_line $ROBOT_IP media_log store_retrieve pano +seq 10 | xargs -I{} python3 -m command_line $ROBOT_IP media_log store_retrieve pano # Ptz Service -python -m command_line $ROBOT_IP ptz list -python -m command_line $ROBOT_IP ptz set_position mech 0 0 1 -python -m command_line $ROBOT_IP ptz get_position mech -python -m command_line $ROBOT_IP ptz set_focus auto_focus -python -m command_line $ROBOT_IP ptz set_focus manual_focus --distance 5 -python -m command_line $ROBOT_IP ptz get_focus +python3 -m command_line $ROBOT_IP ptz list +python3 -m command_line $ROBOT_IP ptz set_position mech 0 0 1 +python3 -m command_line $ROBOT_IP ptz get_position mech +python3 -m command_line $ROBOT_IP ptz set_focus auto_focus +python3 -m command_line $ROBOT_IP ptz set_focus manual_focus --distance 5 +python3 -m command_line $ROBOT_IP ptz get_focus # Get Spot CAM ICE settings -python -m command_line $ROBOT_IP network ice_settings +python3 -m command_line $ROBOT_IP network ice_settings # Set Spot CAM ICE settings (example JSON file provided) -python -m command_line $ROBOT_IP network set_ice ice.json +python3 -m command_line $ROBOT_IP network set_ice ice.json # WebRTC and Stream Quality Service # Set target (maximum) bitrate to 2mbps -# This command can be useful when running the Python WebRTC examples -# The Python WebRTC library (aiortc) can sometimes have trouble streaming at higher bitrates -python -m command_line $ROBOT_IP stream_quality set --target-bitrate 2000000 +# This command can be useful when running the python3 WebRTC examples +# The python3 WebRTC library (aiortc) can sometimes have trouble streaming at higher bitrates +python3 -m command_line $ROBOT_IP stream_quality set --target-bitrate 2000000 # Save images to .jpg files -python -m command_line $ROBOT_IP webrtc save -# Display stream -python -m command_line $ROBOT_IP webrtc save --count 0 +python3 -m command_line $ROBOT_IP webrtc save # Save 10 seconds of video (no audio) -python -m command_line $ROBOT_IP webrtc record --time 10 +python3 -m command_line $ROBOT_IP webrtc record --time 10 # Save 10 seconds of audio -python -m command_line $ROBOT_IP webrtc record audio --time 10 +python3 -m command_line $ROBOT_IP webrtc record audio --time 10 ``` # Spot Cam Video Core IO Extension Example diff --git a/python/examples/spot_cam/manifest.json b/python/examples/spot_cam/manifest.json index c3cff3a02..ea47b647a 100644 --- a/python/examples/spot_cam/manifest.json +++ b/python/examples/spot_cam/manifest.json @@ -2,5 +2,6 @@ "description": "Spotcam video", "version": "1.0", "images": ["spotcam_video.tgz"], - "icon": "video.jpg" + "icon": "video.jpg", + "extension_name": "spotcam_video" } diff --git a/python/examples/spot_cam/spot_cam_video_service.py b/python/examples/spot_cam/spot_cam_video_service.py index d4462ad1e..511abc232 100644 --- a/python/examples/spot_cam/spot_cam_video_service.py +++ b/python/examples/spot_cam/spot_cam_video_service.py @@ -7,7 +7,6 @@ """ Data Acquisition plugin for saving a file to the robot. """ -import argparse import asyncio import logging import os diff --git a/python/examples/spot_cam/webrtc.py b/python/examples/spot_cam/webrtc.py index f09007aaf..3651f7b90 100644 --- a/python/examples/spot_cam/webrtc.py +++ b/python/examples/spot_cam/webrtc.py @@ -5,17 +5,11 @@ # Development Kit License (20191101-BDSDK-SL). import asyncio -import base64 -import json import logging import sys import threading -import time -import cv2 -import numpy as np -import requests -from aiortc import MediaStreamTrack, RTCConfiguration, RTCPeerConnection, RTCSessionDescription +from aiortc import RTCConfiguration from aiortc.contrib.media import MediaRecorder from webrtc_client import WebRTCClient @@ -166,19 +160,10 @@ async def process_frame(client, options, shutdown_flag): while asyncio.get_event_loop().is_running(): try: frame = await client.video_frame_queue.get() - - if options.count == 0: - pil_image = frame.to_image() - cv_image = np.array(pil_image) - # OpenCV needs BGR - cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2BGR) - cv2.imshow('display', cv_image) - cv2.waitKey(1) - else: - frame.to_image().save(f'{options.dst_prefix}-{count}.jpg') - count += 1 - if count >= options.count: - break + frame.to_image().save(f'{options.dst_prefix}-{count}.jpg') + count += 1 + if count >= options.count: + break except Exception as e: print(e) try: diff --git a/python/examples/spot_detect_and_follow/Dockerfile.l4t b/python/examples/spot_detect_and_follow/Dockerfile.l4t deleted file mode 100644 index 8c807cf62..000000000 --- a/python/examples/spot_detect_and_follow/Dockerfile.l4t +++ /dev/null @@ -1,26 +0,0 @@ -FROM nvcr.io/nvidia/l4t-tensorflow:r35.3.1-tf2.11-py3 - -RUN apt-get update && apt-get install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx curl python3-opencv - -RUN python3 -m pip install --upgrade pip -COPY docker-requirements-l4t.txt prebuilt/*.whl ./ - -# Install the python requirements -RUN python3 -m pip install pip==21.3.1 setuptools==59.6.0 wheel==0.37.1 && \ - python3 -m pip install -r docker-requirements-l4t.txt --find-links . - -# download an example detector -RUN curl http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz > ssd_mobilenet_v2_coco_2018_03_29.tar.gz && \ - tar -xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz && \ - mv ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb /model.pb && \ - rm -rf ssd_mobilenet_v2_coco_2018_03_29* - -ENV LANG en_US.UTF-8 - -COPY __init__.py /app/__init__.py -COPY spot_detect_and_follow.py /app/spot_detect_and_follow.py -COPY tensorflow_object_detection.py /app/tensorflow_object_detection.py - -WORKDIR /app - -ENTRYPOINT ["/usr/bin/python3", "/app/spot_detect_and_follow.py"] diff --git a/python/examples/spot_detect_and_follow/Dockerfile.x64 b/python/examples/spot_detect_and_follow/Dockerfile.x64 deleted file mode 100644 index 607e82f2b..000000000 --- a/python/examples/spot_detect_and_follow/Dockerfile.x64 +++ /dev/null @@ -1,22 +0,0 @@ -FROM tensorflow/tensorflow:2.1.1-gpu - -# This is needed to fix the nvidia issue discussed here: https://forums.developer.nvidia.com/t/invalid-public-key-for-cuda-apt-repository/212901/22 -RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub -RUN apt-get update && apt-get install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx curl - -COPY docker-requirements.txt prebuilt/*.whl ./ -RUN python3 -m pip install -r docker-requirements.txt --find-links . - -# download an example detector -RUN apt-get update && apt-get install -y curl -RUN curl http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz > ssd_mobilenet_v2_coco_2018_03_29.tar.gz && \ - tar -xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz && \ - mv ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb /model.pb && \ - rm -rf ssd_mobilenet_v2_coco_2018_03_29* - -ENV LANG en_US.UTF-8 - -COPY . /app -WORKDIR /app - -ENTRYPOINT ["/usr/bin/python3", "/app/spot_detect_and_follow.py"] diff --git a/python/examples/spot_detect_and_follow/README.md b/python/examples/spot_detect_and_follow/README.md deleted file mode 100644 index ae7706b6a..000000000 --- a/python/examples/spot_detect_and_follow/README.md +++ /dev/null @@ -1,123 +0,0 @@ - - -# Spot Detect and Follow - -The Spot Detect and Follow example collects images from the two front Spot cameras and performs object detection on a specified class. This detection uses Tensorflow via the tensorflow_object_detector from the Spot Tensorflow Detector example. It accepts any Tensorflow model, and it allows the user to specify a subset of detection classes included in the model. It performs this set of operations for a predefined number of iterations, blocking for a predefined amount of time between each iteration. The example then determines the location of the highest confidence detection of the specified class and walks towards the object. The walking has a built-in buffer of about 3 meters. - -IF USING THIS EXAMPLE TO FOLLOW A PERSON, FOLLOW ALL SAFETY PROTOCOLS. KEEP AWAY FROM ALL STAIRCASES. - -The program is organized as three sets of Python processes communicating with the Spot robot. The process diagram is shown below. The main process communicates with the Spot robot over GRPC and constantly receives images. These images are pushed into the RAW_IMAGES_QUEUE and read by the Tensorflow processes. Those processes detect objects in the images and pushes the location onto PROCESSED_BOXES_QUEUE. The main thread then determines the location of the object and issues commands to the robot to walk towards the object. - -Process Diagram - -## User Guide - -This example depends on a Tensorflow model. As an example, the `faster_rcnn_inception_v2_coco` Tensorflow model pre-trained on COCO dataset can be obtained [here](http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz). That model is not supported on Windows or MacOS. -The pre-trained models may not be good at detecting some classes when using the robot's cameras, as the fisheye distortion, low resolution, and black and white images affect image quality. For example, pre-trained models may not perform well at detecting "sports balls" due to the lack of color. The [ssd_mobilenet_v2_coco](http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz) and [faster_rcnn_inception_v2_coco](http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz) have been tested to work well at detecting humans. - -### Installation (Only if you want to run without Docker) - -To install this example on Ubuntu 18.04, follow these instructions: - -- Install python3: `sudo apt-get install python3.10` -- Install pip3: `sudo apt-get install python3-pip` -- Install virtualenv: `python3 -m pip install virtualenv` -- Change into example directory: `cd spot_detect_and_follow` -- Create virtual environment (one time operation): `virtualenv -p {PATH_TO_PYTHON3_EXECUTABLE} venv`. The path to the executable is the output of `which python3` command, usually set to `/usr/bin/python3`. -- Start virtual environment: `source venv/bin/activate` -- Install dependencies: `python3 -m pip install -r requirements.txt` -- Add the tensorflow detector module to your PYTHONPATH: `export PYTHONPATH=/path/to/examples/spot_tensorflow_detector:$PYTHONPATH` -- Run `python3 -m pip install -r requirements.txt` within the `spot_tensorflow_detector` directory -- Run the example using instructions in the next section -- To exit the virtual environment, run `deactivate` - -### Execution - -Prior to running the example, you will need to acquire estop access from another source such as from a connected laptop or tablet. This allows you to emergency stop the robot since this application does not have a GUI. -This example follows the common pattern for expected arguments. It needs the common arguments used to configure the SDK and connect to a Spot: - -- robot IP passed as the last argument -- username and password should be set in the environment variables `BOSDYN_CLIENT_USERNAME` and `BOSDYN_CLIENT_PASSWORD`. - -On top of those arguments, it also needs the following arguments: - -- --model-path (required) argument that specifies the path of the Tensorflow model (a file in .pb format) -- --detection-class (required) argument that specifies the detection class from the Tensorflow model to follow (a list of class codes can be found in COCO_CLASS_DICT in `spot_detect_and_follow.py`) -- --detection-threshold (optional) argument that specifies the confidence threshold (0-1) to use to consider the Tensorflow detections as real detections. Lower values increase false positives. Higher values may lower detection rate; defaults to 0.7 -- --number-tensorflow-processes (optional) argument that specifies the number of Tensorflow processes to start. When running with the GPU, 1 process is enough since the GPU takes care of parallelization; defaults to 1 -- --sleep-between-capture (optional) argument that specifies the amount to sleep in seconds between each image capture iteration. Increasing the value of this argument reduces the size of the queues, but also reduces the rate of command updates at the end of the pipeline; defaults to 1.0. -- --max-processing-delay (optional) argument that specifies max delay in seconds allowed for each image before being processed; images with greater latency will not be processed; defaults to 7.0. - -The simple command to run with the default values is: - -``` -python3 spot_detect_and_follow.py --model-path --detection-class ROBOT_IP -``` - -For example, run the example with `--model-path` pointing to the `frozen_inference_graph.pb` file in the `faster_rcnn_inception_v2_coco_2018_01_28` folder created from untar-ing the model file downloaded from the instructions above, and with `--detection-classes` argument set to `1` to detect people in the camera images. - -#### Running in Docker - -Please refer to this [document](../../../docs/payload/docker_containers.md) for general instructions on how to run software applications on SpotCORE as docker containers. - -This example provides a Dockerfile for running in a container. This requires installing Nvidia Docker. -You can follow the instructions at https://github.com/NVIDIA/nvidia-docker to install Nvidia Docker. -Nvidia Docker is preinstalled on the CORE I/O. - -To build the image, you'll need to first copy over the tensorflow detector file first: - -```sh -cp ../spot_tensorflow_detector/tensorflow_object_detection.py . -sudo docker build -t spot_detect_and_follow:x64 -f Dockerfile.x64 . -``` - -If you are building for the CORE I/O, run this instead: - -```sh -# If you are building on an x64 machine -sudo apt-get install qemu binfmt-support qemu-user-static # Install the qemu packages -sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # This step will execute the registering scripts - -# Build the Docker image for L4T -cp ../spot_tensorflow_detector/tensorflow_object_detection.py . -sudo docker build -t spot_detect_and_follow:l4t -f Dockerfile.l4t . -``` - -To run a container, replace ROBOT_IP and with the full path to the pb model file in the command below: - -```sh -sudo docker run -it --network=host spot_detect_and_follow ROBOT_IP -``` - -On CORE I/O (using the GPU): - -```sh -sudo docker run --gpus all -it --network=host spot_detect_and_follow:l4t ROBOT_IP -``` - -#### Running as a Spot Extension on CORE I/O - -This example can also be built into a [Spot Extension](../../../docs/payload/docker_containers.md) using a provided [convenience script](../extensions/README.md) - -``` -cd {/path/to/python/examples/spot_detect_and_follow/} - -cp ../spot_tensorflow_detector/tensorflow_object_detection.py . - -python3 ../extensions/build_extension.py \ - --dockerfile-paths Dockerfile.l4t \ - --build-image-tags spot_detect_and_follow \ - -i spot_detect_and_follow.tar.gz \ - --package-dir . \ - --spx spot_detect_and_follow.spx -``` - -### Troubleshooting - -Depending upon the robot's surroundings and what other Spot Extensions are consuming resources on the CoreIO, you may find it necessary to adjust some of the command line arguments. You can either (1) [SSH into the CoreIO](../../../docs/payload/coreio_documentation.md#how-to-connect-via-ssh) and edit the `docker-compose.yml` directly (in `/data/.extensions/spot_detect_and_follow/`) or (2) edit the `docker-compose.yml` locally, create a new Spot Extension, and upload it to the CoreIO. diff --git a/python/examples/spot_detect_and_follow/__init__.py b/python/examples/spot_detect_and_follow/__init__.py deleted file mode 100644 index 19ae6c26c..000000000 --- a/python/examples/spot_detect_and_follow/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. -# -# Downloading, reproducing, distributing or otherwise using the SDK Software -# is subject to the terms and conditions of the Boston Dynamics Software -# Development Kit License (20191101-BDSDK-SL). - diff --git a/python/examples/spot_detect_and_follow/docker-compose.yml b/python/examples/spot_detect_and_follow/docker-compose.yml deleted file mode 100644 index 416d22e9e..000000000 --- a/python/examples/spot_detect_and_follow/docker-compose.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: "3.5" -services: - spot_detect_and_follow: - image: spot_detect_and_follow - restart: unless-stopped - volumes: - # Mount payload credentials. - - /opt/payload_credentials/payload_guid_and_secret:/opt/payload_credentials/payload_guid_and_secret - deploy: - resources: - reservations: - devices: - - driver: nvidia - capabilities: [gpu] - # Add additional command line arguments and tune them as necessary - command: --payload-credentials-file /opt/payload_credentials/payload_guid_and_secret 192.168.50.3 diff --git a/python/examples/spot_detect_and_follow/docker-requirements-l4t.txt b/python/examples/spot_detect_and_follow/docker-requirements-l4t.txt deleted file mode 100644 index 0b1f7b574..000000000 --- a/python/examples/spot_detect_and_follow/docker-requirements-l4t.txt +++ /dev/null @@ -1,22 +0,0 @@ -bosdyn-api==3.2.0 -bosdyn-client==3.2.0 -bosdyn-core==3.2.0 -Deprecated==1.2.10 -Pillow==8.4.0 -PyJWT==2.0.1 -scipy==1.5.4 - -#These wheels are already installed in base nvidia image -#certifi==2021.10.8 -#charset-normalizer==2.0.12 -#grpcio==1.44.0 -#idna==3.3 -#numpy==1.19.5 -#protobuf==3.19.4 -#requests==2.27.1 -#six==1.16.0 -#urllib3==1.26.8 -#wrapt==1.13.3 - -#This wheel is installed with apt-get instead -#opencv-python==4.3.0.38 diff --git a/python/examples/spot_detect_and_follow/docker-requirements.txt b/python/examples/spot_detect_and_follow/docker-requirements.txt deleted file mode 100644 index cf8e87717..000000000 --- a/python/examples/spot_detect_and_follow/docker-requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -bosdyn-api==3.1.0 -bosdyn-client==3.1.0 -bosdyn-core==3.1.0 -certifi==2020.12.5 -charset-normalizer==2.0.7 -Deprecated==1.2.10 -grpcio==1.42.0 -idna==2.10 -numpy==1.19.4 -opencv-python==4.4.0.46 -Pillow==9.4.0 -protobuf==3.19.4 -PyJWT==2.0.1 -requests==2.26.0 -scipy==1.4.1 -six==1.12.0 -urllib3==1.26.2 -wrapt==1.12.1 diff --git a/python/examples/spot_detect_and_follow/documentation/Detect_and_Follow.png b/python/examples/spot_detect_and_follow/documentation/Detect_and_Follow.png deleted file mode 100644 index 6a60ef025..000000000 Binary files a/python/examples/spot_detect_and_follow/documentation/Detect_and_Follow.png and /dev/null differ diff --git a/python/examples/spot_detect_and_follow/manifest.json b/python/examples/spot_detect_and_follow/manifest.json deleted file mode 100644 index d932bedeb..000000000 --- a/python/examples/spot_detect_and_follow/manifest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "description": "Spot Detect and Follow", - "version": "3.3.0", - "images": ["spot_detect_and_follow.tar.gz"] -} diff --git a/python/examples/spot_detect_and_follow/requirements.txt b/python/examples/spot_detect_and_follow/requirements.txt deleted file mode 100644 index cde9b12ea..000000000 --- a/python/examples/spot_detect_and_follow/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ --f ../../../prebuilt -bosdyn-client >= 3.0 - -opencv-python -Pillow -scipy -# The following line is commented out because it can change depending on setup -# You may choose to install Tensorflow CPU if running from a machine without a GPU -# tensorflow-gpu~=2.0.4 diff --git a/python/examples/spot_detect_and_follow/spot_detect_and_follow.py b/python/examples/spot_detect_and_follow/spot_detect_and_follow.py deleted file mode 100644 index 88ffe2040..000000000 --- a/python/examples/spot_detect_and_follow/spot_detect_and_follow.py +++ /dev/null @@ -1,839 +0,0 @@ -# Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved. -# -# Downloading, reproducing, distributing or otherwise using the SDK Software -# is subject to the terms and conditions of the Boston Dynamics Software -# Development Kit License (20191101-BDSDK-SL). - -"""Tutorial to show how to use the Boston Dynamics API to detect and follow an object""" -import argparse -import io -import json -import math -import os -import signal -import sys -import time -from multiprocessing import Barrier, Process, Queue, Value -from queue import Empty, Full -from threading import BrokenBarrierError, Thread - -import cv2 -import numpy as np -from PIL import Image -from scipy import ndimage -from tensorflow_object_detection import DetectorAPI - -import bosdyn.client -import bosdyn.client.util -from bosdyn import geometry -from bosdyn.api import geometry_pb2 as geo -from bosdyn.api import image_pb2, trajectory_pb2 -from bosdyn.api.image_pb2 import ImageSource -from bosdyn.api.spot import robot_command_pb2 as spot_command_pb2 -from bosdyn.client.async_tasks import AsyncPeriodicQuery, AsyncTasks -from bosdyn.client.frame_helpers import (GROUND_PLANE_FRAME_NAME, VISION_FRAME_NAME, get_a_tform_b, - get_vision_tform_body) -from bosdyn.client.image import ImageClient -from bosdyn.client.lease import LeaseClient, LeaseKeepAlive -from bosdyn.client.math_helpers import Quat, SE3Pose -from bosdyn.client.robot_command import (CommandFailedError, CommandTimedOutError, - RobotCommandBuilder, RobotCommandClient, blocking_stand) -from bosdyn.client.robot_state import RobotStateClient - -LOGGER = bosdyn.client.util.get_logger() - -SHUTDOWN_FLAG = Value('i', 0) - -# Don't let the queues get too backed up -QUEUE_MAXSIZE = 10 - -# This is a multiprocessing.Queue for communication between the main process and the -# Tensorflow processes. -# Entries in this queue are in the format: - -# { -# 'source': Name of the camera, -# 'world_tform_cam': transform from VO to camera, -# 'world_tform_gpe': transform from VO to ground plane, -# 'raw_image_time': Time when the image was collected, -# 'cv_image': The decoded image, -# 'visual_dims': (cols, rows), -# 'depth_image': depth image proto, -# 'system_cap_time': Time when the image was received by the main process, -# 'image_queued_time': Time when the image was done preprocessing and queued -# } -RAW_IMAGES_QUEUE = Queue(QUEUE_MAXSIZE) - -# This is a multiprocessing.Queue for communication between the Tensorflow processes and -# the bbox print process. This is meant for running in a containerized environment with no access -# to an X display -# Entries in this queue have the following fields in addition to those in : -# { -# 'processed_image_start_time': Time when the image was received by the TF process, -# 'processed_image_end_time': Time when the image was processing for bounding boxes -# 'boxes': list of detected bounding boxes for the processed image -# 'classes': classes of objects, -# 'scores': confidence scores, -# } -PROCESSED_BOXES_QUEUE = Queue(QUEUE_MAXSIZE) - -# Barrier for waiting on Tensorflow processes to start, initialized in main() -TENSORFLOW_PROCESS_BARRIER = None - -COCO_CLASS_DICT = { - 1: 'person', - 2: 'bicycle', - 3: 'car', - 4: 'motorcycle', - 5: 'airplane', - 6: 'bus', - 7: 'train', - 8: 'truck', - 9: 'boat', - 10: 'trafficlight', - 11: 'firehydrant', - 13: 'stopsign', - 14: 'parkingmeter', - 15: 'bench', - 16: 'bird', - 17: 'cat', - 18: 'dog', - 19: 'horse', - 20: 'sheep', - 21: 'cow', - 22: 'elephant', - 23: 'bear', - 24: 'zebra', - 25: 'giraffe', - 27: 'backpack', - 28: 'umbrella', - 31: 'handbag', - 32: 'tie', - 33: 'suitcase', - 34: 'frisbee', - 35: 'skis', - 36: 'snowboard', - 37: 'sportsball', - 38: 'kite', - 39: 'baseballbat', - 40: 'baseballglove', - 41: 'skateboard', - 42: 'surfboard', - 43: 'tennisracket', - 44: 'bottle', - 46: 'wineglass', - 47: 'cup', - 48: 'fork', - 49: 'knife', - 50: 'spoon', - 51: 'bowl', - 52: 'banana', - 53: 'apple', - 54: 'sandwich', - 55: 'orange', - 56: 'broccoli', - 57: 'carrot', - 58: 'hotdog', - 59: 'pizza', - 60: 'donut', - 61: 'cake', - 62: 'chair', - 63: 'couch', - 64: 'pottedplant', - 65: 'bed', - 67: 'diningtable', - 70: 'toilet', - 72: 'tv', - 73: 'laptop', - 74: 'mouse', - 75: 'remote', - 76: 'keyboard', - 77: 'cellphone', - 78: 'microwave', - 79: 'oven', - 80: 'toaster', - 81: 'sink', - 82: 'refrigerator', - 84: 'book', - 85: 'clock', - 86: 'vase', - 87: 'scissors', - 88: 'teddybear', - 89: 'hairdrier', - 90: 'toothbrush' -} - -# Mapping from visual to depth data -VISUAL_SOURCE_TO_DEPTH_MAP_SOURCE = { - 'frontleft_fisheye_image': 'frontleft_depth_in_visual_frame', - 'frontright_fisheye_image': 'frontright_depth_in_visual_frame' -} -ROTATION_ANGLES = { - 'back_fisheye_image': 0, - 'frontleft_fisheye_image': -78, - 'frontright_fisheye_image': -102, - 'left_fisheye_image': 0, - 'right_fisheye_image': 180 -} - - -def _update_thread(async_task): - while True: - async_task.update() - time.sleep(0.01) - - -class AsyncImage(AsyncPeriodicQuery): - """Grab image.""" - - def __init__(self, image_client, image_sources): - # Period is set to be about 15 FPS - super(AsyncImage, self).__init__('images', image_client, LOGGER, period_sec=0.067) - self.image_sources = image_sources - - def _start_query(self): - return self._client.get_image_from_sources_async(self.image_sources) - - -class AsyncRobotState(AsyncPeriodicQuery): - """Grab robot state.""" - - def __init__(self, robot_state_client): - # period is set to be about the same rate as detections on the CORE AI - super(AsyncRobotState, self).__init__('robot_state', robot_state_client, LOGGER, - period_sec=0.02) - - def _start_query(self): - return self._client.get_robot_state_async() - - -def get_source_list(image_client): - """Gets a list of image sources and filters based on config dictionary - - Args: - image_client: Instantiated image client - """ - - # We are using only the visual images with their corresponding depth sensors - sources = image_client.list_image_sources() - source_list = [] - for source in sources: - if source.image_type == ImageSource.IMAGE_TYPE_VISUAL: - # only append if sensor has corresponding depth sensor - if source.name in VISUAL_SOURCE_TO_DEPTH_MAP_SOURCE: - source_list.append(source.name) - source_list.append(VISUAL_SOURCE_TO_DEPTH_MAP_SOURCE[source.name]) - return source_list - - -def capture_images(image_task, sleep_between_capture): - """ Captures images and places them on the queue - - Args: - image_task (AsyncImage): Async task that provides the images response to use - sleep_between_capture (float): Time to sleep between each image capture - """ - while not SHUTDOWN_FLAG.value: - get_im_resp = image_task.proto - start_time = time.time() - if not get_im_resp: - continue - depth_responses = { - img.source.name: img - for img in get_im_resp - if img.source.image_type == ImageSource.IMAGE_TYPE_DEPTH - } - entry = {} - for im_resp in get_im_resp: - if im_resp.source.image_type == ImageSource.IMAGE_TYPE_VISUAL: - source = im_resp.source.name - depth_source = VISUAL_SOURCE_TO_DEPTH_MAP_SOURCE[source] - depth_image = depth_responses[depth_source] - - acquisition_time = im_resp.shot.acquisition_time - image_time = acquisition_time.seconds + acquisition_time.nanos * 1e-9 - - try: - image = Image.open(io.BytesIO(im_resp.shot.image.data)) - source = im_resp.source.name - - image = ndimage.rotate(image, ROTATION_ANGLES[source]) - if im_resp.shot.image.pixel_format == image_pb2.Image.PIXEL_FORMAT_GREYSCALE_U8: - image = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB) # Converted to RGB for TF - tform_snapshot = im_resp.shot.transforms_snapshot - frame_name = im_resp.shot.frame_name_image_sensor - world_tform_cam = get_a_tform_b(tform_snapshot, VISION_FRAME_NAME, frame_name) - world_tform_gpe = get_a_tform_b(tform_snapshot, VISION_FRAME_NAME, - GROUND_PLANE_FRAME_NAME) - entry[source] = { - 'source': source, - 'world_tform_cam': world_tform_cam, - 'world_tform_gpe': world_tform_gpe, - 'raw_image_time': image_time, - 'cv_image': image, - 'visual_dims': (im_resp.shot.image.cols, im_resp.shot.image.rows), - 'depth_image': depth_image, - 'system_cap_time': start_time, - 'image_queued_time': time.time() - } - except Exception as exc: # pylint: disable=broad-except - print(f'Exception occurred during image capture {exc}') - try: - RAW_IMAGES_QUEUE.put_nowait(entry) - except Full as exc: - print(f'RAW_IMAGES_QUEUE is full: {exc}') - time.sleep(sleep_between_capture) - - -def start_tensorflow_processes(num_processes, model_path, detection_class, detection_threshold, - max_processing_delay): - """Starts Tensorflow processes in parallel. - - It does not keep track of the processes once they are started because they run indefinitely - and are never joined back to the main process. - - Args: - num_processes (int): Number of Tensorflow processes to start in parallel. - model_path (str): Filepath to the Tensorflow model to use. - detection_class (int): Detection class to detect - detection_threshold (float): Detection threshold to apply to all Tensorflow detections. - max_processing_delay (float): Allowed delay before processing an incoming image. - """ - processes = [] - for _ in range(num_processes): - process = Process( - target=process_images, args=( - model_path, - detection_class, - detection_threshold, - max_processing_delay, - ), daemon=True) - process.start() - processes.append(process) - return processes - - -def process_images(model_path, detection_class, detection_threshold, max_processing_delay): - """Starts Tensorflow and detects objects in the incoming images. - - Args: - model_path (str): Filepath to the Tensorflow model to use. - detection_class (int): Detection class to detect - detection_threshold (float): Detection threshold to apply to all Tensorflow detections. - max_processing_delay (float): Allowed delay before processing an incoming image. - """ - - odapi = DetectorAPI(path_to_ckpt=model_path) - num_processed_skips = 0 - - if TENSORFLOW_PROCESS_BARRIER is None: - return - - try: - TENSORFLOW_PROCESS_BARRIER.wait() - except BrokenBarrierError as exc: - print(f'Error waiting for Tensorflow processes to initialize: {exc}') - return False - - while not SHUTDOWN_FLAG.value: - try: - entry = RAW_IMAGES_QUEUE.get_nowait() - except Empty: - time.sleep(0.1) - continue - for _, capture in entry.items(): - start_time = time.time() - processing_delay = time.time() - capture['raw_image_time'] - if processing_delay > max_processing_delay: - num_processed_skips += 1 - print(f'skipped image because it took {processing_delay}') - continue # Skip image due to delay - - image = capture['cv_image'] - boxes, scores, classes, _ = odapi.process_frame(image) - confident_boxes = [] - confident_object_classes = [] - confident_scores = [] - if len(boxes) == 0: - print('no detections founds') - continue - for box, score, box_class in sorted(zip(boxes, scores, classes), key=lambda x: x[1], - reverse=True): - if score > detection_threshold and box_class == detection_class: - confident_boxes.append(box) - confident_object_classes.append(COCO_CLASS_DICT[box_class]) - confident_scores.append(score) - image = cv2.rectangle(image, (box[1], box[0]), (box[3], box[2]), (255, 0, 0), 2) - - capture['processed_image_start_time'] = start_time - capture['processed_image_end_time'] = time.time() - capture['boxes'] = confident_boxes - capture['classes'] = confident_object_classes - capture['scores'] = confident_scores - capture['cv_image'] = image - try: - PROCESSED_BOXES_QUEUE.put_nowait(entry) - except Full as exc: - print(f'PROCESSED_BOXES_QUEUE is full: {exc}') - print('tf process ending') - return True - - -def get_go_to(world_tform_object, robot_state, mobility_params, dist_margin=0.5): - """Gets trajectory command to a goal location - - Args: - world_tform_object (SE3Pose): Transform from vision frame to target object - robot_state (RobotState): Current robot state - mobility_params (MobilityParams): Mobility parameters - dist_margin (float): Distance margin to target - """ - vo_tform_robot = get_vision_tform_body(robot_state.kinematic_state.transforms_snapshot) - print(f'robot pos: {vo_tform_robot}') - delta_ewrt_vo = np.array( - [world_tform_object.x - vo_tform_robot.x, world_tform_object.y - vo_tform_robot.y, 0]) - norm = np.linalg.norm(delta_ewrt_vo) - if norm == 0: - return None - delta_ewrt_vo_norm = delta_ewrt_vo / norm - heading = _get_heading(delta_ewrt_vo_norm) - vo_tform_goal = np.array([ - world_tform_object.x - delta_ewrt_vo_norm[0] * dist_margin, - world_tform_object.y - delta_ewrt_vo_norm[1] * dist_margin - ]) - se2_pose = geo.SE2Pose(position=geo.Vec2(x=vo_tform_goal[0], y=vo_tform_goal[1]), angle=heading) - tag_cmd = RobotCommandBuilder.synchro_se2_trajectory_command(se2_pose, - frame_name=VISION_FRAME_NAME, - params=mobility_params) - return tag_cmd - - -def _get_heading(xhat): - zhat = [0.0, 0.0, 1.0] - yhat = np.cross(zhat, xhat) - mat = np.array([xhat, yhat, zhat]).transpose() - return Quat.from_matrix(mat).to_yaw() - - -def set_default_body_control(): - """Set default body control params to current body position""" - footprint_R_body = geometry.EulerZXY() - position = geo.Vec3(x=0.0, y=0.0, z=0.0) - rotation = footprint_R_body.to_quaternion() - pose = geo.SE3Pose(position=position, rotation=rotation) - point = trajectory_pb2.SE3TrajectoryPoint(pose=pose) - traj = trajectory_pb2.SE3Trajectory(points=[point]) - return spot_command_pb2.BodyControlParams(base_offset_rt_footprint=traj) - - -def get_mobility_params(): - """Gets mobility parameters for following""" - vel_desired = .75 - speed_limit = geo.SE2VelocityLimit( - max_vel=geo.SE2Velocity(linear=geo.Vec2(x=vel_desired, y=vel_desired), angular=.25)) - body_control = set_default_body_control() - mobility_params = spot_command_pb2.MobilityParams(vel_limit=speed_limit, obstacle_params=None, - body_control=body_control, - locomotion_hint=spot_command_pb2.HINT_TROT) - return mobility_params - - -def depth_to_xyz(depth, pixel_x, pixel_y, focal_length, principal_point): - """Calculate the transform to point in image using camera intrinsics and depth""" - x = depth * (pixel_x - principal_point.x) / focal_length.x - y = depth * (pixel_y - principal_point.y) / focal_length.y - z = depth - return x, y, z - - -def remove_ground_from_depth_image(raw_depth_image, focal_length, principal_point, world_tform_cam, - world_tform_gpe, ground_tolerance=0.04): - """ Simple ground plane removal algorithm. Uses ground height - and does simple z distance filtering. - - Args: - raw_depth_image (np.array): Depth image - focal_length (Vec2): Focal length of camera that produced the depth image - principal_point (Vec2): Principal point of camera that produced the depth image - world_tform_cam (SE3Pose): Transform from VO to camera frame - world_tform_gpe (SE3Pose): Transform from VO to GPE frame - ground_tolerance (float): Distance in meters to add to the ground plane - """ - new_depth_image = raw_depth_image - - # same functions as depth_to_xyz, but converted to np functions - indices = np.indices(raw_depth_image.shape) - xs = raw_depth_image * (indices[1] - principal_point.x) / focal_length.x - ys = raw_depth_image * (indices[0] - principal_point.y) / focal_length.y - zs = raw_depth_image - - # create xyz point cloud - camera_tform_points = np.stack([xs, ys, zs], axis=2) - # points in VO frame - world_tform_points = world_tform_cam.transform_cloud(camera_tform_points) - # array of booleans where True means the point was below the ground plane plus tolerance - world_tform_points_mask = (world_tform_gpe.z - world_tform_points[:, :, 2]) < ground_tolerance - # remove data below ground plane - new_depth_image[world_tform_points_mask] = 0 - return new_depth_image - - -def get_distance_to_closest_object_depth(x_min, x_max, y_min, y_max, depth_scale, raw_depth_image, - histogram_bin_size=0.50, minimum_number_of_points=10, - max_distance=8.0): - """Make a histogram of distances to points in the cloud and take the closest distance with - enough points. - - Args: - x_min (int): minimum x coordinate (column) of object to find - x_max (int): maximum x coordinate (column) of object to find - y_min (int): minimum y coordinate (row) of object to find - y_max (int): maximum y coordinate (row) of object to find - depth_scale (float): depth scale of the image to convert from sensor value to meters - raw_depth_image (np.array): matrix of depth pixels - histogram_bin_size (float): size of each bin of distances - minimum_number_of_points (int): minimum number of points before returning depth - max_distance (float): maximum distance to object in meters - """ - num_bins = math.ceil(max_distance / histogram_bin_size) - - # get a sub-rectangle of the bounding box out of the whole image, then flatten - obj_depths = (raw_depth_image[y_min:y_max, x_min:x_max]).flatten() - obj_depths = obj_depths / depth_scale - obj_depths = obj_depths[obj_depths != 0] - - hist, hist_edges = np.histogram(obj_depths, bins=num_bins, range=(0, max_distance)) - - edges_zipped = zip(hist_edges[:-1], hist_edges[1:]) - # Iterate over the histogram and return the first distance with enough points. - for entry, edges in zip(hist, edges_zipped): - if entry > minimum_number_of_points: - filtered_depths = obj_depths[(obj_depths > edges[0]) & (obj_depths < edges[1])] - if len(filtered_depths) == 0: - continue - return np.mean(filtered_depths) - - return max_distance - - -def rotate_about_origin_degrees(origin, point, angle): - """ - Rotate a point counterclockwise by a given angle around a given origin. - - Args: - origin (tuple): Origin to rotate the point around - point (tuple): Point to rotate - angle (float): Angle in degrees - """ - return rotate_about_origin(origin, point, math.radians(angle)) - - -def rotate_about_origin(origin, point, angle): - """ - Rotate a point counterclockwise by a given angle around a given origin. - - Args: - origin (tuple): Origin to rotate the point around - point (tuple): Point to rotate - angle (float): Angle in radians - """ - orig_x, orig_y = origin - pnt_x, pnt_y = point - - ret_x = orig_x + math.cos(angle) * (pnt_x - orig_x) - math.sin(angle) * (pnt_y - orig_y) - ret_y = orig_y + math.sin(angle) * (pnt_x - orig_x) + math.cos(angle) * (pnt_y - orig_y) - return int(ret_x), int(ret_y) - - -def get_object_position(world_tform_cam, world_tform_gpe, visual_dims, depth_image, bounding_box, - rotation_angle): - """ - Extract the bounding box, then find the mode in that region. - - Args: - world_tform_cam (SE3Pose): SE3 transform from world to camera frame - visual_dims (Tuple): (cols, rows) tuple from the visual image - depth_image (ImageResponse): From a depth camera corresponding to the visual_image - bounding_box (list): Bounding box from tensorflow - rotation_angle (float): Angle (in degrees) to rotate depth image to match cam image rotation - """ - - # Make sure there are two images. - if visual_dims is None or depth_image is None: - # Fail. - return - - # Rotate bounding box back to original frame - points = [(bounding_box[1], bounding_box[0]), (bounding_box[3], bounding_box[0]), - (bounding_box[3], bounding_box[2]), (bounding_box[1], bounding_box[2])] - - origin = (visual_dims[0] / 2, visual_dims[1] / 2) - - points_rot = [rotate_about_origin_degrees(origin, point, rotation_angle) for point in points] - - # Get the bounding box corners. - y_min = max(0, min([point[1] for point in points_rot])) - x_min = max(0, min([point[0] for point in points_rot])) - y_max = min(visual_dims[1], max([point[1] for point in points_rot])) - x_max = min(visual_dims[0], max([point[0] for point in points_rot])) - - # Check that the bounding box is valid. - if (x_min < 0 or y_min < 0 or x_max > visual_dims[0] or y_max > visual_dims[1]): - print(f'Bounding box is invalid: ({x_min}, {y_min}) | ({x_max}, {y_max})') - print(f'Bounds: ({visual_dims[0]}, {visual_dims[1]})') - return - - # Unpack the images. - try: - if depth_image.shot.image.pixel_format == image_pb2.Image.PIXEL_FORMAT_DEPTH_U16: - dtype = np.uint16 - else: - dtype = np.uint8 - img = np.fromstring(depth_image.shot.image.data, dtype=dtype) - if depth_image.shot.image.format == image_pb2.Image.FORMAT_RAW: - img = img.reshape(depth_image.shot.image.rows, depth_image.shot.image.cols) - else: - img = cv2.imdecode(img, -1) - depth_image_pixels = img - depth_image_pixels = remove_ground_from_depth_image( - depth_image_pixels, depth_image.source.pinhole.intrinsics.focal_length, - depth_image.source.pinhole.intrinsics.principal_point, world_tform_cam, world_tform_gpe) - # Get the depth data from the region in the bounding box. - max_distance = 8.0 - depth = get_distance_to_closest_object_depth(x_min, x_max, y_min, y_max, - depth_image.source.depth_scale, - depth_image_pixels, max_distance=max_distance) - - if depth >= max_distance: - # Not enough depth data. - print('Not enough depth data.') - return False - else: - print(f'distance to object: {depth}') - - center_x = round((x_max - x_min) / 2.0 + x_min) - center_y = round((y_max - y_min) / 2.0 + y_min) - - tform_x, tform_y, tform_z = depth_to_xyz( - depth, center_x, center_y, depth_image.source.pinhole.intrinsics.focal_length, - depth_image.source.pinhole.intrinsics.principal_point) - camera_tform_obj = SE3Pose(tform_x, tform_y, tform_z, Quat()) - - return world_tform_cam * camera_tform_obj - except Exception as exc: # pylint: disable=broad-except - print(f'Error getting object position: {exc}') - return - - -def _check_model_path(model_path): - if model_path is None or \ - not os.path.exists(model_path) or \ - not os.path.isfile(model_path): - print(f'ERROR, could not find model file {model_path}') - return False - return True - - -def _check_and_load_json_classes(config_path): - if os.path.isfile(config_path): - with open(config_path) as json_classes: - global COCO_CLASS_DICT # pylint: disable=global-statement - COCO_CLASS_DICT = json.load(json_classes) - - -def _find_highest_conf_source(processed_boxes_entry): - highest_conf_source = None - max_score = 0 - for key, capture in processed_boxes_entry.items(): - if 'scores' in capture.keys(): - if len(capture['scores']) > 0 and capture['scores'][0] > max_score: - highest_conf_source = key - max_score = capture['scores'][0] - return highest_conf_source - - -def signal_handler(signal, frame): - print('Interrupt caught, shutting down') - SHUTDOWN_FLAG.value = 1 - - -def main(): - """Command line interface.""" - - parser = argparse.ArgumentParser() - parser.add_argument( - '--model-path', default='/model.pb', help= - ('Local file path to the Tensorflow model, example pre-trained models can be found at ' - 'https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md' - )) - parser.add_argument('--classes', default='/classes.json', type=str, - help='File containing json mapping of object class IDs to class names') - parser.add_argument('--number-tensorflow-processes', default=1, type=int, - help='Number of Tensorflow processes to run in parallel') - parser.add_argument('--detection-threshold', default=0.7, type=float, - help='Detection threshold to use for Tensorflow detections') - parser.add_argument( - '--sleep-between-capture', default=0.2, type=float, - help=('Seconds to sleep between each image capture loop iteration, which captures ' - 'an image from all cameras')) - parser.add_argument( - '--detection-class', default=1, type=int, - help=('Detection classes to use in the Tensorflow model.' - 'Default is to use 1, which is a person in the Coco dataset')) - parser.add_argument( - '--max-processing-delay', default=7.0, type=float, - help=('Maximum allowed delay for processing an image. ' - 'Any image older than this value will be skipped')) - parser.add_argument('--test-mode', action='store_true', - help='Run application in test mode, don\'t execute commands') - - bosdyn.client.util.add_base_arguments(parser) - bosdyn.client.util.add_payload_credentials_arguments(parser) - options = parser.parse_args() - signal.signal(signal.SIGINT, signal_handler) - try: - # Make sure the model path is a valid file - if not _check_model_path(options.model_path): - return False - - # Check for classes json file, otherwise use the COCO class dictionary - _check_and_load_json_classes(options.classes) - - global TENSORFLOW_PROCESS_BARRIER # pylint: disable=global-statement - TENSORFLOW_PROCESS_BARRIER = Barrier(options.number_tensorflow_processes + 1) - # Start Tensorflow processes - tf_processes = start_tensorflow_processes(options.number_tensorflow_processes, - options.model_path, options.detection_class, - options.detection_threshold, - options.max_processing_delay) - - # sleep to give the Tensorflow processes time to initialize - try: - TENSORFLOW_PROCESS_BARRIER.wait() - except BrokenBarrierError as exc: - print(f'Error waiting for Tensorflow processes to initialize: {exc}') - return False - # Start the API related things - - # Create robot object with a world object client - sdk = bosdyn.client.create_standard_sdk('SpotFollowClient') - robot = sdk.create_robot(options.hostname) - - if options.payload_credentials_file: - robot.authenticate_from_payload_credentials( - *bosdyn.client.util.get_guid_and_secret(options)) - else: - bosdyn.client.util.authenticate(robot) - - # Time sync is necessary so that time-based filter requests can be converted - robot.time_sync.wait_for_sync() - - # Verify the robot is not estopped and that an external application has registered and holds - # an estop endpoint. - assert not robot.is_estopped(), 'Robot is estopped. Please use an external E-Stop client,' \ - ' such as the estop SDK example, to configure E-Stop.' - - # Create the sdk clients - robot_state_client = robot.ensure_client(RobotStateClient.default_service_name) - robot_command_client = robot.ensure_client(RobotCommandClient.default_service_name) - lease_client = robot.ensure_client(LeaseClient.default_service_name) - image_client = robot.ensure_client(ImageClient.default_service_name) - source_list = get_source_list(image_client) - image_task = AsyncImage(image_client, source_list) - robot_state_task = AsyncRobotState(robot_state_client) - task_list = [image_task, robot_state_task] - _async_tasks = AsyncTasks(task_list) - print('Detect and follow client connected.') - - lease = lease_client.take() - lease_keep = LeaseKeepAlive(lease_client) - # Power on the robot and stand it up - resp = robot.power_on() - try: - blocking_stand(robot_command_client) - except CommandFailedError as exc: - print(f'Error ({exc}) occurred while trying to stand. Check robot surroundings.') - return False - except CommandTimedOutError as exc: - print(f'Stand command timed out: {exc}') - return False - print('Robot powered on and standing.') - params_set = get_mobility_params() - - # This thread starts the async tasks for image and robot state retrieval - update_thread = Thread(target=_update_thread, args=[_async_tasks]) - update_thread.daemon = True - update_thread.start() - # Wait for the first responses. - while any(task.proto is None for task in task_list): - time.sleep(0.1) - - # Start image capture process - image_capture_thread = Process(target=capture_images, - args=(image_task, options.sleep_between_capture), - daemon=True) - image_capture_thread.start() - while not SHUTDOWN_FLAG.value: - # This comes from the tensorflow processes and limits the rate of this loop - try: - entry = PROCESSED_BOXES_QUEUE.get_nowait() - except Empty: - continue - # find the highest confidence bounding box - highest_conf_source = _find_highest_conf_source(entry) - if highest_conf_source is None: - # no boxes or scores found - continue - capture_to_use = entry[highest_conf_source] - raw_time = capture_to_use['raw_image_time'] - time_gap = time.time() - raw_time - if time_gap > options.max_processing_delay: - continue # Skip image due to delay - - # Find the transform to the highest confidence object using the depth sensor - get_object_position_start = time.time() - robot_state = robot_state_task.proto - world_tform_gpe = get_a_tform_b(robot_state.kinematic_state.transforms_snapshot, - VISION_FRAME_NAME, GROUND_PLANE_FRAME_NAME) - world_tform_object = get_object_position( - capture_to_use['world_tform_cam'], world_tform_gpe, capture_to_use['visual_dims'], - capture_to_use['depth_image'], capture_to_use['boxes'][0], - ROTATION_ANGLES[capture_to_use['source']]) - get_object_position_end = time.time() - print(f'system_cap_time: {capture_to_use["system_cap_time"]}, ' - f'image_queued_time: {capture_to_use["image_queued_time"]}, ' - f'processed_image_start_time: {capture_to_use["processed_image_start_time"]}, ' - f'processed_image_end_time: {capture_to_use["processed_image_end_time"]}, ' - f'get_object_position_start_time: {get_object_position_start}, ' - f'get_object_position_end_time: {get_object_position_end}, ') - - # get_object_position can fail if there is insufficient depth sensor information - if not world_tform_object: - continue - - scores = capture_to_use['scores'] - print(f'Position of object with confidence {scores[0]}: {world_tform_object}') - print(f'Process latency: {time.time() - capture_to_use["system_cap_time"]}') - tag_cmd = get_go_to(world_tform_object, robot_state, params_set) - end_time = 15.0 - if tag_cmd is not None: - if not options.test_mode: - print('executing command') - robot_command_client.robot_command(lease=None, command=tag_cmd, - end_time_secs=time.time() + end_time) - else: - print('Running in test mode, skipping command.') - - # Shutdown lease keep-alive and return lease gracefully. - lease_keep.shutdown() - lease_client.return_lease(lease) - return True - except Exception as exc: # pylint: disable=broad-except - LOGGER.error('Spot Tensorflow Detector threw an exception: %s', exc) - # Shutdown lease keep-alive and return lease gracefully. - return False - - -if __name__ == '__main__': - if not main(): - sys.exit(1) diff --git a/python/examples/spot_tensorflow_detector/README.md b/python/examples/spot_tensorflow_detector/README.md index 106fedcbd..6ce4392b1 100644 --- a/python/examples/spot_tensorflow_detector/README.md +++ b/python/examples/spot_tensorflow_detector/README.md @@ -32,7 +32,7 @@ For your best learning experience, please use the [Quickstart Guide](../../../do found in the SDK's docs/python directory. That will help you get your Python programming environment setup properly. -To install this example on Ubuntu 18.04, follow these instructions: +To install this example on Ubuntu, follow these instructions: - Create virtual environment as described in this [Quickstart Guide virtualenv section](../../../docs/python/quickstart.md#manage-multiple-python-environments-with-virtualenv) diff --git a/python/examples/tester_programs/plugin_tester.py b/python/examples/tester_programs/plugin_tester.py index 1da6d7054..153f036d9 100644 --- a/python/examples/tester_programs/plugin_tester.py +++ b/python/examples/tester_programs/plugin_tester.py @@ -525,7 +525,7 @@ def test_get_live_data_if_applicable(capabilities, client): index + 1, GET_LIVE_DATA_ATTEMPTS) response = client.get_live_data(request) except UnimplementedError as exc: - _LOGGER.warning(f"Double check your robot is running 4.0.0 or newer.") + _LOGGER.warning("Double check your robot is running 4.0.0 or newer.") return False total_time = time.time() - start_time _LOGGER.info("Total time: %0.3f seconds.", total_time) diff --git a/python/examples/velodyne_client/client.py b/python/examples/velodyne_client/client.py index 7d17e2fc2..dc12e7e9c 100644 --- a/python/examples/velodyne_client/client.py +++ b/python/examples/velodyne_client/client.py @@ -135,7 +135,7 @@ def main(): aggregate_data = collections.deque(maxlen=5) while True: if _point_cloud_task.proto[0].point_cloud: - data = np.fromstring(_point_cloud_task.proto[0].point_cloud.data, dtype=np.float32) + data = np.frombuffer(_point_cloud_task.proto[0].point_cloud.data, dtype=np.float32) aggregate_data.append(data) plot_data = np.concatenate(aggregate_data) ax.clear() diff --git a/python/examples/xbox_controller/README.md b/python/examples/xbox_controller/README.md index 6fe09a2f3..a1ed5c255 100644 --- a/python/examples/xbox_controller/README.md +++ b/python/examples/xbox_controller/README.md @@ -64,7 +64,7 @@ The `xboxdrv` driver supports only Xbox360 controllers. Newer controllers are no #### Installation Instructions -To install this example on Ubuntu 18.04 and Windows, follow these instructions: +To install this example on Ubuntu and Windows, follow these instructions: - Create virtual environment as described in this [Quickstart Guide virtualenv section](../../../docs/python/quickstart.md#manage-multiple-python-environments-with-virtualenv) diff --git a/tools/wheels.py b/tools/wheels.py index 2b4eb931e..05e11593f 100644 --- a/tools/wheels.py +++ b/tools/wheels.py @@ -10,15 +10,15 @@ """ import abc import argparse -from functools import partial import glob import logging import os import platform import shutil -import subprocess import stat +import subprocess import sys +from functools import partial LOGGER = logging.getLogger() @@ -328,7 +328,8 @@ def parser(self): def _wheels_to_build(wheels=None): if wheels: return wheels - return ['bosdyn-api', 'bosdyn-choreography-protos'] + [os.path.basename(path) for path in _list_wheel_source_directories()] + return ['bosdyn-api', 'bosdyn-choreography-protos' + ] + [os.path.basename(path) for path in _list_wheel_source_directories()] def _built_wheel_files(wheel): @@ -425,9 +426,9 @@ def build_proto_wheel(wheel_name="bosdyn-api", proto_dir=PROTO_DIR, latest_requi # print("Installing build dependencies: you may need to type 'y' a few times") # Install the build dependencies. if install_deps and not _try_run( - 'install build dependencies', - dry_run, - lambda: install_requirements(os.path.join(proto_dir, req_file), quiet=not verbose)): + 'install build dependencies', + dry_run, + lambda: install_requirements(os.path.join(proto_dir, req_file), quiet=not verbose)): return False # Build the wheel. @@ -464,14 +465,16 @@ def run(self, options): ret = True for wheel in _wheels_to_build(options.wheels): if wheel == 'bosdyn-api': - ret_ = build_proto_wheel(wheel_name=wheel, latest_requirements=options.latest_build_requirements, - dry_run=options.dry_run, verbose=options.verbose, - skip_git=options.skip_git_check, install_deps=options.install_deps) + ret_ = build_proto_wheel( + wheel_name=wheel, latest_requirements=options.latest_build_requirements, + dry_run=options.dry_run, verbose=options.verbose, + skip_git=options.skip_git_check, install_deps=options.install_deps) elif wheel == 'bosdyn-choreography-protos': ret_ = build_proto_wheel(wheel_name=wheel, proto_dir=CHOREOGRAPHY_PROTO_DIR, latest_requirements=options.latest_build_requirements, dry_run=options.dry_run, verbose=options.verbose, - skip_git=options.skip_git_check, install_deps=options.install_deps) + skip_git=options.skip_git_check, + install_deps=options.install_deps) else: ret_ = build_wheel(wheel, dry_run=options.dry_run, verbose=options.verbose, skip_git=options.skip_git_check)

                          circleCircleWithFrame
                          disable_foot_obstacle_generation bool The staircase properties provide information that helps the robot traverse or see a staircase.The staircase properties provide information that helps the robot traverse or see a
                          staircase.
                          gps_properties